diff --git a/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/dao/common/Util.java b/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/dao/common/Util.java index 7c0d414a5e..b3c0e40120 100644 --- a/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/dao/common/Util.java +++ b/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/dao/common/Util.java @@ -137,10 +137,11 @@ public class Util { tag.setTagName(rs.getString("APP_TAG")); UnrestrictedRole unrestrictedRole = new UnrestrictedRole(); unrestrictedRole.setRole(rs.getString("ROLE")); - if (application.getTags().contains(tag)) { + if (application.getTags() != null && application.getTags().contains(tag)) { application.getTags().add(tag); } - if (application.getUnrestrictedRoles().contains(unrestrictedRole)) { + if (application.getUnrestrictedRoles() != null && application.getUnrestrictedRoles() + .contains(unrestrictedRole)) { application.getUnrestrictedRoles().add(unrestrictedRole); } iteration++; 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 ecd793fb2d..b26acb8932 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 @@ -66,7 +66,7 @@ public class GenericApplicationReleaseDAOImpl extends AbstractDAOImpl implements String sql = "INSERT INTO AP_APP_RELEASE (VERSION,TENANT_ID,UUID,RELEASE_TYPE, PACKAGE_NAME, APP_PRICE," + "STORED_LOCATION, BANNER_LOCATION, SC_1_LOCATION,SC_2_LOCATION,SC_3_LOCATION, APP_HASH_VALUE," + "SHARED_WITH_ALL_TENANTS, APP_META_INFO,CREATED_BY,AP_APP_ID) " - + "VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?);"; + + "VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?, ?);"; int index = 0; String generatedColumns[] = {"ID"}; @@ -230,7 +230,7 @@ public class GenericApplicationReleaseDAOImpl extends AbstractDAOImpl implements + " 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.PUBLISHED_BY, AR.PUBLISHED_AT, AR.STARS FROM AP_APP_RELEASE AS " + + "AR.PUBLISHED_BY, AR.PUBLISHED_AT, AR.STARS, AR.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 = ? ;"; 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 ce7b68229d..ec236c453d 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 @@ -106,9 +106,10 @@ public class ApplicationManagerImpl implements ApplicationManager { ApplicationRelease applicationRelease; List applicationReleases = new ArrayList<>(); try { - ConnectionManagerUtil.openDBConnection(); + ConnectionManagerUtil.getDBConnection(); ConnectionManagerUtil.beginDBTransaction(); MAMDeviceConnectorImpl mamDeviceConnector = new MAMDeviceConnectorImpl(); + // Getting the device type details to get device type ID for internal mappings deviceType = mamDeviceConnector.getDeviceManagementService().getDeviceType(application.getDeviceType()); if (deviceType == null) { @@ -116,6 +117,7 @@ public class ApplicationManagerImpl implements ApplicationManager { ConnectionManagerUtil.rollbackDBTransaction(); return null; } + // Insert to application table int appId = this.applicationDAO.createApplication(application, deviceType.getId()); if (appId == -1) { @@ -123,13 +125,26 @@ public class ApplicationManagerImpl implements ApplicationManager { ConnectionManagerUtil.rollbackDBTransaction(); return null; } else { + if(log.isDebugEnabled()){ + log.debug("New Application entry added to AP_APP table. App Id:" + appId); + } if (!application.getTags().isEmpty()) { this.applicationDAO.addTags(application.getTags(), appId, tenantId); + if(log.isDebugEnabled()){ + log.debug("New tags entry added to AP_APP_TAG table. App Id:" + appId); + } } if (!application.getUnrestrictedRoles().isEmpty()) { application.setIsRestricted(true); this.visibilityDAO.addUnrestrictedRoles(application.getUnrestrictedRoles(), appId, tenantId); + if(log.isDebugEnabled()){ + log.debug("New restricted roles to app ID mapping added to AP_UNRESTRICTED_ROLE table." + + " App Id:" + appId); + } } else { + if(log.isDebugEnabled()){ + log.debug("App is not restricted to role. App Id:" + appId); + } application.setIsRestricted(false); } if (application.getApplicationReleases().size() > 1 ){ @@ -137,14 +152,22 @@ public class ApplicationManagerImpl implements ApplicationManager { "Invalid payload. Application creating payload should contains one application release, but " + "the payload contains more than one"); } + + if(log.isDebugEnabled()){ + log.debug("Creating a new release. App Id:" + appId); + } applicationRelease = application.getApplicationReleases().get(0); applicationRelease = this.applicationReleaseDAO .createRelease(applicationRelease, appId, tenantId); + if(log.isDebugEnabled()){ + log.debug("Changing lifecycle state. App Id:" + appId); + } LifecycleState lifecycleState = new LifecycleState(); lifecycleState.setCurrentState(AppLifecycleState.CREATED.toString()); lifecycleState.setPreviousState(AppLifecycleState.CREATED.toString()); - changeLifecycleState(appId, applicationRelease.getUuid(), lifecycleState); + changeLifecycleState(appId, applicationRelease.getUuid(), lifecycleState, false, + applicationRelease.getId()); applicationRelease.setLifecycleState(lifecycleState); applicationReleases.add(applicationRelease); @@ -161,11 +184,18 @@ public class ApplicationManagerImpl implements ApplicationManager { ConnectionManagerUtil.rollbackDBTransaction(); throw new ApplicationManagementException(msg, e); } catch (DeviceManagementException e) { - e.printStackTrace(); + String msg = "Error occurred while getting device type details"; + log.error(msg, e); + ConnectionManagerUtil.rollbackDBTransaction(); + throw new ApplicationManagementException(msg, e); + } catch (Exception e) { + String msg = "Unknown exception while creating application."; + log.error(msg, e); + ConnectionManagerUtil.rollbackDBTransaction(); + throw new ApplicationManagementException(msg, e); } finally { - //ConnectionManagerUtil.closeDBConnection(); //todo: check this again + ConnectionManagerUtil.closeDBConnection(); } - return null; } @Override @@ -181,14 +211,17 @@ public class ApplicationManagerImpl implements ApplicationManager { } try { - ConnectionManagerUtil.openDBConnection(); + ConnectionManagerUtil.getDBConnection(); applicationList = applicationDAO.getApplications(filter, tenantId); - if (!isAdminUser(userName, tenantId, CarbonConstants.UI_ADMIN_PERMISSION_COLLECTION)) { - applicationList = getRoleRestrictedApplicationList(applicationList, userName); - } - for (Application application : applicationList.getApplications()) { - applicationReleases = getReleases(application.getId()); - application.setApplicationReleases(applicationReleases); + if(applicationList != null && applicationList.getApplications() != null && applicationList + .getApplications().size() > 0) { + if (!isAdminUser(userName, tenantId, CarbonConstants.UI_ADMIN_PERMISSION_COLLECTION)) { + applicationList = getRoleRestrictedApplicationList(applicationList, userName); + } + for (Application application : applicationList.getApplications()) { + applicationReleases = getReleases(application.getId()); + application.setApplicationReleases(applicationReleases); + } } return applicationList; } catch (UserStoreException e) { @@ -198,8 +231,6 @@ public class ApplicationManagerImpl implements ApplicationManager { } catch (ApplicationManagementDAOException e) { throw new ApplicationManagementException( "DAO exception while getting applications for the user " + userName + " of tenant " + tenantId, e); - } finally { - ConnectionManagerUtil.closeDBConnection(); } } @@ -219,7 +250,7 @@ public class ApplicationManagerImpl implements ApplicationManager { LifecycleState lifecycleState = new LifecycleState(); lifecycleState.setCurrentState(AppLifecycleState.CREATED.toString()); lifecycleState.setPreviousState(AppLifecycleState.CREATED.toString()); - changeLifecycleState(application.getId(), applicationRelease.getUuid(), lifecycleState); + changeLifecycleState(application.getId(), applicationRelease.getUuid(), lifecycleState, true, 0); ConnectionManagerUtil.commitDBTransaction(); return applicationRelease; @@ -364,12 +395,12 @@ public class ApplicationManagerImpl implements ApplicationManager { log.debug("Request is received to retrieve all the releases related with the application " + application .toString()); } - try { - ConnectionManagerUtil.openDBConnection(); - applicationReleases = this.applicationReleaseDAO.getReleases(application.getName(), application.getType(), tenantId); - for (ApplicationRelease applicationRelease : applicationReleases) { - LifecycleState lifecycleState = ApplicationManagementDAOFactory.getLifecycleStateDAO(). - getLatestLifeCycleStateByReleaseID(applicationRelease.getId()); + 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() @@ -377,10 +408,9 @@ public class ApplicationManagerImpl implements ApplicationManager { filteredApplicationReleases.add(applicationRelease); } } - return filteredApplicationReleases; - } finally { - ConnectionManagerUtil.closeDBConnection(); } + return filteredApplicationReleases; + } @Override @@ -409,7 +439,7 @@ public class ApplicationManagerImpl implements ApplicationManager { LifecycleState newAppLifecycleState = new LifecycleState(); newAppLifecycleState.setPreviousState(appLifecycleState.getCurrentState()); newAppLifecycleState.setCurrentState(AppLifecycleState.REMOVED.toString()); - changeLifecycleState(applicationId, applicationRelease.getUuid(), newAppLifecycleState); + changeLifecycleState(applicationId, applicationRelease.getUuid(), newAppLifecycleState, true, 0); storedLocations.add(applicationRelease.getAppHashValue()); } ConnectionManagerUtil.openDBConnection(); @@ -440,7 +470,7 @@ public class ApplicationManagerImpl implements ApplicationManager { LifecycleState newAppLifecycleState = new LifecycleState(); newAppLifecycleState.setPreviousState(appLifecycleState.getCurrentState()); newAppLifecycleState.setCurrentState(AppLifecycleState.REMOVED.toString()); - changeLifecycleState(applicationId, applicationRelease.getUuid(), newAppLifecycleState); + changeLifecycleState(applicationId, applicationRelease.getUuid(), newAppLifecycleState, true, 0); }else{ throw new ApplicationManagementException("Can't delete the application release, You have to move the " + "lifecycle state from "+ currentState + " to acceptable " + @@ -582,27 +612,24 @@ public class ApplicationManagerImpl implements ApplicationManager { ApplicationManagementException { int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(true); ApplicationRelease applicationRelease; - try { - if (applicationId <= 0) { - throw new ApplicationManagementException( - "Application id could,t be a negative integer. Hence please add " + - "valid application id."); - } - if (applicationUuid == null) { - throw new ApplicationManagementException("Application UUID is null. Application UUID is a required " - + "parameter to get the relevant application."); - } - ConnectionManagerUtil.openDBConnection(); - applicationRelease = this.applicationReleaseDAO.getReleaseByIds(applicationId, applicationUuid, tenantId); - if (applicationRelease == null) { - throw new ApplicationManagementException("Doesn't exist a application release for application ID: " + - applicationId + "and application UUID: " + - applicationUuid); - } - return applicationRelease; - } finally { - ConnectionManagerUtil.closeDBConnection(); + + if (applicationId <= 0) { + throw new ApplicationManagementException( + "Application id could,t be a negative integer. Hence please add " + + "valid application id."); } + if (applicationUuid == null) { + throw new ApplicationManagementException("Application UUID is null. Application UUID is a required " + + "parameter to get the relevant application."); + } + ConnectionManagerUtil.getDBConnection(); + applicationRelease = this.applicationReleaseDAO.getReleaseByIds(applicationId, applicationUuid, tenantId); + if (applicationRelease == null) { + throw new ApplicationManagementException("Doesn't exist a application release for application ID: " + + applicationId + "and application UUID: " + + applicationUuid); + } + return applicationRelease; } @@ -702,11 +729,15 @@ public class ApplicationManagerImpl implements ApplicationManager { } @Override - public void changeLifecycleState(int applicationId, String applicationUuid, LifecycleState state) - throws ApplicationManagementException { + public void changeLifecycleState(int applicationId, String applicationUuid, LifecycleState state, Boolean + checkExist, int releaseId) throws ApplicationManagementException { try { - Application application = getApplicationIfAccessible(applicationId); - ApplicationRelease applicationRelease = getAppReleaseIfExists(applicationId, applicationUuid); + if (checkExist) { + getApplicationIfAccessible(applicationId); + } + if (releaseId < 1) { + releaseId = getAppReleaseIfExists(applicationId, applicationUuid).getId(); + } int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(true); String userName = PrivilegedCarbonContext.getThreadLocalCarbonContext().getUsername(); state.setUpdatedBy(userName); @@ -714,7 +745,7 @@ public class ApplicationManagerImpl implements ApplicationManager { if (state.getCurrentState() != null && state.getPreviousState() != null) { if (lifecycleStateManger.isValidStateChange(state.getPreviousState(), state.getCurrentState())) { this.lifecycleStateDAO - .addLifecycleState(state, application.getId(), applicationRelease.getId(), tenantId); + .addLifecycleState(state, applicationId, releaseId, tenantId); } else { log.error("Invalid lifecycle state transition from '" + state.getPreviousState() + "'" + " to '" + state.getCurrentState() + "'");