From 8bdffc90c6291d565de2e3132017902a6cf83b21 Mon Sep 17 00:00:00 2001 From: Gimhan-minion Date: Wed, 2 Feb 2022 13:25:20 +0530 Subject: [PATCH] Add query param to publish an app directly --- .../common/services/ApplicationManager.java | 9 +++--- .../mgt/core/impl/ApplicationManagerImpl.java | 31 ++++++++++++------- .../management/ApplicationManagementTest.java | 11 ++++--- .../ApplicationManagementPublisherAPI.java | 20 ++++++++++++ ...ApplicationManagementPublisherAPIImpl.java | 16 ++++++---- 5 files changed, 61 insertions(+), 26 deletions(-) diff --git a/components/application-mgt/io.entgra.application.mgt.common/src/main/java/io/entgra/application/mgt/common/services/ApplicationManager.java b/components/application-mgt/io.entgra.application.mgt.common/src/main/java/io/entgra/application/mgt/common/services/ApplicationManager.java index 5e77584b9a2..c3080d4092e 100644 --- a/components/application-mgt/io.entgra.application.mgt.common/src/main/java/io/entgra/application/mgt/common/services/ApplicationManager.java +++ b/components/application-mgt/io.entgra.application.mgt.common/src/main/java/io/entgra/application/mgt/common/services/ApplicationManager.java @@ -51,19 +51,20 @@ public interface ApplicationManager { * * @param applicationWrapper Application that need to be created. * @param applicationArtifact contains artifact data. i.e image name and stream, icon name and stream etc. + * @param isPublished checks if application should be published * @return {@link Application} * @throws ApplicationManagementException Catch all other throwing exceptions and throw {@link ApplicationManagementException} */ - Application createEntApp(ApplicationWrapper applicationWrapper, ApplicationArtifact applicationArtifact) + Application createEntApp(ApplicationWrapper applicationWrapper, ApplicationArtifact applicationArtifact, boolean isPublished) throws ApplicationManagementException; - Application createWebClip(WebAppWrapper webAppWrapper, ApplicationArtifact applicationArtifact) + Application createWebClip(WebAppWrapper webAppWrapper, ApplicationArtifact applicationArtifact, boolean isPublished) throws ApplicationManagementException; - Application createPublicApp(PublicAppWrapper publicAppWrapper, ApplicationArtifact applicationArtifact) + Application createPublicApp(PublicAppWrapper publicAppWrapper, ApplicationArtifact applicationArtifact, boolean isPublished) throws ApplicationManagementException; - Application createCustomApp(CustomAppWrapper customAppWrapper, ApplicationArtifact applicationArtifact) + Application createCustomApp(CustomAppWrapper customAppWrapper, ApplicationArtifact applicationArtifact, boolean isPublished) throws ApplicationManagementException; /** diff --git a/components/application-mgt/io.entgra.application.mgt.core/src/main/java/io/entgra/application/mgt/core/impl/ApplicationManagerImpl.java b/components/application-mgt/io.entgra.application.mgt.core/src/main/java/io/entgra/application/mgt/core/impl/ApplicationManagerImpl.java index 82405ee2fe9..8f484b383e6 100644 --- a/components/application-mgt/io.entgra.application.mgt.core/src/main/java/io/entgra/application/mgt/core/impl/ApplicationManagerImpl.java +++ b/components/application-mgt/io.entgra.application.mgt.core/src/main/java/io/entgra/application/mgt/core/impl/ApplicationManagerImpl.java @@ -135,7 +135,7 @@ ApplicationManagerImpl implements ApplicationManager { @Override public Application createEntApp(ApplicationWrapper applicationWrapper, - ApplicationArtifact applicationArtifact) throws ApplicationManagementException { + ApplicationArtifact applicationArtifact, boolean isPublished) throws ApplicationManagementException { if (log.isDebugEnabled()) { log.debug("Ent. Application create request is received. Application name: " + applicationWrapper.getName() + " Device type: " + applicationWrapper.getDeviceType()); @@ -149,11 +149,11 @@ ApplicationManagerImpl implements ApplicationManager { applicationWrapper.getDeviceType(), tenantId, false); applicationDTO.getApplicationReleaseDTOs().clear(); applicationDTO.getApplicationReleaseDTOs().add(applicationReleaseDTO); - return addAppDataIntoDB(applicationDTO, tenantId); + return addAppDataIntoDB(applicationDTO, tenantId, isPublished); } @Override - public Application createWebClip(WebAppWrapper webAppWrapper, ApplicationArtifact applicationArtifact) + public Application createWebClip(WebAppWrapper webAppWrapper, ApplicationArtifact applicationArtifact, boolean isPublished) throws ApplicationManagementException { if (log.isDebugEnabled()) { log.debug("Web clip create request is received. App name: " + webAppWrapper.getName() + " Device type: " @@ -175,11 +175,11 @@ ApplicationManagerImpl implements ApplicationManager { throw new ApplicationManagementException(msg, e); } //insert application data into database - return addAppDataIntoDB(applicationDTO, tenantId); + return addAppDataIntoDB(applicationDTO, tenantId, isPublished); } @Override - public Application createPublicApp(PublicAppWrapper publicAppWrapper, ApplicationArtifact applicationArtifact) + public Application createPublicApp(PublicAppWrapper publicAppWrapper, ApplicationArtifact applicationArtifact, boolean isPublished) throws ApplicationManagementException { int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(true); @@ -231,11 +231,11 @@ ApplicationManagerImpl implements ApplicationManager { throw new ApplicationManagementException(msg, e); } //insert application data into database - return addAppDataIntoDB(applicationDTO, tenantId); + return addAppDataIntoDB(applicationDTO, tenantId, isPublished); } @Override - public Application createCustomApp(CustomAppWrapper customAppWrapper, ApplicationArtifact applicationArtifact) + public Application createCustomApp(CustomAppWrapper customAppWrapper, ApplicationArtifact applicationArtifact, boolean isPublished) throws ApplicationManagementException { try { int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(true); @@ -282,7 +282,7 @@ ApplicationManagerImpl implements ApplicationManager { applicationReleaseDTO = addImageArtifacts(applicationReleaseDTO, applicationArtifact, tenantId); applicationDTO.getApplicationReleaseDTOs().clear(); applicationDTO.getApplicationReleaseDTOs().add(applicationReleaseDTO); - return addAppDataIntoDB(applicationDTO, tenantId); + return addAppDataIntoDB(applicationDTO, tenantId, isPublished); } catch (ResourceManagementException e) { String msg = "Error occurred while uploading application artifact into the server. Application name: " + customAppWrapper.getName() + " Device type: " + customAppWrapper.getDeviceType(); @@ -872,7 +872,7 @@ ApplicationManagerImpl implements ApplicationManager { * @return {@link Application} * @throws ApplicationManagementException which throws if error occurs while during application management. */ - private Application addAppDataIntoDB(ApplicationDTO applicationDTO, int tenantId) throws ApplicationManagementException { + private Application addAppDataIntoDB(ApplicationDTO applicationDTO, int tenantId, boolean isPublished) throws ApplicationManagementException { ApplicationStorageManager applicationStorageManager = APIUtil.getApplicationStorageManager(); List unrestrictedRoles = applicationDTO.getUnrestrictedRoles(); ApplicationReleaseDTO applicationReleaseDTO = applicationDTO.getApplicationReleaseDTOs().get(0); @@ -939,11 +939,18 @@ ApplicationManagerImpl implements ApplicationManager { if (log.isDebugEnabled()) { log.debug("Creating a new release. App Id:" + appId); } - String initialLifecycleState = lifecycleStateManager.getInitialState(); - applicationReleaseDTO.setCurrentState(initialLifecycleState); + + String lifeCycleState; + if(isPublished){ + lifeCycleState = lifecycleStateManager.getInstallableState(); + } else { + lifeCycleState = lifecycleStateManager.getInitialState(); + } + + applicationReleaseDTO.setCurrentState(lifeCycleState); applicationReleaseDTO = this.applicationReleaseDAO .createRelease(applicationReleaseDTO, appId, tenantId); - LifecycleState lifecycleState = getLifecycleStateInstance(initialLifecycleState, initialLifecycleState); + LifecycleState lifecycleState = getLifecycleStateInstance(lifeCycleState, lifeCycleState); this.lifecycleStateDAO.addLifecycleState(lifecycleState, applicationReleaseDTO.getId(), tenantId); applicationReleaseEntities.add(applicationReleaseDTO); applicationDTO.setApplicationReleaseDTOs(applicationReleaseEntities); diff --git a/components/application-mgt/io.entgra.application.mgt.core/src/test/java/io/entgra/application/mgt/core/management/ApplicationManagementTest.java b/components/application-mgt/io.entgra.application.mgt.core/src/test/java/io/entgra/application/mgt/core/management/ApplicationManagementTest.java index 998e10e5b13..bab8ef199eb 100644 --- a/components/application-mgt/io.entgra.application.mgt.core/src/test/java/io/entgra/application/mgt/core/management/ApplicationManagementTest.java +++ b/components/application-mgt/io.entgra.application.mgt.core/src/test/java/io/entgra/application/mgt/core/management/ApplicationManagementTest.java @@ -41,7 +41,6 @@ import io.entgra.application.mgt.core.dto.ApplicationsDTO; import io.entgra.application.mgt.core.impl.ApplicationManagerImpl; import io.entgra.application.mgt.core.internal.DataHolder; import io.entgra.application.mgt.core.util.ConnectionManagerUtil; -import org.wso2.carbon.device.mgt.common.DeviceIdentifier; import org.wso2.carbon.device.mgt.common.exceptions.DeviceManagementException; import org.wso2.carbon.device.mgt.core.dto.DeviceType; import org.wso2.carbon.device.mgt.core.dto.DeviceTypeVersion; @@ -121,9 +120,8 @@ public class ApplicationManagementTest extends BaseTestCase { screenshots.put("shot3", new FileInputStream(new File("src/test/resources/samples/app1/shot3.png"))); applicationArtifact.setScreenshots(screenshots); - ApplicationManager manager = new ApplicationManagerImpl(); - manager.createEntApp(applicationWrapper, applicationArtifact); + manager.createEntApp(applicationWrapper, applicationArtifact, false); } @DataProvider(name = "applicationIdDataProvider") @@ -140,7 +138,12 @@ public class ApplicationManagementTest extends BaseTestCase { public static Object[][] uuidDataProvider() { return new Object[][] {{"TEST_APP_UUID"}}; } - + + @Test(enabled = false) + public void createApplicationAndPublish(ApplicationWrapper applicationWrapper, ApplicationArtifact applicationArtifact, boolean isPublish) throws ApplicationManagementException { + + } + @Test(enabled = false) public void updateApplication(int applicationId, ApplicationUpdateWrapper applicationUpdateWrapper) throws ApplicationManagementException { diff --git a/components/application-mgt/io.entgra.application.mgt.publisher.api/src/main/java/io/entgra/application/mgt/publisher/api/services/ApplicationManagementPublisherAPI.java b/components/application-mgt/io.entgra.application.mgt.publisher.api/src/main/java/io/entgra/application/mgt/publisher/api/services/ApplicationManagementPublisherAPI.java index 1cd1411da34..3f37f9252af 100644 --- a/components/application-mgt/io.entgra.application.mgt.publisher.api/src/main/java/io/entgra/application/mgt/publisher/api/services/ApplicationManagementPublisherAPI.java +++ b/components/application-mgt/io.entgra.application.mgt.publisher.api/src/main/java/io/entgra/application/mgt/publisher/api/services/ApplicationManagementPublisherAPI.java @@ -319,6 +319,11 @@ public interface ApplicationManagementPublisherAPI { value = "The application that need to be created.", required = true) @Multipart("application") ApplicationWrapper application, + @ApiParam( + name = "isPublished", + value = "Published state of the application" + ) + @QueryParam("is-Published") boolean isPublished, @ApiParam( name = "binaryFile", value = "Binary file of uploading application", @@ -388,6 +393,11 @@ public interface ApplicationManagementPublisherAPI { value = "The web app that need to be created.", required = true) @Multipart("webapp") WebAppWrapper webAppWrapper, + @ApiParam( + name = "isPublished", + value = "Published state of the application" + ) + @QueryParam("is-Published") boolean isPublished, @ApiParam( name = "icon", value = "Icon of the uploading web app", @@ -452,6 +462,11 @@ public interface ApplicationManagementPublisherAPI { value = "The public app that need to be created.", required = true) @Multipart("public-app") PublicAppWrapper publicAppWrapper, + @ApiParam( + name = "isPublished", + value = "Published state of the application" + ) + @QueryParam("is-Published") boolean isPublished, @ApiParam( name = "icon", value = "Icon of the uploading public app", @@ -514,6 +529,11 @@ public interface ApplicationManagementPublisherAPI { value = "The application that need to be created.", required = true) @Multipart("application") CustomAppWrapper customAppWrapper, + @ApiParam( + name = "isPublished", + value = "Published state of the application" + ) + @QueryParam("is-Published") boolean isPublished, @ApiParam( name = "binaryFile", value = "Binary file of uploading application", diff --git a/components/application-mgt/io.entgra.application.mgt.publisher.api/src/main/java/io/entgra/application/mgt/publisher/api/services/impl/ApplicationManagementPublisherAPIImpl.java b/components/application-mgt/io.entgra.application.mgt.publisher.api/src/main/java/io/entgra/application/mgt/publisher/api/services/impl/ApplicationManagementPublisherAPIImpl.java index 8b156bbf9d0..ee41b8b976c 100644 --- a/components/application-mgt/io.entgra.application.mgt.publisher.api/src/main/java/io/entgra/application/mgt/publisher/api/services/impl/ApplicationManagementPublisherAPIImpl.java +++ b/components/application-mgt/io.entgra.application.mgt.publisher.api/src/main/java/io/entgra/application/mgt/publisher/api/services/impl/ApplicationManagementPublisherAPIImpl.java @@ -173,6 +173,7 @@ public class ApplicationManagementPublisherAPIImpl implements ApplicationManagem @Path("/ent-app") public Response createEntApp( @Multipart("application") ApplicationWrapper applicationWrapper, + @QueryParam("is-published") boolean isPublished, @Multipart("binaryFile") Attachment binaryFile, @Multipart("icon") Attachment iconFile, @Multipart(value = "banner", required = false) Attachment bannerFile, @@ -190,7 +191,7 @@ public class ApplicationManagementPublisherAPIImpl implements ApplicationManagem // Created new Ent App Application application = applicationManager.createEntApp(applicationWrapper, - constructApplicationArtifact(binaryFile, iconFile, bannerFile, attachmentList)); + constructApplicationArtifact(binaryFile, iconFile, bannerFile, attachmentList), isPublished); if (application != null) { return Response.status(Response.Status.CREATED).entity(application).build(); } else { @@ -218,6 +219,7 @@ public class ApplicationManagementPublisherAPIImpl implements ApplicationManagem @Path("/web-app") public Response createWebApp( @Multipart("webapp") WebAppWrapper webAppWrapper, + @QueryParam("is-published") boolean isPublished, @Multipart("icon") Attachment iconFile, @Multipart(value = "banner", required = false) Attachment bannerFile, @Multipart("screenshot1") Attachment screenshot1, @@ -233,7 +235,7 @@ public class ApplicationManagementPublisherAPIImpl implements ApplicationManagem // Created new Web App Application application = applicationManager.createWebClip(webAppWrapper, - constructApplicationArtifact(null, iconFile, bannerFile, attachmentList)); + constructApplicationArtifact(null, iconFile, bannerFile, attachmentList), isPublished); if (application != null) { return Response.status(Response.Status.CREATED).entity(application).build(); } else { @@ -255,12 +257,13 @@ public class ApplicationManagementPublisherAPIImpl implements ApplicationManagem return Response.status(Response.Status.BAD_REQUEST).entity(msg).build(); } } - + @POST @Consumes({"multipart/mixed", MediaType.MULTIPART_FORM_DATA}) @Path("/public-app") public Response createPubApp( @Multipart("public-app") PublicAppWrapper publicAppWrapper, + @QueryParam("is-published") boolean isPublished, @Multipart("icon") Attachment iconFile, @Multipart(value = "banner", required = false) Attachment bannerFile, @Multipart("screenshot1") Attachment screenshot1, @@ -276,11 +279,11 @@ public class ApplicationManagementPublisherAPIImpl implements ApplicationManagem // Created new Public App Application application = applicationManager.createPublicApp(publicAppWrapper, - constructApplicationArtifact(null, iconFile, bannerFile, attachmentList)); + constructApplicationArtifact(null, iconFile, bannerFile, attachmentList), isPublished); if (application != null) { return Response.status(Response.Status.CREATED).entity(application).build(); } else { - String msg = "Web app creation is failed"; + String msg = "Public app creation is failed"; log.error(msg); return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); } @@ -304,6 +307,7 @@ public class ApplicationManagementPublisherAPIImpl implements ApplicationManagem @Path("/custom-app") public Response createCustomApp( @Multipart("application") CustomAppWrapper customAppWrapper, + @QueryParam("is-published") boolean isPublished, @Multipart("binaryFile") Attachment binaryFile, @Multipart("icon") Attachment iconFile, @Multipart(value = "banner", required = false) Attachment bannerFile, @@ -321,7 +325,7 @@ public class ApplicationManagementPublisherAPIImpl implements ApplicationManagem // Created new Custom App Application application = applicationManager.createCustomApp(customAppWrapper, - constructApplicationArtifact(binaryFile, iconFile, bannerFile, attachmentList)); + constructApplicationArtifact(binaryFile, iconFile, bannerFile, attachmentList), isPublished); if (application != null) { return Response.status(Response.Status.CREATED).entity(application).build(); } else {