From d4f999b2270289b342cc150efcb3b1927b30f8f5 Mon Sep 17 00:00:00 2001 From: Gavin Cornwell Date: Fri, 6 Aug 2010 21:33:08 +0000 Subject: [PATCH] Merged BRANCHES/DEV/BELARUS/HEAD_2010_08_04 to HEAD: 21652: ALF-3898 : F68 REST API to cancel/delete a workflow instance git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@21672 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../workflow-instance.delete.desc.xml | 8 ++ .../workflow-instance.delete.json.ftl | 0 .../web-scripts-application-context.xml | 5 ++ .../workflow/WorkflowInstanceDelete.java | 80 +++++++++++++++++++ .../scripts/workflow/WorkflowRestApiTest.java | 26 ++++++ 5 files changed, 119 insertions(+) create mode 100644 config/alfresco/templates/webscripts/org/alfresco/repository/workflow/workflow-instance.delete.desc.xml create mode 100644 config/alfresco/templates/webscripts/org/alfresco/repository/workflow/workflow-instance.delete.json.ftl create mode 100644 source/java/org/alfresco/repo/web/scripts/workflow/WorkflowInstanceDelete.java diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/workflow/workflow-instance.delete.desc.xml b/config/alfresco/templates/webscripts/org/alfresco/repository/workflow/workflow-instance.delete.desc.xml new file mode 100644 index 0000000000..ea38626642 --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/workflow/workflow-instance.delete.desc.xml @@ -0,0 +1,8 @@ + + Delete Workflow Instance + Either cancels or deletes the specified workflow instance. + /api/workflow-instances/{workflow_instance_id}?forced={forced?} + + user + required + \ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/workflow/workflow-instance.delete.json.ftl b/config/alfresco/templates/webscripts/org/alfresco/repository/workflow/workflow-instance.delete.json.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/config/alfresco/web-scripts-application-context.xml b/config/alfresco/web-scripts-application-context.xml index 349c7d13f6..feb3a3b18a 100644 --- a/config/alfresco/web-scripts-application-context.xml +++ b/config/alfresco/web-scripts-application-context.xml @@ -821,6 +821,11 @@ class="org.alfresco.repo.web.scripts.workflow.WorkflowInstancesGet" parent="abstractWorkflowWebScript"> + + + diff --git a/source/java/org/alfresco/repo/web/scripts/workflow/WorkflowInstanceDelete.java b/source/java/org/alfresco/repo/web/scripts/workflow/WorkflowInstanceDelete.java new file mode 100644 index 0000000000..8c41c84d02 --- /dev/null +++ b/source/java/org/alfresco/repo/web/scripts/workflow/WorkflowInstanceDelete.java @@ -0,0 +1,80 @@ +/* + * Copyright (C) 2005-2010 Alfresco Software Limited. + * + * This file is part of Alfresco + * + * Alfresco is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Alfresco is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Alfresco. If not, see . + */ +package org.alfresco.repo.web.scripts.workflow; + +import java.util.Map; + +import javax.servlet.http.HttpServletResponse; + +import org.springframework.extensions.webscripts.Cache; +import org.springframework.extensions.webscripts.Status; +import org.springframework.extensions.webscripts.WebScriptRequest; + +/** + * @author unknown + * @since 3.4 + * + */ +public class WorkflowInstanceDelete extends AbstractWorkflowWebscript +{ + + public static final String PARAM_FORCED = "forced"; + + @Override + protected Map buildModel(WorkflowModelBuilder modelBuilder, WebScriptRequest req, Status status, Cache cache) + { + Map params = req.getServiceMatch().getTemplateVars(); + + // getting workflow instance id from request parameters + String workflowInstanceId = params.get("workflow_instance_id"); + + boolean forced = getForced(req); + + if (forced) + { + workflowService.deleteWorkflow(workflowInstanceId); + } + else + { + workflowService.cancelWorkflow(workflowInstanceId); + } + + status.setCode(HttpServletResponse.SC_NO_CONTENT); + return null; + } + + private boolean getForced(WebScriptRequest req) + { + String forced = req.getParameter(PARAM_FORCED); + if (forced != null) + { + try + { + return Boolean.valueOf(forced); + } + catch (Exception e) + { + // do nothing, false will be returned + } + } + + // Defaults to false. + return false; + } +} diff --git a/source/java/org/alfresco/repo/web/scripts/workflow/WorkflowRestApiTest.java b/source/java/org/alfresco/repo/web/scripts/workflow/WorkflowRestApiTest.java index 7636edd47c..759efa5946 100644 --- a/source/java/org/alfresco/repo/web/scripts/workflow/WorkflowRestApiTest.java +++ b/source/java/org/alfresco/repo/web/scripts/workflow/WorkflowRestApiTest.java @@ -53,6 +53,7 @@ import org.springframework.extensions.surf.util.ISO8601DateFormat; import org.springframework.extensions.webscripts.Status; import org.springframework.extensions.webscripts.TestWebScriptServer.GetRequest; import org.springframework.extensions.webscripts.TestWebScriptServer.PutRequest; +import org.springframework.extensions.webscripts.TestWebScriptServer.DeleteRequest; import org.springframework.extensions.webscripts.TestWebScriptServer.Response; /** @@ -487,6 +488,31 @@ public class WorkflowRestApiTest extends BaseWebScriptTest assertTrue(stateFilteredResult.length() > 1); } + public void testWorkflowInstanceDelete() throws Exception + { + //Start workflow as USER1 and assign task to USER2. + personManager.setUser(USER1); + WorkflowDefinition adhocDef = workflowService.getDefinitionByName("jbpm$wf:adhoc"); + Map params = new HashMap(); + params.put(WorkflowModel.ASSOC_ASSIGNEE, personManager.get(USER2)); + Date dueDate = new Date(); + params.put(WorkflowModel.PROP_DUE_DATE, dueDate); + params.put(WorkflowModel.PROP_PRIORITY, 1); + params.put(WorkflowModel.ASSOC_PACKAGE, packageRef); + params.put(WorkflowModel.PROP_CONTEXT, packageRef); + + WorkflowPath adhocPath = workflowService.startWorkflow(adhocDef.getId(), params); + WorkflowTask startTask = workflowService.getTasksForWorkflowPath(adhocPath.getId()).get(0); + startTask = workflowService.endTask(startTask.getId(), null); + + WorkflowInstance adhocInstance = startTask.getPath().getInstance(); + + Response response = sendRequest(new DeleteRequest(URL_WORKFLOW_INSTANCES + "/" + adhocInstance.getId()), 204); + assertEquals(Status.STATUS_NO_CONTENT, response.getStatus()); + + assertNull(workflowService.getWorkflowById(adhocInstance.getId())); + } + @Override protected void setUp() throws Exception {