From 94d3f1b3b1ac0d74a31bdfb61e3be6c2c5e2794a Mon Sep 17 00:00:00 2001 From: lasanthaDLPDS Date: Wed, 26 Sep 2018 18:02:03 +0530 Subject: [PATCH 1/3] Fix SQL issues --- .../device/application/mgt/common/Filter.java | 10 +++++++ .../GenericApplicationDAOImpl.java | 17 ++++++++--- .../mgt/core/impl/ApplicationManagerImpl.java | 2 +- .../services/ApplicationManagementAPI.java | 29 +++++++++++++++---- .../impl/ApplicationManagementAPIImpl.java | 23 +++++++++++++-- .../dbscripts/cdm/application-mgt/h2.sql | 15 +++++----- .../dbscripts/cdm/application-mgt/mysql.sql | 15 +++++----- 7 files changed, 83 insertions(+), 28 deletions(-) diff --git a/components/application-mgt/org.wso2.carbon.device.application.mgt.common/src/main/java/org/wso2/carbon/device/application/mgt/common/Filter.java b/components/application-mgt/org.wso2.carbon.device.application.mgt.common/src/main/java/org/wso2/carbon/device/application/mgt/common/Filter.java index 144abba320..96ee8e49bd 100644 --- a/components/application-mgt/org.wso2.carbon.device.application.mgt.common/src/main/java/org/wso2/carbon/device/application/mgt/common/Filter.java +++ b/components/application-mgt/org.wso2.carbon.device.application.mgt.common/src/main/java/org/wso2/carbon/device/application/mgt/common/Filter.java @@ -40,6 +40,8 @@ public class Filter { required = false) private String appType; + private String appCategory; + @ApiModelProperty( name = "isFullMatch", value = "Checking the application name matches fully with given name", @@ -111,4 +113,12 @@ public class Filter { public void setAppType(String appType) { this.appType = appType; } + + public String getAppCategory() { + return appCategory; + } + + public void setAppCategory(String appCategory) { + this.appCategory = appCategory; + } } diff --git a/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/dao/impl/application/GenericApplicationDAOImpl.java b/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/dao/impl/application/GenericApplicationDAOImpl.java index d66c7e7dc1..5847eda9b8 100644 --- a/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/dao/impl/application/GenericApplicationDAOImpl.java +++ b/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/dao/impl/application/GenericApplicationDAOImpl.java @@ -147,11 +147,17 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic throw new ApplicationManagementDAOException("Filter need to be instantiated"); } - if (filter.getAppType() != null) { + if (filter.getAppType() != null && !filter.getAppType().isEmpty()) { sql += " AND AP_APP.TYPE "; sql += "= ?"; } - if (filter.getAppName() != null) { + + if (filter.getAppCategory() != null && !filter.getAppCategory().isEmpty()) { + sql += " AND AP_APP.APP_CATEGORY "; + sql += "= ?"; + } + + if (filter.getAppName() != null && !filter.getAppName().isEmpty()) { sql += " AND LOWER (AP_APP.NAME) "; if (filter.isFullMatch()) { sql += "= ?"; @@ -175,10 +181,13 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic stmt.setInt(paramIndex++, tenantId); stmt.setString(paramIndex++, AppLifecycleState.REMOVED.toString()); - if (filter.getAppType() != null) { + if (filter.getAppType() != null && !filter.getAppType().isEmpty()) { stmt.setString(paramIndex++, filter.getAppType()); } - if (filter.getAppName() != null) { + if (filter.getAppCategory() != null && !filter.getAppCategory().isEmpty()) { + stmt.setString(paramIndex++, filter.getAppCategory()); + } + if (filter.getAppName() != null && !filter.getAppName().isEmpty()) { if (filter.isFullMatch()) { stmt.setString(paramIndex++, filter.getAppName().toLowerCase()); } else { diff --git a/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/impl/ApplicationManagerImpl.java b/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/impl/ApplicationManagerImpl.java index d8c7706972..52073bdbae 100644 --- a/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/impl/ApplicationManagerImpl.java +++ b/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/impl/ApplicationManagerImpl.java @@ -215,7 +215,7 @@ public class ApplicationManagerImpl implements ApplicationManager { ConnectionManagerUtil.getDBConnection(); applicationList = applicationDAO.getApplications(filter, tenantId); if(applicationList != null && applicationList.getApplications() != null && applicationList - .getApplications().size() > 0) { + .getApplications().isEmpty()) { if (!isAdminUser(userName, tenantId, CarbonConstants.UI_ADMIN_PERMISSION_COLLECTION)) { applicationList = getRoleRestrictedApplicationList(applicationList, userName); } diff --git a/components/application-mgt/org.wso2.carbon.device.application.mgt.publisher.api/src/main/java/org/wso2/carbon/device/application/mgt/publisher/api/services/ApplicationManagementAPI.java b/components/application-mgt/org.wso2.carbon.device.application.mgt.publisher.api/src/main/java/org/wso2/carbon/device/application/mgt/publisher/api/services/ApplicationManagementAPI.java index 35b70eeba5..3459bd7d81 100644 --- a/components/application-mgt/org.wso2.carbon.device.application.mgt.publisher.api/src/main/java/org/wso2/carbon/device/application/mgt/publisher/api/services/ApplicationManagementAPI.java +++ b/components/application-mgt/org.wso2.carbon.device.application.mgt.publisher.api/src/main/java/org/wso2/carbon/device/application/mgt/publisher/api/services/ApplicationManagementAPI.java @@ -39,6 +39,7 @@ import java.util.List; import javax.validation.Valid; import javax.ws.rs.Consumes; import javax.ws.rs.DELETE; +import javax.ws.rs.DefaultValue; import javax.ws.rs.GET; import javax.ws.rs.POST; import javax.ws.rs.PUT; @@ -125,10 +126,21 @@ public interface ApplicationManagementAPI { }) Response getApplications( @ApiParam( - name = "filter", - value = "Filter to get application list", - required = true) - @Valid Filter filter, + name = "name", + value = "Name of the application") + @QueryParam("name") String appName, + @ApiParam( + name = "type", + value = "Type of the application") + @QueryParam("type") String appType, + @ApiParam( + name = "category", + value = "Category of the application") + @QueryParam("category") String appCategory, + @ApiParam( + name = "exact-match", + value = "Is it requesting exactly matching application or partially matching application.") + @QueryParam("exact-match") boolean isFullMatch, @ApiParam( name = "offset", value = "offset", @@ -138,11 +150,16 @@ public interface ApplicationManagementAPI { name = "limit", value = "limit", defaultValue = "20") - @QueryParam("limit") int limit + @QueryParam("limit") int limit, + @ApiParam( + name = "sort", + value = "Sorting type", + defaultValue = "AES") + @QueryParam("sort") String sortBy ); @GET - @Path("/{appType}") + @Path("/{appId}") @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON) @ApiOperation( diff --git a/components/application-mgt/org.wso2.carbon.device.application.mgt.publisher.api/src/main/java/org/wso2/carbon/device/application/mgt/publisher/api/services/impl/ApplicationManagementAPIImpl.java b/components/application-mgt/org.wso2.carbon.device.application.mgt.publisher.api/src/main/java/org/wso2/carbon/device/application/mgt/publisher/api/services/impl/ApplicationManagementAPIImpl.java index 6f16e1dc0f..eec6282e85 100644 --- a/components/application-mgt/org.wso2.carbon.device.application.mgt.publisher.api/src/main/java/org/wso2/carbon/device/application/mgt/publisher/api/services/impl/ApplicationManagementAPIImpl.java +++ b/components/application-mgt/org.wso2.carbon.device.application.mgt.publisher.api/src/main/java/org/wso2/carbon/device/application/mgt/publisher/api/services/impl/ApplicationManagementAPIImpl.java @@ -41,6 +41,7 @@ import java.util.UUID; import javax.validation.Valid; import javax.ws.rs.Consumes; import javax.ws.rs.DELETE; +import javax.ws.rs.DefaultValue; import javax.ws.rs.GET; import javax.ws.rs.POST; import javax.ws.rs.PUT; @@ -64,14 +65,30 @@ public class ApplicationManagementAPIImpl implements ApplicationManagementAPI { @Override @Consumes("application/json") public Response getApplications( - @Valid Filter filter, - @QueryParam("offset") int offset, - @QueryParam("limit") int limit) { + @QueryParam("name") String appName, + @QueryParam("type") String appType, + @QueryParam("category") String appCategory, + @QueryParam("exact-match") boolean isFullMatch, + @DefaultValue("0") @QueryParam("offset") int offset, + @DefaultValue("20") @QueryParam("limit") int limit, + @DefaultValue("ASC") @QueryParam("sort") String sortBy) { ApplicationManager applicationManager = APIUtil.getApplicationManager(); try { + Filter filter = new Filter(); filter.setOffset(offset); filter.setLimit(limit); + filter.setSortBy(sortBy); + filter.setFullMatch(isFullMatch); + if (appName != null && !appName.isEmpty()) { + filter.setAppName(appName); + } + if (appType != null && !appType.isEmpty()) { + filter.setAppType(appType); + } + if (appCategory != null && !appCategory.isEmpty()) { + filter.setAppCategory(appCategory); + } ApplicationList applications = applicationManager.getApplications(filter); if (applications.getApplications().isEmpty()) { return Response.status(Response.Status.NOT_FOUND).entity diff --git a/features/application-mgt/org.wso2.carbon.device.application.mgt.server.feature/src/main/resources/dbscripts/cdm/application-mgt/h2.sql b/features/application-mgt/org.wso2.carbon.device.application.mgt.server.feature/src/main/resources/dbscripts/cdm/application-mgt/h2.sql index 54fe2f0960..6bada31a2a 100644 --- a/features/application-mgt/org.wso2.carbon.device.application.mgt.server.feature/src/main/resources/dbscripts/cdm/application-mgt/h2.sql +++ b/features/application-mgt/org.wso2.carbon.device.application.mgt.server.feature/src/main/resources/dbscripts/cdm/application-mgt/h2.sql @@ -20,17 +20,18 @@ CREATE TABLE IF NOT EXISTS AP_APP ( -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS AP_APP_RELEASE ( ID INT(11) NOT NULL AUTO_INCREMENT, - VERSION VARCHAR(10) NOT NULL, + VERSION VARCHAR(25) NOT NULL, TENANT_ID VARCHAR(45) NOT NULL, UUID VARCHAR(200) NOT NULL, RELEASE_TYPE VARCHAR(45) NOT NULL, + PACKAGE_NAME VARCHAR(45) NOT NULL, APP_PRICE DECIMAL(6,2) NULL DEFAULT NULL, - STORED_LOCATION VARCHAR(45) NOT NULL, - BANNER_LOCATION VARCHAR(45) NOT NULL, - SC_1_LOCATION VARCHAR(45) NOT NULL, - SC_2_LOCATION VARCHAR(45) NULL DEFAULT NULL, - SC_3_LOCATION VARCHAR(45) NULL DEFAULT NULL, - APP_HASH_VALUE VARCHAR(1000) NOT NULL, + STORED_LOCATION VARCHAR(100) NOT NULL, + BANNER_LOCATION VARCHAR(100) NOT NULL, + SC_1_LOCATION VARCHAR(100) NOT NULL, + SC_2_LOCATION VARCHAR(100) NULL DEFAULT NULL, + SC_3_LOCATION VARCHAR(100) NULL DEFAULT NULL, + APP_HASH_VALUE VARCHAR(100) NOT NULL, SHARED_WITH_ALL_TENANTS INT(11) NULL DEFAULT NULL, APP_META_INFO VARCHAR(20000) NULL DEFAULT NULL, RATING DOUBLE NULL DEFAULT NULL, diff --git a/features/application-mgt/org.wso2.carbon.device.application.mgt.server.feature/src/main/resources/dbscripts/cdm/application-mgt/mysql.sql b/features/application-mgt/org.wso2.carbon.device.application.mgt.server.feature/src/main/resources/dbscripts/cdm/application-mgt/mysql.sql index 058feaaa5f..eb5d1d5f3f 100644 --- a/features/application-mgt/org.wso2.carbon.device.application.mgt.server.feature/src/main/resources/dbscripts/cdm/application-mgt/mysql.sql +++ b/features/application-mgt/org.wso2.carbon.device.application.mgt.server.feature/src/main/resources/dbscripts/cdm/application-mgt/mysql.sql @@ -32,17 +32,18 @@ CREATE TABLE IF NOT EXISTS `AP_APP` ( -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `AP_APP_RELEASE` ( `ID` INT(11) NOT NULL AUTO_INCREMENT, - `VERSION` VARCHAR(10) NOT NULL, + `VERSION` VARCHAR(25) NOT NULL, `TENANT_ID` VARCHAR(45) NOT NULL, `UUID` VARCHAR(200) NOT NULL, `RELEASE_TYPE` VARCHAR(45) NOT NULL, + `PACKAGE_NAME` VARCHAR(45) NOT NULL, `APP_PRICE` DECIMAL(6,2) NULL DEFAULT NULL, - `STORED_LOCATION` VARCHAR(45) NOT NULL, - `BANNER_LOCATION` VARCHAR(45) NOT NULL, - `SC_1_LOCATION` VARCHAR(45) NOT NULL, - `SC_2_LOCATION` VARCHAR(45) NULL DEFAULT NULL, - `SC_3_LOCATION` VARCHAR(45) NULL DEFAULT NULL, - `APP_HASH_VALUE` VARCHAR(1000) NOT NULL, + `STORED_LOCATION` VARCHAR(100) NOT NULL, + `BANNER_LOCATION` VARCHAR(100) NOT NULL, + `SC_1_LOCATION` VARCHAR(100) NOT NULL, + `SC_2_LOCATION` VARCHAR(100) NULL DEFAULT NULL, + `SC_3_LOCATION` VARCHAR(100) NULL DEFAULT NULL, + `APP_HASH_VALUE` VARCHAR(100) NOT NULL, `SHARED_WITH_ALL_TENANTS` INT(11) NULL DEFAULT NULL, `APP_META_INFO` VARCHAR(20000) NULL DEFAULT NULL, `RATING` DOUBLE NULL DEFAULT NULL, From abf9c05f0c909eea95414e63fffe2f8fdb5bc6ad Mon Sep 17 00:00:00 2001 From: lasanthaDLPDS Date: Thu, 27 Sep 2018 08:15:19 +0530 Subject: [PATCH 2/3] Improve applications retreving method --- .../common/services/ApplicationManager.java | 17 +++-- .../mgt/core/dao/ApplicationReleaseDAO.java | 5 +- .../GenericApplicationReleaseDAOImpl.java | 24 +++--- .../mgt/core/impl/ApplicationManagerImpl.java | 73 +++++++++++++++---- 4 files changed, 78 insertions(+), 41 deletions(-) diff --git a/components/application-mgt/org.wso2.carbon.device.application.mgt.common/src/main/java/org/wso2/carbon/device/application/mgt/common/services/ApplicationManager.java b/components/application-mgt/org.wso2.carbon.device.application.mgt.common/src/main/java/org/wso2/carbon/device/application/mgt/common/services/ApplicationManager.java index 7d5af46875..44733a2f37 100644 --- a/components/application-mgt/org.wso2.carbon.device.application.mgt.common/src/main/java/org/wso2/carbon/device/application/mgt/common/services/ApplicationManager.java +++ b/components/application-mgt/org.wso2.carbon.device.application.mgt.common/src/main/java/org/wso2/carbon/device/application/mgt/common/services/ApplicationManager.java @@ -121,14 +121,15 @@ public interface ApplicationManager { */ Boolean isUserAllowable(List unrestrictedRoles, String userName) throws ApplicationManagementException; - /** - * To get all the releases of a particular Application. - * - * @param applicationId ID of the Application to get all the releases. - * @return the List of the Application releases related with the particular Application. - * @throws ApplicationManagementException Application Management Exception. - */ - List getReleases(int applicationId) throws ApplicationManagementException; +// todo +// /** +// * To get all the releases of a particular Application. +// * +// * @param applicationId ID of the Application to get all the releases. +// * @return the List of the Application releases related with the particular Application. +// * @throws ApplicationManagementException Application Management Exception. +// */ +// List getinstallableReleases(int applicationId) throws ApplicationManagementException; /** * To get all the releases of a particular Application. diff --git a/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/dao/ApplicationReleaseDAO.java b/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/dao/ApplicationReleaseDAO.java index 1add29c835..a62053a377 100644 --- a/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/dao/ApplicationReleaseDAO.java +++ b/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/dao/ApplicationReleaseDAO.java @@ -58,13 +58,12 @@ public interface ApplicationReleaseDAO { /** * To get all the releases of a particular application. * - * @param applicationName Name of the Application - * @param applicationType Type of the Application + * @param applicationId Id of the Application * @param tenantId tenant id of the application * @return list of the application releases * @throws ApplicationManagementDAOException Application Management DAO Exception. */ - List getReleases(String applicationName, String applicationType, int tenantId) throws + List getReleases(int applicationId, int tenantId) throws ApplicationManagementDAOException; /** diff --git a/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/dao/impl/application/release/GenericApplicationReleaseDAOImpl.java b/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/dao/impl/application/release/GenericApplicationReleaseDAOImpl.java index 085c6e3eb2..4445bcf717 100644 --- a/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/dao/impl/application/release/GenericApplicationReleaseDAOImpl.java +++ b/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/dao/impl/application/release/GenericApplicationReleaseDAOImpl.java @@ -118,7 +118,7 @@ public class GenericApplicationReleaseDAOImpl extends AbstractDAOImpl implements Connection connection; PreparedStatement statement = null; ResultSet resultSet = null; - String sql = "SELECT AR.ID AS RELESE_ID, AR.VERSION AS RELEASE_VERSION, AR.UUID AS UUID, AR.RELEASE_TYPE AS " + String sql = "SELECT AR.ID AS RELEASE_ID, AR.VERSION AS RELEASE_VERSION, AR.UUID AS UUID, AR.RELEASE_TYPE AS " + "RELEASE_TYPE, AR.PACKAGE_NAME AS PACKAGE_NAME, AR.APP_PRICE AS APP_PRICE, AR.STORED_LOCATION AS " + "STORED_LOCATION, AR.BANNER_LOCATION AS BANNER_LOCATION, AR.SC_1_LOCATION AS SCREEN_SHOT_1, " + "AR.SC_2_LOCATION AS SCREEN_SHOT_2, AR.SC_3_LOCATION AS SCREEN_SHOT_3, AR.APP_HASH_VALUE AS " @@ -169,7 +169,7 @@ public class GenericApplicationReleaseDAOImpl extends AbstractDAOImpl implements Connection connection; PreparedStatement statement = null; ResultSet resultSet = null; - String sql = "SELECT AR.ID AS RELESE_ID, AR.VERSION AS RELEASE_VERSION, AR.UUID, AR.RELEASE_TYPE, AR.APP_PRICE," + String sql = "SELECT AR.ID AS RELEASE_ID, AR.VERSION AS RELEASE_VERSION, AR.UUID, AR.RELEASE_TYPE, AR.APP_PRICE," + " AR.STORED_LOCATION, AR.BANNER_LOCATION, AR.SC_1_LOCATION AS SCREEN_SHOT_1, " + "AR.SC_2_LOCATION AS SCREEN_SHOT_2, AR.SC_3_LOCATION AS SCREEN_SHOT_3, AR.APP_HASH_VALUE AS " + "HASH_VALUE, AR.SHARED_WITH_ALL_TENANTS AS SHARED, AR.APP_META_INFO, AR.CREATED_BY, AR.CREATED_AT, AR" + @@ -208,33 +208,29 @@ public class GenericApplicationReleaseDAOImpl extends AbstractDAOImpl implements /** * To insert the application release properties. * - * @param applicationName Name of the application. - * @param applicationType Type of the application. + * @param applicationId Id of the application. * @param tenantId Tenant Id * @throws ApplicationManagementDAOException Application Management DAO Exception. */ @Override - public List getReleases(String applicationName, String applicationType, int tenantId) + public List getReleases(int applicationId, int tenantId) throws ApplicationManagementDAOException { Connection connection; PreparedStatement statement = null; ResultSet resultSet = null; List applicationReleases = new ArrayList<>(); - String sql = "SELECT AR.ID AS RELESE_ID, AR.VERSION AS RELEASE_VERSION, AR.UUID, AR.RELEASE_TYPE " + String sql = "SELECT AR.ID AS RELEASE_ID, AR.VERSION AS RELEASE_VERSION, AR.UUID, AR.RELEASE_TYPE " + "AS RELEASE_TYPE, AR.PACKAGE_NAME AS PACKAGE_NAME, AR.APP_PRICE, AR.STORED_LOCATION, " + "AR.BANNER_LOCATION, AR.SC_1_LOCATION AS SCREEN_SHOT_1, AR.SC_2_LOCATION AS SCREEN_SHOT_2, " + "AR.SC_3_LOCATION AS SCREEN_SHOT_3, AR.APP_HASH_VALUE AS HASH_VALUE, " + "AR.SHARED_WITH_ALL_TENANTS AS SHARED, AR.APP_META_INFO AS APP_META_INFO, " - + "AR.RATING AS RATING FROM AP_APP_RELEASE AS AR where AR.AP_APP_ID=(SELECT ID FROM AP_APP " - + "WHERE NAME = ? AND TYPE = ? AND TENANT_ID = ?) AND AR.TENANT_ID = ?;"; + + "AR.RATING AS RATING FROM AP_APP_RELEASE AS AR where AR.AP_APP_ID=? AND AR.TENANT_ID = ?;"; try { connection = this.getDBConnection(); statement = connection.prepareStatement(sql); - statement.setString(1, applicationName); - statement.setString(2, applicationType); - statement.setInt(3, tenantId); - statement.setInt(4, tenantId); + statement.setInt(1, applicationId); + statement.setInt(2, tenantId); resultSet = statement.executeQuery(); while (resultSet.next()) { @@ -245,10 +241,10 @@ public class GenericApplicationReleaseDAOImpl extends AbstractDAOImpl implements return applicationReleases; } catch (DBConnectionException e) { throw new ApplicationManagementDAOException("Database connection exception while trying to get the " - + "release details of the application with Name " + applicationName, e); + + "release details of the application with app ID: " + applicationId, e); } catch (SQLException e) { throw new ApplicationManagementDAOException( - "Error while getting all the release details of the " + applicationName + " application" + "Error while getting all the release details of the app ID: " + applicationId + ", while executing the query " + sql, e); } finally { Util.cleanupResources(statement, resultSet); diff --git a/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/impl/ApplicationManagerImpl.java b/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/impl/ApplicationManagerImpl.java index 52073bdbae..adf98a7c18 100644 --- a/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/impl/ApplicationManagerImpl.java +++ b/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/impl/ApplicationManagerImpl.java @@ -31,7 +31,6 @@ import org.wso2.carbon.device.application.mgt.common.ApplicationSubscriptionType import org.wso2.carbon.device.application.mgt.common.ApplicationType; import org.wso2.carbon.device.application.mgt.common.Filter; import org.wso2.carbon.device.application.mgt.common.LifecycleState; -import org.wso2.carbon.device.application.mgt.common.SortingOrder; import org.wso2.carbon.device.application.mgt.common.Tag; import org.wso2.carbon.device.application.mgt.common.UnrestrictedRole; import org.wso2.carbon.device.application.mgt.common.User; @@ -51,7 +50,6 @@ import org.wso2.carbon.device.application.mgt.core.internal.DataHolder; import org.wso2.carbon.device.application.mgt.core.lifecycle.LifecycleStateManger; import org.wso2.carbon.device.application.mgt.core.util.ConnectionManagerUtil; import org.wso2.carbon.device.mgt.common.DeviceManagementException; -import org.wso2.carbon.device.mgt.core.dao.DeviceManagementDAOException; import org.wso2.carbon.device.mgt.core.dao.DeviceTypeDAO; import org.wso2.carbon.device.mgt.core.dto.DeviceType; import org.wso2.carbon.user.api.UserRealm; @@ -214,13 +212,13 @@ public class ApplicationManagerImpl implements ApplicationManager { try { ConnectionManagerUtil.getDBConnection(); applicationList = applicationDAO.getApplications(filter, tenantId); - if(applicationList != null && applicationList.getApplications() != null && applicationList + if(applicationList != null && applicationList.getApplications() != null && !applicationList .getApplications().isEmpty()) { if (!isAdminUser(userName, tenantId, CarbonConstants.UI_ADMIN_PERMISSION_COLLECTION)) { applicationList = getRoleRestrictedApplicationList(applicationList, userName); } for (Application application : applicationList.getApplications()) { - applicationReleases = getReleases(application.getId()); + applicationReleases = getReleases(application, false); application.setApplicationReleases(applicationReleases); } } @@ -288,7 +286,7 @@ public class ApplicationManagerImpl implements ApplicationManager { application = ApplicationManagementDAOFactory.getApplicationDAO() .getApplicationById(id, tenantId); if (isAdminUser(userName, tenantId, CarbonConstants.UI_ADMIN_PERMISSION_COLLECTION)) { - applicationReleases = getReleases(application.getId()); + applicationReleases = getReleases(application, false); application.setApplicationReleases(applicationReleases); return application; } @@ -305,7 +303,7 @@ public class ApplicationManagerImpl implements ApplicationManager { return null; } - applicationReleases = getReleases(application.getId()); + applicationReleases = getReleases(application, false); application.setApplicationReleases(applicationReleases); return application; } catch (UserStoreException e) { @@ -352,7 +350,7 @@ public class ApplicationManagerImpl implements ApplicationManager { application = ApplicationManagementDAOFactory.getApplicationDAO() .getApplication(appName, appType, tenantId); if (isAdminUser(userName, tenantId, CarbonConstants.UI_ADMIN_PERMISSION_COLLECTION)) { - applicationReleases = getReleases(application.getId()); + applicationReleases = getReleases(application, false); application.setApplicationReleases(applicationReleases); return application; } @@ -369,7 +367,7 @@ public class ApplicationManagerImpl implements ApplicationManager { return null; } - applicationReleases = getReleases(application.getId()); + applicationReleases = getReleases(application, false); application.setApplicationReleases(applicationReleases); return application; } catch (UserStoreException e) { @@ -424,11 +422,38 @@ public class ApplicationManagerImpl implements ApplicationManager { } } - @Override - public List getReleases(int applicationId) throws ApplicationManagementException { +// todo +// public List getinstallableReleases(int applicationId) throws ApplicationManagementException { +// int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(true); +// +// Application application = getApplicationIfAccessible(applicationId); +// List applicationReleases; +// List filteredApplicationReleases = new ArrayList<>(); +// if (log.isDebugEnabled()) { +// log.debug("Request is received to retrieve all the releases related with the application " + application +// .toString()); +// } +// ConnectionManagerUtil.getDBConnection(); +// applicationReleases = this.applicationReleaseDAO.getReleases(application.getName(), application.getType(), tenantId); +// for (ApplicationRelease applicationRelease : applicationReleases) { +// LifecycleState lifecycleState = ApplicationManagementDAOFactory.getLifecycleStateDAO(). +// getLatestLifeCycleStateByReleaseID(applicationRelease.getId()); +// if (lifecycleState != null) { +// applicationRelease.setLifecycleState(lifecycleState); +// +// if (!AppLifecycleState.REMOVED.toString() +// .equals(applicationRelease.getLifecycleState().getCurrentState())) { +// filteredApplicationReleases.add(applicationRelease); +// } +// } +// } +// return filteredApplicationReleases; +// +// } + + private List getReleases(Application application, boolean requirePublishedRelease) + throws ApplicationManagementException { int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(true); - - Application application = getApplicationIfAccessible(applicationId); List applicationReleases; List filteredApplicationReleases = new ArrayList<>(); if (log.isDebugEnabled()) { @@ -436,7 +461,7 @@ public class ApplicationManagerImpl implements ApplicationManager { .toString()); } ConnectionManagerUtil.getDBConnection(); - applicationReleases = this.applicationReleaseDAO.getReleases(application.getName(), application.getType(), tenantId); + applicationReleases = this.applicationReleaseDAO.getReleases(application.getId(), tenantId); for (ApplicationRelease applicationRelease : applicationReleases) { LifecycleState lifecycleState = ApplicationManagementDAOFactory.getLifecycleStateDAO(). getLatestLifeCycleStateByReleaseID(applicationRelease.getId()); @@ -445,19 +470,34 @@ public class ApplicationManagerImpl implements ApplicationManager { if (!AppLifecycleState.REMOVED.toString() .equals(applicationRelease.getLifecycleState().getCurrentState())) { - filteredApplicationReleases.add(applicationRelease); + if (requirePublishedRelease){ + if (AppLifecycleState.PUBLISHED.toString() + .equals(applicationRelease.getLifecycleState().getCurrentState())){ + filteredApplicationReleases.add(applicationRelease); + } + }else{ + filteredApplicationReleases.add(applicationRelease); + } } } } + + if (requirePublishedRelease && filteredApplicationReleases.size() > 1) { + log.error("There are more than one published application releases for application ID: " + application + .getId()); + } return filteredApplicationReleases; } + + @Override public List deleteApplication(int applicationId) throws ApplicationManagementException { String userName = PrivilegedCarbonContext.getThreadLocalCarbonContext().getUsername(); int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(true); List storedLocations = new ArrayList<>(); + Application application; try { if (!isAdminUser(userName, tenantId, CarbonConstants.UI_ADMIN_PERMISSION_COLLECTION)) { @@ -466,10 +506,11 @@ public class ApplicationManagerImpl implements ApplicationManager { "need to have admin permission"); } - if (getApplicationIfAccessible(applicationId) == null) { + application = getApplicationIfAccessible(applicationId); + if ( application == null) { throw new ApplicationManagementException("Invalid Application"); } - List applicationReleases = getReleases(applicationId); + List applicationReleases = getReleases(application, false); if (log.isDebugEnabled()) { log.debug("Request is received to delete applications which are related with the application id " + applicationId); From f4e1ca6815ab8a14c9c325fcb75a9abc3c3f5b2c Mon Sep 17 00:00:00 2001 From: lasanthaDLPDS Date: Thu, 27 Sep 2018 09:24:31 +0530 Subject: [PATCH 3/3] Improve publisher APIs --- .../device/application/mgt/common/Filter.java | 63 ++++++++++--------- .../common/services/ApplicationManager.java | 3 +- .../mgt/core/impl/ApplicationManagerImpl.java | 8 +-- .../services/ApplicationManagementAPI.java | 8 +++ .../impl/ApplicationManagementAPIImpl.java | 6 +- 5 files changed, 52 insertions(+), 36 deletions(-) diff --git a/components/application-mgt/org.wso2.carbon.device.application.mgt.common/src/main/java/org/wso2/carbon/device/application/mgt/common/Filter.java b/components/application-mgt/org.wso2.carbon.device.application.mgt.common/src/main/java/org/wso2/carbon/device/application/mgt/common/Filter.java index 96ee8e49bd..0d1c5b693c 100644 --- a/components/application-mgt/org.wso2.carbon.device.application.mgt.common/src/main/java/org/wso2/carbon/device/application/mgt/common/Filter.java +++ b/components/application-mgt/org.wso2.carbon.device.application.mgt.common/src/main/java/org/wso2/carbon/device/application/mgt/common/Filter.java @@ -18,54 +18,51 @@ */ package org.wso2.carbon.device.application.mgt.common; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; - /** * Filter represents a criteria that can be used for searching applications. */ - -@ApiModel(value = "Filter", description = "This is related to the application filtering.") public class Filter { - @ApiModelProperty( - name = "appName", - value = "Name of the application", - required = false) + /** + * Name of the application + */ private String appName; - @ApiModelProperty( - name = "appType", - value = "Type of the application", - required = false) + /** + * Type of the application + */ private String appType; + /** + * Category of the application + */ private String appCategory; - @ApiModelProperty( - name = "isFullMatch", - value = "Checking the application name matches fully with given name", - required = false) + /** + * Checking the application name matches fully with given name + */ private boolean isFullMatch; - @ApiModelProperty( - name = "limit", - value = "Limit of the applications", - required = false) + /** + * Limit of the applications + */ private int limit; - @ApiModelProperty( - name = "offset", - value = "Started from", - required = false) + /** + * Started from + */ private int offset; - @ApiModelProperty( - name = "sortBy", - value = "Ascending or descending order", - required = false) + /** + * Ascending or descending order + */ private String sortBy; + /** + * Set as True if required to have only published application release, otherwise set to False + */ + private boolean requirePublishedRelease; + public int getLimit() { return limit; } @@ -121,4 +118,12 @@ public class Filter { public void setAppCategory(String appCategory) { this.appCategory = appCategory; } + + public boolean isRequirePublishedRelease() { + return requirePublishedRelease; + } + + public void setRequirePublishedRelease(boolean requirePublishedRelease) { + this.requirePublishedRelease = requirePublishedRelease; + } } diff --git a/components/application-mgt/org.wso2.carbon.device.application.mgt.common/src/main/java/org/wso2/carbon/device/application/mgt/common/services/ApplicationManager.java b/components/application-mgt/org.wso2.carbon.device.application.mgt.common/src/main/java/org/wso2/carbon/device/application/mgt/common/services/ApplicationManager.java index 44733a2f37..a4260704d4 100644 --- a/components/application-mgt/org.wso2.carbon.device.application.mgt.common/src/main/java/org/wso2/carbon/device/application/mgt/common/services/ApplicationManager.java +++ b/components/application-mgt/org.wso2.carbon.device.application.mgt.common/src/main/java/org/wso2/carbon/device/application/mgt/common/services/ApplicationManager.java @@ -90,10 +90,11 @@ public interface ApplicationManager { * To get Application with the given Id. * * @param id id of the Application + * @param requirePublishedReleases If it is required to have only published application release set to True, otherwise set to false * @return the Application identified by the UUID * @throws ApplicationManagementException Application Management Exception. */ - Application getApplicationById(int id) throws ApplicationManagementException; + Application getApplicationById(int id, boolean requirePublishedReleases) throws ApplicationManagementException; /** * To get an application associated with the release. diff --git a/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/impl/ApplicationManagerImpl.java b/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/impl/ApplicationManagerImpl.java index adf98a7c18..2ca8c4b250 100644 --- a/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/impl/ApplicationManagerImpl.java +++ b/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/impl/ApplicationManagerImpl.java @@ -218,7 +218,7 @@ public class ApplicationManagerImpl implements ApplicationManager { applicationList = getRoleRestrictedApplicationList(applicationList, userName); } for (Application application : applicationList.getApplications()) { - applicationReleases = getReleases(application, false); + applicationReleases = getReleases(application, filter.isRequirePublishedRelease()); application.setApplicationReleases(applicationReleases); } } @@ -275,7 +275,7 @@ public class ApplicationManagerImpl implements ApplicationManager { } @Override - public Application getApplicationById(int id) throws ApplicationManagementException { + public Application getApplicationById(int id, boolean requirePublishedReleases) throws ApplicationManagementException { int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(true); String userName = PrivilegedCarbonContext.getThreadLocalCarbonContext().getUsername(); Application application; @@ -286,7 +286,7 @@ public class ApplicationManagerImpl implements ApplicationManager { application = ApplicationManagementDAOFactory.getApplicationDAO() .getApplicationById(id, tenantId); if (isAdminUser(userName, tenantId, CarbonConstants.UI_ADMIN_PERMISSION_COLLECTION)) { - applicationReleases = getReleases(application, false); + applicationReleases = getReleases(application, requirePublishedReleases); application.setApplicationReleases(applicationReleases); return application; } @@ -303,7 +303,7 @@ public class ApplicationManagerImpl implements ApplicationManager { return null; } - applicationReleases = getReleases(application, false); + applicationReleases = getReleases(application, requirePublishedReleases); application.setApplicationReleases(applicationReleases); return application; } catch (UserStoreException e) { diff --git a/components/application-mgt/org.wso2.carbon.device.application.mgt.publisher.api/src/main/java/org/wso2/carbon/device/application/mgt/publisher/api/services/ApplicationManagementAPI.java b/components/application-mgt/org.wso2.carbon.device.application.mgt.publisher.api/src/main/java/org/wso2/carbon/device/application/mgt/publisher/api/services/ApplicationManagementAPI.java index 3459bd7d81..1151dc3d6e 100644 --- a/components/application-mgt/org.wso2.carbon.device.application.mgt.publisher.api/src/main/java/org/wso2/carbon/device/application/mgt/publisher/api/services/ApplicationManagementAPI.java +++ b/components/application-mgt/org.wso2.carbon.device.application.mgt.publisher.api/src/main/java/org/wso2/carbon/device/application/mgt/publisher/api/services/ApplicationManagementAPI.java @@ -141,6 +141,10 @@ public interface ApplicationManagementAPI { name = "exact-match", value = "Is it requesting exactly matching application or partially matching application.") @QueryParam("exact-match") boolean isFullMatch, + @ApiParam( + name = "published-release", + value = "If set to True, only get published release for the application") + @QueryParam("published-release") boolean requirePublishedReleases, @ApiParam( name = "offset", value = "offset", @@ -190,6 +194,10 @@ public interface ApplicationManagementAPI { response = ErrorResponse.class) }) Response getApplication( + @ApiParam( + name = "published-release", + value = "If set to True, only get published release for the application") + @QueryParam("published-release") boolean requirePublishedReleases, @ApiParam( name = "appId", value = "application Id", diff --git a/components/application-mgt/org.wso2.carbon.device.application.mgt.publisher.api/src/main/java/org/wso2/carbon/device/application/mgt/publisher/api/services/impl/ApplicationManagementAPIImpl.java b/components/application-mgt/org.wso2.carbon.device.application.mgt.publisher.api/src/main/java/org/wso2/carbon/device/application/mgt/publisher/api/services/impl/ApplicationManagementAPIImpl.java index eec6282e85..2b1ee720cb 100644 --- a/components/application-mgt/org.wso2.carbon.device.application.mgt.publisher.api/src/main/java/org/wso2/carbon/device/application/mgt/publisher/api/services/impl/ApplicationManagementAPIImpl.java +++ b/components/application-mgt/org.wso2.carbon.device.application.mgt.publisher.api/src/main/java/org/wso2/carbon/device/application/mgt/publisher/api/services/impl/ApplicationManagementAPIImpl.java @@ -49,7 +49,6 @@ import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.QueryParam; -import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; /** @@ -69,6 +68,7 @@ public class ApplicationManagementAPIImpl implements ApplicationManagementAPI { @QueryParam("type") String appType, @QueryParam("category") String appCategory, @QueryParam("exact-match") boolean isFullMatch, + @QueryParam("published-release") boolean requirePublishedReleases, @DefaultValue("0") @QueryParam("offset") int offset, @DefaultValue("20") @QueryParam("limit") int limit, @DefaultValue("ASC") @QueryParam("sort") String sortBy) { @@ -80,6 +80,7 @@ public class ApplicationManagementAPIImpl implements ApplicationManagementAPI { filter.setLimit(limit); filter.setSortBy(sortBy); filter.setFullMatch(isFullMatch); + filter.setRequirePublishedRelease(requirePublishedReleases); if (appName != null && !appName.isEmpty()) { filter.setAppName(appName); } @@ -107,10 +108,11 @@ public class ApplicationManagementAPIImpl implements ApplicationManagementAPI { @Consumes("application/json") @Path("/{appId}") public Response getApplication( + @QueryParam("published-release") boolean requirePublishedReleases, @PathParam("appId") int appId) { ApplicationManager applicationManager = APIUtil.getApplicationManager(); try { - Application application = applicationManager.getApplicationById(appId); + Application application = applicationManager.getApplicationById(appId, requirePublishedReleases); if (application == null) { return Response.status(Response.Status.NOT_FOUND).entity ("Application with application id: " + appId + " not found").build();