Merge pull request #955 from sinthuja/application-mgt

More fixes for the application management.
4.x.x
sinthuja 7 years ago committed by GitHub
commit 7f0fe115bf

@ -34,6 +34,7 @@ import org.wso2.carbon.device.application.mgt.common.exception.ApplicationStorag
import org.wso2.carbon.device.application.mgt.common.services.ApplicationManager; import org.wso2.carbon.device.application.mgt.common.services.ApplicationManager;
import org.wso2.carbon.device.application.mgt.common.services.ApplicationReleaseManager; import org.wso2.carbon.device.application.mgt.common.services.ApplicationReleaseManager;
import org.wso2.carbon.device.application.mgt.common.services.ApplicationStorageManager; import org.wso2.carbon.device.application.mgt.common.services.ApplicationStorageManager;
import org.wso2.carbon.device.application.mgt.core.exception.NotFoundException;
import org.wso2.carbon.device.application.mgt.core.util.Constants; import org.wso2.carbon.device.application.mgt.core.util.Constants;
import java.io.IOException; import java.io.IOException;
@ -81,10 +82,12 @@ public class ApplicationManagementAPIImpl implements ApplicationManagementAPI {
ApplicationList applications = applicationManager.getApplications(filter); ApplicationList applications = applicationManager.getApplications(filter);
return Response.status(Response.Status.OK).entity(applications).build(); return Response.status(Response.Status.OK).entity(applications).build();
} catch (NotFoundException e) {
return Response.status(Response.Status.NOT_FOUND).build();
} catch (ApplicationManagementException e) { } catch (ApplicationManagementException e) {
String msg = "Error occurred while getting the application list"; String msg = "Error occurred while getting the application list";
log.error(msg, e); log.error(msg, e);
return Response.status(Response.Status.NOT_FOUND).build(); return Response.status(Response.Status.BAD_REQUEST).build();
} }
} }
@ -100,6 +103,8 @@ public class ApplicationManagementAPIImpl implements ApplicationManagementAPI {
.entity("Application with UUID " + uuid + " not found").build(); .entity("Application with UUID " + uuid + " not found").build();
} }
return Response.status(Response.Status.OK).entity(application).build(); return Response.status(Response.Status.OK).entity(application).build();
} catch (NotFoundException e) {
return Response.status(Response.Status.NOT_FOUND).build();
} catch (ApplicationManagementException e) { } catch (ApplicationManagementException e) {
log.error("Error occurred while getting application with the uuid " + uuid, e); log.error("Error occurred while getting application with the uuid " + uuid, e);
return APIUtil.getResponse(e, Response.Status.INTERNAL_SERVER_ERROR); return APIUtil.getResponse(e, Response.Status.INTERNAL_SERVER_ERROR);
@ -110,7 +115,7 @@ public class ApplicationManagementAPIImpl implements ApplicationManagementAPI {
@Consumes("application/json") @Consumes("application/json")
@Path("/{uuid}/lifecycle") @Path("/{uuid}/lifecycle")
public Response changeLifecycleState(@PathParam("uuid") String applicationUUID, public Response changeLifecycleState(@PathParam("uuid") String applicationUUID,
@QueryParam("state") String state) { @QueryParam("state") String state) {
ApplicationManager applicationManager = APIUtil.getApplicationManager(); ApplicationManager applicationManager = APIUtil.getApplicationManager();
if (!Arrays.asList(Constants.LIFE_CYCLES).contains(state)) { if (!Arrays.asList(Constants.LIFE_CYCLES).contains(state)) {
@ -122,13 +127,15 @@ public class ApplicationManagementAPIImpl implements ApplicationManagementAPI {
} }
try { try {
applicationManager.changeLifecycle(applicationUUID, state); applicationManager.changeLifecycle(applicationUUID, state);
return Response.status(Response.Status.OK)
.entity("Successfully changed the lifecycle state of the application: " + applicationUUID).build();
} catch (NotFoundException e) {
return Response.status(Response.Status.NOT_FOUND).build();
} catch (ApplicationManagementException e) { } catch (ApplicationManagementException e) {
String msg = "Error occurred while changing the lifecycle of application: " + applicationUUID; String msg = "Error occurred while changing the lifecycle of application: " + applicationUUID;
log.error(msg, e); log.error(msg, e);
return APIUtil.getResponse(e, Response.Status.BAD_REQUEST); return APIUtil.getResponse(e, Response.Status.BAD_REQUEST);
} }
return Response.status(Response.Status.OK)
.entity("Successfully changed the lifecycle state of the application: " + applicationUUID).build();
} }
@GET @GET
@ -151,6 +158,8 @@ public class ApplicationManagementAPIImpl implements ApplicationManagementAPI {
} }
return Response.status(Response.Status.OK).entity(applicationManager.getLifeCycleStates(applicationUUID)) return Response.status(Response.Status.OK).entity(applicationManager.getLifeCycleStates(applicationUUID))
.build(); .build();
} catch (NotFoundException e) {
return Response.status(Response.Status.NOT_FOUND).build();
} catch (ApplicationManagementException e) { } catch (ApplicationManagementException e) {
log.error("Application Management Exception while trying to get next states for the applications with " log.error("Application Management Exception while trying to get next states for the applications with "
+ "the application ID", e); + "the application ID", e);
@ -176,8 +185,8 @@ public class ApplicationManagementAPIImpl implements ApplicationManagementAPI {
@POST @POST
@Path("upload-image-artifacts/{uuid}") @Path("upload-image-artifacts/{uuid}")
public Response uploadApplicationArtifacts(@PathParam("uuid") String applicationUUID, public Response uploadApplicationArtifacts(@PathParam("uuid") String applicationUUID,
@Multipart("icon")Attachment iconFile, @Multipart("banner") Attachment bannerFile, @Multipart @Multipart("icon") Attachment iconFile, @Multipart("banner") Attachment bannerFile, @Multipart
("screenshot") List<Attachment> attachmentList) { ("screenshot") List<Attachment> attachmentList) {
ApplicationStorageManager applicationStorageManager = APIUtil.getApplicationStorageManager(); ApplicationStorageManager applicationStorageManager = APIUtil.getApplicationStorageManager();
try { try {
InputStream iconFileStream; InputStream iconFileStream;
@ -208,6 +217,8 @@ public class ApplicationManagementAPIImpl implements ApplicationManagementAPI {
.uploadImageArtifacts(applicationUUID, iconFileStream, bannerFileStream, attachments); .uploadImageArtifacts(applicationUUID, iconFileStream, bannerFileStream, attachments);
return Response.status(Response.Status.OK) return Response.status(Response.Status.OK)
.entity("Successfully uploaded artifacts for the application " + applicationUUID).build(); .entity("Successfully uploaded artifacts for the application " + applicationUUID).build();
} catch (NotFoundException e) {
return Response.status(Response.Status.NOT_FOUND).build();
} catch (ApplicationManagementException e) { } catch (ApplicationManagementException e) {
String msg = "Error occurred while creating the application"; String msg = "Error occurred while creating the application";
log.error(msg, e); log.error(msg, e);
@ -215,8 +226,8 @@ public class ApplicationManagementAPIImpl implements ApplicationManagementAPI {
} catch (IOException e) { } catch (IOException e) {
log.error("Exception while trying to read icon, banner files for the application " + applicationUUID); log.error("Exception while trying to read icon, banner files for the application " + applicationUUID);
return APIUtil.getResponse(new ApplicationManagementException( return APIUtil.getResponse(new ApplicationManagementException(
"Exception while trying to read icon, " + "banner files for the application " + "Exception while trying to read icon, " + "banner files for the application " +
applicationUUID, e), Response.Status.BAD_REQUEST); applicationUUID, e), Response.Status.BAD_REQUEST);
} }
} }
@ -224,8 +235,8 @@ public class ApplicationManagementAPIImpl implements ApplicationManagementAPI {
@PUT @PUT
@Path("upload-image-artifacts/{uuid}") @Path("upload-image-artifacts/{uuid}")
public Response updateApplicationArtifacts(@PathParam("uuid") String applicationUUID, public Response updateApplicationArtifacts(@PathParam("uuid") String applicationUUID,
@Multipart("icon")Attachment iconFile, @Multipart("banner") Attachment bannerFile, @Multipart @Multipart("icon") Attachment iconFile, @Multipart("banner") Attachment bannerFile, @Multipart
("screenshot") List<Attachment> attachmentList) { ("screenshot") List<Attachment> attachmentList) {
ApplicationStorageManager applicationStorageManager = APIUtil.getApplicationStorageManager(); ApplicationStorageManager applicationStorageManager = APIUtil.getApplicationStorageManager();
try { try {
InputStream iconFileStream = null; InputStream iconFileStream = null;
@ -262,11 +273,11 @@ public class ApplicationManagementAPIImpl implements ApplicationManagementAPI {
@PUT @PUT
@Consumes("application/json") @Consumes("application/json")
public Response editApplication(@Valid Application application) { public Response editApplication(@Valid Application application) {
ApplicationManager applicationManager = APIUtil.getApplicationManager(); ApplicationManager applicationManager = APIUtil.getApplicationManager();
try { try {
application = applicationManager.editApplication(application); application = applicationManager.editApplication(application);
} catch (NotFoundException e) {
return APIUtil.getResponse(e, Response.Status.NOT_FOUND);
} catch (ApplicationManagementException e) { } catch (ApplicationManagementException e) {
String msg = "Error occurred while creating the application"; String msg = "Error occurred while creating the application";
log.error(msg, e); log.error(msg, e);
@ -287,6 +298,8 @@ public class ApplicationManagementAPIImpl implements ApplicationManagementAPI {
applicationManager.deleteApplication(uuid); applicationManager.deleteApplication(uuid);
String responseMsg = "Successfully deleted the application: " + uuid; String responseMsg = "Successfully deleted the application: " + uuid;
return Response.status(Response.Status.OK).entity(responseMsg).build(); return Response.status(Response.Status.OK).entity(responseMsg).build();
} catch (NotFoundException e) {
return APIUtil.getResponse(e, Response.Status.NOT_FOUND);
} catch (ApplicationManagementException e) { } catch (ApplicationManagementException e) {
String msg = "Error occurred while deleting the application: " + uuid; String msg = "Error occurred while deleting the application: " + uuid;
log.error(msg, e); log.error(msg, e);
@ -298,8 +311,8 @@ public class ApplicationManagementAPIImpl implements ApplicationManagementAPI {
@POST @POST
@Path("/release/{uuid}") @Path("/release/{uuid}")
public Response createApplicationRelease(@PathParam("uuid") String applicationUUID, public Response createApplicationRelease(@PathParam("uuid") String applicationUUID,
@Multipart("applicationRelease") ApplicationRelease applicationRelease, @Multipart("applicationRelease") ApplicationRelease applicationRelease,
@Multipart("binaryFile") Attachment binaryFile) { @Multipart("binaryFile") Attachment binaryFile) {
ApplicationReleaseManager applicationReleaseManager = APIUtil.getApplicationReleaseManager(); ApplicationReleaseManager applicationReleaseManager = APIUtil.getApplicationReleaseManager();
ApplicationStorageManager applicationStorageManager = APIUtil.getApplicationStorageManager(); ApplicationStorageManager applicationStorageManager = APIUtil.getApplicationStorageManager();
try { try {
@ -329,7 +342,7 @@ public class ApplicationManagementAPIImpl implements ApplicationManagementAPI {
@Path("/release/{uuid}") @Path("/release/{uuid}")
public Response updateApplicationRelease(@PathParam("uuid") String applicationUUID, @Multipart public Response updateApplicationRelease(@PathParam("uuid") String applicationUUID, @Multipart
("applicationRelease") ApplicationRelease applicationRelease, @Multipart("binaryFile") Attachment ("applicationRelease") ApplicationRelease applicationRelease, @Multipart("binaryFile") Attachment
binaryFile) { binaryFile) {
ApplicationReleaseManager applicationReleaseManager = APIUtil.getApplicationReleaseManager(); ApplicationReleaseManager applicationReleaseManager = APIUtil.getApplicationReleaseManager();
ApplicationStorageManager applicationStorageManager = APIUtil.getApplicationStorageManager(); ApplicationStorageManager applicationStorageManager = APIUtil.getApplicationStorageManager();
try { try {
@ -347,14 +360,16 @@ public class ApplicationManagementAPIImpl implements ApplicationManagementAPI {
.uploadReleaseArtifacts(applicationUUID, version, binaryFile.getDataHandler().getInputStream()); .uploadReleaseArtifacts(applicationUUID, version, binaryFile.getDataHandler().getInputStream());
} }
return Response.status(Response.Status.OK).entity(applicationRelease).build(); return Response.status(Response.Status.OK).entity(applicationRelease).build();
} catch (NotFoundException e) {
return Response.status(Response.Status.NOT_FOUND).build();
} catch (ApplicationManagementException e) { } catch (ApplicationManagementException e) {
log.error("Error while updating the application release of the application with UUID " + applicationUUID); log.error("Error while updating the application release of the application with UUID " + applicationUUID);
return APIUtil.getResponse(e, Response.Status.INTERNAL_SERVER_ERROR); return APIUtil.getResponse(e, Response.Status.INTERNAL_SERVER_ERROR);
} catch (IOException e) { } catch (IOException e) {
log.error("Error while updating the release artifacts of the application with UUID " + applicationUUID); log.error("Error while updating the release artifacts of the application with UUID " + applicationUUID);
return APIUtil.getResponse(new ApplicationManagementException( return APIUtil.getResponse(new ApplicationManagementException(
"Error while updating the release artifacts of the application with UUID " "Error while updating the release artifacts of the application with UUID "
+ applicationUUID), Response.Status.INTERNAL_SERVER_ERROR); + applicationUUID), Response.Status.INTERNAL_SERVER_ERROR);
} }
} }
@ -363,7 +378,7 @@ public class ApplicationManagementAPIImpl implements ApplicationManagementAPI {
@Produces(MediaType.APPLICATION_OCTET_STREAM) @Produces(MediaType.APPLICATION_OCTET_STREAM)
@Path("/release-artifacts/{uuid}/{version}") @Path("/release-artifacts/{uuid}/{version}")
public Response getApplicationReleaseArtifacts(@PathParam("uuid") String applicationUUID, public Response getApplicationReleaseArtifacts(@PathParam("uuid") String applicationUUID,
@PathParam("version") String version) { @PathParam("version") String version) {
ApplicationStorageManager applicationStorageManager = APIUtil.getApplicationStorageManager(); ApplicationStorageManager applicationStorageManager = APIUtil.getApplicationStorageManager();
try { try {
InputStream binaryFile = applicationStorageManager.getReleasedArtifacts(applicationUUID, version); InputStream binaryFile = applicationStorageManager.getReleasedArtifacts(applicationUUID, version);
@ -386,7 +401,7 @@ public class ApplicationManagementAPIImpl implements ApplicationManagementAPI {
@Path("/release/{uuid}") @Path("/release/{uuid}")
@GET @GET
public Response getApplicationReleases(@PathParam("uuid") String applicationUUID, public Response getApplicationReleases(@PathParam("uuid") String applicationUUID,
@QueryParam("version") String version) { @QueryParam("version") String version) {
ApplicationReleaseManager applicationReleaseManager = APIUtil.getApplicationReleaseManager(); ApplicationReleaseManager applicationReleaseManager = APIUtil.getApplicationReleaseManager();
try { try {
if (version == null || version.isEmpty()) { if (version == null || version.isEmpty()) {
@ -396,6 +411,8 @@ public class ApplicationManagementAPIImpl implements ApplicationManagementAPI {
ApplicationRelease applicationRelease = applicationReleaseManager.getRelease(applicationUUID, version); ApplicationRelease applicationRelease = applicationReleaseManager.getRelease(applicationUUID, version);
return Response.status(Response.Status.OK).entity(applicationRelease).build(); return Response.status(Response.Status.OK).entity(applicationRelease).build();
} }
} catch (NotFoundException e) {
return Response.status(Response.Status.NOT_FOUND).build();
} catch (ApplicationManagementException e) { } catch (ApplicationManagementException e) {
log.error("Error while getting all the application releases for the application with the UUID " log.error("Error while getting all the application releases for the application with the UUID "
+ applicationUUID, e); + applicationUUID, e);
@ -407,7 +424,7 @@ public class ApplicationManagementAPIImpl implements ApplicationManagementAPI {
@DELETE @DELETE
@Path("/release/{uuid}") @Path("/release/{uuid}")
public Response deleteApplicationRelease(@PathParam("uuid") String applicationUUID, public Response deleteApplicationRelease(@PathParam("uuid") String applicationUUID,
@QueryParam("version") String version) { @QueryParam("version") String version) {
ApplicationReleaseManager applicationReleaseManager = APIUtil.getApplicationReleaseManager(); ApplicationReleaseManager applicationReleaseManager = APIUtil.getApplicationReleaseManager();
ApplicationStorageManager applicationStorageManager = APIUtil.getApplicationStorageManager(); ApplicationStorageManager applicationStorageManager = APIUtil.getApplicationStorageManager();
try { try {
@ -424,6 +441,8 @@ public class ApplicationManagementAPIImpl implements ApplicationManagementAPI {
.entity("Successfully deleted Application releases for the " + "application with UUID " .entity("Successfully deleted Application releases for the " + "application with UUID "
+ applicationUUID).build(); + applicationUUID).build();
} }
} catch (NotFoundException e) {
return Response.status(Response.Status.NOT_FOUND).build();
} catch (ApplicationManagementException e) { } catch (ApplicationManagementException e) {
log.error("Error while deleting application release with the application UUID " + applicationUUID, e); log.error("Error while deleting application release with the application UUID " + applicationUUID, e);
return APIUtil.getResponse(e, Response.Status.INTERNAL_SERVER_ERROR); return APIUtil.getResponse(e, Response.Status.INTERNAL_SERVER_ERROR);
@ -435,7 +454,7 @@ public class ApplicationManagementAPIImpl implements ApplicationManagementAPI {
@Path("/image-artifacts/{uuid}") @Path("/image-artifacts/{uuid}")
@Produces(MediaType.APPLICATION_OCTET_STREAM) @Produces(MediaType.APPLICATION_OCTET_STREAM)
public Response getApplicationImageArtifacts(@PathParam("uuid") String applicationUUID, public Response getApplicationImageArtifacts(@PathParam("uuid") String applicationUUID,
@QueryParam("name") String name, @QueryParam("count") int count) { @QueryParam("name") String name, @QueryParam("count") int count) {
if (name == null || name.isEmpty()) { if (name == null || name.isEmpty()) {
return Response.status(Response.Status.BAD_REQUEST).entity("Name should not be null. Name is mandatory to" return Response.status(Response.Status.BAD_REQUEST).entity("Name should not be null. Name is mandatory to"
+ " retrieve the particular image artifact of the release").build(); + " retrieve the particular image artifact of the release").build();
@ -466,6 +485,8 @@ public class ApplicationManagementAPIImpl implements ApplicationManagementAPI {
return Response.status(Response.Status.OK) return Response.status(Response.Status.OK)
.entity("Successfully changed the default version for the " + "release channel " + channel .entity("Successfully changed the default version for the " + "release channel " + channel
+ " for the application UUID " + applicationUUID).build(); + " for the application UUID " + applicationUUID).build();
} catch (NotFoundException e) {
return Response.status(Response.Status.NOT_FOUND).build();
} catch (ApplicationManagementException e) { } catch (ApplicationManagementException e) {
log.error("Application Release Management Exception while changing the default release for the release " log.error("Application Release Management Exception while changing the default release for the release "
+ "channel " + channel + " for the application with UUID " + applicationUUID + " for the version " + "channel " + channel + " for the application with UUID " + applicationUUID + " for the version "

@ -213,7 +213,7 @@ public class Application {
this.user = user; this.user = user;
} }
public void setScreenShotCount (int screenShotCount) { public void setScreenShotCount(int screenShotCount) {
this.screenShotCount = screenShotCount; this.screenShotCount = screenShotCount;
} }
@ -223,7 +223,11 @@ public class Application {
@Override @Override
public String toString() { public String toString() {
return "UUID : " + uuid + "\tName : " + name + "\tShort Description : " String app = "UUID : " + uuid + "\tName : " + name + "\tShort Description : "
+ shortDescription + "\tLifecycle State : " + currentLifecycle.getLifecycleState(); + shortDescription;
if (currentLifecycle != null) {
app += "\tLifecycle State : " + currentLifecycle.getLifecycleState();
}
return app;
} }
} }

@ -18,8 +18,6 @@
*/ */
package org.wso2.carbon.device.application.mgt.common; package org.wso2.carbon.device.application.mgt.common;
import java.util.List;
/** /**
* Filter represents a criteria that can be used for searching applications. * Filter represents a criteria that can be used for searching applications.
*/ */
@ -36,12 +34,10 @@ public class Filter {
private int offset; private int offset;
private String filter;
private List<FilterProperty> filterProperties;
private String searchQuery; private String searchQuery;
private boolean isFullMatch;
private SortingOrder sortingOrder; private SortingOrder sortingOrder;
private String sortBy; private String sortBy;
@ -64,22 +60,6 @@ public class Filter {
this.offset = offset; this.offset = offset;
} }
public String getFilter() {
return filter;
}
public void setFilter(String filter) {
this.filter = filter;
}
public List<FilterProperty> getFilterProperties() {
return filterProperties;
}
public void setFilterProperties(List<FilterProperty> filterProperties) {
this.filterProperties = filterProperties;
}
public String getSearchQuery() { public String getSearchQuery() {
return searchQuery; return searchQuery;
} }
@ -112,11 +92,16 @@ public class Filter {
this.userName = userName; this.userName = userName;
} }
public boolean isFullMatch() {
return isFullMatch;
}
public void setFullMatch(boolean fullMatch) {
isFullMatch = fullMatch;
}
public boolean hasCondition() { public boolean hasCondition() {
if (filterProperties != null || searchQuery != null || filter != null) { return searchQuery != null;
return true;
}
return false;
} }
} }

@ -34,7 +34,9 @@ public interface SubscriptionManager {
* @return DeviceList which the application has been installed * @return DeviceList which the application has been installed
* @throws ApplicationManagementException Application Management Exception * @throws ApplicationManagementException Application Management Exception
*/ */
List<DeviceIdentifier> installApplicationForDevices(String applicationUUID, List<DeviceIdentifier> deviceList) throws ApplicationManagementException; List<DeviceIdentifier> installApplicationForDevices(String applicationUUID,
List<DeviceIdentifier> deviceList)
throws ApplicationManagementException;
/** /**
* To install an application to given list of users. * To install an application to given list of users.
@ -43,7 +45,9 @@ public interface SubscriptionManager {
* @return User list which the application has been installed * @return User list which the application has been installed
* @throws ApplicationManagementException Application Management Exception * @throws ApplicationManagementException Application Management Exception
*/ */
List<String> installApplicationForUsers(String applicationUUID, List<String> userList) throws ApplicationManagementException; List<String> installApplicationForUsers(String applicationUUID,
List<String> userList)
throws ApplicationManagementException;
/** /**
* To install an application to given list of users. * To install an application to given list of users.
@ -52,7 +56,9 @@ public interface SubscriptionManager {
* @return Role list which the application has been installed * @return Role list which the application has been installed
* @throws ApplicationManagementException Application Management Exception * @throws ApplicationManagementException Application Management Exception
*/ */
List<String> installApplicationForRoles(String applicationUUID, List<String> roleList) throws ApplicationManagementException; List<String> installApplicationForRoles(String applicationUUID,
List<String> roleList)
throws ApplicationManagementException;
/** /**
* To uninstall an application from a given list of devices. * To uninstall an application from a given list of devices.
@ -61,6 +67,8 @@ public interface SubscriptionManager {
* @return DeviceList which the application has been uninstalled * @return DeviceList which the application has been uninstalled
* @throws ApplicationManagementException Application Management Exception * @throws ApplicationManagementException Application Management Exception
*/ */
List<DeviceIdentifier> uninstallApplication(String applicationUUID, List<DeviceIdentifier> deviceList) throws ApplicationManagementException; List<DeviceIdentifier> uninstallApplication(String applicationUUID,
List<DeviceIdentifier> deviceList)
throws ApplicationManagementException;
} }

@ -21,8 +21,6 @@ package org.wso2.carbon.device.application.mgt.common.services;
import org.wso2.carbon.device.application.mgt.common.Visibility; import org.wso2.carbon.device.application.mgt.common.Visibility;
import org.wso2.carbon.device.application.mgt.common.exception.VisibilityManagementException; import org.wso2.carbon.device.application.mgt.common.exception.VisibilityManagementException;
import java.sql.Connection;
/** /**
* This interface manages all the operations related with Application Visibility. * This interface manages all the operations related with Application Visibility.
* This will be invoking the necessary backend calls for the data bases layer * This will be invoking the necessary backend calls for the data bases layer

@ -62,7 +62,7 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic
PreparedStatement stmt = null; PreparedStatement stmt = null;
ResultSet rs = null; ResultSet rs = null;
String sql = ""; String sql = "";
String generatedColumns[] = { "ID" }; String generatedColumns[] = {"ID"};
boolean isBatchExecutionSupported = ConnectionManagerUtil.isBatchQuerySupported(); boolean isBatchExecutionSupported = ConnectionManagerUtil.isBatchQuerySupported();
int index = 0; int index = 0;
try { try {
@ -121,7 +121,6 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic
ApplicationList applicationList = new ApplicationList(); ApplicationList applicationList = new ApplicationList();
List<Application> applications = new ArrayList<>(); List<Application> applications = new ArrayList<>();
Pagination pagination = new Pagination(); Pagination pagination = new Pagination();
int index = 0;
if (filter == null) { if (filter == null) {
throw new ApplicationManagementDAOException("Filter need to be instantiated"); throw new ApplicationManagementDAOException("Filter need to be instantiated");
@ -185,13 +184,13 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic
* @throws SQLException SQL Exception * @throws SQLException SQL Exception
*/ */
protected PreparedStatement generateGetApplicationsStatement(Filter filter, Connection conn, protected PreparedStatement generateGetApplicationsStatement(Filter filter, Connection conn,
int tenantId) throws SQLException { int tenantId) throws SQLException {
int index = 0; int index = 0;
String sql = "SELECT APP.*, APL.NAME AS APL_NAME, APL.IDENTIFIER AS APL_IDENTIFIER, CAT.ID AS CAT_ID, " String sql = "SELECT APP.*, APL.NAME AS APL_NAME, APL.IDENTIFIER AS APL_IDENTIFIER, CAT.ID AS CAT_ID, "
+ "CAT.NAME AS CAT_NAME, LS.NAME AS LS_NAME, LS.IDENTIFIER AS LS_IDENTIFIER, " + "CAT.NAME AS CAT_NAME, LS.NAME AS LS_NAME, LS.IDENTIFIER AS LS_IDENTIFIER, "
+ "LS.DESCRIPTION AS LS_DESCRIPTION " + "FROM APPM_APPLICATION APP " + "INNER JOIN APPM_PLATFORM APL " + "LS.DESCRIPTION AS LS_DESCRIPTION FROM APPM_APPLICATION APP INNER JOIN APPM_PLATFORM APL "
+ "ON APP.PLATFORM_ID = APL.ID " + "INNER JOIN APPM_APPLICATION_CATEGORY CAT " + "ON APP.PLATFORM_ID = APL.ID INNER JOIN APPM_APPLICATION_CATEGORY CAT "
+ "ON APP.APPLICATION_CATEGORY_ID = CAT.ID " + "INNER JOIN APPM_LIFECYCLE_STATE LS " + "ON APP.APPLICATION_CATEGORY_ID = CAT.ID INNER JOIN APPM_LIFECYCLE_STATE LS "
+ "ON APP.LIFECYCLE_STATE_ID = LS.ID WHERE APP.TENANT_ID = ? "; + "ON APP.LIFECYCLE_STATE_ID = LS.ID WHERE APP.TENANT_ID = ? ";
String userName = filter.getUserName(); String userName = filter.getUserName();
@ -199,7 +198,12 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic
sql += " AND APP.CREATED_BY = ? "; sql += " AND APP.CREATED_BY = ? ";
} }
if (filter.getSearchQuery() != null && !filter.getSearchQuery().isEmpty()) { if (filter.getSearchQuery() != null && !filter.getSearchQuery().isEmpty()) {
sql += "AND APP.NAME LIKE ? "; sql += "AND LOWER (APP.NAME) ";
if (filter.isFullMatch()) {
sql += "= ?";
} else {
sql += "LIKE ?";
}
} }
sql += "LIMIT ? OFFSET ?"; sql += "LIMIT ? OFFSET ?";
@ -211,7 +215,11 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic
stmt.setString(++index, userName); stmt.setString(++index, userName);
} }
if (filter.getSearchQuery() != null && !filter.getSearchQuery().isEmpty()) { if (filter.getSearchQuery() != null && !filter.getSearchQuery().isEmpty()) {
stmt.setString(++index, "%" + filter.getSearchQuery() + "%"); if (filter.isFullMatch()) {
stmt.setString(++index, filter.getSearchQuery().toLowerCase());
} else {
stmt.setString(++index, "%" + filter.getSearchQuery().toLowerCase() + "%");
}
} }
stmt.setInt(++index, filter.getLimit()); stmt.setInt(++index, filter.getLimit());
@ -245,14 +253,14 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic
sql += "INNER JOIN APPM_APPLICATION_CATEGORY AS CAT ON APP.APPLICATION_CATEGORY_ID = CAT.ID "; sql += "INNER JOIN APPM_APPLICATION_CATEGORY AS CAT ON APP.APPLICATION_CATEGORY_ID = CAT.ID ";
if (filter.getSearchQuery() != null && !filter.getSearchQuery().isEmpty()) { if (filter.getSearchQuery() != null && !filter.getSearchQuery().isEmpty()) {
sql += "WHERE APP.NAME LIKE ? "; sql += "WHERE LOWER (APP.NAME) LIKE ? ";
} }
sql += ";"; sql += ";";
stmt = conn.prepareStatement(sql); stmt = conn.prepareStatement(sql);
int index = 0; int index = 0;
if (filter.getSearchQuery() != null && !filter.getSearchQuery().isEmpty()) { if (filter.getSearchQuery() != null && !filter.getSearchQuery().isEmpty()) {
stmt.setString(++index, "%" + filter.getSearchQuery() + "%"); stmt.setString(++index, "%" + filter.getSearchQuery().toLowerCase() + "%");
} }
rs = stmt.executeQuery(); rs = stmt.executeQuery();
if (rs.next()) { if (rs.next()) {
@ -287,11 +295,11 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic
+ "LS.DESCRIPTION AS LS_DESCRIPTION " + "LS.DESCRIPTION AS LS_DESCRIPTION "
+ "FROM APPM_APPLICATION APP " + "FROM APPM_APPLICATION APP "
+ "INNER JOIN APPM_PLATFORM APL " + "INNER JOIN APPM_PLATFORM APL "
+ "ON APP.PLATFORM_ID = APL.ID " + "ON APP.PLATFORM_ID = APL.ID "
+ "INNER JOIN APPM_APPLICATION_CATEGORY CAT " + "INNER JOIN APPM_APPLICATION_CATEGORY CAT "
+ "ON APP.APPLICATION_CATEGORY_ID = CAT.ID " + "ON APP.APPLICATION_CATEGORY_ID = CAT.ID "
+ "INNER JOIN APPM_LIFECYCLE_STATE LS " + "INNER JOIN APPM_LIFECYCLE_STATE LS "
+ " ON APP.LIFECYCLE_STATE_ID = LS.ID " + " ON APP.LIFECYCLE_STATE_ID = LS.ID "
+ "WHERE UUID = ? AND APP.TENANT_ID = ? "; + "WHERE UUID = ? AND APP.TENANT_ID = ? ";
stmt = conn.prepareStatement(sql); stmt = conn.prepareStatement(sql);
@ -521,7 +529,7 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic
* *
* @param application Application in which the properties and tags need to be inserted * @param application Application in which the properties and tags need to be inserted
*/ */
private void insertApplicationTagsAndProperties (Application application, PreparedStatement stmt, Connection private void insertApplicationTagsAndProperties(Application application, PreparedStatement stmt, Connection
conn, boolean isBatchExecutionSupported) throws SQLException { conn, boolean isBatchExecutionSupported) throws SQLException {
String sql; String sql;
if (application.getTags() != null && application.getTags().size() > 0) { if (application.getTags() != null && application.getTags().size() > 0) {
@ -632,7 +640,7 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic
PreparedStatement stmt = null; PreparedStatement stmt = null;
ResultSet rs = null; ResultSet rs = null;
String sql; String sql;
int id = 0; int id = -1;
try { try {
conn = this.getDBConnection(); conn = this.getDBConnection();
sql = "SELECT ID FROM APPM_APPLICATION WHERE UUID = ? AND TENANT_ID = ?"; sql = "SELECT ID FROM APPM_APPLICATION WHERE UUID = ? AND TENANT_ID = ?";

@ -33,7 +33,7 @@ public class OracleApplicationDAOImpl extends GenericApplicationDAOImpl {
@Override @Override
protected PreparedStatement generateGetApplicationsStatement(Filter filter, Connection conn, protected PreparedStatement generateGetApplicationsStatement(Filter filter, Connection conn,
int tenantId) throws SQLException { int tenantId) throws SQLException {
int index = 0; int index = 0;
String sql = "SELECT APP.*, APL.NAME AS APL_NAME, APL.IDENTIFIER AS APL_IDENTIFIER, CAT.ID AS CAT_ID, " String sql = "SELECT APP.*, APL.NAME AS APL_NAME, APL.IDENTIFIER AS APL_IDENTIFIER, CAT.ID AS CAT_ID, "
+ "CAT.NAME AS CAT_NAME, LS.NAME AS LS_NAME, LS.IDENTIFIER AS LS_IDENTIFIER, " + "CAT.NAME AS CAT_NAME, LS.NAME AS LS_NAME, LS.IDENTIFIER AS LS_IDENTIFIER, "
@ -47,11 +47,14 @@ public class OracleApplicationDAOImpl extends GenericApplicationDAOImpl {
sql += " AND APP.CREATED_BY = ? "; sql += " AND APP.CREATED_BY = ? ";
} }
if (filter.getSearchQuery() != null && !filter.getSearchQuery().isEmpty()) { if (filter.getSearchQuery() != null && !filter.getSearchQuery().isEmpty()) {
sql += "AND APP.NAME LIKE ? "; sql += "AND LOWER (APP.NAME) ";
if (filter.isFullMatch()) {
sql += "= ?";
} else {
sql += "LIKE ?";
}
} }
sql += " ORDER BY APP.ID OFFSET ? ROWS FETCH NEXT ? ROWS ONLY"; sql += " ORDER BY APP.ID OFFSET ? ROWS FETCH NEXT ? ROWS ONLY";
PreparedStatement stmt = conn.prepareStatement(sql); PreparedStatement stmt = conn.prepareStatement(sql);
stmt.setInt(++index, tenantId); stmt.setInt(++index, tenantId);
@ -59,7 +62,11 @@ public class OracleApplicationDAOImpl extends GenericApplicationDAOImpl {
stmt.setString(++index, userName); stmt.setString(++index, userName);
} }
if (filter.getSearchQuery() != null && !filter.getSearchQuery().isEmpty()) { if (filter.getSearchQuery() != null && !filter.getSearchQuery().isEmpty()) {
stmt.setString(++index, "%" + filter.getSearchQuery() + "%"); if (filter.isFullMatch()) {
stmt.setString(++index, filter.getSearchQuery().toLowerCase());
} else {
stmt.setString(++index, "%" + filter.getSearchQuery().toLowerCase() + "%");
}
} }
stmt.setInt(++index, filter.getOffset()); stmt.setInt(++index, filter.getOffset());
stmt.setInt(++index, filter.getLimit()); stmt.setInt(++index, filter.getLimit());

@ -121,33 +121,37 @@ public class ApplicationManagerImpl implements ApplicationManager {
throw new ApplicationManagementException("User " + userName + " does not have permissions to edit the " throw new ApplicationManagementException("User " + userName + " does not have permissions to edit the "
+ "application with the UUID " + application.getUuid()); + "application with the UUID " + application.getUuid());
} }
try { if (this.getApplication(application.getUuid()) != null) {
if (application.getPlatform() != null && application.getPlatform().getIdentifier() != null) { try {
Platform platform = DataHolder.getInstance().getPlatformManager() if (application.getPlatform() != null && application.getPlatform().getIdentifier() != null) {
.getPlatform(tenantId, application.getPlatform().getIdentifier()); Platform platform = DataHolder.getInstance().getPlatformManager()
if (platform == null) { .getPlatform(tenantId, application.getPlatform().getIdentifier());
throw new NotFoundException( if (platform == null) {
"Platform specified by identifier " + application.getPlatform().getIdentifier() throw new NotFoundException(
+ " is not found. Please give a valid platform identifier."); "Platform specified by identifier " + application.getPlatform().getIdentifier()
+ " is not found. Please give a valid platform identifier.");
}
application.setPlatform(platform);
ConnectionManagerUtil.beginDBTransaction();
ApplicationDAO applicationDAO = DAOFactory.getApplicationDAO();
application.setModifiedAt(new Date());
Application modifiedApplication = applicationDAO.editApplication(application, tenantId);
Visibility visibility = DataHolder.getInstance().getVisibilityManager().put(application.getId(),
application.getVisibility());
modifiedApplication.setVisibility(visibility);
ConnectionManagerUtil.commitDBTransaction();
return modifiedApplication;
} else {
throw new NotFoundException("Platform information not available with the application!");
} }
application.setPlatform(platform); } catch (ApplicationManagementDAOException e) {
ConnectionManagerUtil.beginDBTransaction(); ConnectionManagerUtil.rollbackDBTransaction();
ApplicationDAO applicationDAO = DAOFactory.getApplicationDAO(); throw e;
application.setModifiedAt(new Date()); } finally {
Application modifiedApplication = applicationDAO.editApplication(application, tenantId); ConnectionManagerUtil.closeDBConnection();
Visibility visibility = DataHolder.getInstance().getVisibilityManager().put(application.getId(),
application.getVisibility());
modifiedApplication.setVisibility(visibility);
ConnectionManagerUtil.commitDBTransaction();
return modifiedApplication;
} else {
throw new NotFoundException("Platform information not available with the application!");
} }
} catch (ApplicationManagementDAOException e) { } else {
ConnectionManagerUtil.rollbackDBTransaction(); throw new NotFoundException("No applications found with application UUID - " + application.getUuid());
throw e;
} finally {
ConnectionManagerUtil.closeDBConnection();
} }
} }
@ -163,10 +167,12 @@ public class ApplicationManagerImpl implements ApplicationManager {
ApplicationDAO applicationDAO = DAOFactory.getApplicationDAO(); ApplicationDAO applicationDAO = DAOFactory.getApplicationDAO();
ConnectionManagerUtil.beginDBTransaction(); ConnectionManagerUtil.beginDBTransaction();
int appId = applicationDAO.getApplicationId(uuid, tenantId); int appId = applicationDAO.getApplicationId(uuid, tenantId);
applicationDAO.deleteTags(appId); if (appId != -1) {
applicationDAO.deleteProperties(appId); applicationDAO.deleteTags(appId);
DataHolder.getInstance().getVisibilityManager().remove(appId); applicationDAO.deleteProperties(appId);
applicationDAO.deleteApplication(uuid, tenantId); DataHolder.getInstance().getVisibilityManager().remove(appId);
applicationDAO.deleteApplication(uuid, tenantId);
}
ConnectionManagerUtil.commitDBTransaction(); ConnectionManagerUtil.commitDBTransaction();
} catch (ApplicationManagementDAOException e) { } catch (ApplicationManagementDAOException e) {
ConnectionManagerUtil.rollbackDBTransaction(); ConnectionManagerUtil.rollbackDBTransaction();
@ -389,5 +395,26 @@ public class ApplicationManagerImpl implements ApplicationManager {
if (application.getPlatform() == null || application.getPlatform().getIdentifier() == null) { if (application.getPlatform() == null || application.getPlatform().getIdentifier() == null) {
throw new ValidationException("Platform identifier cannot be empty"); throw new ValidationException("Platform identifier cannot be empty");
} }
try {
validateApplicationExistence(application);
} catch (ApplicationManagementException e) {
throw new ValidationException("Error occured while validating whether there is already an application " +
"registered with same name.", e);
}
}
private void validateApplicationExistence(Application application) throws ApplicationManagementException {
Filter filter = new Filter();
filter.setFullMatch(true);
filter.setSearchQuery(application.getName().trim());
filter.setOffset(0);
filter.setLimit(1);
ApplicationList applicationList = getApplications(filter);
if (applicationList != null && applicationList.getApplications() != null &&
!applicationList.getApplications().isEmpty()) {
throw new ValidationException("Already an application registered with same name - "
+ applicationList.getApplications().get(0).getName());
}
} }
} }

@ -27,6 +27,7 @@ import org.wso2.carbon.device.application.mgt.common.exception.ApplicationManage
import org.wso2.carbon.device.application.mgt.common.services.ApplicationReleaseManager; import org.wso2.carbon.device.application.mgt.common.services.ApplicationReleaseManager;
import org.wso2.carbon.device.application.mgt.core.dao.common.DAOFactory; import org.wso2.carbon.device.application.mgt.core.dao.common.DAOFactory;
import org.wso2.carbon.device.application.mgt.core.exception.ApplicationManagementDAOException; import org.wso2.carbon.device.application.mgt.core.exception.ApplicationManagementDAOException;
import org.wso2.carbon.device.application.mgt.core.exception.NotFoundException;
import org.wso2.carbon.device.application.mgt.core.internal.DataHolder; import org.wso2.carbon.device.application.mgt.core.internal.DataHolder;
import org.wso2.carbon.device.application.mgt.core.util.ConnectionManagerUtil; import org.wso2.carbon.device.application.mgt.core.util.ConnectionManagerUtil;
@ -195,7 +196,7 @@ public class ApplicationReleaseManagerImpl implements ApplicationReleaseManager
} }
Application application = DataHolder.getInstance().getApplicationManager().getApplication(applicationUuid); Application application = DataHolder.getInstance().getApplicationManager().getApplication(applicationUuid);
if (application == null) { if (application == null) {
throw new ApplicationManagementException( throw new NotFoundException(
"Application with UUID " + applicationUuid + " does not exist."); "Application with UUID " + applicationUuid + " does not exist.");
} }
return application; return application;

Loading…
Cancel
Save