### Eclipse Workspace Patch 1.0 #P bpm-console Index: server/integration/src/main/java/org/jboss/bpm/console/server/plugin/ProcessEnginePlugin.java =================================================================== --- server/integration/src/main/java/org/jboss/bpm/console/server/plugin/ProcessEnginePlugin.java (revision 1060) +++ server/integration/src/main/java/org/jboss/bpm/console/server/plugin/ProcessEnginePlugin.java (working copy) @@ -24,6 +24,7 @@ import org.jboss.bpm.console.client.model.DeploymentRef; import org.jboss.bpm.console.client.model.JobRef; +import java.io.File; import java.util.List; /** @@ -35,11 +36,13 @@ { List getDeployments(); - void deleteDeployment(String id); + void deleteDeployment(String id, String userId); - void suspendDeployment(String id, boolean isSuspended); + void suspendDeployment(String id, boolean isSuspended, String userId); List getJobs(); - void executeJob(String jobId); + void executeJob(String jobId, String userId); + + String deployFile(File processFile, String userId); } Index: server/war/src/main/java/org/jboss/bpm/console/server/EngineFacade.java =================================================================== --- server/war/src/main/java/org/jboss/bpm/console/server/EngineFacade.java (revision 1060) +++ server/war/src/main/java/org/jboss/bpm/console/server/EngineFacade.java (working copy) @@ -21,7 +21,24 @@ */ package org.jboss.bpm.console.server; -import com.google.gson.Gson; +import java.io.File; +import java.util.Iterator; +import java.util.List; + +import javax.servlet.http.HttpServletRequest; +import javax.ws.rs.Consumes; +import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.Response; + +import org.apache.commons.fileupload.FileItem; +import org.apache.commons.fileupload.FileUploadException; +import org.apache.commons.fileupload.disk.DiskFileItemFactory; +import org.apache.commons.fileupload.servlet.ServletFileUpload; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.jboss.bpm.console.client.model.DeploymentRef; @@ -29,13 +46,11 @@ import org.jboss.bpm.console.client.model.JobRef; import org.jboss.bpm.console.client.model.JobRefWrapper; import org.jboss.bpm.console.server.gson.GsonFactory; -import org.jboss.bpm.console.server.plugin.ProcessEnginePlugin; import org.jboss.bpm.console.server.plugin.PluginMgr; +import org.jboss.bpm.console.server.plugin.ProcessEnginePlugin; import org.jboss.bpm.console.server.util.RsComment; -import javax.ws.rs.*; -import javax.ws.rs.core.Response; -import java.util.List; +import com.google.gson.Gson; /** * Manage process deployments @@ -90,10 +105,12 @@ @Produces("application/json") public Response suspendDeployment( @PathParam("id") - String id + String id, + @Context + HttpServletRequest request ) { - return doSuspend(id, true); + return doSuspend(id, true, request.getUserPrincipal().getName()); } @POST @@ -101,18 +118,20 @@ @Produces("application/json") public Response resumeDeployment( @PathParam("id") - String id + String id, + @Context + HttpServletRequest request ) { - return doSuspend(id, false); + return doSuspend(id, false, request.getUserPrincipal().getName()); } - private Response doSuspend(String id, boolean suspended) + private Response doSuspend(String id, boolean suspended, String userId) { ProcessEnginePlugin dplPlugin = getDeploymentPlugin(); if(processEnginePlugin !=null) { - processEnginePlugin.suspendDeployment(id, suspended); + processEnginePlugin.suspendDeployment(id, suspended, userId); return Response.ok().build(); } else @@ -127,14 +146,16 @@ @Produces("application/json") public Response deleteDeployment( @PathParam("id") - String id + String id, + @Context + HttpServletRequest request ) { ProcessEnginePlugin dplPlugin = getDeploymentPlugin(); if(processEnginePlugin !=null) { - processEnginePlugin.deleteDeployment(id); + processEnginePlugin.deleteDeployment(id, request.getUserPrincipal().getName()); return Response.ok().build(); } else @@ -173,14 +194,16 @@ @Produces("application/json") public Response executeJob( @PathParam("id") - String id + String id, + @Context + HttpServletRequest request ) { ProcessEnginePlugin dplPlugin = getDeploymentPlugin(); if(processEnginePlugin !=null) { - dplPlugin.executeJob(id); + dplPlugin.executeJob(id, request.getUserPrincipal().getName()); return Response.ok().build(); } else @@ -190,6 +213,69 @@ } } + + @POST + @Path("deployment/new") + @Produces("text/xml") + @Consumes("multipart/form-data") + public Response newDeployment( + @Context + HttpServletRequest request + ) + { + + String deploymentId = null; + // Check that we have a file upload request + boolean isMultipart = ServletFileUpload.isMultipartContent(request); + log.debug("Deployment - is multipart " + isMultipart); + if (isMultipart) { + // Create a factory for disk-based file items + DiskFileItemFactory factory = new DiskFileItemFactory(); + + // Create a new file upload handler + ServletFileUpload upload = new ServletFileUpload(factory); + + // Parse the request + try { + List items = upload.parseRequest(request); + + File uploadedFile = null; + log.debug("Deployment - number of file items found in request " + items.size()); + // Process the uploaded items + Iterator iter = items.iterator(); + while (iter.hasNext()) { + FileItem item = (FileItem) iter.next(); + + if (!item.isFormField()) { + log.debug("Deployment - saving file into " + System.getProperty("java.io.tmpdir")); + uploadedFile = new File(System.getProperty("java.io.tmpdir"), item.getName()); + // save uploaded content to a file + item.write(uploadedFile); + // accept only one file + break; + } + } + if (uploadedFile != null) { + log.debug("Deployment - deploying file " + uploadedFile.getAbsolutePath()); + // deploy + deploymentId = processEnginePlugin.deployFile(uploadedFile, request.getUserPrincipal().getName()); + // delete uploaded file + boolean deleted = uploadedFile.delete(); + log.debug("Deployment - deployed successfully with id " + deploymentId + " and uploaded file deleted with status " + deleted); + } + + } catch (Exception e) { + log.error("Error during deployment", e); + return Response.ok("Unexpected error - " + e.getMessage()).type("text/html").build(); + } + } else { + log.warn("Incorrect request type (it is not multipart request)"); + // wrong request, it is not multipart + return Response.ok("wrong request, it is not multipart").type("text/html").build(); + } + + return Response.ok(deploymentId).type("text/html").build(); + } private Response createJsonResponse(Object wrapper) { Index: server/integration/src/main/java/org/jboss/bpm/console/server/integration/ProcessManagement.java =================================================================== --- server/integration/src/main/java/org/jboss/bpm/console/server/integration/ProcessManagement.java (revision 1060) +++ server/integration/src/main/java/org/jboss/bpm/console/server/integration/ProcessManagement.java (working copy) @@ -37,26 +37,26 @@ ProcessDefinitionRef getProcessDefinition(String definitionId); - List removeProcessDefinition(String definitionId); + List removeProcessDefinition(String definitionId, String userId); List getProcessInstances(String definitionId); ProcessInstanceRef getProcessInstance(String instanceId); - ProcessInstanceRef newInstance(String defintionId); + ProcessInstanceRef newInstance(String defintionId, String userId); - ProcessInstanceRef newInstance(String definitionId, Map processVars); + ProcessInstanceRef newInstance(String definitionId, Map processVars, String userId); Map getInstanceData(String instanceId); void setInstanceData(String instanceId, Map data); - void endInstance(String instanceId, ProcessInstanceRef.RESULT result); + void endInstance(String instanceId, ProcessInstanceRef.RESULT result, String userId); - void deleteInstance(String instanceId); + void deleteInstance(String instanceId, String userId); - void setProcessState(String instanceId, ProcessInstanceRef.STATE nextState); + void setProcessState(String instanceId, ProcessInstanceRef.STATE nextState, String userId); - void signalExecution(String executionId, String signal); + void signalExecution(String executionId, String signal, String userId); } Index: server/war/src/main/java/org/jboss/bpm/console/server/FormProcessingFacade.java =================================================================== --- server/war/src/main/java/org/jboss/bpm/console/server/FormProcessingFacade.java (revision 1060) +++ server/war/src/main/java/org/jboss/bpm/console/server/FormProcessingFacade.java (working copy) @@ -193,7 +193,7 @@ // start process ProcessInstanceRef instance = - getProcessManagement().newInstance(definitionId, mapping.processVars); + getProcessManagement().newInstance(definitionId, mapping.processVars, request.getUserPrincipal().getName()); return Response.ok(SUCCESSFULLY_PROCESSED_INPUT).build(); } Index: server/war/src/main/java/org/jboss/bpm/console/server/ProcessMgmtFacade.java =================================================================== --- server/war/src/main/java/org/jboss/bpm/console/server/ProcessMgmtFacade.java (revision 1060) +++ server/war/src/main/java/org/jboss/bpm/console/server/ProcessMgmtFacade.java (working copy) @@ -169,11 +169,13 @@ @Produces("application/json") public Response removeDefinitionsJSON( @PathParam("id") - String definitionId + String definitionId, + @Context + HttpServletRequest request ) { ProcessDefinitionRefWrapper wrapper = - new ProcessDefinitionRefWrapper( getProcessManagement().removeProcessDefinition(definitionId)); + new ProcessDefinitionRefWrapper( getProcessManagement().removeProcessDefinition(definitionId, request.getUserPrincipal().getName())); return createJsonResponse(wrapper); } @@ -195,13 +197,15 @@ @Produces("application/json") public Response newInstance( @PathParam("id") - String definitionId) + String definitionId, + @Context + HttpServletRequest request) { ProcessInstanceRef instance = null; try { - instance = getProcessManagement().newInstance(definitionId); + instance = getProcessManagement().newInstance(definitionId, request.getUserPrincipal().getName()); return createJsonResponse(instance); } catch (Throwable t) @@ -232,11 +236,13 @@ @PathParam("id") String executionId, @PathParam("next") - String next) + String next, + @Context + HttpServletRequest request) { ProcessInstanceRef.STATE state = ProcessInstanceRef.STATE.valueOf(next); log.debug("Change instance (ID "+executionId+") to state " +state); - getProcessManagement().setProcessState(executionId, state); + getProcessManagement().setProcessState(executionId, state, request.getUserPrincipal().getName()); return Response.ok().type("application/json").build(); } @@ -247,11 +253,13 @@ @PathParam("id") String executionId, @PathParam("result") - String resultValue) + String resultValue, + @Context + HttpServletRequest request) { ProcessInstanceRef.RESULT result = ProcessInstanceRef.RESULT.valueOf(resultValue); log.debug("Change instance (ID "+executionId+") to state " + ProcessInstanceRef.STATE.ENDED); - getProcessManagement().endInstance(executionId, result); + getProcessManagement().endInstance(executionId, result, request.getUserPrincipal().getName()); return Response.ok().type("application/json").build(); } @@ -260,11 +268,13 @@ @Produces("application/json") public Response deleteInstance( @PathParam("id") - String executionId + String executionId, + @Context + HttpServletRequest request ) { log.debug("Delete instance (ID "+executionId+")"); - getProcessManagement().deleteInstance(executionId); + getProcessManagement().deleteInstance(executionId, request.getUserPrincipal().getName()); return Response.ok().type("application/json").build(); } @@ -275,7 +285,9 @@ @PathParam("id") String id, @QueryParam("signal") - String signalName) + String signalName, + @Context + HttpServletRequest request) { try { id = URLDecoder.decode(id, "UTF-8"); @@ -287,7 +299,7 @@ if ("default transition".equals(signalName)) signalName = null; - getProcessManagement().signalExecution(id, signalName); + getProcessManagement().signalExecution(id, signalName, request.getUserPrincipal().getName()); return Response.ok().type("application/json").build(); } @@ -296,7 +308,9 @@ @Produces("application/json") public Response signalExecutionDefault( @PathParam("id") - String id) + String id, + @Context + HttpServletRequest request) { try { id = URLDecoder.decode(id, "UTF-8"); @@ -305,7 +319,7 @@ } log.debug("Signal token " + id); - getProcessManagement().signalExecution(id, null); + getProcessManagement().signalExecution(id, null, request.getUserPrincipal().getName()); return Response.ok().type("application/json").build(); }