From b0eafe7180f86c90a5a75025fea827a774a53fbb Mon Sep 17 00:00:00 2001 From: lasantha Date: Tue, 20 Feb 2018 10:26:35 +0530 Subject: [PATCH] Fixed application management issues and improve functionalities --- .../mgt/core/impl/ApplicationManagerImpl.java | 15 ++++++++- .../impl/ApplicationStorageManagerImpl.java | 32 ++++++++----------- .../services/ApplicationManagementAPI.java | 9 ++++-- .../impl/ApplicationManagementAPIImpl.java | 17 +++++++--- 4 files changed, 46 insertions(+), 27 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 b2bcac3201..291b5cd0f2 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 @@ -105,6 +105,7 @@ public class ApplicationManagerImpl implements ApplicationManager { if (deviceType == null) { log.error("Device type is not matched with application type"); + ConnectionManagerUtil.rollbackDBTransaction(); return null; } application.setDevicetype(deviceType); @@ -113,6 +114,7 @@ public class ApplicationManagerImpl implements ApplicationManager { if (appId != -1) { log.error("Application creation Failed"); ConnectionManagerUtil.rollbackDBTransaction(); + return null; } else { if (!application.getTags().isEmpty()) { this.applicationDAO.addTags(application.getTags(), appId, tenantId); @@ -127,7 +129,14 @@ public class ApplicationManagerImpl implements ApplicationManager { applicationRelease.setCreatedAt((Timestamp) new Date()); applicationRelease = ApplicationManagementDAOFactory.getApplicationReleaseDAO(). createRelease(applicationRelease, application.getId()); - //todo add lifecycle and add this into application + LifecycleState lifecycleState = new LifecycleState(); + lifecycleState.setAppId(application.getId()); + lifecycleState.setReleaseId(applicationRelease.getId()); + lifecycleState.setUpdatedBy(loggedInUser.getUserName()); + lifecycleState.setTenantId(loggedInUser.getTenantId()); + lifecycleState.setCurrentState(AppLifecycleState.CREATED.toString()); + lifecycleState.setPreviousState(AppLifecycleState.CREATED.toString()); + addLifecycleState(application.getId(), applicationRelease.getUuid(), lifecycleState); } return application; @@ -232,6 +241,8 @@ public class ApplicationManagerImpl implements ApplicationManager { application = ApplicationManagementDAOFactory.getApplicationDAO() .getApplication(appType, appName, tenantId); if (isAdminUser(userName, tenantId, CarbonConstants.UI_ADMIN_PERMISSION_COLLECTION)) { + applicationReleases = getReleases(application.getId()); + application.setApplicationReleases(applicationReleases); return application; } @@ -538,6 +549,8 @@ public class ApplicationManagerImpl implements ApplicationManager { @Override public ApplicationRelease updateRelease(int appId, ApplicationRelease applicationRelease) throws ApplicationManagementException { + LifecycleState lifecycleState = getLifecycleState(appId, applicationRelease.getUuid()); + return null; } diff --git a/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/impl/ApplicationStorageManagerImpl.java b/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/impl/ApplicationStorageManagerImpl.java index ca9bf967eb..caa5847071 100644 --- a/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/impl/ApplicationStorageManagerImpl.java +++ b/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/impl/ApplicationStorageManagerImpl.java @@ -28,6 +28,7 @@ import org.apache.commons.logging.LogFactory; import org.wso2.carbon.context.PrivilegedCarbonContext; import org.wso2.carbon.device.application.mgt.common.ApplicationRelease; import org.wso2.carbon.device.application.mgt.common.ApplicationType; +import org.wso2.carbon.device.application.mgt.common.exception.ApplicationManagementException; import org.wso2.carbon.device.application.mgt.common.exception.ApplicationStorageManagementException; import org.wso2.carbon.device.application.mgt.common.exception.ResourceManagementException; import org.wso2.carbon.device.application.mgt.common.services.ApplicationStorageManager; @@ -168,7 +169,7 @@ public class ApplicationStorageManagerImpl implements ApplicationStorageManager try { - if (ApplicationType.ANDROID.toString().equals(appType)){ + if (ApplicationType.ANDROID.toString().equals(appType)) { String prefix = "stream2file"; String suffix = ".apk"; Boolean isTempDelete; @@ -183,18 +184,15 @@ public class ApplicationStorageManagerImpl implements ApplicationStorageManager if (!isTempDelete) { log.error("Temporary created APK file deletion failed"); } - }else if (ApplicationType.iOS.toString().equals(appType)){ - //todo iOS ipa validate - }else if (ApplicationType.WEB_CLIP.toString().equals(appType)){ - //todo Web Clip validate - }else{ + } else if (ApplicationType.iOS.toString().equals(appType)) { + //todo iOS ipa validate + } else if (ApplicationType.WEB_CLIP.toString().equals(appType)) { + //todo Web Clip validate + } else { throw new ApplicationStorageManagementException("Application Type doesn't match with supporting " + "application types " + applicationRelease.getUuid()); } - - - if (md5OfApp != null) { artifactDirectoryPath = storagePath + md5OfApp; StorageManagementUtil.createArtifactDirectory(artifactDirectoryPath); @@ -225,15 +223,13 @@ public class ApplicationStorageManagerImpl implements ApplicationStorageManager public ApplicationRelease updateReleaseArtifacts(ApplicationRelease applicationRelease, String appType, InputStream binaryFile) throws ApplicationStorageManagementException { - if (binaryFile != null) { - try { - deleteApplicationReleaseArtifacts(applicationRelease.getAppStoredLoc()); - applicationRelease = uploadReleaseArtifact(applicationRelease, appType, binaryFile); - } catch (ApplicationStorageManagementException e) { - throw new ApplicationStorageManagementException("Application Artifact doesn't contains in the System", e); - } catch (ResourceManagementException e) { - throw new ApplicationStorageManagementException("Application Artifact Updating failed", e); - } + try { + deleteApplicationReleaseArtifacts(applicationRelease.getAppStoredLoc()); + applicationRelease = uploadReleaseArtifact(applicationRelease, appType, binaryFile); + } catch (ApplicationStorageManagementException e) { + throw new ApplicationStorageManagementException("Application Artifact doesn't contains in the System", e); + } catch (ResourceManagementException e) { + throw new ApplicationStorageManagementException("Application Artifact Updating failed", e); } return applicationRelease; 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 6d4042a402..b693e8cec8 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 @@ -352,9 +352,12 @@ public interface ApplicationManagementAPI { response = ErrorResponse.class) }) Response updateApplicationImageArtifacts( - @ApiParam(name = "appId", value = "ID of the application", required = true) @PathParam("appId") int applicatioId, - @ApiParam(name = "uuid", value = "UUID of the application", required = true) @PathParam("uuid") String applicationUUID, - @Multipart(value = "icon") Attachment iconFile, @Multipart(value = "banner") Attachment bannerFile, + @ApiParam(name = "appId", value = "ID of the application", required = true) + @PathParam("appId") int applicatioId, + @ApiParam(name = "uuid", value = "UUID of the application", required = true) + @PathParam("uuid") String applicationUUID, + @Multipart(value = "icon") Attachment iconFile, + @Multipart(value = "banner") Attachment bannerFile, @Multipart(value = "screenshot") List screenshots); @PUT 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 5f8f2bbc31..ef03bdca3a 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 @@ -24,7 +24,6 @@ import org.apache.cxf.jaxrs.ext.multipart.Attachment; import org.apache.cxf.jaxrs.ext.multipart.Multipart; import org.wso2.carbon.device.application.mgt.common.*; import org.wso2.carbon.device.application.mgt.common.exception.ApplicationStorageManagementException; -import org.wso2.carbon.device.application.mgt.core.exception.ValidationException; import org.wso2.carbon.device.application.mgt.publisher.api.APIUtil; import org.wso2.carbon.device.application.mgt.publisher.api.services.ApplicationManagementAPI; import org.wso2.carbon.device.application.mgt.common.exception.ApplicationManagementException; @@ -72,7 +71,7 @@ public class ApplicationManagementAPIImpl implements ApplicationManagementAPI { ("Couldn't find any application for requested query.").build(); } return Response.status(Response.Status.OK).entity(applications).build(); - } catch (ApplicationManagementException e) { + } catch (ApplicationManagementException e) { String msg = "Error occurred while getting the application list for publisher "; log.error(msg, e); return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build(); @@ -187,7 +186,7 @@ public class ApplicationManagementAPIImpl implements ApplicationManagementAPI { } @Override - @POST + @PUT @Path("/image-artifacts/{appId}/{uuid}") public Response updateApplicationImageArtifacts( @PathParam("appId") int appId, @@ -217,8 +216,16 @@ public class ApplicationManagementAPIImpl implements ApplicationManagementAPI { } } applicationRelease = applicationManager.validateApplicationRelease(applicationUuid); + LifecycleState lifecycleState = applicationManager.getLifecycleState(appId, applicationRelease.getUuid()); + if (AppLifecycleState.PUBLISHED.toString().equals(lifecycleState.getCurrentState()) || + AppLifecycleState.DEPRECATED.toString().equals(lifecycleState.getCurrentState())) { + return Response.status(Response.Status.FORBIDDEN).entity("Can't Update the application release in " + + "PUBLISHED or DEPRECATED state. Hence please demote the application and update the application " + + "release").build(); + } applicationRelease = applicationStorageManager .updateImageArtifacts(applicationRelease, iconFileStream, bannerFileStream, attachments); + //todo need to implement updateRelease method applicationManager.updateRelease(appId, applicationRelease); return Response.status(Response.Status.OK) .entity("Successfully uploaded artifacts for the application " + applicationUuid).build(); @@ -263,6 +270,7 @@ public class ApplicationManagementAPIImpl implements ApplicationManagementAPI { applicationRelease = applicationManager.validateApplicationRelease(applicationUuuid); applicationRelease = applicationStorageManager.updateReleaseArtifacts(applicationRelease, appType, binaryFile.getDataHandler().getInputStream()); + //todo applicationManager.updateRelease(applicationId, applicationRelease); return Response.status(Response.Status.OK) .entity("Successfully uploaded artifacts for the application " + applicationUuuid).build(); @@ -338,11 +346,10 @@ public class ApplicationManagementAPIImpl implements ApplicationManagementAPI { applicationRelease = applicationStorageManager .updateImageArtifacts(applicationRelease, iconFileStream, bannerFileStream, attachments); + //todo applicationRelease = applicationManager.updateRelease(applicationId, applicationRelease); return Response.status(Response.Status.OK).entity(applicationRelease).build(); - } catch (NotFoundException e) { - return Response.status(Response.Status.NOT_FOUND).build(); } catch (ApplicationManagementException e) { log.error("Error while updating the application release of the application with UUID " + applicationUUID); return APIUtil.getResponse(e, Response.Status.INTERNAL_SERVER_ERROR);