From 6e3cc085ff6d4e17e386d790a3720bd2560e5bb4 Mon Sep 17 00:00:00 2001 From: lasantha Date: Sun, 18 Feb 2018 22:52:52 +0530 Subject: [PATCH] Fixed application getting issues and improved the application getting functionality Improved application functionalities. Modified service layer, DAO layer and API layer --- .../mgt/common/ApplicationRelease.java | 10 +- .../device/application/mgt/common/Filter.java | 50 +++----- .../GenericApplicationDAOImpl.java | 25 ++-- .../mgt/core/impl/ApplicationManagerImpl.java | 89 ++++++++++++--- .../services/ApplicationManagementAPI.java | 28 ++--- .../impl/ApplicationManagementAPIImpl.java | 108 ++++++++---------- .../impl/ApplicationManagementAPIImpl.java | 2 +- 7 files changed, 172 insertions(+), 140 deletions(-) diff --git a/components/application-mgt/org.wso2.carbon.device.application.mgt.common/src/main/java/org/wso2/carbon/device/application/mgt/common/ApplicationRelease.java b/components/application-mgt/org.wso2.carbon.device.application.mgt.common/src/main/java/org/wso2/carbon/device/application/mgt/common/ApplicationRelease.java index 61ddb449da8..bb56abef46a 100644 --- a/components/application-mgt/org.wso2.carbon.device.application.mgt.common/src/main/java/org/wso2/carbon/device/application/mgt/common/ApplicationRelease.java +++ b/components/application-mgt/org.wso2.carbon.device.application.mgt.common/src/main/java/org/wso2/carbon/device/application/mgt/common/ApplicationRelease.java @@ -60,7 +60,7 @@ public class ApplicationRelease { private Timestamp publishedAt; - private String modifiedBy; + private String modifiedBy; private Timestamp modifiedAt; @@ -132,13 +132,17 @@ public class ApplicationRelease { this.appHashValue = appHashValue; } - public void setIsSharedWithAllTenants(int isSharedWithAllTenants) { this.isSharedWithAllTenants = isSharedWithAllTenants; } + public void setIsSharedWithAllTenants(int isSharedWithAllTenants) { + this.isSharedWithAllTenants = isSharedWithAllTenants; + } public void setMetaData(String metaData) { this.metaData = metaData; } - public int getId() { return id; } + public int getId() { + return id; + } public String getVersion() { return version; diff --git a/components/application-mgt/org.wso2.carbon.device.application.mgt.common/src/main/java/org/wso2/carbon/device/application/mgt/common/Filter.java b/components/application-mgt/org.wso2.carbon.device.application.mgt.common/src/main/java/org/wso2/carbon/device/application/mgt/common/Filter.java index 93e4130ed8f..16c4e12f7c4 100644 --- a/components/application-mgt/org.wso2.carbon.device.application.mgt.common/src/main/java/org/wso2/carbon/device/application/mgt/common/Filter.java +++ b/components/application-mgt/org.wso2.carbon.device.application.mgt.common/src/main/java/org/wso2/carbon/device/application/mgt/common/Filter.java @@ -23,26 +23,17 @@ package org.wso2.carbon.device.application.mgt.common; */ public class Filter { - /** - * Order which the search results should be shown. Ascending or Descending. - */ - public enum SortingOrder { - ASC, DESC - } - - private int limit; - - private int offset; + private String appName; - private String searchQuery; + private String appType; private boolean isFullMatch; - private SortingOrder sortingOrder; + private int limit; - private String sortBy; + private int offset; - private String userName; + private String sortBy; public int getLimit() { return limit; @@ -60,20 +51,12 @@ public class Filter { this.offset = offset; } - public String getSearchQuery() { - return searchQuery; + public String getAppName() { + return appName; } - public void setSearchQuery(String searchQuery) { - this.searchQuery = searchQuery; - } - - public SortingOrder getSortingOrder() { - return sortingOrder; - } - - public void setSortingOrder(SortingOrder sortingOrder) { - this.sortingOrder = sortingOrder; + public void setAppName(String appName) { + this.appName = appName; } public String getSortBy() { @@ -84,14 +67,6 @@ public class Filter { this.sortBy = sortBy; } - public String getUserName() { - return userName; - } - - public void setUserName(String userName) { - this.userName = userName; - } - public boolean isFullMatch() { return isFullMatch; } @@ -100,8 +75,11 @@ public class Filter { isFullMatch = fullMatch; } - public boolean hasCondition() { - return searchQuery != null; + public String getAppType() { + return appType; } + public void setAppType(String appType) { + this.appType = appType; + } } 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/GenericApplicationDAOImpl.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/GenericApplicationDAOImpl.java index 2d68b040e2e..8ec9f9b524e 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/GenericApplicationDAOImpl.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/GenericApplicationDAOImpl.java @@ -181,7 +181,11 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic throw new ApplicationManagementDAOException("Filter need to be instantiated"); } - if (filter.getSearchQuery() != null && !filter.getSearchQuery().isEmpty()) { + if (filter.getAppType() != null) { + sql += " AND AP_APP.TYPE "; + sql += "= ?"; + } + if (filter.getAppName() != null) { sql += " AND LOWER (AP_APP.NAME) "; if (filter.isFullMatch()) { sql += "= ?"; @@ -200,11 +204,14 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic stmt = conn.prepareStatement(sql); stmt.setInt(++index, tenantId); - if (filter.getSearchQuery() != null && !filter.getSearchQuery().isEmpty()) { + if (filter.getAppType() != null) { + stmt.setString(++index, filter.getAppType()); + } + if (filter.getAppName() != null) { if (filter.isFullMatch()) { - stmt.setString(++index, filter.getSearchQuery().toLowerCase()); + stmt.setString(++index, filter.getAppName().toLowerCase()); } else { - stmt.setString(++index, "%" + filter.getSearchQuery().toLowerCase() + "%"); + stmt.setString(++index, "%" + filter.getAppName().toLowerCase() + "%"); } } @@ -212,9 +219,9 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic stmt.setInt(++index, filter.getOffset()); rs = stmt.executeQuery(); applicationList.setApplications(Util.loadApplications(rs)); - pagination.setSize(filter.getOffset()); - pagination.setCount(this.getApplicationCount(filter)); applicationList.setPagination(pagination); + applicationList.getPagination().setSize(filter.getOffset()); + applicationList.getPagination().setCount(applicationList.getApplications().size()); } catch (SQLException e) { throw new ApplicationManagementDAOException("Error occurred while getting application list for the tenant" @@ -287,15 +294,15 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic conn = this.getDBConnection(); sql += "SELECT count(APP.ID) AS APP_COUNT FROM AP_APP AS APP WHERE TENANT_ID = ?"; - if (filter.getSearchQuery() != null && !filter.getSearchQuery().isEmpty()) { + if (filter.getAppName() != null) { sql += " AND LOWER (APP.NAME) LIKE ? "; } sql += ";"; stmt = conn.prepareStatement(sql); int index = 0; - if (filter.getSearchQuery() != null && !filter.getSearchQuery().isEmpty()) { - stmt.setString(++index, "%" + filter.getSearchQuery().toLowerCase() + "%"); + if (filter.getAppName() != null) { + stmt.setString(++index, "%" + filter.getAppName().toLowerCase() + "%"); } rs = stmt.executeQuery(); if (rs.next()) { 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 943d9210900..f79c1d1d05a 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 @@ -27,9 +27,11 @@ import org.wso2.carbon.device.application.mgt.common.AppLifecycleState; import org.wso2.carbon.device.application.mgt.common.Application; import org.wso2.carbon.device.application.mgt.common.ApplicationList; 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.Filter; import org.wso2.carbon.device.application.mgt.common.LifecycleState; import org.wso2.carbon.device.application.mgt.common.LifecycleStateTransition; +import org.wso2.carbon.device.application.mgt.common.SortingOrder; import org.wso2.carbon.device.application.mgt.common.UnrestrictedRole; import org.wso2.carbon.device.application.mgt.common.User; import org.wso2.carbon.device.application.mgt.common.exception.ApplicationManagementException; @@ -53,10 +55,11 @@ import org.wso2.carbon.user.api.UserRealm; import org.wso2.carbon.user.api.UserStoreException; import org.wso2.carbon.utils.multitenancy.MultitenantUtils; -import java.sql.Timestamp; + import java.util.ArrayList; -import java.util.Date; import java.util.List; +import java.sql.Timestamp; +import java.util.Date; /** * Default Concrete implementation of Application Management related implementations. @@ -64,6 +67,8 @@ import java.util.List; public class ApplicationManagerImpl implements ApplicationManager { private static final Log log = LogFactory.getLog(ApplicationManagerImpl.class); + private static final int DEFAULT_LIMIT = 20; + private static final int DEFAULT_OFFSET = 10; private DeviceTypeDAO deviceTypeDAO; private VisibilityDAO visibilityDAO; private ApplicationDAO applicationDAO; @@ -90,7 +95,7 @@ public class ApplicationManagerImpl implements ApplicationManager { } validateAppCreatingRequest(application); - validateReleaseCreateRequest(application.getApplicationReleases()); + validateReleaseCreatingRequest(application.getApplicationReleases()); DeviceType deviceType; ApplicationRelease applicationRelease; try { @@ -149,8 +154,12 @@ public class ApplicationManagerImpl implements ApplicationManager { ApplicationList applicationList; List applicationReleases; + filter = validateFilter(filter); + if (filter == null) { + throw new ApplicationManagementException("Filter validation failed, Please verify the request payload"); + } + try { - filter.setUserName(userName); ConnectionManagerUtil.openDBConnection(); applicationList = applicationDAO.getApplications(filter, tenantId); if (!isAdminUser(userName, tenantId, CarbonConstants.UI_ADMIN_PERMISSION_COLLECTION)) { @@ -427,17 +436,26 @@ public class ApplicationManagerImpl implements ApplicationManager { */ private void validateAppCreatingRequest(Application application) throws ValidationException { - if (application.getName() == null) { - throw new ValidationException("Application name cannot be empty"); - } - if (application.getUser() == null || application.getUser().getUserName() == null - || application.getUser().getTenantId() == 0) { - throw new ValidationException("Username and tenant Id cannot be empty"); - } - if (application.getAppCategory() == null) { - throw new ValidationException("Username and tenant Id cannot be empty"); - } + Boolean isValidApplicationType; try { + if (application.getName() == null) { + throw new ValidationException("Application name cannot be empty"); + } + if (application.getUser() == null || application.getUser().getUserName() == null + || application.getUser().getTenantId() == -1) { + throw new ValidationException("Username and tenant Id cannot be empty"); + } + if (application.getAppCategory() == null) { + throw new ValidationException("Username and tenant Id cannot be empty"); + } + + isValidApplicationType = isValidAppType(application); + + if (!isValidApplicationType) { + throw new ValidationException("App Type contains in the application creating payload doesn't match with " + + "supported app types"); + } + validateApplicationExistence(application); } catch (ApplicationManagementException e) { throw new ValidationException("Error occured while validating whether there is already an application " @@ -445,6 +463,15 @@ public class ApplicationManagerImpl implements ApplicationManager { } } + private Boolean isValidAppType(Application application) { + for (ApplicationType applicationType : ApplicationType.values()) { + if (applicationType.toString().equals(application.getType())) { + return true; + } + } + return false; + } + /** * To validate the application existence * @@ -454,7 +481,7 @@ public class ApplicationManagerImpl implements ApplicationManager { private void validateApplicationExistence(Application application) throws ApplicationManagementException { Filter filter = new Filter(); filter.setFullMatch(true); - filter.setSearchQuery(application.getName().trim()); + filter.setAppName(application.getName().trim()); filter.setOffset(0); filter.setLimit(1); @@ -544,7 +571,7 @@ public class ApplicationManagerImpl implements ApplicationManager { * @param applicationReleases ApplicationRelease that need to be created. * @throws ApplicationManagementException Application Management Exception. */ - private void validateReleaseCreateRequest(List applicationReleases) + private void validateReleaseCreatingRequest(List applicationReleases) throws ApplicationManagementException { if (applicationReleases.isEmpty() || applicationReleases.size() > 1) { @@ -747,4 +774,34 @@ public class ApplicationManagerImpl implements ApplicationManager { //todo update application return application; } + + private Filter validateFilter(Filter filter) { + if (filter != null) { + if (filter.getLimit() == 0) { + filter.setLimit(DEFAULT_LIMIT); + } + if (filter.getOffset() == 0) { + filter.setOffset(DEFAULT_OFFSET); + } + if (!SortingOrder.ASC.toString().equals(filter.getSortBy()) && + !SortingOrder.DESC.toString().equals(filter.getSortBy())) { + return null; + } + + + if (filter.getAppType() != null) { + Boolean isValidRequest = false; + for (ApplicationType applicationType: ApplicationType.values()){ + if(applicationType.toString().equals(filter.getAppType())){ + isValidRequest = true; + break; + } + } + if (!isValidRequest){ + return null; + } + } + } + return filter; + } } 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 6db4c3c7247..6d4042a4025 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 @@ -32,11 +32,8 @@ import org.apache.cxf.jaxrs.ext.multipart.Attachment; import org.apache.cxf.jaxrs.ext.multipart.Multipart; import org.wso2.carbon.apimgt.annotations.api.Scope; import org.wso2.carbon.apimgt.annotations.api.Scopes; -import org.wso2.carbon.device.application.mgt.common.LifecycleState; +import org.wso2.carbon.device.application.mgt.common.*; import org.wso2.carbon.device.application.mgt.publisher.api.beans.ErrorResponse; -import org.wso2.carbon.device.application.mgt.common.Application; -import org.wso2.carbon.device.application.mgt.common.ApplicationList; -import org.wso2.carbon.device.application.mgt.common.ApplicationRelease; import java.util.List; import javax.validation.Valid; @@ -146,17 +143,10 @@ public interface ApplicationManagementAPI { }) Response getApplications( @ApiParam( - name = "offset", - value = "Provide from which position apps should return", defaultValue = "20") - @QueryParam("offset") int offset, - @ApiParam( - name = "limit", - value = "Provide how many apps it should return", defaultValue = "0") - @QueryParam("limit") int limit, - @ApiParam( - name = "searchQuery", - value = "Relevant search query to search on", defaultValue = "*") - @QueryParam("searchQuery") String searchQuery + name = "filter", + value = "Filter to get application list", + required = true) + @Valid Filter filter ); @GET @@ -395,8 +385,12 @@ public interface ApplicationManagementAPI { response = ErrorResponse.class) }) Response updateApplicationArtifact( - @ApiParam(name = "id", value = "Id of the application", required = true) @PathParam("uuid") int applicationId, - @ApiParam(name = "uuid", value = "UUID of the application", required = true) @PathParam("uuid") String applicationUUID, + @ApiParam(name = "appType", value = "Type of the application i.e Android, iOS etc", required = true) + @PathParam("appType") String appType, + @ApiParam(name = "id", value = "Id of the application", required = true) + @PathParam("uuid") int applicationId, + @ApiParam(name = "uuid", value = "UUID of the application", required = true) + @PathParam("uuid") String applicationUUID, @Multipart("binaryFile") Attachment binaryFile); @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 0454f2922f4..3786381cfca 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 @@ -56,7 +56,6 @@ import javax.ws.rs.core.Response; @Path("/publisher/applications") public class ApplicationManagementAPIImpl implements ApplicationManagementAPI { - private static final int DEFAULT_LIMIT = 20; private static Log log = LogFactory.getLog(ApplicationManagementAPIImpl.class); @@ -64,28 +63,22 @@ public class ApplicationManagementAPIImpl implements ApplicationManagementAPI { @Override @Consumes("application/json") public Response getApplications( - @QueryParam("offset") int offset, - @QueryParam("limit") int limit, - @QueryParam("query") String searchQuery) { + @Valid Filter filter) { ApplicationManager applicationManager = APIUtil.getApplicationManager(); try { - if (limit == 0) { - limit = DEFAULT_LIMIT; - } - Filter filter = new Filter(); - filter.setOffset(offset); - filter.setLimit(limit); - filter.setSearchQuery(searchQuery); - ApplicationList applications = applicationManager.getApplications(filter); + if (applications.getApplications().isEmpty()) { + return Response.status(Response.Status.NOT_FOUND).entity + ("Couldn't find any application for requested query.").build(); + } return Response.status(Response.Status.OK).entity(applications).build(); } catch (NotFoundException e) { return Response.status(Response.Status.NOT_FOUND).build(); } catch (ApplicationManagementException e) { String msg = "Error occurred while getting the application list for publisher "; log.error(msg, e); - return Response.status(Response.Status.BAD_REQUEST).build(); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build(); } } @@ -100,7 +93,7 @@ public class ApplicationManagementAPIImpl implements ApplicationManagementAPI { Application application = applicationManager.getApplication(appType, appName); if (application == null) { return Response.status(Response.Status.NOT_FOUND).entity - ("Application with UUID " + appType + " not found").build(); + ("Application with application type: " + appType + " not found").build(); } return Response.status(Response.Status.OK).entity(application).build(); @@ -126,32 +119,32 @@ public class ApplicationManagementAPIImpl implements ApplicationManagementAPI { InputStream iconFileStream; InputStream bannerFileStream; List attachments = new ArrayList<>(); + List applicationReleases = new ArrayList<>(); try { if (iconFile == null) { - throw new ApplicationManagementException( - "Icon file is not uploaded for the application release of " + application.getName() + - " of application type " + application.getType()); + log.error("Icon file is not uploaded for the application release of " + application.getName() + + " of application type " + application.getType()); + return Response.status(Response.Status.BAD_REQUEST).build(); } if (bannerFile == null) { - throw new ApplicationManagementException( - "Banner file is not uploaded for the application release of " + application.getName() + - " of application type " + application.getType()); + log.error("Banner file is not uploaded for the application release of " + application.getName() + + " of application type " + application.getType()); + return Response.status(Response.Status.BAD_REQUEST).build(); } if (attachmentList == null || attachmentList.isEmpty()) { - throw new ApplicationManagementException( - "Screenshots are not uploaded for the application release of " + application.getName() + - " of application type " + application.getType()); + log.error("Screenshots are not uploaded for the application release of " + application.getName() + + " of application type " + application.getType()); + return Response.status(Response.Status.BAD_REQUEST).build(); } if (binaryFile == null) { - throw new ApplicationManagementException( - "Binary file is not uploaded for the application release of " + application.getName() + - " of application type " + application.getType()); + log.error("Binary file is not uploaded for the application release of " + application.getName() + + " of application type " + application.getType()); + return Response.status(Response.Status.BAD_REQUEST).build(); } - iconFileStream = iconFile.getDataHandler().getInputStream(); bannerFileStream = bannerFile.getDataHandler().getInputStream(); @@ -159,7 +152,7 @@ public class ApplicationManagementAPIImpl implements ApplicationManagementAPI { attachments.add(screenshot.getDataHandler().getInputStream()); } - applicationRelease = applicationStorageManager.uploadReleaseArtifacts(applicationRelease, + applicationRelease = applicationStorageManager.uploadReleaseArtifact(applicationRelease, application.getType(), binaryFile.getDataHandler().getInputStream()); if (applicationRelease.getAppStoredLoc() == null || applicationRelease.getAppHashValue() == null) { @@ -169,18 +162,19 @@ public class ApplicationManagementAPIImpl implements ApplicationManagementAPI { bannerFileStream, attachments); applicationRelease.setUuid(UUID.randomUUID().toString()); + applicationReleases.add(applicationRelease); + application.setApplicationReleases(applicationReleases); Application createdApplication = applicationManager.createApplication(application); - - if (application != null) { + if (createdApplication != null) { return Response.status(Response.Status.CREATED).entity(createdApplication).build(); } else { - log.error("Given device type is not matched with existing device types"); - return Response.status(Response.Status.BAD_REQUEST).build(); + log.error("Application Creation Failed"); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build(); } } catch (ApplicationManagementException e) { String msg = "Error occurred while creating the application"; log.error(msg, e); - return Response.status(Response.Status.BAD_REQUEST).build(); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build(); } catch (ResourceManagementException e) { log.error("Error occurred while uploading the releases artifacts of the application " + application.getName(), e); @@ -232,16 +226,18 @@ public class ApplicationManagementAPIImpl implements ApplicationManagementAPI { return Response.status(Response.Status.OK) .entity("Successfully uploaded artifacts for the application " + applicationUuid).build(); } catch (NotFoundException e) { - return Response.status(Response.Status.NOT_FOUND).build(); + String msg = "Couldn't found application release details and storage details"; + log.error(msg, e); + return APIUtil.getResponse(e, Response.Status.NOT_FOUND); } catch (ApplicationManagementException e) { - String msg = "Error occurred while creating the application"; + String msg = "Error occurred while updating the application"; log.error(msg, e); - return APIUtil.getResponse(e, Response.Status.BAD_REQUEST); + return APIUtil.getResponse(e, Response.Status.INTERNAL_SERVER_ERROR); } catch (IOException e) { log.error("Exception while trying to read icon, banner files for the application " + applicationUuid); return APIUtil.getResponse(new ApplicationManagementException( "Exception while trying to read icon, " + "banner files for the application " + applicationUuid, e), - Response.Status.BAD_REQUEST); + Response.Status.INTERNAL_SERVER_ERROR); } catch (ResourceManagementException e) { log.error("Error occurred while uploading the image artifacts of the application with the uuid " + applicationUuid, e); @@ -251,29 +247,28 @@ public class ApplicationManagementAPIImpl implements ApplicationManagementAPI { @Override @PUT - @Path("/app-artifacts/{appId}/{uuid}") + @Path("/app-artifacts/{appType}/{appId}/{uuid}") public Response updateApplicationArtifact( + @PathParam("appType") String appType, @PathParam("appId") int applicationId, @PathParam("uuid") String applicationUuuid, @Multipart("binaryFile") Attachment binaryFile) { ApplicationStorageManager applicationStorageManager = APIUtil.getApplicationStorageManager(); ApplicationManager applicationManager = APIUtil.getApplicationManager(); - - ApplicationRelease applicationRelease; - try { - if (binaryFile != null) { - applicationRelease = applicationManager.validateApplicationRelease(applicationUuuid); - applicationRelease = applicationStorageManager.updateReleaseArtifacts(applicationRelease, - binaryFile.getDataHandler().getInputStream()); - applicationManager.updateRelease(applicationId, applicationRelease); - return Response.status(Response.Status.OK) - .entity("Successfully uploaded artifacts for the application " + applicationUuuid).build(); + try { + if (binaryFile == null) { + return Response.status(Response.Status.BAD_REQUEST) + .entity("Uploading artifacts for the application is failed " + applicationUuuid).build(); } - return Response.status(Response.Status.BAD_REQUEST) - .entity("Uploading artifacts for the application is failed " + applicationUuuid).build(); + applicationRelease = applicationManager.validateApplicationRelease(applicationUuuid); + applicationRelease = applicationStorageManager.updateReleaseArtifacts(applicationRelease, appType, + binaryFile.getDataHandler().getInputStream()); + applicationManager.updateRelease(applicationId, applicationRelease); + return Response.status(Response.Status.OK) + .entity("Successfully uploaded artifacts for the application " + applicationUuuid).build(); } catch (IOException e) { log.error("Exception while trying to read icon, banner files for the application " + applicationUuuid); return APIUtil.getResponse(new ApplicationManagementException( @@ -325,21 +320,18 @@ public class ApplicationManagementAPIImpl implements ApplicationManagementAPI { List attachments = new ArrayList<>(); try { - - applicationRelease = applicationManager.validateApplicationRelease(applicationUUID); + Application application = applicationManager.validateApplication(applicationId); if (binaryFile != null) { - applicationRelease = applicationStorageManager.updateReleaseArtifacts(applicationRelease, binaryFile.getDataHandler().getInputStream()); + applicationRelease = applicationStorageManager.updateReleaseArtifacts(applicationRelease, + application.getType(), binaryFile.getDataHandler().getInputStream()); } - if (iconFile != null) { iconFileStream = iconFile.getDataHandler().getInputStream(); } - if (bannerFile != null) { bannerFileStream = bannerFile.getDataHandler().getInputStream(); } - if (!attachmentList.isEmpty()) { for (Attachment screenshot : attachmentList) { attachments.add(screenshot.getDataHandler().getInputStream()); @@ -423,7 +415,7 @@ public class ApplicationManagementAPIImpl implements ApplicationManagementAPI { } catch (ApplicationManagementException e) { String msg = "Error occurred while getting lifecycle state."; log.error(msg, e); - return Response.status(Response.Status.BAD_REQUEST).build(); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build(); } return Response.status(Response.Status.OK).entity(lifecycleState).build(); } @@ -440,7 +432,7 @@ public class ApplicationManagementAPIImpl implements ApplicationManagementAPI { } catch (ApplicationManagementException e) { String msg = "Error occurred while adding lifecycle state."; log.error(msg, e); - return Response.status(Response.Status.BAD_REQUEST).build(); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build(); } return Response.status(Response.Status.CREATED).entity("Lifecycle state added successfully.").build(); } diff --git a/components/application-mgt/org.wso2.carbon.device.application.mgt.store.api/src/main/java/org/wso2/carbon/device/application/mgt/store/api/services/impl/ApplicationManagementAPIImpl.java b/components/application-mgt/org.wso2.carbon.device.application.mgt.store.api/src/main/java/org/wso2/carbon/device/application/mgt/store/api/services/impl/ApplicationManagementAPIImpl.java index c05ac076c14..bc95ae5473a 100644 --- a/components/application-mgt/org.wso2.carbon.device.application.mgt.store.api/src/main/java/org/wso2/carbon/device/application/mgt/store/api/services/impl/ApplicationManagementAPIImpl.java +++ b/components/application-mgt/org.wso2.carbon.device.application.mgt.store.api/src/main/java/org/wso2/carbon/device/application/mgt/store/api/services/impl/ApplicationManagementAPIImpl.java @@ -75,7 +75,7 @@ public class ApplicationManagementAPIImpl implements ApplicationManagementAPI { Filter filter = new Filter(); filter.setOffset(offset); filter.setLimit(limit); - filter.setSearchQuery(searchQuery); + filter.setAppName(searchQuery); ApplicationList applications = applicationManager.getApplications(filter);