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 fdfd4319259..14c344d6b29 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 @@ -60,15 +60,17 @@ public class Util { List applications = new ArrayList<>(); Application application = null; int applicationId = -1; + boolean hasNext = rs.next(); - while (rs.next()) { + while (hasNext) { if (applicationId != rs.getInt("APP_ID")) { - if (application != null) { applications.add(application); } applicationId = rs.getInt("APP_ID"); application = new Application(); + application.setTags(new ArrayList<>()); + application.setUnrestrictedRoles(new ArrayList<>()); application.setId(applicationId); application.setName(rs.getString("APP_NAME")); application.setType(rs.getString("APP_TYPE")); @@ -76,25 +78,28 @@ public class Util { application.setSubType(rs.getString("SUB_TYPE")); application.setPaymentCurrency(rs.getString("CURRENCY")); application.setIsRestricted(rs.getBoolean("RESTRICTED")); - - List tags = new ArrayList<>(); - tags.add(rs.getString("APP_TAG").toLowerCase()); - application.setTags(tags); - - List unrestrictedRoles = new ArrayList<>(); - unrestrictedRoles.add(rs.getString("ROLE").toLowerCase()); - application.setUnrestrictedRoles(unrestrictedRoles); - } else { - String tag = rs.getString("APP_TAG").toLowerCase(); - String unrestrictedRole = rs.getString("ROLE").toLowerCase(); - if (application != null && !application.getTags().contains(tag)) { + String tag = rs.getString("APP_TAG"); + String unrestrictedRole = rs.getString("ROLE"); + if (tag != null) { application.getTags().add(tag); } - if (application != null && !application.getUnrestrictedRoles().contains(unrestrictedRole)) { + if (unrestrictedRole != null) { application.getUnrestrictedRoles().add(unrestrictedRole); } + } else { + String tag = rs.getString("APP_TAG"); + String unrestrictedRole = rs.getString("ROLE"); + if (application != null) { + if (tag != null && !application.getTags().contains(tag)) { + application.getTags().add(tag); + } + if (unrestrictedRole != null && !application.getUnrestrictedRoles().contains(unrestrictedRole)) { + application.getUnrestrictedRoles().add(unrestrictedRole); + } + } } - if (rs.last()) { + hasNext = rs.next(); + if (!hasNext) { applications.add(application); } } @@ -119,6 +124,8 @@ public class Util { while (rs.next()) { if (iteration == 0) { application = new Application(); + application.setTags(new ArrayList<>()); + application.setUnrestrictedRoles(new ArrayList<>()); applicatioId = rs.getInt("APP_ID"); application.setId(applicatioId); application.setName(rs.getString("APP_NAME")); @@ -130,13 +137,12 @@ public class Util { application.setDeviceTypeId(rs.getInt("DEVICE_TYPE_ID")); } - String tag = rs.getString("APP_TAG").toLowerCase(); - String unrestrictedRole = rs.getString("ROLE").toLowerCase(); - if (application.getTags() != null && application.getTags().contains(tag)) { + String tag = rs.getString("APP_TAG"); + String unrestrictedRole = rs.getString("ROLE"); + if (tag != null && !application.getTags().contains(tag)) { application.getTags().add(tag); } - if (application.getUnrestrictedRoles() != null && application.getUnrestrictedRoles() - .contains(unrestrictedRole)) { + if (unrestrictedRole != 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/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 cc95db446fe..a66a4b8ccab 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 @@ -100,17 +100,15 @@ public class ApplicationManagerImpl implements ApplicationManager { if (log.isDebugEnabled()) { log.debug("Create Application received for the tenant : " + tenantId + " From" + " the user : " + userName); } - - ConnectionManagerUtil.openDBConnection(); validateAppCreatingRequest(application, tenantId); validateAppReleasePayload(application.getApplicationReleases().get(0)); DeviceType deviceType; ApplicationRelease applicationRelease; List applicationReleases = new ArrayList<>(); try { - ConnectionManagerUtil.beginDBTransaction(); // Getting the device type details to get device type ID for internal mappings deviceType = Util.getDeviceManagementService().getDeviceType(application.getDeviceType()); + ConnectionManagerUtil.beginDBTransaction(); if (deviceType == null) { log.error("Device type is not matched with application type"); @@ -165,7 +163,8 @@ public class ApplicationManagerImpl implements ApplicationManager { LifecycleState lifecycleState = new LifecycleState(); lifecycleState.setCurrentState(AppLifecycleState.CREATED.toString()); lifecycleState.setPreviousState(AppLifecycleState.CREATED.toString()); - changeLifecycleState(appId, applicationRelease.getUuid(), lifecycleState, false); + lifecycleState.setUpdatedBy(userName); + this.lifecycleStateDAO.addLifecycleState(lifecycleState, appId, applicationRelease.getUuid(), tenantId); applicationRelease.setLifecycleState(lifecycleState); applicationReleases.add(applicationRelease); @@ -192,8 +191,6 @@ public class ApplicationManagerImpl implements ApplicationManager { log.error(msg, e); ConnectionManagerUtil.rollbackDBTransaction(); throw new ApplicationManagementException(msg, e); - } finally { - ConnectionManagerUtil.closeDBConnection(); } } @@ -693,19 +690,30 @@ public class ApplicationManagerImpl implements ApplicationManager { * @param application Application that need to be validated * @throws ValidationException Validation Exception */ - private void validateApplicationExistence(Application application, int tenantId) throws ApplicationManagementException { + private void validateApplicationExistence(Application application, int tenantId) + throws ApplicationManagementException { Filter filter = new Filter(); filter.setFullMatch(true); filter.setAppName(application.getName().trim()); filter.setOffset(0); filter.setLimit(1); + try { + ConnectionManagerUtil.openDBConnection(); + ApplicationList applicationList = applicationDAO.getApplications(filter, tenantId); + if (applicationList != null && applicationList.getApplications() != null && !applicationList + .getApplications().isEmpty()) { + throw new ApplicationManagementException( + "Already an application registered with same name - " + applicationList.getApplications().get(0) + .getName()); + } + } catch (DBConnectionException e) { + throw new ApplicationManagementException("test 1"); - ApplicationList applicationList = applicationDAO.getApplications(filter, tenantId); - if (applicationList != null && applicationList.getApplications() != null && !applicationList.getApplications() - .isEmpty()) { - throw new ApplicationManagementException( - "Already an application registered with same name - " + applicationList.getApplications().get(0) - .getName()); + } catch (ApplicationManagementDAOException e) { + throw new ApplicationManagementException("test 2"); + + } finally { + ConnectionManagerUtil.closeDBConnection(); } } @@ -919,6 +927,8 @@ public class ApplicationManagerImpl implements ApplicationManager { throw new ApplicationManagementException("Failed to get application and application management", e); } catch (LifeCycleManagementDAOException e) { throw new ApplicationManagementException("Failed to get lifecycle state from database", e); + } finally { + ConnectionManagerUtil.closeDBConnection(); } return lifecycleState; } diff --git a/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/internal/ApplicationManagementServiceComponent.java b/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/internal/ApplicationManagementServiceComponent.java index 894f510dd5b..968be5cce7a 100644 --- a/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/internal/ApplicationManagementServiceComponent.java +++ b/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/internal/ApplicationManagementServiceComponent.java @@ -77,6 +77,13 @@ public class ApplicationManagementServiceComponent { ApplicationManagementDAOFactory.init(dataSourceName); // ApplicationManagementDAOFactory.initDatabases(); + List lifecycleStates = ConfigurationManager.getInstance(). + getConfiguration().getLifecycleStates(); + LifecycleStateManger lifecycleStateManger = ApplicationManagementUtil.getLifecycleStateMangerInstance(); + lifecycleStateManger.init(lifecycleStates); + DataHolder.getInstance().setLifecycleStateManger(lifecycleStateManger); + bundleContext.registerService(LifecycleStateManger.class.getName(), lifecycleStateManger, null); + ApplicationManager applicationManager = ApplicationManagementUtil.getApplicationManagerInstance(); DataHolder.getInstance().setApplicationManager(applicationManager); bundleContext.registerService(ApplicationManager.class.getName(), applicationManager, null); @@ -94,12 +101,6 @@ public class ApplicationManagementServiceComponent { DataHolder.getInstance().setApplicationStorageManager(applicationStorageManager); bundleContext.registerService(ApplicationStorageManager.class.getName(), applicationStorageManager, null); - List lifecycleStates = ConfigurationManager.getInstance(). - getConfiguration().getLifecycleStates(); - LifecycleStateManger lifecycleStateManger = new LifecycleStateManger(lifecycleStates); - DataHolder.getInstance().setLifecycleStateManger(lifecycleStateManger); - bundleContext.registerService(LifecycleStateManger.class.getName(), lifecycleStateManger, null); - UIConfiguration uiConfiguration = ConfigurationManager.getInstance(). getConfiguration().getUiConfiguration(); ConfigManager configManager = new ConfigManagerImpl(uiConfiguration); diff --git a/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/lifecycle/LifecycleStateManger.java b/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/lifecycle/LifecycleStateManger.java index b32ab3ab8e0..a2017126428 100644 --- a/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/lifecycle/LifecycleStateManger.java +++ b/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/lifecycle/LifecycleStateManger.java @@ -15,7 +15,7 @@ public class LifecycleStateManger { private Map lifecycleStates; - public LifecycleStateManger(List states) { + public void init(List states){ lifecycleStates = new HashMap<>(); for (LifecycleState s : states) { if (s.getProceedingStates() != null) { diff --git a/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/util/ApplicationManagementUtil.java b/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/util/ApplicationManagementUtil.java index a1088861643..0f0901f0b16 100644 --- a/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/util/ApplicationManagementUtil.java +++ b/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/util/ApplicationManagementUtil.java @@ -27,6 +27,7 @@ import org.wso2.carbon.device.application.mgt.common.services.ReviewManager; import org.wso2.carbon.device.application.mgt.common.services.SubscriptionManager; import org.wso2.carbon.device.application.mgt.core.config.ConfigurationManager; import org.wso2.carbon.device.application.mgt.core.config.Extension; +import org.wso2.carbon.device.application.mgt.core.lifecycle.LifecycleStateManger; import java.lang.reflect.Constructor; @@ -63,6 +64,12 @@ public class ApplicationManagementUtil { return getInstance(extension, ApplicationStorageManager.class); } + public static LifecycleStateManger getLifecycleStateMangerInstance() throws InvalidConfigurationException { + ConfigurationManager configurationManager = ConfigurationManager.getInstance(); + Extension extension = configurationManager.getExtension(Extension.Name.LifecycleStateManager); + return getInstance(extension, LifecycleStateManger.class); + } + private static T getInstance(Extension extension, Class cls) throws InvalidConfigurationException { try { Class theClass = Class.forName(extension.getClassName()); diff --git a/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/test/java/org.wso2.carbon.device.application.mgt.core/LifecycleManagementTest.java b/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/test/java/org.wso2.carbon.device.application.mgt.core/LifecycleManagementTest.java index 919a92d7c52..b6b3d8b261c 100644 --- a/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/test/java/org.wso2.carbon.device.application.mgt.core/LifecycleManagementTest.java +++ b/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/test/java/org.wso2.carbon.device.application.mgt.core/LifecycleManagementTest.java @@ -25,7 +25,8 @@ public class LifecycleManagementTest { ConfigurationManager configurationManager = ConfigurationManager.getInstance(); Configuration configuration = configurationManager.getConfiguration(); lifecycleStates = configuration.getLifecycleStates(); - lifecycleStateManger = new LifecycleStateManger(lifecycleStates); + lifecycleStateManger = new LifecycleStateManger(); + lifecycleStateManger.init(lifecycleStates); } @Test