From e2acb5c4c89737ccba624f21f724d2a812e6c7de Mon Sep 17 00:00:00 2001 From: lasanthaDLPDS Date: Mon, 4 Mar 2019 02:57:08 +0530 Subject: [PATCH 1/3] Fix application installing issue --- .../application/mgt/core/dao/common/Util.java | 42 ++++++++++--------- .../mgt/core/impl/ApplicationManagerImpl.java | 34 +++++++++------ 2 files changed, 44 insertions(+), 32 deletions(-) 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 fdfd431925..ed27d1a24d 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 @@ -63,12 +63,13 @@ public class Util { while (rs.next()) { 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,23 +77,25 @@ 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()) { applications.add(application); @@ -119,6 +122,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 +135,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 cc95db446f..c3718c1df9 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(); } } From 911bc6f9a04ce275e7615cda774c9a8a5dc56bf0 Mon Sep 17 00:00:00 2001 From: lasanthaDLPDS Date: Mon, 4 Mar 2019 10:25:13 +0530 Subject: [PATCH 2/3] Fix application getting issue --- .../carbon/device/application/mgt/core/dao/common/Util.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) 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 ed27d1a24d..14c344d6b2 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,8 +60,9 @@ 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); @@ -97,7 +98,8 @@ public class Util { } } } - if (rs.last()) { + hasNext = rs.next(); + if (!hasNext) { applications.add(application); } } From 0cb26066c5a6e2ca91c9276a4edd190039c968b0 Mon Sep 17 00:00:00 2001 From: lasanthaDLPDS Date: Mon, 4 Mar 2019 19:07:50 +0530 Subject: [PATCH 3/3] Fix lifecycle instance initiating issue --- .../mgt/core/impl/ApplicationManagerImpl.java | 2 ++ .../ApplicationManagementServiceComponent.java | 13 +++++++------ .../mgt/core/lifecycle/LifecycleStateManger.java | 2 +- .../mgt/core/util/ApplicationManagementUtil.java | 7 +++++++ .../LifecycleManagementTest.java | 3 ++- 5 files changed, 19 insertions(+), 8 deletions(-) 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 c3718c1df9..a66a4b8cca 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 @@ -927,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 894f510dd5..968be5cce7 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 b32ab3ab8e..a201712642 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 a108886164..0f0901f0b1 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 919a92d7c5..b6b3d8b261 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