mirror of
https://repository.entgra.net/community/device-mgt-core.git
synced 2025-10-06 02:01:45 +00:00
Merge pull request #898 from Megala21/appm_new
Application Management Fixes
This commit is contained in:
commit
ba5f1e6c07
@ -52,7 +52,8 @@ import java.util.List;
|
|||||||
}
|
}
|
||||||
),
|
),
|
||||||
tags = {
|
tags = {
|
||||||
@Tag(name = "application_management", description = "Application Management related APIs")
|
@Tag(name = "application_management, device_management", description = "Application Management related "
|
||||||
|
+ "APIs")
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
@Scopes(
|
@Scopes(
|
||||||
@ -69,6 +70,25 @@ import java.util.List;
|
|||||||
key = "perm:application:create",
|
key = "perm:application:create",
|
||||||
permissions = {"/device-mgt/application/create"}
|
permissions = {"/device-mgt/application/create"}
|
||||||
),
|
),
|
||||||
|
@Scope(
|
||||||
|
name = "Update an Application",
|
||||||
|
description = "Update an application",
|
||||||
|
key = "perm:application:update",
|
||||||
|
permissions = {"/device-mgt/application/update"}
|
||||||
|
),
|
||||||
|
@Scope(
|
||||||
|
name = "Create an Application",
|
||||||
|
description = "Create an application",
|
||||||
|
key = "perm:application-mgt:login",
|
||||||
|
permissions = {"/device-mgt/application-mgt/login"}
|
||||||
|
),
|
||||||
|
@Scope(
|
||||||
|
name = "Delete an Application",
|
||||||
|
description = "Delete an application",
|
||||||
|
key = "perm:application:delete",
|
||||||
|
permissions = {"/device-mgt/application/delete"}
|
||||||
|
)
|
||||||
|
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
@Path("/applications")
|
@Path("/applications")
|
||||||
@ -132,6 +152,80 @@ public interface ApplicationManagementAPI {
|
|||||||
@QueryParam("searchQuery") String searchQuery
|
@QueryParam("searchQuery") String searchQuery
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@GET
|
||||||
|
@Path("/{uuid}")
|
||||||
|
@Produces(MediaType.APPLICATION_JSON)
|
||||||
|
@Consumes(MediaType.APPLICATION_JSON)
|
||||||
|
@ApiOperation(
|
||||||
|
consumes = MediaType.APPLICATION_JSON,
|
||||||
|
produces = MediaType.APPLICATION_JSON,
|
||||||
|
httpMethod = "GET",
|
||||||
|
value = "get the application specified by the UUID",
|
||||||
|
notes = "This will get the application identified by the UUID, if exists",
|
||||||
|
tags = "Application Management",
|
||||||
|
extensions = {
|
||||||
|
@Extension(properties = {
|
||||||
|
@ExtensionProperty(name = SCOPE, value = "perm:application:get")
|
||||||
|
})
|
||||||
|
}
|
||||||
|
)
|
||||||
|
@ApiResponses(
|
||||||
|
value = {
|
||||||
|
@ApiResponse(
|
||||||
|
code = 200,
|
||||||
|
message = "OK. \n Successfully retrieved relevant application.",
|
||||||
|
response = Application.class),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 404,
|
||||||
|
message = "Application not found"),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 500,
|
||||||
|
message = "Internal Server Error. \n Error occurred while getting relevant application.",
|
||||||
|
response = ErrorResponse.class)
|
||||||
|
})
|
||||||
|
Response getApplication(
|
||||||
|
@ApiParam(
|
||||||
|
name = "uuid",
|
||||||
|
value = "UUID of the application",
|
||||||
|
required = true)
|
||||||
|
@PathParam("uuid") String uuid
|
||||||
|
);
|
||||||
|
|
||||||
|
@PUT
|
||||||
|
@Produces(MediaType.APPLICATION_JSON)
|
||||||
|
@Consumes(MediaType.APPLICATION_JSON)
|
||||||
|
@ApiOperation(
|
||||||
|
consumes = MediaType.APPLICATION_JSON,
|
||||||
|
produces = MediaType.APPLICATION_JSON,
|
||||||
|
httpMethod = "PUT",
|
||||||
|
value = "Edit an application",
|
||||||
|
notes = "This will edit the new application",
|
||||||
|
tags = "Application Management",
|
||||||
|
extensions = {
|
||||||
|
@Extension(properties = {
|
||||||
|
@ExtensionProperty(name = SCOPE, value = "perm:application:update")
|
||||||
|
})
|
||||||
|
}
|
||||||
|
)
|
||||||
|
@ApiResponses(
|
||||||
|
value = {
|
||||||
|
@ApiResponse(
|
||||||
|
code = 201,
|
||||||
|
message = "OK. \n Successfully edited the application.",
|
||||||
|
response = Application.class),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 500,
|
||||||
|
message = "Internal Server Error. \n Error occurred while editing the application.",
|
||||||
|
response = ErrorResponse.class)
|
||||||
|
})
|
||||||
|
Response editApplication(
|
||||||
|
@ApiParam(
|
||||||
|
name = "application",
|
||||||
|
value = "The application that need to be edited.",
|
||||||
|
required = true)
|
||||||
|
@Valid Application application);
|
||||||
|
|
||||||
|
|
||||||
@POST
|
@POST
|
||||||
@Produces(MediaType.APPLICATION_JSON)
|
@Produces(MediaType.APPLICATION_JSON)
|
||||||
@Consumes(MediaType.APPLICATION_JSON)
|
@Consumes(MediaType.APPLICATION_JSON)
|
||||||
@ -157,7 +251,8 @@ public interface ApplicationManagementAPI {
|
|||||||
@ApiResponse(
|
@ApiResponse(
|
||||||
code = 304,
|
code = 304,
|
||||||
message = "Not Modified. \n " +
|
message = "Not Modified. \n " +
|
||||||
"Empty body because the client already has the latest version of the requested resource."),
|
"Empty body because the client already has the latest version of the requested "
|
||||||
|
+ "resource."),
|
||||||
@ApiResponse(
|
@ApiResponse(
|
||||||
code = 500,
|
code = 500,
|
||||||
message = "Internal Server Error. \n Error occurred while getting the application list.",
|
message = "Internal Server Error. \n Error occurred while getting the application list.",
|
||||||
@ -179,7 +274,12 @@ public interface ApplicationManagementAPI {
|
|||||||
httpMethod = "PUT",
|
httpMethod = "PUT",
|
||||||
value = "Change the life cycle state of the application",
|
value = "Change the life cycle state of the application",
|
||||||
notes = "This will change the life-cycle state of the application",
|
notes = "This will change the life-cycle state of the application",
|
||||||
tags = "Application Management"
|
tags = "Application Management",
|
||||||
|
extensions = {
|
||||||
|
@Extension(properties = {
|
||||||
|
@ExtensionProperty(name = SCOPE, value = "perm:application-mgt:login")
|
||||||
|
})
|
||||||
|
}
|
||||||
)
|
)
|
||||||
@ApiResponses(
|
@ApiResponses(
|
||||||
value = {
|
value = {
|
||||||
@ -213,7 +313,12 @@ public interface ApplicationManagementAPI {
|
|||||||
value = "Change the life cycle state of the application",
|
value = "Change the life cycle state of the application",
|
||||||
notes = "This will retrieve the next life cycle states of the application based on the user and the "
|
notes = "This will retrieve the next life cycle states of the application based on the user and the "
|
||||||
+ "current state",
|
+ "current state",
|
||||||
tags = "Application Management"
|
tags = "Application Management",
|
||||||
|
extensions = {
|
||||||
|
@Extension(properties = {
|
||||||
|
@ExtensionProperty(name = SCOPE, value = "perm:application-mgt:login")
|
||||||
|
})
|
||||||
|
}
|
||||||
)
|
)
|
||||||
@ApiResponses(
|
@ApiResponses(
|
||||||
value = {
|
value = {
|
||||||
@ -226,10 +331,44 @@ public interface ApplicationManagementAPI {
|
|||||||
message = "Internal Server Error. \n Error occurred while getting the life-cycle states.",
|
message = "Internal Server Error. \n Error occurred while getting the life-cycle states.",
|
||||||
response = ErrorResponse.class)
|
response = ErrorResponse.class)
|
||||||
})
|
})
|
||||||
Response getLifeCycleStates(
|
Response getNextLifeCycleStates(
|
||||||
@ApiParam(
|
@ApiParam(
|
||||||
name = "UUID",
|
name = "UUID",
|
||||||
value = "Unique identifier of the Application",
|
value = "Unique identifier of the Application",
|
||||||
required = true)
|
required = true)
|
||||||
@PathParam("uuid") String applicationUUID);
|
@PathParam("uuid") String applicationUUID);
|
||||||
|
|
||||||
|
@DELETE
|
||||||
|
@Consumes("application/json")
|
||||||
|
@Path("/{appuuid}")
|
||||||
|
@ApiOperation(
|
||||||
|
consumes = MediaType.APPLICATION_JSON,
|
||||||
|
produces = MediaType.APPLICATION_JSON,
|
||||||
|
httpMethod = "DELETE",
|
||||||
|
value = "Delete the application with the given UUID",
|
||||||
|
notes = "This will delete the application with the given UUID",
|
||||||
|
tags = "Application Management",
|
||||||
|
extensions = {
|
||||||
|
@Extension(properties = {
|
||||||
|
@ExtensionProperty(name = SCOPE, value = "perm:application:delete")
|
||||||
|
})
|
||||||
|
}
|
||||||
|
)
|
||||||
|
@ApiResponses(
|
||||||
|
value = {
|
||||||
|
@ApiResponse(
|
||||||
|
code = 200,
|
||||||
|
message = "OK. \n Successfully deleted the application identified by UUID.",
|
||||||
|
response = List.class),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 500,
|
||||||
|
message = "Internal Server Error. \n Error occurred while deleteing the application.",
|
||||||
|
response = ErrorResponse.class)
|
||||||
|
})
|
||||||
|
Response deleteApplication(
|
||||||
|
@ApiParam(
|
||||||
|
name = "UUID",
|
||||||
|
value = "Unique identifier of the Application",
|
||||||
|
required = true)
|
||||||
|
@PathParam("appuuid") String applicationUUID);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -20,27 +20,36 @@ package org.wso2.carbon.device.application.mgt.api.services.impl;
|
|||||||
|
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
import org.wso2.carbon.device.application.mgt.api.APIUtil;
|
||||||
import org.wso2.carbon.device.application.mgt.api.services.ApplicationManagementAPI;
|
import org.wso2.carbon.device.application.mgt.api.services.ApplicationManagementAPI;
|
||||||
import org.wso2.carbon.device.application.mgt.common.*;
|
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.Filter;
|
||||||
|
import org.wso2.carbon.device.application.mgt.common.User;
|
||||||
import org.wso2.carbon.device.application.mgt.common.exception.ApplicationManagementException;
|
import org.wso2.carbon.device.application.mgt.common.exception.ApplicationManagementException;
|
||||||
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.api.APIUtil;
|
import org.wso2.carbon.device.application.mgt.core.util.Constants;
|
||||||
import org.wso2.carbon.device.application.mgt.core.exception.ApplicationManagementDAOException;
|
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
import javax.validation.Valid;
|
import javax.validation.Valid;
|
||||||
import javax.ws.rs.*;
|
import javax.ws.rs.Consumes;
|
||||||
|
import javax.ws.rs.DELETE;
|
||||||
|
import javax.ws.rs.GET;
|
||||||
|
import javax.ws.rs.POST;
|
||||||
|
import javax.ws.rs.PUT;
|
||||||
|
import javax.ws.rs.Path;
|
||||||
|
import javax.ws.rs.PathParam;
|
||||||
|
import javax.ws.rs.Produces;
|
||||||
|
import javax.ws.rs.QueryParam;
|
||||||
import javax.ws.rs.core.Response;
|
import javax.ws.rs.core.Response;
|
||||||
import java.util.Date;
|
|
||||||
|
|
||||||
@Produces({"application/json"})
|
@Produces({"application/json"})
|
||||||
@Consumes({"application/json"})
|
@Consumes({"application/json"})
|
||||||
@Path("/applications")
|
@Path("/applications")
|
||||||
public class ApplicationManagementAPIImpl implements ApplicationManagementAPI{
|
public class ApplicationManagementAPIImpl implements ApplicationManagementAPI {
|
||||||
|
|
||||||
public static final int DEFAULT_LIMIT = 20;
|
|
||||||
|
|
||||||
public static final String APPLICATION_UPLOAD_EXTENSION = "ApplicationUploadExtension";
|
|
||||||
|
|
||||||
|
private static final int DEFAULT_LIMIT = 20;
|
||||||
private static Log log = LogFactory.getLog(ApplicationManagementAPIImpl.class);
|
private static Log log = LogFactory.getLog(ApplicationManagementAPIImpl.class);
|
||||||
|
|
||||||
@GET
|
@GET
|
||||||
@ -71,20 +80,39 @@ public class ApplicationManagementAPIImpl implements ApplicationManagementAPI{
|
|||||||
@Path("/{uuid}")
|
@Path("/{uuid}")
|
||||||
public Response getApplication(@PathParam("uuid") String uuid) {
|
public Response getApplication(@PathParam("uuid") String uuid) {
|
||||||
ApplicationManager applicationManager = APIUtil.getApplicationManager();
|
ApplicationManager applicationManager = APIUtil.getApplicationManager();
|
||||||
return null;
|
try {
|
||||||
|
Application application = applicationManager.getApplication(uuid);
|
||||||
|
if (application == null) {
|
||||||
|
return Response.status(Response.Status.NOT_FOUND)
|
||||||
|
.entity("Application with UUID " + uuid + " not found").build();
|
||||||
|
}
|
||||||
|
return Response.status(Response.Status.OK).entity(application).build();
|
||||||
|
} catch (ApplicationManagementException e) {
|
||||||
|
log.error("Error occurred while getting application with the uuid " + uuid, e);
|
||||||
|
return APIUtil.getResponse(e, Response.Status.INTERNAL_SERVER_ERROR);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@PUT
|
@PUT
|
||||||
@Consumes("application/json")
|
@Consumes("application/json")
|
||||||
@Path("/{uuid}/lifecycle")
|
@Path("/{uuid}/lifecycle")
|
||||||
public Response changeLifecycleState(@PathParam("uuid") String applicationUUID, @QueryParam("state") String state) {
|
public Response changeLifecycleState(@PathParam("uuid") String applicationUUID,
|
||||||
|
@QueryParam("state") String state) {
|
||||||
ApplicationManager applicationManager = APIUtil.getApplicationManager();
|
ApplicationManager applicationManager = APIUtil.getApplicationManager();
|
||||||
|
|
||||||
|
if (!Arrays.asList(Constants.LIFE_CYCLES).contains(state)) {
|
||||||
|
log.warn("Provided lifecycle state " + state + " is not valid. Please select one from"
|
||||||
|
+ Arrays.toString(Constants.LIFE_CYCLES));
|
||||||
|
return Response.status(Response.Status.BAD_REQUEST)
|
||||||
|
.entity("Provided lifecycle state " + state + " is not valid. Please select one from "
|
||||||
|
+ Arrays.toString(Constants.LIFE_CYCLES)).build();
|
||||||
|
}
|
||||||
try {
|
try {
|
||||||
applicationManager.changeLifecycle(applicationUUID, state);
|
applicationManager.changeLifecycle(applicationUUID, state);
|
||||||
} 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 Response.status(Response.Status.BAD_REQUEST).build();
|
return APIUtil.getResponse(e, Response.Status.BAD_REQUEST);
|
||||||
}
|
}
|
||||||
return Response.status(Response.Status.OK)
|
return Response.status(Response.Status.OK)
|
||||||
.entity("Successfully changed the lifecycle state of the application: " + applicationUUID).build();
|
.entity("Successfully changed the lifecycle state of the application: " + applicationUUID).build();
|
||||||
@ -93,9 +121,21 @@ public class ApplicationManagementAPIImpl implements ApplicationManagementAPI{
|
|||||||
@GET
|
@GET
|
||||||
@Path("/{uuid}/lifecycle")
|
@Path("/{uuid}/lifecycle")
|
||||||
@Override
|
@Override
|
||||||
public Response getLifeCycleStates(String applicationUUID) {
|
public Response getNextLifeCycleStates(@PathParam("uuid") String applicationUUID) {
|
||||||
ApplicationManager applicationManager = APIUtil.getApplicationManager();
|
ApplicationManager applicationManager = APIUtil.getApplicationManager();
|
||||||
try {
|
try {
|
||||||
|
if (applicationManager.getApplication(applicationUUID) == null) {
|
||||||
|
if (log.isDebugEnabled()) {
|
||||||
|
log.debug("Application with the UUID '" + applicationUUID + "' is not found.");
|
||||||
|
}
|
||||||
|
return Response.status(Response.Status.NOT_FOUND).entity("Application with the UUID '" +
|
||||||
|
applicationUUID + "' is not found.").build();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (log.isDebugEnabled()) {
|
||||||
|
log.debug("Application with UUID '" + applicationUUID + "' is found. Request received for getting "
|
||||||
|
+ "next life-cycle states for the particular application.");
|
||||||
|
}
|
||||||
return Response.status(Response.Status.OK).entity(applicationManager.getLifeCycleStates(applicationUUID))
|
return Response.status(Response.Status.OK).entity(applicationManager.getLifeCycleStates(applicationUUID))
|
||||||
.build();
|
.build();
|
||||||
} catch (ApplicationManagementException e) {
|
} catch (ApplicationManagementException e) {
|
||||||
@ -125,18 +165,13 @@ public class ApplicationManagementAPIImpl implements ApplicationManagementAPI{
|
|||||||
public Response editApplication(@Valid Application application) {
|
public Response editApplication(@Valid Application application) {
|
||||||
|
|
||||||
ApplicationManager applicationManager = APIUtil.getApplicationManager();
|
ApplicationManager applicationManager = APIUtil.getApplicationManager();
|
||||||
|
|
||||||
//TODO : Get username and tenantId
|
|
||||||
User user = new User("admin", -1234);
|
|
||||||
application.setUser(user);
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
application = applicationManager.editApplication(application);
|
application = applicationManager.editApplication(application);
|
||||||
|
|
||||||
} 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);
|
||||||
return Response.status(Response.Status.BAD_REQUEST).build();
|
return APIUtil.getResponse(e, Response.Status.BAD_REQUEST);
|
||||||
}
|
}
|
||||||
return Response.status(Response.Status.OK).entity(application).build();
|
return Response.status(Response.Status.OK).entity(application).build();
|
||||||
}
|
}
|
||||||
@ -147,11 +182,10 @@ public class ApplicationManagementAPIImpl implements ApplicationManagementAPI{
|
|||||||
ApplicationManager applicationManager = APIUtil.getApplicationManager();
|
ApplicationManager applicationManager = APIUtil.getApplicationManager();
|
||||||
try {
|
try {
|
||||||
applicationManager.deleteApplication(uuid);
|
applicationManager.deleteApplication(uuid);
|
||||||
|
|
||||||
} 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);
|
||||||
return Response.status(Response.Status.BAD_REQUEST).build();
|
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
|
||||||
}
|
}
|
||||||
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();
|
||||||
|
|||||||
@ -43,6 +43,24 @@
|
|||||||
<url>/application-mgt/applications</url>
|
<url>/application-mgt/applications</url>
|
||||||
<method>POST</method>
|
<method>POST</method>
|
||||||
</Permission>
|
</Permission>
|
||||||
|
<Permission>
|
||||||
|
<name>Edit Application</name>
|
||||||
|
<path>/device-mgt/application/update</path>
|
||||||
|
<url>/application-mgt/applications</url>
|
||||||
|
<method>PUT</method>
|
||||||
|
</Permission>
|
||||||
|
<Permission>
|
||||||
|
<name>Login to Application Management</name>
|
||||||
|
<path>/device-mgt/application-mgt/login</path>
|
||||||
|
<url>/application-mgt/applications</url>
|
||||||
|
<method>PUT</method>
|
||||||
|
</Permission>
|
||||||
|
<Permission>
|
||||||
|
<name>Login to Application Management</name>
|
||||||
|
<path>device-mgt/application/delete</path>
|
||||||
|
<url>/application-mgt/applications/*</url>
|
||||||
|
<method>DELETE</method>
|
||||||
|
</Permission>
|
||||||
|
|
||||||
<!-- Platform related permissions -->
|
<!-- Platform related permissions -->
|
||||||
<Permission>
|
<Permission>
|
||||||
|
|||||||
@ -59,7 +59,15 @@ public interface ApplicationManager {
|
|||||||
*/
|
*/
|
||||||
public ApplicationList getApplications(Filter filter) throws ApplicationManagementException;
|
public ApplicationList getApplications(Filter filter) throws ApplicationManagementException;
|
||||||
|
|
||||||
void changeLifecycle(String applicationUUID, String lifecycleIdentifier) throws ApplicationManagementException;
|
/**
|
||||||
|
* To change the lifecycle of the Application.
|
||||||
|
*
|
||||||
|
* @param applicationUUID UUID of the Application
|
||||||
|
* @param lifecycleIdentifier New life-cycle that need to be changed.
|
||||||
|
* @throws ApplicationManagementException Application Management Exception.
|
||||||
|
*/
|
||||||
|
public void changeLifecycle(String applicationUUID, String lifecycleIdentifier) throws
|
||||||
|
ApplicationManagementException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* To get the next possible life-cycle states for the application.
|
* To get the next possible life-cycle states for the application.
|
||||||
@ -70,4 +78,14 @@ public interface ApplicationManager {
|
|||||||
*/
|
*/
|
||||||
public List<LifecycleStateTransition> getLifeCycleStates(String applicationUUID)
|
public List<LifecycleStateTransition> getLifeCycleStates(String applicationUUID)
|
||||||
throws ApplicationManagementException;
|
throws ApplicationManagementException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* To get Application with the given UUID.
|
||||||
|
*
|
||||||
|
* @param uuid UUID of the Application
|
||||||
|
* @return the Application identified by the UUID
|
||||||
|
* @throws ApplicationManagementException Application Management Exception.
|
||||||
|
*/
|
||||||
|
public Application getApplication(String uuid) throws ApplicationManagementException;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -74,7 +74,8 @@
|
|||||||
org.apache.axis2.*,
|
org.apache.axis2.*,
|
||||||
org.wso2.carbon.user.core.*,
|
org.wso2.carbon.user.core.*,
|
||||||
org.wso2.carbon.user.api.*,
|
org.wso2.carbon.user.api.*,
|
||||||
org.wso2.carbon.ndatasource.core
|
org.wso2.carbon.ndatasource.core,
|
||||||
|
org.wso2.carbon
|
||||||
</Import-Package>
|
</Import-Package>
|
||||||
<Export-Package>
|
<Export-Package>
|
||||||
!org.wso2.carbon.device.application.mgt.core.internal.*,
|
!org.wso2.carbon.device.application.mgt.core.internal.*,
|
||||||
@ -158,6 +159,10 @@
|
|||||||
<groupId>org.wso2.carbon</groupId>
|
<groupId>org.wso2.carbon</groupId>
|
||||||
<artifactId>org.wso2.carbon.ndatasource.core</artifactId>
|
<artifactId>org.wso2.carbon.ndatasource.core</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.wso2.carbon</groupId>
|
||||||
|
<artifactId>org.wso2.carbon.core</artifactId>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
</project>
|
</project>
|
||||||
|
|
||||||
|
|||||||
@ -18,12 +18,19 @@
|
|||||||
*/
|
*/
|
||||||
package org.wso2.carbon.device.application.mgt.core.dao;
|
package org.wso2.carbon.device.application.mgt.core.dao;
|
||||||
|
|
||||||
import org.wso2.carbon.device.application.mgt.common.*;
|
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.Filter;
|
||||||
|
import org.wso2.carbon.device.application.mgt.common.LifecycleStateTransition;
|
||||||
import org.wso2.carbon.device.application.mgt.core.exception.ApplicationManagementDAOException;
|
import org.wso2.carbon.device.application.mgt.core.exception.ApplicationManagementDAOException;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ApplicationDAO is responsible for handling all the Database related operations related with Application Management.
|
||||||
|
*/
|
||||||
public interface ApplicationDAO {
|
public interface ApplicationDAO {
|
||||||
|
|
||||||
Application createApplication(Application application) throws ApplicationManagementDAOException;
|
Application createApplication(Application application) throws ApplicationManagementDAOException;
|
||||||
@ -34,7 +41,7 @@ public interface ApplicationDAO {
|
|||||||
|
|
||||||
int getApplicationId(String uuid) throws ApplicationManagementDAOException;
|
int getApplicationId(String uuid) throws ApplicationManagementDAOException;
|
||||||
|
|
||||||
Application editApplication(Application application) throws ApplicationManagementDAOException;
|
Application editApplication(Application application, int tenantId) throws ApplicationManagementDAOException;
|
||||||
|
|
||||||
void deleteApplication(String uuid) throws ApplicationManagementDAOException;
|
void deleteApplication(String uuid) throws ApplicationManagementDAOException;
|
||||||
|
|
||||||
@ -48,11 +55,10 @@ public interface ApplicationDAO {
|
|||||||
|
|
||||||
void deleteTags(int applicationId) throws ApplicationManagementDAOException;
|
void deleteTags(int applicationId) throws ApplicationManagementDAOException;
|
||||||
|
|
||||||
void changeLifeCycle(LifecycleState lifecycleState) throws ApplicationManagementDAOException;
|
|
||||||
|
|
||||||
void addRelease(ApplicationRelease release) throws ApplicationManagementDAOException;
|
void addRelease(ApplicationRelease release) throws ApplicationManagementDAOException;
|
||||||
|
|
||||||
void changeLifecycle(String applicationUUID, String lifecycleIdentifier) throws ApplicationManagementDAOException;
|
void changeLifecycle(String applicationUUID, String lifecycleIdentifier, String username) throws
|
||||||
|
ApplicationManagementDAOException;
|
||||||
|
|
||||||
List<LifecycleStateTransition> getNextLifeCycleStates(String applicationUUID, int tenantId) throws
|
List<LifecycleStateTransition> getNextLifeCycleStates(String applicationUUID, int tenantId) throws
|
||||||
ApplicationManagementDAOException;
|
ApplicationManagementDAOException;
|
||||||
|
|||||||
@ -25,8 +25,7 @@ import org.wso2.carbon.device.application.mgt.core.config.ConfigurationManager;
|
|||||||
import org.wso2.carbon.device.application.mgt.core.dao.ApplicationDAO;
|
import org.wso2.carbon.device.application.mgt.core.dao.ApplicationDAO;
|
||||||
import org.wso2.carbon.device.application.mgt.core.dao.LifecycleStateDAO;
|
import org.wso2.carbon.device.application.mgt.core.dao.LifecycleStateDAO;
|
||||||
import org.wso2.carbon.device.application.mgt.core.dao.PlatformDAO;
|
import org.wso2.carbon.device.application.mgt.core.dao.PlatformDAO;
|
||||||
import org.wso2.carbon.device.application.mgt.core.dao.impl.application.H2ApplicationDAOImpl;
|
import org.wso2.carbon.device.application.mgt.core.dao.impl.application.GenericApplicationDAOImpl;
|
||||||
import org.wso2.carbon.device.application.mgt.core.dao.impl.application.MySQLApplicationDAOImpl;
|
|
||||||
import org.wso2.carbon.device.application.mgt.core.dao.impl.lifecyclestate.GenericLifecycleStateImpl;
|
import org.wso2.carbon.device.application.mgt.core.dao.impl.lifecyclestate.GenericLifecycleStateImpl;
|
||||||
import org.wso2.carbon.device.application.mgt.core.dao.impl.platform.GenericPlatformDAOImpl;
|
import org.wso2.carbon.device.application.mgt.core.dao.impl.platform.GenericPlatformDAOImpl;
|
||||||
import org.wso2.carbon.device.application.mgt.core.dao.impl.platform.OracleMsSQLPlatformDAOImpl;
|
import org.wso2.carbon.device.application.mgt.core.dao.impl.platform.OracleMsSQLPlatformDAOImpl;
|
||||||
@ -58,9 +57,8 @@ public class DAOFactory {
|
|||||||
if (databaseEngine != null) {
|
if (databaseEngine != null) {
|
||||||
switch (databaseEngine) {
|
switch (databaseEngine) {
|
||||||
case Constants.DataBaseTypes.DB_TYPE_H2:
|
case Constants.DataBaseTypes.DB_TYPE_H2:
|
||||||
return new H2ApplicationDAOImpl();
|
|
||||||
case Constants.DataBaseTypes.DB_TYPE_MYSQL:
|
case Constants.DataBaseTypes.DB_TYPE_MYSQL:
|
||||||
return new MySQLApplicationDAOImpl();
|
return new GenericApplicationDAOImpl();
|
||||||
default:
|
default:
|
||||||
throw new UnsupportedDatabaseEngineException("Unsupported database engine : " + databaseEngine);
|
throw new UnsupportedDatabaseEngineException("Unsupported database engine : " + databaseEngine);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -21,9 +21,7 @@ package org.wso2.carbon.device.application.mgt.core.dao.common;
|
|||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
import org.json.JSONException;
|
import org.json.JSONException;
|
||||||
import org.wso2.carbon.device.application.mgt.common.Application;
|
import org.wso2.carbon.device.application.mgt.common.*;
|
||||||
import org.wso2.carbon.device.application.mgt.common.Category;
|
|
||||||
import org.wso2.carbon.device.application.mgt.common.Platform;
|
|
||||||
import org.wso2.carbon.device.application.mgt.core.util.JSONUtil;
|
import org.wso2.carbon.device.application.mgt.core.util.JSONUtil;
|
||||||
|
|
||||||
import java.sql.PreparedStatement;
|
import java.sql.PreparedStatement;
|
||||||
@ -34,13 +32,25 @@ import java.util.HashMap;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class is responsible for handling the utils of the Application Management DAO.
|
||||||
|
*/
|
||||||
public class Util {
|
public class Util {
|
||||||
|
|
||||||
private static final Log log = LogFactory.getLog(Util.class);
|
private static final Log log = LogFactory.getLog(Util.class);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* To create application object from the result set retrieved from the Database.
|
||||||
|
*
|
||||||
|
* @param rs ResultSet
|
||||||
|
* @param rsProperties Properties resultset.
|
||||||
|
* @param rsTags Tags resultset
|
||||||
|
* @return Application that is retrieved from the Database.
|
||||||
|
* @throws SQLException SQL Exception
|
||||||
|
* @throws JSONException JSONException.
|
||||||
|
*/
|
||||||
public static Application loadApplication(ResultSet rs, ResultSet rsProperties, ResultSet rsTags)
|
public static Application loadApplication(ResultSet rs, ResultSet rsProperties, ResultSet rsTags)
|
||||||
throws SQLException, JSONException {
|
throws SQLException, JSONException {
|
||||||
|
|
||||||
Application application = new Application();
|
Application application = new Application();
|
||||||
application.setId(rs.getInt("ID"));
|
application.setId(rs.getInt("ID"));
|
||||||
application.setName(rs.getString("NAME"));
|
application.setName(rs.getString("NAME"));
|
||||||
@ -54,6 +64,7 @@ public class Util {
|
|||||||
application.setScreenshots(JSONUtil.jsonArrayStringToList(rs.getString("SCREENSHOTS")));
|
application.setScreenshots(JSONUtil.jsonArrayStringToList(rs.getString("SCREENSHOTS")));
|
||||||
application.setCreatedAt(rs.getDate("CREATED_AT"));
|
application.setCreatedAt(rs.getDate("CREATED_AT"));
|
||||||
application.setModifiedAt(rs.getDate("MODIFIED_AT"));
|
application.setModifiedAt(rs.getDate("MODIFIED_AT"));
|
||||||
|
application.setUser(new User(rs.getString("CREATED_BY"), rs.getInt("TENANT_ID")));
|
||||||
|
|
||||||
Platform platform = new Platform();
|
Platform platform = new Platform();
|
||||||
platform.setName(rs.getString("APL_NAME"));
|
platform.setName(rs.getString("APL_NAME"));
|
||||||
@ -67,7 +78,7 @@ public class Util {
|
|||||||
application.setProperties(properties);
|
application.setProperties(properties);
|
||||||
|
|
||||||
List<String> tags = new ArrayList<>();
|
List<String> tags = new ArrayList<>();
|
||||||
while ((rsTags.next())){
|
while ((rsTags.next())) {
|
||||||
tags.add(rsTags.getString("NAME"));
|
tags.add(rsTags.getString("NAME"));
|
||||||
}
|
}
|
||||||
application.setTags(tags);
|
application.setTags(tags);
|
||||||
@ -76,9 +87,25 @@ public class Util {
|
|||||||
category.setId(rs.getInt("CAT_ID"));
|
category.setId(rs.getInt("CAT_ID"));
|
||||||
category.setName(rs.getString("CAT_NAME"));
|
category.setName(rs.getString("CAT_NAME"));
|
||||||
application.setCategory(category);
|
application.setCategory(category);
|
||||||
|
|
||||||
|
LifecycleState lifecycleState = new LifecycleState();
|
||||||
|
lifecycleState.setId(rs.getInt("LIFECYCLE_STATE_ID"));
|
||||||
|
lifecycleState.setName(rs.getString("LS_NAME"));
|
||||||
|
lifecycleState.setIdentifier(rs.getString("LS_IDENTIFIER"));
|
||||||
|
lifecycleState.setDescription(rs.getString("LS_DESCRIPTION"));
|
||||||
|
|
||||||
|
Lifecycle lifecycle = new Lifecycle();
|
||||||
|
lifecycle.setLifecycleState(lifecycleState);
|
||||||
|
application.setCurrentLifecycle(lifecycle);
|
||||||
return application;
|
return application;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Cleans up the statement and resultset after executing the query
|
||||||
|
*
|
||||||
|
* @param stmt Statement executed.
|
||||||
|
* @param rs Resultset retrived.
|
||||||
|
*/
|
||||||
public static void cleanupResources(PreparedStatement stmt, ResultSet rs) {
|
public static void cleanupResources(PreparedStatement stmt, ResultSet rs) {
|
||||||
if (rs != null) {
|
if (rs != null) {
|
||||||
try {
|
try {
|
||||||
|
|||||||
@ -1,185 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2017, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
|
||||||
*
|
|
||||||
* WSO2 Inc. licenses this file to you under the Apache License,
|
|
||||||
* Version 2.0 (the "License"); you may not use this file except
|
|
||||||
* in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing,
|
|
||||||
* software distributed under the License is distributed on an
|
|
||||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
||||||
* KIND, either express or implied. See the License for the
|
|
||||||
* specific language governing permissions and limitations
|
|
||||||
* under the License.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
package org.wso2.carbon.device.application.mgt.core.dao.impl.application;
|
|
||||||
|
|
||||||
import org.apache.commons.logging.Log;
|
|
||||||
import org.apache.commons.logging.LogFactory;
|
|
||||||
import org.wso2.carbon.device.application.mgt.common.Application;
|
|
||||||
import org.wso2.carbon.device.application.mgt.common.Filter;
|
|
||||||
import org.wso2.carbon.device.application.mgt.common.exception.DBConnectionException;
|
|
||||||
import org.wso2.carbon.device.application.mgt.core.dao.ApplicationDAO;
|
|
||||||
import org.wso2.carbon.device.application.mgt.core.dao.impl.AbstractDAOImpl;
|
|
||||||
import org.wso2.carbon.device.application.mgt.core.exception.ApplicationManagementDAOException;
|
|
||||||
import org.wso2.carbon.device.application.mgt.core.dao.common.Util;
|
|
||||||
import org.wso2.carbon.device.application.mgt.core.util.ConnectionManagerUtil;
|
|
||||||
import org.wso2.carbon.device.application.mgt.core.util.JSONUtil;
|
|
||||||
|
|
||||||
import java.sql.*;
|
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
public abstract class AbstractApplicationDAOImpl extends AbstractDAOImpl implements ApplicationDAO {
|
|
||||||
|
|
||||||
private static final Log log = LogFactory.getLog(AbstractApplicationDAOImpl.class);
|
|
||||||
|
|
||||||
public Application createApplication(Application application) throws ApplicationManagementDAOException {
|
|
||||||
if (log.isDebugEnabled()) {
|
|
||||||
log.debug("Request received in DAO Layer to create an application");
|
|
||||||
log.debug("Application Details : ");
|
|
||||||
log.debug("UUID : " + application.getUuid() + " Name : " + application.getName() + " User name : "
|
|
||||||
+ application.getUser().getUserName());
|
|
||||||
}
|
|
||||||
Connection conn = null;
|
|
||||||
PreparedStatement stmt = null;
|
|
||||||
ResultSet rs = null;
|
|
||||||
String sql = "";
|
|
||||||
boolean isBatchExecutionSupported = ConnectionManagerUtil.isBatchQuerySupported();
|
|
||||||
|
|
||||||
try {
|
|
||||||
conn = this.getDBConnection();
|
|
||||||
sql += "INSERT INTO APPM_APPLICATION (UUID, IDENTIFIER, NAME, SHORT_DESCRIPTION, DESCRIPTION, ICON_NAME, "
|
|
||||||
+ "BANNER_NAME, VIDEO_NAME, SCREENSHOTS, CREATED_BY, CREATED_AT, MODIFIED_AT, "
|
|
||||||
+ "APPLICATION_CATEGORY_ID, PLATFORM_ID, TENANT_ID, LIFECYCLE_STATE_ID, "
|
|
||||||
+ "LIFECYCLE_STATE_MODIFIED_AT, LIFECYCLE_STATE_MODIFIED_BY) VALUES "
|
|
||||||
+ "(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
|
|
||||||
|
|
||||||
stmt = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
|
|
||||||
stmt.setString(1, application.getUuid());
|
|
||||||
stmt.setString(2, application.getIdentifier());
|
|
||||||
stmt.setString(3, application.getName());
|
|
||||||
stmt.setString(4, application.getShortDescription());
|
|
||||||
stmt.setString(5, application.getDescription());
|
|
||||||
stmt.setString(6, application.getIconName());
|
|
||||||
stmt.setString(7, application.getBannerName());
|
|
||||||
stmt.setString(8, application.getVideoName());
|
|
||||||
stmt.setString(9, JSONUtil.listToJsonArrayString(application.getScreenshots()));
|
|
||||||
stmt.setString(10, application.getUser().getUserName());
|
|
||||||
stmt.setDate(11, new Date(application.getCreatedAt().getTime()));
|
|
||||||
stmt.setDate(12, new Date(application.getModifiedAt().getTime()));
|
|
||||||
stmt.setInt(13, application.getCategory().getId());
|
|
||||||
stmt.setInt(14, application.getPlatform().getId());
|
|
||||||
stmt.setInt(15, application.getUser().getTenantId());
|
|
||||||
stmt.setInt(16, application.getCurrentLifecycle().getLifecycleState().getId());
|
|
||||||
stmt.setDate(17, new Date(
|
|
||||||
application.getCurrentLifecycle().getLifecycleStateModifiedAt().getTime()));
|
|
||||||
stmt.setString(18, application.getCurrentLifecycle().getGetLifecycleStateModifiedBy());
|
|
||||||
stmt.executeUpdate();
|
|
||||||
|
|
||||||
rs = stmt.getGeneratedKeys();
|
|
||||||
if (rs.next()) {
|
|
||||||
application.setId(rs.getInt(1));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (application.getTags() != null && application.getTags().size() > 0) {
|
|
||||||
sql = "INSERT INTO APPM_APPLICATION_TAG (NAME, APPLICATION_ID) VALUES (?, ?); ";
|
|
||||||
stmt = conn.prepareStatement(sql);
|
|
||||||
for (String tag : application.getTags()) {
|
|
||||||
stmt.setString(1, tag);
|
|
||||||
stmt.setInt(2, application.getId());
|
|
||||||
|
|
||||||
if (isBatchExecutionSupported) {
|
|
||||||
stmt.addBatch();
|
|
||||||
} else {
|
|
||||||
stmt.execute();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (isBatchExecutionSupported) {
|
|
||||||
stmt.executeBatch();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (application.getProperties() != null && application.getProperties().size() > 0) {
|
|
||||||
sql = "INSERT INTO APPM_APPLICATION_PROPERTY (PROP_KEY, PROP_VAL, APPLICATION_ID) VALUES (?, ?, ?); ";
|
|
||||||
stmt = conn.prepareStatement(sql);
|
|
||||||
Iterator it = application.getProperties().entrySet().iterator();
|
|
||||||
while (it.hasNext()) {
|
|
||||||
Map.Entry<String, String> property = (Map.Entry) it.next();
|
|
||||||
stmt.setString(1, property.getKey());
|
|
||||||
stmt.setString(2, property.getValue());
|
|
||||||
stmt.setInt(3, application.getId());
|
|
||||||
if (isBatchExecutionSupported) {
|
|
||||||
stmt.addBatch();
|
|
||||||
} else {
|
|
||||||
stmt.execute();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (isBatchExecutionSupported) {
|
|
||||||
stmt.executeBatch();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
} catch (DBConnectionException e) {
|
|
||||||
throw new ApplicationManagementDAOException("Error occurred while obtaining the DB connection.", e);
|
|
||||||
} catch (SQLException e) {
|
|
||||||
throw new ApplicationManagementDAOException("Error occurred while adding the application", e);
|
|
||||||
} finally {
|
|
||||||
Util.cleanupResources(stmt, rs);
|
|
||||||
}
|
|
||||||
|
|
||||||
return application;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getApplicationCount(Filter filter) throws ApplicationManagementDAOException {
|
|
||||||
if(log.isDebugEnabled()){
|
|
||||||
log.debug("Getting application count from the database");
|
|
||||||
log.debug(String.format("Filter: limit=%s, offset=%", filter.getLimit(), filter.getOffset()));
|
|
||||||
}
|
|
||||||
|
|
||||||
Connection conn;
|
|
||||||
PreparedStatement stmt = null;
|
|
||||||
ResultSet rs = null;
|
|
||||||
String sql = "";
|
|
||||||
int count = 0;
|
|
||||||
|
|
||||||
if (filter == null) {
|
|
||||||
throw new ApplicationManagementDAOException("Filter need to be instantiated");
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
conn = this.getConnection();
|
|
||||||
sql += "SELECT COUNT(APP.ID) AS APP_COUNT ";
|
|
||||||
sql += "FROM APPM_APPLICATION AS APP ";
|
|
||||||
sql += "INNER JOIN APPM_PLATFORM AS APL ON APP.PLATFORM_ID = APL.ID ";
|
|
||||||
sql += "INNER JOIN APPM_APPLICATION_CATEGORY AS CAT ON APP.APPLICATION_CATEGORY_ID = CAT.ID ";
|
|
||||||
|
|
||||||
if (filter.getSearchQuery() != null && !filter.getSearchQuery().isEmpty()) {
|
|
||||||
sql += "WHERE APP.NAME LIKE ? ";
|
|
||||||
}
|
|
||||||
sql += ";";
|
|
||||||
|
|
||||||
stmt = conn.prepareStatement(sql);
|
|
||||||
int index = 0;
|
|
||||||
if (filter.getSearchQuery() != null && !filter.getSearchQuery().isEmpty()) {
|
|
||||||
stmt.setString(++index, "%" + filter.getSearchQuery() + "%");
|
|
||||||
}
|
|
||||||
rs = stmt.executeQuery();
|
|
||||||
if (rs.next()) {
|
|
||||||
count = rs.getInt("APP_COUNT");
|
|
||||||
}
|
|
||||||
} catch (SQLException e) {
|
|
||||||
throw new ApplicationManagementDAOException("Error occurred while getting application List", e);
|
|
||||||
} catch (DBConnectionException e) {
|
|
||||||
throw new ApplicationManagementDAOException("Error occurred while obtaining the DB connection.", e);
|
|
||||||
} finally {
|
|
||||||
Util.cleanupResources(stmt, rs);
|
|
||||||
}
|
|
||||||
return count;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -0,0 +1,600 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2017, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
*
|
||||||
|
* WSO2 Inc. licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except
|
||||||
|
* in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
package org.wso2.carbon.device.application.mgt.core.dao.impl.application;
|
||||||
|
|
||||||
|
import org.apache.commons.logging.Log;
|
||||||
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
import org.json.JSONException;
|
||||||
|
import org.wso2.carbon.device.application.mgt.common.*;
|
||||||
|
import org.wso2.carbon.device.application.mgt.common.exception.DBConnectionException;
|
||||||
|
import org.wso2.carbon.device.application.mgt.core.dao.ApplicationDAO;
|
||||||
|
import org.wso2.carbon.device.application.mgt.core.dao.impl.AbstractDAOImpl;
|
||||||
|
import org.wso2.carbon.device.application.mgt.core.exception.ApplicationManagementDAOException;
|
||||||
|
import org.wso2.carbon.device.application.mgt.core.dao.common.Util;
|
||||||
|
import org.wso2.carbon.device.application.mgt.core.util.ConnectionManagerUtil;
|
||||||
|
import org.wso2.carbon.device.application.mgt.core.util.JSONUtil;
|
||||||
|
|
||||||
|
import java.sql.*;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public class GenericApplicationDAOImpl extends AbstractDAOImpl implements ApplicationDAO {
|
||||||
|
|
||||||
|
private static final Log log = LogFactory.getLog(GenericApplicationDAOImpl.class);
|
||||||
|
|
||||||
|
public Application createApplication(Application application) throws ApplicationManagementDAOException {
|
||||||
|
if (log.isDebugEnabled()) {
|
||||||
|
log.debug("Request received in DAO Layer to create an application");
|
||||||
|
log.debug("Application Details : ");
|
||||||
|
log.debug("UUID : " + application.getUuid() + " Name : " + application.getName() + " User name : "
|
||||||
|
+ application.getUser().getUserName());
|
||||||
|
}
|
||||||
|
Connection conn = null;
|
||||||
|
PreparedStatement stmt = null;
|
||||||
|
ResultSet rs = null;
|
||||||
|
String sql = "";
|
||||||
|
boolean isBatchExecutionSupported = ConnectionManagerUtil.isBatchQuerySupported();
|
||||||
|
|
||||||
|
try {
|
||||||
|
conn = this.getDBConnection();
|
||||||
|
sql += "INSERT INTO APPM_APPLICATION (UUID, IDENTIFIER, NAME, SHORT_DESCRIPTION, DESCRIPTION, ICON_NAME, "
|
||||||
|
+ "BANNER_NAME, VIDEO_NAME, SCREENSHOTS, CREATED_BY, CREATED_AT, MODIFIED_AT, "
|
||||||
|
+ "APPLICATION_CATEGORY_ID, PLATFORM_ID, TENANT_ID, LIFECYCLE_STATE_ID, "
|
||||||
|
+ "LIFECYCLE_STATE_MODIFIED_AT, LIFECYCLE_STATE_MODIFIED_BY) VALUES "
|
||||||
|
+ "(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
|
||||||
|
|
||||||
|
stmt = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
|
||||||
|
stmt.setString(1, application.getUuid());
|
||||||
|
stmt.setString(2, application.getIdentifier());
|
||||||
|
stmt.setString(3, application.getName());
|
||||||
|
stmt.setString(4, application.getShortDescription());
|
||||||
|
stmt.setString(5, application.getDescription());
|
||||||
|
stmt.setString(6, application.getIconName());
|
||||||
|
stmt.setString(7, application.getBannerName());
|
||||||
|
stmt.setString(8, application.getVideoName());
|
||||||
|
stmt.setString(9, JSONUtil.listToJsonArrayString(application.getScreenshots()));
|
||||||
|
stmt.setString(10, application.getUser().getUserName());
|
||||||
|
stmt.setDate(11, new Date(application.getCreatedAt().getTime()));
|
||||||
|
stmt.setDate(12, new Date(application.getModifiedAt().getTime()));
|
||||||
|
stmt.setInt(13, application.getCategory().getId());
|
||||||
|
stmt.setInt(14, application.getPlatform().getId());
|
||||||
|
stmt.setInt(15, application.getUser().getTenantId());
|
||||||
|
stmt.setInt(16, application.getCurrentLifecycle().getLifecycleState().getId());
|
||||||
|
stmt.setDate(17, new Date(
|
||||||
|
application.getCurrentLifecycle().getLifecycleStateModifiedAt().getTime()));
|
||||||
|
stmt.setString(18, application.getCurrentLifecycle().getGetLifecycleStateModifiedBy());
|
||||||
|
stmt.executeUpdate();
|
||||||
|
|
||||||
|
rs = stmt.getGeneratedKeys();
|
||||||
|
if (rs.next()) {
|
||||||
|
application.setId(rs.getInt(1));
|
||||||
|
}
|
||||||
|
insertApplicationTagsAndProperties(application, stmt, conn, isBatchExecutionSupported);
|
||||||
|
} catch (DBConnectionException e) {
|
||||||
|
throw new ApplicationManagementDAOException("Error occurred while obtaining the DB connection.", e);
|
||||||
|
} catch (SQLException e) {
|
||||||
|
throw new ApplicationManagementDAOException("Error occurred while adding the application", e);
|
||||||
|
} finally {
|
||||||
|
Util.cleanupResources(stmt, rs);
|
||||||
|
}
|
||||||
|
|
||||||
|
return application;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ApplicationList getApplications(Filter filter) throws ApplicationManagementDAOException {
|
||||||
|
if(log.isDebugEnabled()){
|
||||||
|
log.debug("Getting application data from the database");
|
||||||
|
log.debug(String.format("Filter: limit=%s, offset=%", filter.getLimit(), filter.getOffset()));
|
||||||
|
}
|
||||||
|
|
||||||
|
Connection conn = null;
|
||||||
|
PreparedStatement stmt = null;
|
||||||
|
ResultSet rs = null;
|
||||||
|
String sql = "";
|
||||||
|
ApplicationList applicationList = new ApplicationList();
|
||||||
|
List<Application> applications = new ArrayList<>();
|
||||||
|
Pagination pagination = new Pagination();
|
||||||
|
|
||||||
|
if (filter == null) {
|
||||||
|
throw new ApplicationManagementDAOException("Filter need to be instantiated");
|
||||||
|
} else {
|
||||||
|
pagination.setLimit(filter.getLimit());
|
||||||
|
pagination.setOffset(filter.getOffset());
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
conn = this.getDBConnection();
|
||||||
|
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, "
|
||||||
|
+ "LS.DESCRIPTION AS LS_DESCRIPTION FROM APPM_APPLICATION AS APP INNER JOIN APPM_PLATFORM AS "
|
||||||
|
+ "APL ON APP.PLATFORM_ID = APL.ID INNER JOIN APPM_APPLICATION_CATEGORY AS CAT ON "
|
||||||
|
+ "APP.APPLICATION_CATEGORY_ID = CAT.ID INNER JOIN APPM_LIFECYCLE_STATE AS "
|
||||||
|
+ "LS ON APP.LIFECYCLE_STATE_ID = LS.ID ";
|
||||||
|
|
||||||
|
if (filter.getSearchQuery() != null && !filter.getSearchQuery().isEmpty()) {
|
||||||
|
sql += "WHERE APP.NAME LIKE ? ";
|
||||||
|
}
|
||||||
|
sql += "LIMIT ?,?;";
|
||||||
|
|
||||||
|
stmt = conn.prepareStatement(sql);
|
||||||
|
int index = 0;
|
||||||
|
if (filter.getSearchQuery() != null && !filter.getSearchQuery().isEmpty()) {
|
||||||
|
stmt.setString(++index, "%" + filter.getSearchQuery() + "%");
|
||||||
|
}
|
||||||
|
stmt.setInt(++index, filter.getOffset());
|
||||||
|
stmt.setInt(++index, filter.getLimit());
|
||||||
|
|
||||||
|
rs = stmt.executeQuery();
|
||||||
|
|
||||||
|
int length = 0;
|
||||||
|
|
||||||
|
while (rs.next()) {
|
||||||
|
//Getting properties
|
||||||
|
sql = "SELECT * FROM APPM_APPLICATION_PROPERTY WHERE APPLICATION_ID=?";
|
||||||
|
stmt = conn.prepareStatement(sql);
|
||||||
|
stmt.setInt(1, rs.getInt("ID"));
|
||||||
|
ResultSet rsProperties = stmt.executeQuery();
|
||||||
|
|
||||||
|
//Getting tags
|
||||||
|
sql = "SELECT * FROM APPM_APPLICATION_TAG WHERE APPLICATION_ID=?";
|
||||||
|
stmt = conn.prepareStatement(sql);
|
||||||
|
stmt.setInt(1, rs.getInt("ID"));
|
||||||
|
ResultSet rsTags = stmt.executeQuery();
|
||||||
|
|
||||||
|
applications.add(Util.loadApplication(rs, rsProperties, rsTags));
|
||||||
|
Util.cleanupResources(null, rsProperties);
|
||||||
|
Util.cleanupResources(null, rsTags);
|
||||||
|
length++;
|
||||||
|
}
|
||||||
|
|
||||||
|
pagination.setSize(length);
|
||||||
|
pagination.setCount(this.getApplicationCount(filter));
|
||||||
|
applicationList.setApplications(applications);
|
||||||
|
applicationList.setPagination(pagination);
|
||||||
|
} catch (SQLException e) {
|
||||||
|
throw new ApplicationManagementDAOException("Error occurred while getting application List", e);
|
||||||
|
} catch (JSONException e) {
|
||||||
|
throw new ApplicationManagementDAOException("Error occurred while parsing JSON", e);
|
||||||
|
} catch (DBConnectionException e) {
|
||||||
|
throw new ApplicationManagementDAOException("Error occurred while obtaining the DB connection.", e);
|
||||||
|
} finally {
|
||||||
|
Util.cleanupResources(stmt, rs);
|
||||||
|
}
|
||||||
|
return applicationList;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getApplicationCount(Filter filter) throws ApplicationManagementDAOException {
|
||||||
|
if(log.isDebugEnabled()){
|
||||||
|
log.debug("Getting application count from the database");
|
||||||
|
log.debug(String.format("Filter: limit=%s, offset=%", filter.getLimit(), filter.getOffset()));
|
||||||
|
}
|
||||||
|
|
||||||
|
Connection conn;
|
||||||
|
PreparedStatement stmt = null;
|
||||||
|
ResultSet rs = null;
|
||||||
|
String sql = "";
|
||||||
|
int count = 0;
|
||||||
|
|
||||||
|
if (filter == null) {
|
||||||
|
throw new ApplicationManagementDAOException("Filter need to be instantiated");
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
conn = this.getConnection();
|
||||||
|
sql += "SELECT COUNT(APP.ID) AS APP_COUNT ";
|
||||||
|
sql += "FROM APPM_APPLICATION AS APP ";
|
||||||
|
sql += "INNER JOIN APPM_PLATFORM AS APL ON APP.PLATFORM_ID = APL.ID ";
|
||||||
|
sql += "INNER JOIN APPM_APPLICATION_CATEGORY AS CAT ON APP.APPLICATION_CATEGORY_ID = CAT.ID ";
|
||||||
|
|
||||||
|
if (filter.getSearchQuery() != null && !filter.getSearchQuery().isEmpty()) {
|
||||||
|
sql += "WHERE APP.NAME LIKE ? ";
|
||||||
|
}
|
||||||
|
sql += ";";
|
||||||
|
|
||||||
|
stmt = conn.prepareStatement(sql);
|
||||||
|
int index = 0;
|
||||||
|
if (filter.getSearchQuery() != null && !filter.getSearchQuery().isEmpty()) {
|
||||||
|
stmt.setString(++index, "%" + filter.getSearchQuery() + "%");
|
||||||
|
}
|
||||||
|
rs = stmt.executeQuery();
|
||||||
|
if (rs.next()) {
|
||||||
|
count = rs.getInt("APP_COUNT");
|
||||||
|
}
|
||||||
|
} catch (SQLException e) {
|
||||||
|
throw new ApplicationManagementDAOException("Error occurred while getting application List", e);
|
||||||
|
} catch (DBConnectionException e) {
|
||||||
|
throw new ApplicationManagementDAOException("Error occurred while obtaining the DB connection.", e);
|
||||||
|
} finally {
|
||||||
|
Util.cleanupResources(stmt, rs);
|
||||||
|
}
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Application getApplication(String uuid) throws ApplicationManagementDAOException {
|
||||||
|
if (log.isDebugEnabled()) {
|
||||||
|
log.debug("Getting application with the UUID(" + uuid + ") from the database");
|
||||||
|
}
|
||||||
|
Connection conn = null;
|
||||||
|
PreparedStatement stmt = null;
|
||||||
|
ResultSet rs = null;
|
||||||
|
String sql = "";
|
||||||
|
Application application = null;
|
||||||
|
try {
|
||||||
|
|
||||||
|
conn = this.getDBConnection();
|
||||||
|
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, "
|
||||||
|
+ "LS.DESCRIPTION AS LS_DESCRIPTION FROM APPM_APPLICATION AS APP INNER JOIN APPM_PLATFORM AS "
|
||||||
|
+ "APL ON APP.PLATFORM_ID = APL.ID INNER JOIN APPM_APPLICATION_CATEGORY AS CAT ON "
|
||||||
|
+ "APP.APPLICATION_CATEGORY_ID = CAT.ID INNER JOIN APPM_LIFECYCLE_STATE AS "
|
||||||
|
+ "LS ON APP.LIFECYCLE_STATE_ID = LS.ID WHERE UUID = ?";
|
||||||
|
|
||||||
|
stmt = conn.prepareStatement(sql);
|
||||||
|
stmt.setString(1, uuid);
|
||||||
|
rs = stmt.executeQuery();
|
||||||
|
|
||||||
|
if (log.isDebugEnabled()) {
|
||||||
|
log.debug("Successfully retrieved basic details of the application with the UUID " + uuid);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (rs.next()) {
|
||||||
|
//Getting properties
|
||||||
|
sql = "SELECT * FROM APPM_APPLICATION_PROPERTY WHERE APPLICATION_ID=?";
|
||||||
|
stmt = conn.prepareStatement(sql);
|
||||||
|
stmt.setInt(1, rs.getInt("ID"));
|
||||||
|
ResultSet rsProperties = stmt.executeQuery();
|
||||||
|
|
||||||
|
//Getting tags
|
||||||
|
sql = "SELECT * FROM APPM_APPLICATION_TAG WHERE APPLICATION_ID=?";
|
||||||
|
stmt = conn.prepareStatement(sql);
|
||||||
|
stmt.setInt(1, rs.getInt("ID"));
|
||||||
|
ResultSet rsTags = stmt.executeQuery();
|
||||||
|
|
||||||
|
application = Util.loadApplication(rs, rsProperties, rsTags);
|
||||||
|
Util.cleanupResources(null, rsProperties);
|
||||||
|
Util.cleanupResources(null, rsTags);
|
||||||
|
}
|
||||||
|
} catch (SQLException e) {
|
||||||
|
throw new ApplicationManagementDAOException("Error occurred while getting application details with UUID "
|
||||||
|
+ uuid, e);
|
||||||
|
} catch (JSONException e) {
|
||||||
|
throw new ApplicationManagementDAOException("Error occurred while parsing JSON", e);
|
||||||
|
} catch (DBConnectionException e) {
|
||||||
|
throw new ApplicationManagementDAOException("Error occurred while obtaining the DB connection.", e);
|
||||||
|
} finally {
|
||||||
|
Util.cleanupResources(stmt, rs);
|
||||||
|
}
|
||||||
|
return application;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void changeLifecycle(String applicationUUID, String lifecycleIdentifier, String userName) throws
|
||||||
|
ApplicationManagementDAOException {
|
||||||
|
if (log.isDebugEnabled()) {
|
||||||
|
log.debug("Change Life cycle status change " + lifecycleIdentifier + "request received to the DAO "
|
||||||
|
+ "level for the application with " + "the UUID '" + applicationUUID + "' from the user "
|
||||||
|
+ userName);
|
||||||
|
}
|
||||||
|
Connection conn;
|
||||||
|
PreparedStatement stmt = null;
|
||||||
|
try {
|
||||||
|
conn = this.getDBConnection();
|
||||||
|
String sql = "UPDATE APPM_APPLICATION SET "
|
||||||
|
+ "LIFECYCLE_STATE_ID = (SELECT ID FROM APPM_LIFECYCLE_STATE WHERE IDENTIFIER = ?), "
|
||||||
|
+ "LIFECYCLE_STATE_MODIFIED_BY = ?, LIFECYCLE_STATE_MODIFIED_AT = ? WHERE UUID = ?";
|
||||||
|
stmt = conn.prepareStatement(sql);
|
||||||
|
stmt.setString(1, lifecycleIdentifier);
|
||||||
|
stmt.setString(2, userName);
|
||||||
|
stmt.setDate(3, new Date(System.currentTimeMillis()));
|
||||||
|
stmt.setString(4, applicationUUID);
|
||||||
|
stmt.executeUpdate();
|
||||||
|
} catch (DBConnectionException e) {
|
||||||
|
throw new ApplicationManagementDAOException("Error occurred while obtaining the DB connection.", e);
|
||||||
|
} catch (SQLException e) {
|
||||||
|
throw new ApplicationManagementDAOException(
|
||||||
|
"Error occurred while changing lifecycle of application: " + applicationUUID + " to: "
|
||||||
|
+ lifecycleIdentifier + " state.", e);
|
||||||
|
} finally {
|
||||||
|
Util.cleanupResources(stmt, null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<LifecycleStateTransition> getNextLifeCycleStates(String applicationUUID, int tenantId)
|
||||||
|
throws ApplicationManagementDAOException {
|
||||||
|
Connection connection = null;
|
||||||
|
PreparedStatement preparedStatement = null;
|
||||||
|
ResultSet resultSet = null;
|
||||||
|
|
||||||
|
String sql = "SELECT STATE.NAME, TRANSITION.DESCRIPTION, TRANSITION.PERMISSION FROM ( SELECT * FROM "
|
||||||
|
+ "APPM_LIFECYCLE_STATE ) STATE RIGHT JOIN (SELECT * FROM APPM_LIFECYCLE_STATE_TRANSITION WHERE "
|
||||||
|
+ "INITIAL_STATE = (SELECT LIFECYCLE_STATE_ID FROM APPM_APPLICATION WHERE UUID = ?)) "
|
||||||
|
+ "TRANSITION ON TRANSITION.NEXT_STATE = STATE.ID";
|
||||||
|
|
||||||
|
try {
|
||||||
|
connection = this.getDBConnection();
|
||||||
|
preparedStatement = connection.prepareStatement(sql);
|
||||||
|
preparedStatement.setString(1, applicationUUID);
|
||||||
|
resultSet = preparedStatement.executeQuery();
|
||||||
|
|
||||||
|
List<LifecycleStateTransition> lifecycleStateTransitions = new ArrayList<>();
|
||||||
|
|
||||||
|
while(resultSet.next()) {
|
||||||
|
LifecycleStateTransition lifecycleStateTransition = new LifecycleStateTransition();
|
||||||
|
lifecycleStateTransition.setDescription(resultSet.getString(2));
|
||||||
|
lifecycleStateTransition.setNextState(resultSet.getString(1));
|
||||||
|
lifecycleStateTransition.setPermission(resultSet.getString(3));
|
||||||
|
lifecycleStateTransitions.add(lifecycleStateTransition);
|
||||||
|
}
|
||||||
|
return lifecycleStateTransitions;
|
||||||
|
} catch (DBConnectionException e) {
|
||||||
|
throw new ApplicationManagementDAOException("Error while getting the DBConnection for getting the life "
|
||||||
|
+ "cycle states for the application with the UUID : " + applicationUUID, e);
|
||||||
|
} catch (SQLException e) {
|
||||||
|
throw new ApplicationManagementDAOException("SQL exception while executing the query '" + sql + "'.", e);
|
||||||
|
} finally {
|
||||||
|
Util.cleanupResources(preparedStatement, resultSet);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Application editApplication(Application application, int tenantId) throws ApplicationManagementDAOException {
|
||||||
|
Connection conn = null;
|
||||||
|
PreparedStatement stmt = null;
|
||||||
|
ResultSet rs = null;
|
||||||
|
String sql = "";
|
||||||
|
boolean isBatchExecutionSupported = ConnectionManagerUtil.isBatchQuerySupported();
|
||||||
|
try {
|
||||||
|
conn = this.getDBConnection();
|
||||||
|
int index = 0;
|
||||||
|
sql += "UPDATE APPM_APPLICATION SET NAME = IFNULL (?, NAME), SHORT_DESCRIPTION = IFNULL "
|
||||||
|
+ "(?, SHORT_DESCRIPTION), DESCRIPTION = IFNULL (?, DESCRIPTION), ICON_NAME = IFNULL (?, ICON_NAME)"
|
||||||
|
+ ", BANNER_NAME = IFNULL (?, BANNER_NAME), VIDEO_NAME = IFNULL (?, VIDEO_NAME), "
|
||||||
|
+ "SCREENSHOTS = IFNULL (?, SCREENSHOTS), MODIFIED_AT = IFNULL (?, MODIFIED_AT), ";
|
||||||
|
|
||||||
|
if (application.getPayment() != null) {
|
||||||
|
sql += " IS_FREE = IFNULL (?, IS_FREE), ";
|
||||||
|
if (application.getPayment().getPaymentCurrency() != null) {
|
||||||
|
sql += "PAYMENT_CURRENCY = IFNULL (?, PAYMENT_CURRENCY), ";
|
||||||
|
}
|
||||||
|
sql += "PAYMENT_PRICE = IFNULL (?, PAYMENT_PRICE), ";
|
||||||
|
}
|
||||||
|
if (application.getCategory() != null && application.getCategory().getId() != 0) {
|
||||||
|
sql += "APPLICATION_CATEGORY_ID = IFNULL (?, APPLICATION_CATEGORY_ID), ";
|
||||||
|
}
|
||||||
|
if (application.getPlatform() != null && application.getPlatform().getId() != 0) {
|
||||||
|
sql += "PLATFORM_ID = IFNULL (?, PLATFORM_ID), ";
|
||||||
|
}
|
||||||
|
|
||||||
|
sql += "TENANT_ID = IFNULL (?, TENANT_ID) WHERE UUID = ?";
|
||||||
|
|
||||||
|
stmt = conn.prepareStatement(sql);
|
||||||
|
stmt.setString(++index, application.getName());
|
||||||
|
stmt.setString(++index, application.getShortDescription());
|
||||||
|
stmt.setString(++index, application.getDescription());
|
||||||
|
stmt.setString(++index, application.getIconName());
|
||||||
|
stmt.setString(++index, application.getBannerName());
|
||||||
|
stmt.setString(++index, application.getVideoName());
|
||||||
|
stmt.setString(++index, JSONUtil.listToJsonArrayString(application.getScreenshots()));
|
||||||
|
stmt.setDate(++index, new Date(application.getModifiedAt().getTime()));
|
||||||
|
if (application.getPayment() != null) {
|
||||||
|
stmt.setBoolean(++index, application.getPayment().isFreeApp());
|
||||||
|
if (application.getPayment().getPaymentCurrency() != null) {
|
||||||
|
stmt.setString(++index, application.getPayment().getPaymentCurrency());
|
||||||
|
}
|
||||||
|
stmt.setFloat(++index, application.getPayment().getPaymentPrice());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (application.getCategory() != null && application.getCategory().getId() != 0) {
|
||||||
|
stmt.setInt(++index, application.getCategory().getId());
|
||||||
|
}
|
||||||
|
if (application.getPlatform() != null && application.getPlatform().getId() != 0) {
|
||||||
|
stmt.setInt(++index, application.getPlatform().getId());
|
||||||
|
}
|
||||||
|
stmt.setInt(++index, tenantId);
|
||||||
|
stmt.setString(++index, application.getUuid());
|
||||||
|
stmt.executeUpdate();
|
||||||
|
|
||||||
|
application.setId(getApplicationId(application.getUuid()));
|
||||||
|
|
||||||
|
sql = "DELETE FROM APPM_APPLICATION_TAG WHERE APPLICATION_ID = ?";
|
||||||
|
stmt = conn.prepareStatement(sql);
|
||||||
|
stmt.setInt(1, application.getId());
|
||||||
|
stmt.executeUpdate();
|
||||||
|
|
||||||
|
// delete existing properties and add new ones. if no properties are set, existing ones will be deleted.
|
||||||
|
sql = "DELETE FROM APPM_APPLICATION_PROPERTY WHERE APPLICATION_ID = ?";
|
||||||
|
stmt = conn.prepareStatement(sql);
|
||||||
|
stmt.setInt(1, application.getId());
|
||||||
|
stmt.executeUpdate();
|
||||||
|
|
||||||
|
insertApplicationTagsAndProperties(application, stmt, conn, isBatchExecutionSupported);
|
||||||
|
} catch (DBConnectionException e) {
|
||||||
|
throw new ApplicationManagementDAOException("Error occurred while obtaining the DB connection.", e);
|
||||||
|
} catch (SQLException e) {
|
||||||
|
throw new ApplicationManagementDAOException("Error occurred while adding the application", e);
|
||||||
|
}
|
||||||
|
|
||||||
|
return application;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* To insert application properties and Tags
|
||||||
|
*
|
||||||
|
* @param application Application in which the properties and tags need to be inserted
|
||||||
|
*/
|
||||||
|
private void insertApplicationTagsAndProperties (Application application, PreparedStatement stmt, Connection
|
||||||
|
conn, boolean isBatchExecutionSupported) throws SQLException {
|
||||||
|
String sql;
|
||||||
|
if (application.getTags() != null && application.getTags().size() > 0) {
|
||||||
|
sql = "INSERT INTO APPM_APPLICATION_TAG (NAME, APPLICATION_ID) VALUES (?, ?); ";
|
||||||
|
stmt = conn.prepareStatement(sql);
|
||||||
|
for (String tag : application.getTags()) {
|
||||||
|
stmt.setString(1, tag);
|
||||||
|
stmt.setInt(2, application.getId());
|
||||||
|
|
||||||
|
if (isBatchExecutionSupported) {
|
||||||
|
stmt.addBatch();
|
||||||
|
} else {
|
||||||
|
stmt.execute();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (isBatchExecutionSupported) {
|
||||||
|
stmt.executeBatch();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (application.getProperties() != null && application.getProperties().size() > 0) {
|
||||||
|
sql = "INSERT INTO APPM_APPLICATION_PROPERTY (PROP_KEY, PROP_VAL, APPLICATION_ID) VALUES (?, ?, ?); ";
|
||||||
|
stmt = conn.prepareStatement(sql);
|
||||||
|
Iterator it = application.getProperties().entrySet().iterator();
|
||||||
|
while (it.hasNext()) {
|
||||||
|
Map.Entry<String, String> property = (Map.Entry) it.next();
|
||||||
|
stmt.setString(1, property.getKey());
|
||||||
|
stmt.setString(2, property.getValue());
|
||||||
|
stmt.setInt(3, application.getId());
|
||||||
|
if (isBatchExecutionSupported) {
|
||||||
|
stmt.addBatch();
|
||||||
|
} else {
|
||||||
|
stmt.execute();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (isBatchExecutionSupported) {
|
||||||
|
stmt.executeBatch();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void deleteApplication(String uuid) throws ApplicationManagementDAOException {
|
||||||
|
Connection conn;
|
||||||
|
PreparedStatement stmt = null;
|
||||||
|
try {
|
||||||
|
conn = this.getDBConnection();
|
||||||
|
String sql = "DELETE FROM APPM_APPLICATION WHERE UUID = ?";
|
||||||
|
stmt = conn.prepareStatement(sql);
|
||||||
|
stmt.setString(1, uuid);
|
||||||
|
stmt.executeUpdate();
|
||||||
|
|
||||||
|
} catch (DBConnectionException e) {
|
||||||
|
throw new ApplicationManagementDAOException("Error occurred while obtaining the DB connection.", e);
|
||||||
|
} catch (SQLException e) {
|
||||||
|
throw new ApplicationManagementDAOException("Error occurred while deleting the application: " + uuid, e);
|
||||||
|
} finally {
|
||||||
|
Util.cleanupResources(stmt, null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void deleteProperties(int applicationId) throws ApplicationManagementDAOException {
|
||||||
|
Connection conn = null;
|
||||||
|
PreparedStatement stmt = null;
|
||||||
|
try {
|
||||||
|
conn = this.getDBConnection();
|
||||||
|
String sql = "DELETE FROM APPM_APPLICATION_PROPERTY WHERE APPLICATION_ID = ?";
|
||||||
|
stmt = conn.prepareStatement(sql);
|
||||||
|
stmt.setInt(1, applicationId);
|
||||||
|
stmt.executeUpdate();
|
||||||
|
|
||||||
|
} catch (DBConnectionException e) {
|
||||||
|
throw new ApplicationManagementDAOException("Error occurred while obtaining the DB connection.", e);
|
||||||
|
} catch (SQLException e) {
|
||||||
|
throw new ApplicationManagementDAOException(
|
||||||
|
"Error occurred while deleting properties of application: " + applicationId, e);
|
||||||
|
} finally {
|
||||||
|
Util.cleanupResources(stmt, null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void deleteTags(int applicationId) throws ApplicationManagementDAOException {
|
||||||
|
|
||||||
|
Connection conn = null;
|
||||||
|
PreparedStatement stmt = null;
|
||||||
|
ResultSet rs = null;
|
||||||
|
try {
|
||||||
|
conn = this.getDBConnection();
|
||||||
|
String sql = "DELETE FROM APPM_APPLICATION_TAG WHERE APPLICATION_ID = ?";
|
||||||
|
stmt = conn.prepareStatement(sql);
|
||||||
|
stmt.setInt(1, applicationId);
|
||||||
|
stmt.executeUpdate();
|
||||||
|
|
||||||
|
} catch (DBConnectionException e) {
|
||||||
|
throw new ApplicationManagementDAOException("Error occurred while obtaining the DB connection.", e);
|
||||||
|
} catch (SQLException e) {
|
||||||
|
throw new ApplicationManagementDAOException(
|
||||||
|
"Error occurred while deleting tags of application: " + applicationId, e);
|
||||||
|
} finally {
|
||||||
|
Util.cleanupResources(stmt, rs);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getApplicationId(String uuid) throws ApplicationManagementDAOException {
|
||||||
|
Connection conn = null;
|
||||||
|
PreparedStatement stmt = null;
|
||||||
|
ResultSet rs = null;
|
||||||
|
String sql = "";
|
||||||
|
|
||||||
|
int id = 0;
|
||||||
|
|
||||||
|
try {
|
||||||
|
conn = this.getDBConnection();
|
||||||
|
sql += "SELECT ID FROM APPM_APPLICATION WHERE UUID = ?";
|
||||||
|
stmt = conn.prepareStatement(sql);
|
||||||
|
stmt.setString(1, uuid);
|
||||||
|
rs = stmt.executeQuery();
|
||||||
|
if (rs.next()) {
|
||||||
|
id = rs.getInt(1);
|
||||||
|
}
|
||||||
|
} catch (DBConnectionException e) {
|
||||||
|
throw new ApplicationManagementDAOException("Error occurred while obtaining the DB connection.", e);
|
||||||
|
} catch (SQLException e) {
|
||||||
|
throw new ApplicationManagementDAOException("Error occurred while getting application List", e);
|
||||||
|
} finally {
|
||||||
|
Util.cleanupResources(stmt, rs);
|
||||||
|
}
|
||||||
|
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addProperties(Map<String, String> properties) throws ApplicationManagementDAOException {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void editProperties(Map<String, String> properties) throws ApplicationManagementDAOException {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addRelease(ApplicationRelease release) throws ApplicationManagementDAOException {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@ -1,227 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2017, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
|
||||||
*
|
|
||||||
* WSO2 Inc. licenses this file to you under the Apache License,
|
|
||||||
* Version 2.0 (the "License"); you may not use this file except
|
|
||||||
* in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing,
|
|
||||||
* software distributed under the License is distributed on an
|
|
||||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
||||||
* KIND, either express or implied. See the License for the
|
|
||||||
* specific language governing permissions and limitations
|
|
||||||
* under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.wso2.carbon.device.application.mgt.core.dao.impl.application;
|
|
||||||
|
|
||||||
import org.apache.commons.logging.Log;
|
|
||||||
import org.apache.commons.logging.LogFactory;
|
|
||||||
import org.json.JSONException;
|
|
||||||
import org.wso2.carbon.device.application.mgt.common.*;
|
|
||||||
import org.wso2.carbon.device.application.mgt.common.exception.DBConnectionException;
|
|
||||||
import org.wso2.carbon.device.application.mgt.core.exception.ApplicationManagementDAOException;
|
|
||||||
import org.wso2.carbon.device.application.mgt.core.dao.common.Util;
|
|
||||||
import org.wso2.carbon.device.application.mgt.core.util.ConnectionManagerUtil;
|
|
||||||
|
|
||||||
import java.sql.Connection;
|
|
||||||
import java.sql.PreparedStatement;
|
|
||||||
import java.sql.ResultSet;
|
|
||||||
import java.sql.SQLException;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This class holds the generic implementation of ApplicationDAO which can be used to support ANSI db syntax.
|
|
||||||
*/
|
|
||||||
public class H2ApplicationDAOImpl extends AbstractApplicationDAOImpl {
|
|
||||||
|
|
||||||
private static final Log log = LogFactory.getLog(H2ApplicationDAOImpl.class);
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void changeLifecycle(String applicationUUID, String lifecycleIdentifier) throws ApplicationManagementDAOException {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<LifecycleStateTransition> getNextLifeCycleStates(String applicationUUID, int tenantId)
|
|
||||||
throws ApplicationManagementDAOException {
|
|
||||||
Connection connection = null;
|
|
||||||
PreparedStatement preparedStatement = null;
|
|
||||||
ResultSet resultSet = null;
|
|
||||||
|
|
||||||
String sql = "SELECT STATE.NAME, TRANSITION.DESCRIPTION, TRANSITION.PERMISSION FROM ( SELECT * FROM "
|
|
||||||
+ "APPM_LIFECYCLE_STATE ) STATE RIGHT JOIN (SELECT * FROM APPM_LIFECYCLE_STATE_TRANSITION WHERE "
|
|
||||||
+ "INITIAL_STATE = (SELECT LIFECYCLE_STATE_ID FROM APPM_APPLICATION WHERE UUID = ?)) "
|
|
||||||
+ "TRANSITION ON TRANSITION.NEXT_STATE = STATE.ID";
|
|
||||||
|
|
||||||
try {
|
|
||||||
connection = this.getDBConnection();
|
|
||||||
preparedStatement = connection.prepareStatement(sql);
|
|
||||||
preparedStatement.setString(1, applicationUUID);
|
|
||||||
resultSet = preparedStatement.executeQuery();
|
|
||||||
|
|
||||||
List<LifecycleStateTransition> lifecycleStateTransitions = new ArrayList<>();
|
|
||||||
|
|
||||||
while(resultSet.next()) {
|
|
||||||
LifecycleStateTransition lifecycleStateTransition = new LifecycleStateTransition();
|
|
||||||
lifecycleStateTransition.setDescription(resultSet.getString(2));
|
|
||||||
lifecycleStateTransition.setNextState(resultSet.getString(1));
|
|
||||||
lifecycleStateTransition.setPermission(resultSet.getString(3));
|
|
||||||
lifecycleStateTransitions.add(lifecycleStateTransition);
|
|
||||||
}
|
|
||||||
return lifecycleStateTransitions;
|
|
||||||
} catch (DBConnectionException e) {
|
|
||||||
throw new ApplicationManagementDAOException("Error while getting the DBConnection for getting the life "
|
|
||||||
+ "cycle states for the application with the UUID : " + applicationUUID, e);
|
|
||||||
} catch (SQLException e) {
|
|
||||||
throw new ApplicationManagementDAOException("SQL exception while executing the query '" + sql + "'.", e);
|
|
||||||
} finally {
|
|
||||||
Util.cleanupResources(preparedStatement, resultSet);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ApplicationList getApplications(Filter filter) throws ApplicationManagementDAOException {
|
|
||||||
|
|
||||||
if(log.isDebugEnabled()){
|
|
||||||
log.debug("Getting application data from the database");
|
|
||||||
log.debug(String.format("Filter: limit=%s, offset=%", filter.getLimit(), filter.getOffset()));
|
|
||||||
}
|
|
||||||
|
|
||||||
Connection conn = null;
|
|
||||||
PreparedStatement stmt = null;
|
|
||||||
ResultSet rs = null;
|
|
||||||
String sql = "";
|
|
||||||
ApplicationList applicationList = new ApplicationList();
|
|
||||||
List<Application> applications = new ArrayList<>();
|
|
||||||
Pagination pagination = new Pagination();
|
|
||||||
|
|
||||||
if (filter == null) {
|
|
||||||
throw new ApplicationManagementDAOException("Filter need to be instantiated");
|
|
||||||
} else {
|
|
||||||
pagination.setLimit(filter.getLimit());
|
|
||||||
pagination.setOffset(filter.getOffset());
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
|
|
||||||
conn = this.getConnection();
|
|
||||||
|
|
||||||
sql += "SELECT APP.*, APL.NAME AS APL_NAME, APL.IDENTIFIER AS APL_IDENTIFIER," +
|
|
||||||
" CAT.NAME AS CAT_NAME ";
|
|
||||||
sql += "FROM APPM_APPLICATION AS APP ";
|
|
||||||
sql += "INNER JOIN APPM_PLATFORM_APPLICATION_MAPPING AS APM ON APP.PLATFORM_APPLICATION_MAPPING_ID = APM.ID ";
|
|
||||||
sql += "INNER JOIN APPM_PLATFORM AS APL ON APM.PLATFORM_ID = APL.ID ";
|
|
||||||
sql += "INNER JOIN APPM_APPLICATION_CATEGORY AS CAT ON APP.APPLICATION_CATEGORY_ID = CAT.ID ";
|
|
||||||
|
|
||||||
if (filter.getSearchQuery() != null && !filter.getSearchQuery().isEmpty()) {
|
|
||||||
sql += "WHERE APP.NAME LIKE ? ";
|
|
||||||
}
|
|
||||||
sql += "LIMIT ?,?;";
|
|
||||||
|
|
||||||
stmt = conn.prepareStatement(sql);
|
|
||||||
int index = 0;
|
|
||||||
if (filter.getSearchQuery() != null && !filter.getSearchQuery().isEmpty()) {
|
|
||||||
stmt.setString(++index, "%" + filter.getSearchQuery() + "%");
|
|
||||||
}
|
|
||||||
stmt.setInt(++index, filter.getOffset());
|
|
||||||
stmt.setInt(++index, filter.getLimit());
|
|
||||||
|
|
||||||
rs = stmt.executeQuery();
|
|
||||||
|
|
||||||
int length = 0;
|
|
||||||
|
|
||||||
while (rs.next()) {
|
|
||||||
|
|
||||||
//Getting properties
|
|
||||||
sql = "SELECT * FROM APPM_APPLICATION_PROPERTY WHERE APPLICATION_ID=?";
|
|
||||||
stmt = conn.prepareStatement(sql);
|
|
||||||
stmt.setInt(1, rs.getInt("ID"));
|
|
||||||
ResultSet rsProperties = stmt.executeQuery();
|
|
||||||
|
|
||||||
//Getting tags
|
|
||||||
sql = "SELECT * FROM APPM_APPLICATION_TAG WHERE APPLICATION_ID=?";
|
|
||||||
stmt = conn.prepareStatement(sql);
|
|
||||||
stmt.setInt(1, rs.getInt("ID"));
|
|
||||||
ResultSet rsTags = stmt.executeQuery();
|
|
||||||
|
|
||||||
applications.add(Util.loadApplication(rs, rsProperties, rsTags));
|
|
||||||
Util.cleanupResources(null, rsProperties);
|
|
||||||
Util.cleanupResources(null, rsTags);
|
|
||||||
length++;
|
|
||||||
}
|
|
||||||
|
|
||||||
pagination.setSize(length);
|
|
||||||
pagination.setCount(this.getApplicationCount(filter));
|
|
||||||
applicationList.setApplications(applications);
|
|
||||||
applicationList.setPagination(pagination);
|
|
||||||
|
|
||||||
} catch (SQLException e) {
|
|
||||||
throw new ApplicationManagementDAOException("Error occurred while getting application List", e);
|
|
||||||
} catch (JSONException e) {
|
|
||||||
throw new ApplicationManagementDAOException("Error occurred while parsing JSON", e);
|
|
||||||
} catch (DBConnectionException e) {
|
|
||||||
throw new ApplicationManagementDAOException("Error occurred while obtaining the DB connection.", e);
|
|
||||||
} finally {
|
|
||||||
Util.cleanupResources(stmt, rs);
|
|
||||||
}
|
|
||||||
return applicationList;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Application getApplication(String uuid) throws ApplicationManagementDAOException {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getApplicationId(String uuid) throws ApplicationManagementDAOException {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void deleteApplication(String uuid) throws ApplicationManagementDAOException {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void deleteProperties(int applicationId) throws ApplicationManagementDAOException {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void deleteTags(int applicationId) throws ApplicationManagementDAOException {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Application editApplication(Application application) throws ApplicationManagementDAOException {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void addProperties(Map<String, String> properties) throws ApplicationManagementDAOException {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void editProperties(Map<String, String> properties) throws ApplicationManagementDAOException {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void changeLifeCycle(LifecycleState lifecycleState) throws ApplicationManagementDAOException {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void addRelease(ApplicationRelease release) throws ApplicationManagementDAOException {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
@ -1,441 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2017, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
|
||||||
*
|
|
||||||
* WSO2 Inc. licenses this file to you under the Apache License,
|
|
||||||
* Version 2.0 (the "License"); you may not use this file except
|
|
||||||
* in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing,
|
|
||||||
* software distributed under the License is distributed on an
|
|
||||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
||||||
* KIND, either express or implied. See the License for the
|
|
||||||
* specific language governing permissions and limitations
|
|
||||||
* under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.wso2.carbon.device.application.mgt.core.dao.impl.application;
|
|
||||||
|
|
||||||
import org.apache.commons.logging.Log;
|
|
||||||
import org.apache.commons.logging.LogFactory;
|
|
||||||
import org.json.JSONException;
|
|
||||||
import org.wso2.carbon.device.application.mgt.common.*;
|
|
||||||
import org.wso2.carbon.device.application.mgt.common.exception.DBConnectionException;
|
|
||||||
import org.wso2.carbon.device.application.mgt.core.exception.ApplicationManagementDAOException;
|
|
||||||
import org.wso2.carbon.device.application.mgt.core.dao.common.Util;
|
|
||||||
import org.wso2.carbon.device.application.mgt.core.util.ConnectionManagerUtil;
|
|
||||||
import org.wso2.carbon.device.application.mgt.core.util.JSONUtil;
|
|
||||||
|
|
||||||
import java.sql.*;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This class holds the generic implementation of ApplicationDAO which can be used to support ANSI db syntax.
|
|
||||||
*/
|
|
||||||
public class MySQLApplicationDAOImpl extends AbstractApplicationDAOImpl {
|
|
||||||
|
|
||||||
private static final Log log = LogFactory.getLog(MySQLApplicationDAOImpl.class);
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ApplicationList getApplications(Filter filter) throws ApplicationManagementDAOException {
|
|
||||||
|
|
||||||
if (log.isDebugEnabled()) {
|
|
||||||
log.debug("Getting application data from the database");
|
|
||||||
log.debug(String.format("Filter: limit=%s, offset=%", filter.getLimit(), filter.getOffset()));
|
|
||||||
}
|
|
||||||
|
|
||||||
Connection conn = null;
|
|
||||||
PreparedStatement stmt = null;
|
|
||||||
ResultSet rs = null;
|
|
||||||
String sql = "";
|
|
||||||
ApplicationList applicationList = new ApplicationList();
|
|
||||||
List<Application> applications = new ArrayList<>();
|
|
||||||
Pagination pagination = new Pagination();
|
|
||||||
|
|
||||||
if (filter == null) {
|
|
||||||
throw new ApplicationManagementDAOException("Filter need to be instantiated");
|
|
||||||
} else {
|
|
||||||
pagination.setLimit(filter.getLimit());
|
|
||||||
pagination.setOffset(filter.getOffset());
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
|
|
||||||
conn = this.getConnection();
|
|
||||||
|
|
||||||
sql += "SELECT SQL_CALC_FOUND_ROWS APP.*, APL.NAME AS APL_NAME, APL.IDENTIFIER AS APL_IDENTIFIER, ";
|
|
||||||
sql += "CAT.ID AS CAT_ID, CAT.NAME AS CAT_NAME ";
|
|
||||||
sql += "FROM APPM_APPLICATION AS APP ";
|
|
||||||
sql += "INNER JOIN APPM_PLATFORM AS APL ON APP.PLATFORM_ID = APL.ID ";
|
|
||||||
sql += "INNER JOIN APPM_APPLICATION_CATEGORY AS CAT ON APP.APPLICATION_CATEGORY_ID = CAT.ID ";
|
|
||||||
|
|
||||||
if (filter.getSearchQuery() != null && !filter.getSearchQuery().isEmpty()) {
|
|
||||||
sql += "WHERE APP.NAME LIKE ? ";
|
|
||||||
}
|
|
||||||
sql += "LIMIT ?,?;";
|
|
||||||
|
|
||||||
stmt = conn.prepareStatement(sql);
|
|
||||||
int index = 0;
|
|
||||||
if (filter.getSearchQuery() != null && !filter.getSearchQuery().isEmpty()) {
|
|
||||||
stmt.setString(++index, "%" + filter.getSearchQuery() + "%");
|
|
||||||
}
|
|
||||||
stmt.setInt(++index, filter.getOffset());
|
|
||||||
stmt.setInt(++index, filter.getLimit());
|
|
||||||
|
|
||||||
rs = stmt.executeQuery();
|
|
||||||
|
|
||||||
int length = 0;
|
|
||||||
sql = "SELECT FOUND_ROWS() AS COUNT;"; //TODO: from which tables????
|
|
||||||
stmt = conn.prepareStatement(sql);
|
|
||||||
ResultSet rsCount = stmt.executeQuery();
|
|
||||||
if (rsCount.next()) {
|
|
||||||
pagination.setCount(rsCount.getInt("COUNT"));
|
|
||||||
}
|
|
||||||
|
|
||||||
while (rs.next()) {
|
|
||||||
|
|
||||||
//Getting properties
|
|
||||||
sql = "SELECT * FROM APPM_APPLICATION_PROPERTY WHERE APPLICATION_ID=?";
|
|
||||||
stmt = conn.prepareStatement(sql);
|
|
||||||
stmt.setInt(1, rs.getInt("ID"));
|
|
||||||
ResultSet rsProperties = stmt.executeQuery();
|
|
||||||
|
|
||||||
//Getting tags
|
|
||||||
sql = "SELECT * FROM APPM_APPLICATION_TAG WHERE APPLICATION_ID=?";
|
|
||||||
stmt = conn.prepareStatement(sql);
|
|
||||||
stmt.setInt(1, rs.getInt("ID"));
|
|
||||||
ResultSet rsTags = stmt.executeQuery();
|
|
||||||
|
|
||||||
applications.add(Util.loadApplication(rs, rsProperties, rsTags));
|
|
||||||
Util.cleanupResources(null, rsProperties);
|
|
||||||
Util.cleanupResources(null, rsTags);
|
|
||||||
length++;
|
|
||||||
}
|
|
||||||
|
|
||||||
pagination.setSize(length);
|
|
||||||
|
|
||||||
applicationList.setApplications(applications);
|
|
||||||
applicationList.setPagination(pagination);
|
|
||||||
|
|
||||||
} catch (SQLException e) {
|
|
||||||
throw new ApplicationManagementDAOException("Error occurred while getting application List", e);
|
|
||||||
} catch (JSONException e) {
|
|
||||||
throw new ApplicationManagementDAOException("Error occurred while parsing JSON", e);
|
|
||||||
} catch (DBConnectionException e) {
|
|
||||||
throw new ApplicationManagementDAOException("Error occurred while obtaining the DB connection.", e);
|
|
||||||
} finally {
|
|
||||||
Util.cleanupResources(stmt, rs);
|
|
||||||
}
|
|
||||||
return applicationList;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Application getApplication(String uuid) throws ApplicationManagementDAOException {
|
|
||||||
if (log.isDebugEnabled()) {
|
|
||||||
log.debug("Getting application data from the database");
|
|
||||||
}
|
|
||||||
|
|
||||||
Connection conn = null;
|
|
||||||
PreparedStatement stmt = null;
|
|
||||||
ResultSet rs = null;
|
|
||||||
String sql = "";
|
|
||||||
Application application = new Application();
|
|
||||||
try {
|
|
||||||
|
|
||||||
conn = this.getConnection();
|
|
||||||
|
|
||||||
sql += "SELECT SQL_CALC_FOUND_ROWS APP.*, APL.NAME AS APL_NAME, APL.IDENTIFIER AS APL_IDENTIFIER, ";
|
|
||||||
sql += "CAT.ID AS CAT_ID, CAT.NAME AS CAT_NAME ";
|
|
||||||
sql += "FROM APPM_APPLICATION AS APP ";
|
|
||||||
sql += "INNER JOIN APPM_PLATFORM AS APL ON APP.PLATFORM_ID = APL.ID ";
|
|
||||||
sql += "INNER JOIN APPM_APPLICATION_CATEGORY AS CAT ON APP.APPLICATION_CATEGORY_ID = CAT.ID ";
|
|
||||||
sql += "WHERE UUID = ?";
|
|
||||||
|
|
||||||
stmt = conn.prepareStatement(sql);
|
|
||||||
stmt.setString(1, uuid);
|
|
||||||
rs = stmt.executeQuery();
|
|
||||||
|
|
||||||
if (rs.next()) {
|
|
||||||
//Getting properties
|
|
||||||
sql = "SELECT * FROM APPM_APPLICATION_PROPERTY WHERE APPLICATION_ID=?";
|
|
||||||
stmt = conn.prepareStatement(sql);
|
|
||||||
stmt.setInt(1, rs.getInt("ID"));
|
|
||||||
ResultSet rsProperties = stmt.executeQuery();
|
|
||||||
|
|
||||||
//Getting tags
|
|
||||||
sql = "SELECT * FROM APPM_APPLICATION_TAG WHERE APPLICATION_ID=?";
|
|
||||||
stmt = conn.prepareStatement(sql);
|
|
||||||
stmt.setInt(1, rs.getInt("ID"));
|
|
||||||
ResultSet rsTags = stmt.executeQuery();
|
|
||||||
|
|
||||||
application = Util.loadApplication(rs, rsProperties, rsTags);
|
|
||||||
Util.cleanupResources(null, rsProperties);
|
|
||||||
Util.cleanupResources(null, rsTags);
|
|
||||||
}
|
|
||||||
} catch (SQLException e) {
|
|
||||||
throw new ApplicationManagementDAOException("Error occurred while getting application List", e);
|
|
||||||
} catch (JSONException e) {
|
|
||||||
throw new ApplicationManagementDAOException("Error occurred while parsing JSON", e);
|
|
||||||
} catch (DBConnectionException e) {
|
|
||||||
throw new ApplicationManagementDAOException("Error occurred while obtaining the DB connection.", e);
|
|
||||||
} finally {
|
|
||||||
Util.cleanupResources(stmt, rs);
|
|
||||||
}
|
|
||||||
return application;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void deleteApplication(String uuid) throws ApplicationManagementDAOException {
|
|
||||||
Connection conn = null;
|
|
||||||
PreparedStatement stmt = null;
|
|
||||||
ResultSet rs = null;
|
|
||||||
try {
|
|
||||||
conn = this.getDBConnection();
|
|
||||||
String sql = "DELETE FROM APPM_APPLICATION WHERE UUID = ?";
|
|
||||||
stmt = conn.prepareStatement(sql);
|
|
||||||
stmt.setString(1, uuid);
|
|
||||||
stmt.executeUpdate();
|
|
||||||
|
|
||||||
} catch (DBConnectionException e) {
|
|
||||||
throw new ApplicationManagementDAOException("Error occurred while obtaining the DB connection.", e);
|
|
||||||
} catch (SQLException e) {
|
|
||||||
throw new ApplicationManagementDAOException("Error occurred while deleting the application: " + uuid, e);
|
|
||||||
} finally {
|
|
||||||
Util.cleanupResources(stmt, rs);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getApplicationId(String uuid) throws ApplicationManagementDAOException {
|
|
||||||
Connection conn = null;
|
|
||||||
PreparedStatement stmt = null;
|
|
||||||
ResultSet rs = null;
|
|
||||||
String sql = "";
|
|
||||||
|
|
||||||
int id = 0;
|
|
||||||
|
|
||||||
try {
|
|
||||||
conn = this.getDBConnection();
|
|
||||||
sql += "SELECT ID FROM APPM_APPLICATION WHERE UUID = ?";
|
|
||||||
stmt = conn.prepareStatement(sql);
|
|
||||||
stmt.setString(1, uuid);
|
|
||||||
rs = stmt.executeQuery();
|
|
||||||
if (rs.next()) {
|
|
||||||
id = rs.getInt(1);
|
|
||||||
}
|
|
||||||
} catch (DBConnectionException e) {
|
|
||||||
throw new ApplicationManagementDAOException("Error occurred while obtaining the DB connection.", e);
|
|
||||||
} catch (SQLException e) {
|
|
||||||
throw new ApplicationManagementDAOException("Error occurred while getting application List", e);
|
|
||||||
} finally {
|
|
||||||
Util.cleanupResources(stmt, rs);
|
|
||||||
}
|
|
||||||
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Application editApplication(Application application) throws ApplicationManagementDAOException {
|
|
||||||
|
|
||||||
Connection conn = null;
|
|
||||||
PreparedStatement stmt = null;
|
|
||||||
ResultSet rs = null;
|
|
||||||
String sql = "";
|
|
||||||
|
|
||||||
try {
|
|
||||||
conn = this.getConnection();
|
|
||||||
sql += "UPDATE APPM_APPLICATION SET ";
|
|
||||||
sql += "NAME = IFNULL (?, NAME), ";
|
|
||||||
sql += "SHORT_DESCRIPTION = IFNULL (?, SHORT_DESCRIPTION), DESCRIPTION = IFNULL (?, DESCRIPTION), ";
|
|
||||||
sql += "ICON_NAME = IFNULL (?, ICON_NAME), BANNER_NAME = IFNULL (?, BANNER_NAME), ";
|
|
||||||
sql += "VIDEO_NAME = IFNULL (?, VIDEO_NAME), SCREENSHOTS = IFNULL (?, SCREENSHOTS), ";
|
|
||||||
sql += "MODIFIED_AT = IFNULL (?, MODIFIED_AT), ";
|
|
||||||
if (application.getPayment() != null) {
|
|
||||||
sql += " IS_FREE = IFNULL (?, IS_FREE), ";
|
|
||||||
if (application.getPayment().getPaymentCurrency() != null) {
|
|
||||||
sql += "PAYMENT_CURRENCY = IFNULL (?, PAYMENT_CURRENCY), ";
|
|
||||||
}
|
|
||||||
sql += "PAYMENT_PRICE = IFNULL (?, PAYMENT_PRICE), ";
|
|
||||||
}
|
|
||||||
if (application.getCategory() != null && application.getCategory().getId() != 0) {
|
|
||||||
sql += "APPLICATION_CATEGORY_ID = IFNULL (?, APPLICATION_CATEGORY_ID), ";
|
|
||||||
}
|
|
||||||
if (application.getPlatform() != null && application.getPlatform().getId() != 0) {
|
|
||||||
sql += "PLATFORM_ID = IFNULL (?, PLATFORM_ID), ";
|
|
||||||
}
|
|
||||||
|
|
||||||
sql += "TENANT_ID = IFNULL (?, TENANT_ID) ";
|
|
||||||
sql += "WHERE UUID = ?";
|
|
||||||
|
|
||||||
int i = 0;
|
|
||||||
stmt = conn.prepareStatement(sql);
|
|
||||||
stmt.setString(++i, application.getName());
|
|
||||||
stmt.setString(++i, application.getShortDescription());
|
|
||||||
stmt.setString(++i, application.getDescription());
|
|
||||||
stmt.setString(++i, application.getIconName());
|
|
||||||
stmt.setString(++i, application.getBannerName());
|
|
||||||
stmt.setString(++i, application.getVideoName());
|
|
||||||
stmt.setString(++i, JSONUtil.listToJsonArrayString(application.getScreenshots()));
|
|
||||||
stmt.setDate(++i, new Date(application.getModifiedAt().getTime()));
|
|
||||||
if (application.getPayment() != null) {
|
|
||||||
stmt.setBoolean(++i, application.getPayment().isFreeApp());
|
|
||||||
if (application.getPayment().getPaymentCurrency() != null) {
|
|
||||||
stmt.setString(++i, application.getPayment().getPaymentCurrency());
|
|
||||||
}
|
|
||||||
stmt.setFloat(++i, application.getPayment().getPaymentPrice());
|
|
||||||
}
|
|
||||||
|
|
||||||
if (application.getCategory() != null && application.getCategory().getId() != 0) {
|
|
||||||
stmt.setInt(++i, application.getCategory().getId());
|
|
||||||
}
|
|
||||||
if (application.getPlatform() != null && application.getPlatform().getId() != 0) {
|
|
||||||
stmt.setInt(++i, application.getPlatform().getId());
|
|
||||||
}
|
|
||||||
stmt.setInt(++i, application.getUser().getTenantId());
|
|
||||||
stmt.setString(++i, application.getUuid());
|
|
||||||
stmt.executeUpdate();
|
|
||||||
|
|
||||||
application.setId(getApplicationId(application.getUuid()));
|
|
||||||
|
|
||||||
if (application.getTags() != null && application.getTags().size() > 0) {
|
|
||||||
sql = "DELETE FROM APPM_APPLICATION_TAG WHERE APPLICATION_ID = ?";
|
|
||||||
stmt = conn.prepareStatement(sql);
|
|
||||||
stmt.setInt(1, application.getId());
|
|
||||||
stmt.executeUpdate();
|
|
||||||
|
|
||||||
sql = "INSERT INTO APPM_APPLICATION_TAG (NAME, APPLICATION_ID) VALUES (?, ?); ";
|
|
||||||
stmt = conn.prepareStatement(sql);
|
|
||||||
for (String tag : application.getTags()) {
|
|
||||||
stmt.setString(1, tag);
|
|
||||||
stmt.setInt(2, application.getId());
|
|
||||||
stmt.addBatch();
|
|
||||||
}
|
|
||||||
stmt.executeBatch();
|
|
||||||
}
|
|
||||||
|
|
||||||
// delete existing properties and add new ones. if no properties are set, existing ones will be deleted.
|
|
||||||
sql = "DELETE FROM APPM_APPLICATION_PROPERTY WHERE APPLICATION_ID = ?";
|
|
||||||
stmt = conn.prepareStatement(sql);
|
|
||||||
stmt.setInt(1, application.getId());
|
|
||||||
stmt.executeUpdate();
|
|
||||||
|
|
||||||
sql = "INSERT INTO APPM_APPLICATION_PROPERTY (PROP_KEY, PROP_VAL, APPLICATION_ID) VALUES (?, ?, ?); ";
|
|
||||||
stmt = conn.prepareStatement(sql);
|
|
||||||
for (String propKey : application.getProperties().keySet()) {
|
|
||||||
stmt.setString(1, propKey);
|
|
||||||
stmt.setString(2, application.getProperties().get(propKey));
|
|
||||||
stmt.setInt(3, application.getId());
|
|
||||||
stmt.addBatch();
|
|
||||||
}
|
|
||||||
stmt.executeBatch();
|
|
||||||
|
|
||||||
} catch (DBConnectionException e) {
|
|
||||||
throw new ApplicationManagementDAOException("Error occurred while obtaining the DB connection.", e);
|
|
||||||
} catch (SQLException e) {
|
|
||||||
throw new ApplicationManagementDAOException("Error occurred while adding the application", e);
|
|
||||||
}
|
|
||||||
|
|
||||||
return application;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void addProperties(Map<String, String> properties) throws ApplicationManagementDAOException {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void editProperties(Map<String, String> properties) throws ApplicationManagementDAOException {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void deleteProperties(int applicationId) throws ApplicationManagementDAOException {
|
|
||||||
Connection conn = null;
|
|
||||||
PreparedStatement stmt = null;
|
|
||||||
try {
|
|
||||||
conn = this.getDBConnection();
|
|
||||||
String sql = "DELETE FROM APPM_APPLICATION_PROPERTY WHERE APPLICATION_ID = ?";
|
|
||||||
stmt = conn.prepareStatement(sql);
|
|
||||||
stmt.setInt(1, applicationId);
|
|
||||||
stmt.executeUpdate();
|
|
||||||
|
|
||||||
} catch (DBConnectionException e) {
|
|
||||||
throw new ApplicationManagementDAOException("Error occurred while obtaining the DB connection.", e);
|
|
||||||
} catch (SQLException e) {
|
|
||||||
throw new ApplicationManagementDAOException("Error occurred while deleting properties of application: " + applicationId, e);
|
|
||||||
} finally {
|
|
||||||
Util.cleanupResources(stmt, null);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void changeLifecycle(String applicationUUID, String lifecycleIdentifier) throws ApplicationManagementDAOException {
|
|
||||||
Connection conn = null;
|
|
||||||
PreparedStatement stmt = null;
|
|
||||||
ResultSet rs = null;
|
|
||||||
try {
|
|
||||||
conn = this.getDBConnection();
|
|
||||||
String sql = "UPDATE APPM_APPLICATION SET " +
|
|
||||||
"LIFECYCLE_STATE_ID = (SELECT ID FROM APPM_LIFECYCLE_STATE WHERE IDENTIFIER = ?), " +
|
|
||||||
"LIFECYCLE_STATE_MODIFIED_BY = ?, " +
|
|
||||||
"LIFECYCLE_STATE_MODIFIED_AT = ? " +
|
|
||||||
"WHERE UUID = ?";
|
|
||||||
stmt = conn.prepareStatement(sql);
|
|
||||||
stmt.setString(1, lifecycleIdentifier);
|
|
||||||
stmt.setString(2, "admin");
|
|
||||||
stmt.setDate(3, new Date(System.currentTimeMillis()));
|
|
||||||
stmt.setString(4, applicationUUID);
|
|
||||||
stmt.executeUpdate();
|
|
||||||
|
|
||||||
} catch (DBConnectionException e) {
|
|
||||||
throw new ApplicationManagementDAOException("Error occurred while obtaining the DB connection.", e);
|
|
||||||
} catch (SQLException e) {
|
|
||||||
throw new ApplicationManagementDAOException("Error occurred while changing lifecycle of application: " + applicationUUID + " to: " + lifecycleIdentifier + " state.", e);
|
|
||||||
} finally {
|
|
||||||
Util.cleanupResources(stmt, rs);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<LifecycleStateTransition> getNextLifeCycleStates(String applicationUUID, int tenantId)
|
|
||||||
throws ApplicationManagementDAOException {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void deleteTags(int applicationId) throws ApplicationManagementDAOException {
|
|
||||||
|
|
||||||
Connection conn = null;
|
|
||||||
PreparedStatement stmt = null;
|
|
||||||
ResultSet rs = null;
|
|
||||||
try {
|
|
||||||
conn = this.getDBConnection();
|
|
||||||
String sql = "DELETE FROM APPM_APPLICATION_TAG WHERE APPLICATION_ID = ?";
|
|
||||||
stmt = conn.prepareStatement(sql);
|
|
||||||
stmt.setInt(1, applicationId);
|
|
||||||
stmt.executeUpdate();
|
|
||||||
|
|
||||||
} catch (DBConnectionException e) {
|
|
||||||
throw new ApplicationManagementDAOException("Error occurred while obtaining the DB connection.", e);
|
|
||||||
} catch (SQLException e) {
|
|
||||||
throw new ApplicationManagementDAOException("Error occurred while deleting tags of application: " + applicationId, e);
|
|
||||||
} finally {
|
|
||||||
Util.cleanupResources(stmt, rs);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void changeLifeCycle(LifecycleState lifecycleState) throws ApplicationManagementDAOException {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void addRelease(ApplicationRelease release) throws ApplicationManagementDAOException {
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -227,13 +227,14 @@ public class GenericPlatformDAOImpl extends AbstractDAOImpl implements PlatformD
|
|||||||
public void unregister(int tenantId, String platformIdenfier, boolean isFileBased)
|
public void unregister(int tenantId, String platformIdenfier, boolean isFileBased)
|
||||||
throws PlatformManagementDAOException {
|
throws PlatformManagementDAOException {
|
||||||
PreparedStatement preparedStatement = null;
|
PreparedStatement preparedStatement = null;
|
||||||
|
String deletePlatform = null;
|
||||||
try {
|
try {
|
||||||
Platform platform = getPlatform(tenantId, platformIdenfier);
|
Platform platform = getPlatform(tenantId, platformIdenfier);
|
||||||
|
|
||||||
if (platform != null) {
|
if (platform != null) {
|
||||||
if (isFileBased == platform.isFileBased()) {
|
if (isFileBased == platform.isFileBased()) {
|
||||||
Connection connection = this.getDBConnection();
|
Connection connection = this.getDBConnection();
|
||||||
String deletePlatform = "DELETE FROM APPM_PLATFORM WHERE ID = ?";
|
deletePlatform = "DELETE FROM APPM_PLATFORM WHERE ID = ?";
|
||||||
preparedStatement = connection.prepareStatement(deletePlatform);
|
preparedStatement = connection.prepareStatement(deletePlatform);
|
||||||
preparedStatement.setInt(1, platform.getId());
|
preparedStatement.setInt(1, platform.getId());
|
||||||
preparedStatement.execute();
|
preparedStatement.execute();
|
||||||
@ -255,7 +256,8 @@ public class GenericPlatformDAOImpl extends AbstractDAOImpl implements PlatformD
|
|||||||
"Unable to obtain the connection while trying to register the platform - " + platformIdenfier
|
"Unable to obtain the connection while trying to register the platform - " + platformIdenfier
|
||||||
+ " for tenant - " + tenantId, e);
|
+ " for tenant - " + tenantId, e);
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
throw new PlatformManagementDAOException("Error while executing the SQL query. ", e);
|
throw new PlatformManagementDAOException("Error while executing the SQL query : " + deletePlatform + " "
|
||||||
|
+ "while trying to un-register the platform with identifier " + platformIdenfier, e);
|
||||||
} finally {
|
} finally {
|
||||||
Util.cleanupResources(preparedStatement, null);
|
Util.cleanupResources(preparedStatement, null);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -20,6 +20,7 @@ package org.wso2.carbon.device.application.mgt.core.impl;
|
|||||||
|
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
import org.wso2.carbon.CarbonConstants;
|
||||||
import org.wso2.carbon.context.PrivilegedCarbonContext;
|
import org.wso2.carbon.context.PrivilegedCarbonContext;
|
||||||
import org.wso2.carbon.device.application.mgt.common.Application;
|
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.ApplicationList;
|
||||||
@ -38,16 +39,21 @@ 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.exception.NotFoundException;
|
||||||
import org.wso2.carbon.device.application.mgt.core.exception.ValidationException;
|
import org.wso2.carbon.device.application.mgt.core.exception.ValidationException;
|
||||||
|
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;
|
||||||
import org.wso2.carbon.device.application.mgt.core.util.HelperUtil;
|
import org.wso2.carbon.device.application.mgt.core.util.HelperUtil;
|
||||||
|
import org.wso2.carbon.user.api.UserRealm;
|
||||||
|
import org.wso2.carbon.user.api.UserStoreException;
|
||||||
|
import org.wso2.carbon.utils.multitenancy.MultitenantUtils;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class ApplicationManagerImpl implements ApplicationManager {
|
public class ApplicationManagerImpl implements ApplicationManager {
|
||||||
|
|
||||||
private static final Log log = LogFactory.getLog(ApplicationManagerImpl.class);
|
private static final Log log = LogFactory.getLog(ApplicationManagerImpl.class);
|
||||||
public static final String CREATED = "CREATED";
|
private static final String CREATED = "CREATED";
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Application createApplication(Application application) throws ApplicationManagementException {
|
public Application createApplication(Application application) throws ApplicationManagementException {
|
||||||
@ -83,7 +89,6 @@ public class ApplicationManagerImpl implements ApplicationManager {
|
|||||||
}
|
}
|
||||||
Lifecycle lifecycle = new Lifecycle();
|
Lifecycle lifecycle = new Lifecycle();
|
||||||
lifecycle.setLifecycleState(lifecycleState);
|
lifecycle.setLifecycleState(lifecycleState);
|
||||||
lifecycle.setLifecycleState(lifecycleState);
|
|
||||||
lifecycle.setLifecycleStateModifiedAt(new Date());
|
lifecycle.setLifecycleStateModifiedAt(new Date());
|
||||||
lifecycle.setGetLifecycleStateModifiedBy(application.getUser().getUserName());
|
lifecycle.setGetLifecycleStateModifiedBy(application.getUser().getUserName());
|
||||||
application.setCurrentLifecycle(lifecycle);
|
application.setCurrentLifecycle(lifecycle);
|
||||||
@ -101,50 +106,63 @@ public class ApplicationManagerImpl implements ApplicationManager {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Application editApplication(Application application) throws ApplicationManagementException {
|
public Application editApplication(Application application) throws ApplicationManagementException {
|
||||||
|
String userName = PrivilegedCarbonContext.getThreadLocalCarbonContext().getUsername();
|
||||||
|
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(true);
|
||||||
if (application.getUuid() == null) {
|
if (application.getUuid() == null) {
|
||||||
throw new ValidationException("Application UUID cannot be empty");
|
throw new ValidationException("Application UUID cannot be empty");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!isApplicationOwnerOrAdmin(application.getUuid(), userName, tenantId)) {
|
||||||
|
throw new ApplicationManagementException("User " + userName + " does not have permissions to edit the "
|
||||||
|
+ "application with the UUID " + application.getUuid());
|
||||||
|
}
|
||||||
try {
|
try {
|
||||||
ConnectionManagerUtil.openConnection();
|
ConnectionManagerUtil.beginDBTransaction();
|
||||||
ApplicationDAO applicationDAO = DAOFactory.getApplicationDAO();
|
if (application.getPlatform() != null && application.getPlatform().getIdentifier() != null) {
|
||||||
|
|
||||||
if (application.getPlatform()!= null && application.getPlatform().getIdentifier() != null) {
|
|
||||||
PlatformDAO platformDAO = DAOFactory.getPlatformDAO();
|
PlatformDAO platformDAO = DAOFactory.getPlatformDAO();
|
||||||
Platform platform = platformDAO.getPlatform(application.getUser().getTenantId(), application.getPlatform()
|
Platform platform = platformDAO
|
||||||
.getIdentifier());
|
.getPlatform(tenantId, application.getPlatform().getIdentifier());
|
||||||
application.setPlatform(platform);
|
|
||||||
if (platform == null) {
|
if (platform == null) {
|
||||||
throw new NotFoundException("Invalid platform");
|
ConnectionManagerUtil.commitDBTransaction();
|
||||||
|
throw new NotFoundException(
|
||||||
|
"Platform specified by identifier " + application.getPlatform().getIdentifier()
|
||||||
|
+ " is not found. Please give a valid platform identifier.");
|
||||||
}
|
}
|
||||||
|
application.setPlatform(platform);
|
||||||
}
|
}
|
||||||
|
ApplicationDAO applicationDAO = DAOFactory.getApplicationDAO();
|
||||||
application.setModifiedAt(new Date());
|
application.setModifiedAt(new Date());
|
||||||
|
Application modifiedApplication = applicationDAO.editApplication(application, tenantId);
|
||||||
return applicationDAO.editApplication(application);
|
ConnectionManagerUtil.commitDBTransaction();
|
||||||
|
return modifiedApplication;
|
||||||
|
} catch (ApplicationManagementDAOException e) {
|
||||||
|
ConnectionManagerUtil.rollbackDBTransaction();
|
||||||
|
throw e;
|
||||||
} finally {
|
} finally {
|
||||||
ConnectionManagerUtil.closeConnection();
|
ConnectionManagerUtil.closeDBConnection();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void deleteApplication(String uuid) throws ApplicationManagementException {
|
public void deleteApplication(String uuid) throws ApplicationManagementException {
|
||||||
|
String userName = PrivilegedCarbonContext.getThreadLocalCarbonContext().getUsername();
|
||||||
|
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(true);
|
||||||
|
if (!isApplicationOwnerOrAdmin(uuid, userName, tenantId)) {
|
||||||
|
throw new ApplicationManagementException("User '" + userName + "' of tenant - " + tenantId + " does have"
|
||||||
|
+ " the permission to delete the application with UUID " + uuid);
|
||||||
|
}
|
||||||
try {
|
try {
|
||||||
ApplicationDAO applicationDAO = DAOFactory.getApplicationDAO();
|
ApplicationDAO applicationDAO = DAOFactory.getApplicationDAO();
|
||||||
int appId = applicationDAO.getApplicationId(uuid);
|
|
||||||
ConnectionManagerUtil.beginDBTransaction();
|
ConnectionManagerUtil.beginDBTransaction();
|
||||||
|
int appId = applicationDAO.getApplicationId(uuid);
|
||||||
applicationDAO.deleteTags(appId);
|
applicationDAO.deleteTags(appId);
|
||||||
applicationDAO.deleteProperties(appId);
|
applicationDAO.deleteProperties(appId);
|
||||||
applicationDAO.deleteApplication(uuid);
|
applicationDAO.deleteApplication(uuid);
|
||||||
ConnectionManagerUtil.commitDBTransaction();
|
ConnectionManagerUtil.commitDBTransaction();
|
||||||
|
|
||||||
} catch (ApplicationManagementDAOException e) {
|
} catch (ApplicationManagementDAOException e) {
|
||||||
ConnectionManagerUtil.rollbackDBTransaction();
|
ConnectionManagerUtil.rollbackDBTransaction();
|
||||||
String msg = "Failed to delete application: " + uuid;
|
String msg = "Failed to delete application: " + uuid;
|
||||||
throw new ApplicationManagementException(msg, e);
|
throw new ApplicationManagementException(msg, e);
|
||||||
|
|
||||||
} finally {
|
} finally {
|
||||||
ConnectionManagerUtil.closeDBConnection();
|
ConnectionManagerUtil.closeDBConnection();
|
||||||
}
|
}
|
||||||
@ -154,21 +172,45 @@ public class ApplicationManagerImpl implements ApplicationManager {
|
|||||||
public ApplicationList getApplications(Filter filter) throws ApplicationManagementException {
|
public ApplicationList getApplications(Filter filter) throws ApplicationManagementException {
|
||||||
|
|
||||||
try {
|
try {
|
||||||
ConnectionManagerUtil.openConnection();
|
ConnectionManagerUtil.openDBConnection();
|
||||||
ApplicationDAO applicationDAO = DAOFactory.getApplicationDAO();
|
ApplicationDAO applicationDAO = DAOFactory.getApplicationDAO();
|
||||||
return applicationDAO.getApplications(filter);
|
return applicationDAO.getApplications(filter);
|
||||||
} finally {
|
} finally {
|
||||||
ConnectionManagerUtil.closeConnection();
|
ConnectionManagerUtil.closeDBConnection();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void changeLifecycle(String applicationUUID, String lifecycleIdentifier) throws ApplicationManagementException {
|
public void changeLifecycle(String applicationUUID, String lifecycleIdentifier) throws
|
||||||
|
ApplicationManagementException {
|
||||||
|
boolean isAvailableNextState = false;
|
||||||
|
String userName = PrivilegedCarbonContext.getThreadLocalCarbonContext().getUsername();
|
||||||
|
List<LifecycleStateTransition> nextLifeCycles = getLifeCycleStates(applicationUUID);
|
||||||
|
|
||||||
|
for (LifecycleStateTransition lifecycleStateTransition : nextLifeCycles) {
|
||||||
|
if (log.isDebugEnabled()) {
|
||||||
|
log.debug("Lifecycle state of the application " + applicationUUID + " can be changed to"
|
||||||
|
+ lifecycleStateTransition.getNextState());
|
||||||
|
}
|
||||||
|
if (lifecycleStateTransition.getNextState().equalsIgnoreCase(lifecycleIdentifier)) {
|
||||||
|
isAvailableNextState = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!isAvailableNextState) {
|
||||||
|
throw new ApplicationManagementException("User " + userName + " does not have the permission to change "
|
||||||
|
+ "the lifecycle state of the application " + applicationUUID + " to lifecycle state "
|
||||||
|
+ lifecycleIdentifier);
|
||||||
|
}
|
||||||
try {
|
try {
|
||||||
ConnectionManagerUtil.openDBConnection();
|
ConnectionManagerUtil.beginDBTransaction();
|
||||||
ApplicationDAO applicationDAO = DAOFactory.getApplicationDAO();
|
ApplicationDAO applicationDAO = DAOFactory.getApplicationDAO();
|
||||||
applicationDAO.changeLifecycle(applicationUUID, lifecycleIdentifier);
|
applicationDAO.changeLifecycle(applicationUUID, lifecycleIdentifier, userName);
|
||||||
|
ConnectionManagerUtil.commitDBTransaction();
|
||||||
|
} catch (ApplicationManagementDAOException e) {
|
||||||
|
ConnectionManagerUtil.rollbackDBTransaction();
|
||||||
|
throw e;
|
||||||
} finally {
|
} finally {
|
||||||
ConnectionManagerUtil.closeDBConnection();
|
ConnectionManagerUtil.closeDBConnection();
|
||||||
}
|
}
|
||||||
@ -177,15 +219,109 @@ public class ApplicationManagerImpl implements ApplicationManager {
|
|||||||
@Override
|
@Override
|
||||||
public List<LifecycleStateTransition> getLifeCycleStates(String applicationUUID)
|
public List<LifecycleStateTransition> getLifeCycleStates(String applicationUUID)
|
||||||
throws ApplicationManagementException {
|
throws ApplicationManagementException {
|
||||||
try {
|
|
||||||
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(true);
|
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(true);
|
||||||
|
String userName = PrivilegedCarbonContext.getThreadLocalCarbonContext().getUsername();
|
||||||
|
boolean isAdminOrApplicationOwner = isApplicationOwnerOrAdmin(applicationUUID, userName, tenantId);
|
||||||
|
|
||||||
|
if (log.isDebugEnabled()) {
|
||||||
|
log.debug("User " + userName + " in tenant " + tenantId + " is an Admin or Application owner of the "
|
||||||
|
+ "application " + applicationUUID);
|
||||||
|
}
|
||||||
|
try {
|
||||||
ConnectionManagerUtil.openDBConnection();
|
ConnectionManagerUtil.openDBConnection();
|
||||||
return DAOFactory.getApplicationDAO().getNextLifeCycleStates(applicationUUID, tenantId);
|
List<LifecycleStateTransition> transitions = DAOFactory.getApplicationDAO()
|
||||||
|
.getNextLifeCycleStates(applicationUUID, tenantId);
|
||||||
|
List<LifecycleStateTransition> filteredTransitions = new ArrayList<>();
|
||||||
|
|
||||||
|
if (log.isDebugEnabled()) {
|
||||||
|
log.debug("Lifecycle of the application with UUID : " + applicationUUID + " can be changed to "
|
||||||
|
+ transitions.size() + ". The number may vary according to the permission level of user : "
|
||||||
|
+ userName + " of tenant " + tenantId);
|
||||||
|
}
|
||||||
|
for (LifecycleStateTransition transition : transitions) {
|
||||||
|
String permission = transition.getPermission();
|
||||||
|
if (permission != null) {
|
||||||
|
if (log.isDebugEnabled()) {
|
||||||
|
log.debug("In order to make the state change to " + transition.getNextState() + " permission "
|
||||||
|
+ permission + " is required");
|
||||||
|
}
|
||||||
|
if (isAuthorized(userName, tenantId, permission)) {
|
||||||
|
filteredTransitions.add(transition);
|
||||||
|
} else {
|
||||||
|
if (log.isDebugEnabled()) {
|
||||||
|
log.debug("User " + userName + " does not have the permission " + permission + " to "
|
||||||
|
+ "change the life-cycle state to " + transition.getNextState() + " of the "
|
||||||
|
+ "application " + applicationUUID);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (isAdminOrApplicationOwner) {
|
||||||
|
filteredTransitions.add(transition);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (log.isDebugEnabled()) {
|
||||||
|
log.debug("User " + userName + " can do " + filteredTransitions.size() + " life-cyle state changes "
|
||||||
|
+ "currently on application with the UUID " + applicationUUID);
|
||||||
|
}
|
||||||
|
return filteredTransitions;
|
||||||
|
} catch (UserStoreException e) {
|
||||||
|
throw new ApplicationManagementException(
|
||||||
|
"Userstore exception while checking whether user " + userName + " from tenant " + tenantId
|
||||||
|
+ " is authorized to do a life-cycle status change in an application ", e);
|
||||||
} finally {
|
} finally {
|
||||||
ConnectionManagerUtil.closeDBConnection();
|
ConnectionManagerUtil.closeDBConnection();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Application getApplication(String uuid) throws ApplicationManagementException {
|
||||||
|
try {
|
||||||
|
ConnectionManagerUtil.openDBConnection();
|
||||||
|
return DAOFactory.getApplicationDAO().getApplication(uuid);
|
||||||
|
} finally {
|
||||||
|
ConnectionManagerUtil.closeDBConnection();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* To check whether current user is application owner or admin.
|
||||||
|
*
|
||||||
|
* @param applicationUUID UUID of the Application.
|
||||||
|
* @return true if the current user is application owner or admin, unless false.
|
||||||
|
* @throws ApplicationManagementException Application Management Exception.
|
||||||
|
*/
|
||||||
|
private boolean isApplicationOwnerOrAdmin(String applicationUUID, String userName, int tenantId)
|
||||||
|
throws ApplicationManagementException {
|
||||||
|
try {
|
||||||
|
if (isAuthorized(userName, tenantId, CarbonConstants.UI_ADMIN_PERMISSION_COLLECTION)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
} catch (UserStoreException e) {
|
||||||
|
throw new ApplicationManagementException("Userstore exception while checking whether user is an admin", e);
|
||||||
|
} try {
|
||||||
|
ConnectionManagerUtil.openDBConnection();
|
||||||
|
Application application = DAOFactory.getApplicationDAO().getApplication(applicationUUID);
|
||||||
|
return application.getUser().getUserName().equals(userName)
|
||||||
|
&& application.getUser().getTenantId() == tenantId;
|
||||||
|
} finally {
|
||||||
|
ConnectionManagerUtil.closeDBConnection();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* To check whether current user has the permission to do some secured operation.
|
||||||
|
*
|
||||||
|
* @param username Name of the User.
|
||||||
|
* @param tenantId ID of the tenant.
|
||||||
|
* @param permission Permission that need to be checked.
|
||||||
|
* @return true if the current user has the permission, otherwise false.
|
||||||
|
* @throws UserStoreException UserStoreException
|
||||||
|
*/
|
||||||
|
private boolean isAuthorized (String username, int tenantId, String permission) throws UserStoreException {
|
||||||
|
UserRealm userRealm = DataHolder.getInstance().getRealmService().getTenantUserRealm(tenantId);
|
||||||
|
return userRealm != null && userRealm.getAuthorizationManager() != null && userRealm.getAuthorizationManager()
|
||||||
|
.isUserAuthorized(MultitenantUtils.getTenantAwareUsername(username),
|
||||||
|
permission, CarbonConstants.UI_PERMISSION_ACTION);
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* To validate the application
|
* To validate the application
|
||||||
*
|
*
|
||||||
@ -210,7 +346,5 @@ 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");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -31,11 +31,12 @@ public class Constants {
|
|||||||
public static final String PLATFORMS_DEPLOYMENT_DIR_NAME = "platforms";
|
public static final String PLATFORMS_DEPLOYMENT_DIR_NAME = "platforms";
|
||||||
public static final String PLATFORM_DEPLOYMENT_EXT = ".xml";
|
public static final String PLATFORM_DEPLOYMENT_EXT = ".xml";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Database types supported by Application Management.
|
||||||
|
*/
|
||||||
public static final class DataBaseTypes {
|
public static final class DataBaseTypes {
|
||||||
|
|
||||||
private DataBaseTypes() {
|
private DataBaseTypes() {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final String DB_TYPE_MYSQL = "MySQL";
|
public static final String DB_TYPE_MYSQL = "MySQL";
|
||||||
public static final String DB_TYPE_ORACLE = "Oracle";
|
public static final String DB_TYPE_ORACLE = "Oracle";
|
||||||
public static final String DB_TYPE_MSSQL = "Microsoft SQL Server";
|
public static final String DB_TYPE_MSSQL = "Microsoft SQL Server";
|
||||||
@ -43,4 +44,10 @@ public class Constants {
|
|||||||
public static final String DB_TYPE_H2 = "H2";
|
public static final String DB_TYPE_H2 = "H2";
|
||||||
public static final String DB_TYPE_POSTGRESQL = "PostgreSQL";
|
public static final String DB_TYPE_POSTGRESQL = "PostgreSQL";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Lifecycle states of the application life-cycle.
|
||||||
|
*/
|
||||||
|
public static final String[] LIFE_CYCLES = {"CREATED", "IN REVIEW", "APPROVED", "REJECTED", "PUBLISHED",
|
||||||
|
"UNPUBLISHED", "RETIRED"};
|
||||||
}
|
}
|
||||||
|
|||||||
@ -67,7 +67,7 @@ CREATE TABLE IF NOT EXISTS APPM_LIFECYCLE_STATE (
|
|||||||
INSERT INTO APPM_LIFECYCLE_STATE (NAME, IDENTIFIER, DESCRIPTION) VALUES ('CREATED', 'CREATED', 'Application creation
|
INSERT INTO APPM_LIFECYCLE_STATE (NAME, IDENTIFIER, DESCRIPTION) VALUES ('CREATED', 'CREATED', 'Application creation
|
||||||
initial state');
|
initial state');
|
||||||
INSERT INTO APPM_LIFECYCLE_STATE (NAME, IDENTIFIER, DESCRIPTION)
|
INSERT INTO APPM_LIFECYCLE_STATE (NAME, IDENTIFIER, DESCRIPTION)
|
||||||
VALUES ('IN REVIEW', 'IN REFVIEW', 'Application is in in-review state');
|
VALUES ('IN REVIEW', 'IN REVIEW', 'Application is in in-review state');
|
||||||
INSERT INTO APPM_LIFECYCLE_STATE (NAME, IDENTIFIER, DESCRIPTION)
|
INSERT INTO APPM_LIFECYCLE_STATE (NAME, IDENTIFIER, DESCRIPTION)
|
||||||
VALUES ('APPROVED', 'APPROVED', 'State in which Application is approved after reviewing.');
|
VALUES ('APPROVED', 'APPROVED', 'State in which Application is approved after reviewing.');
|
||||||
INSERT INTO APPM_LIFECYCLE_STATE (NAME, IDENTIFIER, DESCRIPTION)
|
INSERT INTO APPM_LIFECYCLE_STATE (NAME, IDENTIFIER, DESCRIPTION)
|
||||||
@ -139,7 +139,7 @@ CREATE TABLE IF NOT EXISTS `APPM_APPLICATION` (
|
|||||||
`LIFECYCLE_STATE_ID` INT NOT NULL,
|
`LIFECYCLE_STATE_ID` INT NOT NULL,
|
||||||
`LIFECYCLE_STATE_MODIFIED_BY` VARCHAR(255) NULL,
|
`LIFECYCLE_STATE_MODIFIED_BY` VARCHAR(255) NULL,
|
||||||
`LIFECYCLE_STATE_MODIFIED_AT` DATETIME NULL,
|
`LIFECYCLE_STATE_MODIFIED_AT` DATETIME NULL,
|
||||||
`TENANT_ID` INT NULL,
|
`TENANT_ID` INT NOT NULL,
|
||||||
`PLATFORM_ID` INT NOT NULL,
|
`PLATFORM_ID` INT NOT NULL,
|
||||||
PRIMARY KEY (`ID`, `APPLICATION_CATEGORY_ID`, `LIFECYCLE_STATE_ID`, `PLATFORM_ID`),
|
PRIMARY KEY (`ID`, `APPLICATION_CATEGORY_ID`, `LIFECYCLE_STATE_ID`, `PLATFORM_ID`),
|
||||||
UNIQUE INDEX `UUID_UNIQUE` (`UUID` ASC),
|
UNIQUE INDEX `UUID_UNIQUE` (`UUID` ASC),
|
||||||
|
|||||||
@ -49,19 +49,72 @@ CREATE TABLE IF NOT EXISTS `APPM_APPLICATION_CATEGORY` (
|
|||||||
ENGINE = InnoDB
|
ENGINE = InnoDB
|
||||||
COMMENT = 'This table contains the data related to the application category';
|
COMMENT = 'This table contains the data related to the application category';
|
||||||
|
|
||||||
|
INSERT INTO APPM_APPLICATION_CATEGORY (NAME, DESCRIPTION, PUBLISHED) VALUES ('Enterprise', 'Enterprise level
|
||||||
|
applications which the artifacts need to be provided', 1);
|
||||||
|
INSERT INTO APPM_APPLICATION_CATEGORY (NAME, DESCRIPTION, PUBLISHED) VALUES ('Public', 'Public category in which the
|
||||||
|
application need to be downloaded from the public application store', 1);
|
||||||
|
|
||||||
-- -----------------------------------------------------
|
-- -----------------------------------------------------
|
||||||
-- Table `APPM_LIFECYCLE_STATE`
|
-- Table `APPM_LIFECYCLE_STATE`
|
||||||
-- -----------------------------------------------------
|
-- -----------------------------------------------------
|
||||||
CREATE TABLE IF NOT EXISTS `APPM_LIFECYCLE_STATE` (
|
CREATE TABLE IF NOT EXISTS APPM_LIFECYCLE_STATE (
|
||||||
`ID` INT NOT NULL AUTO_INCREMENT,
|
ID INT NOT NULL AUTO_INCREMENT UNIQUE,
|
||||||
`NAME` VARCHAR(100) NOT NULL,
|
NAME VARCHAR(100) NOT NULL,
|
||||||
`IDENTIFIER` VARCHAR(100) NOT NULL,
|
IDENTIFIER VARCHAR(100) NOT NULL,
|
||||||
`DESCRIPTION` TEXT NULL,
|
DESCRIPTION TEXT NULL,
|
||||||
PRIMARY KEY (`ID`),
|
PRIMARY KEY (ID),
|
||||||
UNIQUE INDEX `IDENTIFIER_UNIQUE` (`IDENTIFIER` ASC))
|
UNIQUE INDEX APPM_LIFECYCLE_STATE_IDENTIFIER_UNIQUE (IDENTIFIER ASC));
|
||||||
ENGINE = InnoDB;
|
|
||||||
|
|
||||||
|
INSERT INTO APPM_LIFECYCLE_STATE (NAME, IDENTIFIER, DESCRIPTION) VALUES ('CREATED', 'CREATED', 'Application creation
|
||||||
|
initial state');
|
||||||
|
INSERT INTO APPM_LIFECYCLE_STATE (NAME, IDENTIFIER, DESCRIPTION)
|
||||||
|
VALUES ('IN REVIEW', 'IN REVIEW', 'Application is in in-review state');
|
||||||
|
INSERT INTO APPM_LIFECYCLE_STATE (NAME, IDENTIFIER, DESCRIPTION)
|
||||||
|
VALUES ('APPROVED', 'APPROVED', 'State in which Application is approved after reviewing.');
|
||||||
|
INSERT INTO APPM_LIFECYCLE_STATE (NAME, IDENTIFIER, DESCRIPTION)
|
||||||
|
VALUES ('REJECTED', 'REJECTED', 'State in which Application is rejected after reviewing.');
|
||||||
|
INSERT INTO APPM_LIFECYCLE_STATE (NAME, IDENTIFIER, DESCRIPTION)
|
||||||
|
VALUES ('PUBLISHED', 'PUBLISHED', 'State in which Application is in published state.');
|
||||||
|
INSERT INTO APPM_LIFECYCLE_STATE (NAME, IDENTIFIER, DESCRIPTION)
|
||||||
|
VALUES ('UNPUBLISHED', 'UNPUBLISHED', 'State in which Application is in un published state.');
|
||||||
|
INSERT INTO APPM_LIFECYCLE_STATE (NAME, IDENTIFIER, DESCRIPTION)
|
||||||
|
VALUES ('RETIRED', 'RETIRED', 'Retiring an application to indicate end of life state,');
|
||||||
|
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS APPM_LIFECYCLE_STATE_TRANSITION
|
||||||
|
(
|
||||||
|
ID INT NOT NULL AUTO_INCREMENT UNIQUE,
|
||||||
|
INITIAL_STATE INT,
|
||||||
|
NEXT_STATE INT,
|
||||||
|
PERMISSION VARCHAR(1024),
|
||||||
|
DESCRIPTION VARCHAR(2048),
|
||||||
|
PRIMARY KEY (INITIAL_STATE, NEXT_STATE),
|
||||||
|
FOREIGN KEY (INITIAL_STATE) REFERENCES APPM_LIFECYCLE_STATE(ID) ON DELETE CASCADE,
|
||||||
|
FOREIGN KEY (NEXT_STATE) REFERENCES APPM_LIFECYCLE_STATE(ID) ON DELETE CASCADE
|
||||||
|
);
|
||||||
|
|
||||||
|
INSERT INTO APPM_LIFECYCLE_STATE_TRANSITION(INITIAL_STATE, NEXT_STATE, PERMISSION, DESCRIPTION) VALUES
|
||||||
|
(1, 2, null, 'Submit for review');
|
||||||
|
INSERT INTO APPM_LIFECYCLE_STATE_TRANSITION(INITIAL_STATE, NEXT_STATE, PERMISSION, DESCRIPTION) VALUES
|
||||||
|
(2, 1, null, 'Revoke from review');
|
||||||
|
INSERT INTO APPM_LIFECYCLE_STATE_TRANSITION(INITIAL_STATE, NEXT_STATE, PERMISSION, DESCRIPTION) VALUES
|
||||||
|
(2, 3, '/permission/admin/manage/device-mgt/application/review', 'APPROVE');
|
||||||
|
INSERT INTO APPM_LIFECYCLE_STATE_TRANSITION(INITIAL_STATE, NEXT_STATE, PERMISSION, DESCRIPTION) VALUES
|
||||||
|
(2, 4, '/permission/admin/manage/device-mgt/application/review', 'REJECT');
|
||||||
|
INSERT INTO APPM_LIFECYCLE_STATE_TRANSITION(INITIAL_STATE, NEXT_STATE, PERMISSION, DESCRIPTION) VALUES
|
||||||
|
(3, 4, '/permission/admin/manage/device-mgt/application/review', 'REJECT');
|
||||||
|
INSERT INTO APPM_LIFECYCLE_STATE_TRANSITION(INITIAL_STATE, NEXT_STATE, PERMISSION, DESCRIPTION) VALUES
|
||||||
|
(3, 5, null, 'PUBLISH');
|
||||||
|
INSERT INTO APPM_LIFECYCLE_STATE_TRANSITION(INITIAL_STATE, NEXT_STATE, PERMISSION, DESCRIPTION) VALUES
|
||||||
|
(5, 6, null, 'UN PUBLISH');
|
||||||
|
INSERT INTO APPM_LIFECYCLE_STATE_TRANSITION(INITIAL_STATE, NEXT_STATE, PERMISSION, DESCRIPTION) VALUES
|
||||||
|
(6, 5, null, 'PUBLISH');
|
||||||
|
INSERT INTO APPM_LIFECYCLE_STATE_TRANSITION(INITIAL_STATE, NEXT_STATE, PERMISSION, DESCRIPTION) VALUES
|
||||||
|
(4, 1, null, 'Return to CREATE STATE');
|
||||||
|
INSERT INTO APPM_LIFECYCLE_STATE_TRANSITION(INITIAL_STATE, NEXT_STATE, PERMISSION, DESCRIPTION) VALUES
|
||||||
|
(6, 1, null, 'Return to CREATE STATE');
|
||||||
|
INSERT INTO APPM_LIFECYCLE_STATE_TRANSITION(INITIAL_STATE, NEXT_STATE, PERMISSION, DESCRIPTION) VALUES
|
||||||
|
(6, 7, null, 'Retire');
|
||||||
|
|
||||||
-- -----------------------------------------------------
|
-- -----------------------------------------------------
|
||||||
-- Table `APPM_APPLICATION`
|
-- Table `APPM_APPLICATION`
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user