From e4872ca8a5064b25367dbae794d1f7fd8cbbad11 Mon Sep 17 00:00:00 2001 From: David Caruana Date: Mon, 21 Aug 2006 20:29:21 +0000 Subject: [PATCH] Workflow: 1) Fix bug in task property conversion for associations where association was single-ended, but list passed in (was causing exception in start workflow ui) 2) Tidy up Review & Approve Process definition (assign appropriate names, set review task due date, priority etc) 3) Provide resource bundles for basic BPM model and Review & Approve workflow 4) Fix bug in I18N resolution of workflow task title & description git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@3556 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../messages/workflow-messages.properties | 41 +++++++++++-- config/alfresco/model/bpmModel.xml | 60 ++----------------- config/alfresco/model/workflowModel.xml | 8 +++ .../alfresco/repo/workflow/WorkflowModel.java | 20 ++++++- .../repo/workflow/jbpm/JBPMEngine.java | 7 ++- .../repo/workflow/jbpm/JBPMEngineTest.java | 6 -- .../workflow/jbpm/ReviewAndApproveTest.java | 20 ++----- .../review_and_approve_processdefinition.xml | 58 +++++++++++------- .../repo/workflow/jbpm/test_script.xml | 10 +++- .../service/namespace/NamespaceService.java | 6 ++ 10 files changed, 127 insertions(+), 109 deletions(-) diff --git a/config/alfresco/messages/workflow-messages.properties b/config/alfresco/messages/workflow-messages.properties index f488826abd..5b78a1e526 100644 --- a/config/alfresco/messages/workflow-messages.properties +++ b/config/alfresco/messages/workflow-messages.properties @@ -1,11 +1,42 @@ # Display labels for out-of-the-box Content-oriented Workflows -# TODO: DC - Complete this for v1.4... +# +# Review & Approve Workflow +# wf_review.workflow.title=Review & Approve -wf_review.workflow.description=Send documents for approval +wf_review.workflow.description=Review & approval of content + +# Review & Approve Task Definitions + +wf_workflowmodel.type.wf_submitReviewTask.title=Submit Review +wf_workflowmodel.type.wf_submitReviewTask.description=Submit documents for review & approval +wf_workflowmodel.property.wf_reviewDueDate.title=Review Due Date +wf_workflowmodel.property.wf_reviewDueDate.description=Review Due Date +wf_workflowmodel.property.wf_priority.title=Review Priority +wf_workflowmodel.property.wf_priority.description=Review Priority +wf_workflowmodel.association.wf_reviewer.title=Reviewer +wf_workflowmodel.association.wf_reviewer.description=Reviewer + +# Review & Approve Process Definitions + wf_review.node.start.title=Start -wf_review.node.start.transition.review.title=Review +wf_review.node.start.description=Start wf_review.node.review.title=Review -wf_review.task.wf_submitReviewTask.title=Review -wf_workflowmodel.type.wf_submitReviewTask.title=Review +wf_review.node.review.description=Review +wf_review.task.wf_review.title=Review +wf_review.task.wf_review.description=Review +wf_review.node.review.transition.reject.title=Reject +wf_review.node.review.transition.reject.description=Reject +wf_review.node.review.transition.approve.title=Approve +wf_review.node.review.transition.approve.description=Approve +wf_review.node.rejected.title=Rejected +wf_review.node.rejected.description=Rejected +wf_review.task.wf_rejected.title=Rejected +wf_review.task.wf_rejected.description=Rejected +wf_review.node.approved.title=Approved +wf_review.node.approved.description=Approved +wf_review.task.wf_approved.title=Approved +wf_review.task.wf_approved.description=Approved +wf_review.node.end.title=End +wf_review.node.end.description=End diff --git a/config/alfresco/model/bpmModel.xml b/config/alfresco/model/bpmModel.xml index 6f9780c217..318154ceed 100644 --- a/config/alfresco/model/bpmModel.xml +++ b/config/alfresco/model/bpmModel.xml @@ -153,21 +153,6 @@ - - - - - - Ad-hoc Task - Task assigned by User - bpm:task - - - cm:attachable - - - - @@ -200,6 +185,12 @@ d:noderef + + + d:noderef + true + + @@ -223,16 +214,6 @@ - - - - - - - Task Space - cm:folder - - @@ -249,14 +230,6 @@ - - - - - d:noderef - true - - @@ -270,27 +243,6 @@ - - - - - - - - - false - false - - - bpm:taskspace - true - false - - false - - - - \ No newline at end of file diff --git a/config/alfresco/model/workflowModel.xml b/config/alfresco/model/workflowModel.xml index ddf610dfd8..244417251a 100644 --- a/config/alfresco/model/workflowModel.xml +++ b/config/alfresco/model/workflowModel.xml @@ -32,6 +32,14 @@ Review Due Date d:date + + + Review Priority + d:int + + + + diff --git a/source/java/org/alfresco/repo/workflow/WorkflowModel.java b/source/java/org/alfresco/repo/workflow/WorkflowModel.java index 2e082cee7f..0eeebf1e63 100644 --- a/source/java/org/alfresco/repo/workflow/WorkflowModel.java +++ b/source/java/org/alfresco/repo/workflow/WorkflowModel.java @@ -26,6 +26,10 @@ import org.alfresco.service.namespace.QName; public interface WorkflowModel { + // + // Base Business Process Management Definitions + // + // task constants static final QName TYPE_TASK = QName.createQName(NamespaceService.BPM_MODEL_1_0_URI, "task"); static final QName PROP_TASK_ID = QName.createQName(NamespaceService.BPM_MODEL_1_0_URI, "taskId"); @@ -35,14 +39,28 @@ public interface WorkflowModel static final QName PROP_PRIORITY = QName.createQName(NamespaceService.BPM_MODEL_1_0_URI, "priority"); static final QName PROP_STATUS = QName.createQName(NamespaceService.BPM_MODEL_1_0_URI, "status"); static final QName PROP_PERCENT_COMPLETE = QName.createQName(NamespaceService.BPM_MODEL_1_0_URI, "percentComplete"); + static final QName PROP_COMPLETED_ITEMS = QName.createQName(NamespaceService.BPM_MODEL_1_0_URI, "completedItems"); static final QName ASSOC_POOLED_ACTORS = QName.createQName(NamespaceService.BPM_MODEL_1_0_URI, "pooledActors"); // workflow task contstants static final QName TYPE_WORKFLOW_TASK = QName.createQName(NamespaceService.BPM_MODEL_1_0_URI, "workflowTask"); static final QName PROP_CONTEXT = QName.createQName(NamespaceService.BPM_MODEL_1_0_URI, "context"); + static final QName PROP_WORKFLOW_DEFINITION_ID = QName.createQName(NamespaceService.BPM_MODEL_1_0_URI, "workflowDefinitionId"); + static final QName PROP_WORKFLOW_INSTANCE_ID = QName.createQName(NamespaceService.BPM_MODEL_1_0_URI, "workflowInstanceId"); static final QName ASSOC_PACKAGE = QName.createQName(NamespaceService.BPM_MODEL_1_0_URI, "package"); // workflow package static final QName ASPECT_WORKFLOW_PACKAGE = QName.createQName(NamespaceService.BPM_MODEL_1_0_URI, "workflowPackage"); + + + // + // Workflow Models + // -} + // review & approve + static final QName TYPE_SUBMITREVIEW_TASK = QName.createQName(NamespaceService.WORKFLOW_MODEL_1_0_URI, "submitReviewTask"); + static final QName PROP_REVIEW_PRIORITY = QName.createQName(NamespaceService.WORKFLOW_MODEL_1_0_URI, "reviewPriority"); + static final QName PROP_REVIEW_DUE_DATE = QName.createQName(NamespaceService.WORKFLOW_MODEL_1_0_URI, "reviewDueDate"); + static final QName ASSOC_REVIEWER = QName.createQName(NamespaceService.WORKFLOW_MODEL_1_0_URI, "reviewer"); + +} \ No newline at end of file diff --git a/source/java/org/alfresco/repo/workflow/jbpm/JBPMEngine.java b/source/java/org/alfresco/repo/workflow/jbpm/JBPMEngine.java index 41b897f11d..be4c988888 100644 --- a/source/java/org/alfresco/repo/workflow/jbpm/JBPMEngine.java +++ b/source/java/org/alfresco/repo/workflow/jbpm/JBPMEngine.java @@ -1258,7 +1258,8 @@ public class JBPMEngine extends BPMEngine } else { - value = new JBPMNode((NodeRef)value, serviceRegistry); + List nodeRefs = (List)value; + value = (nodeRefs.size() == 0 ? null : new JBPMNode(nodeRefs.get(0), serviceRegistry)); } } @@ -1440,7 +1441,7 @@ public class JBPMEngine extends BPMEngine workflowTask.properties = getTaskProperties(task); String name = task.getName(); String processName = task.getTask().getProcessDefinition().getName(); - workflowTask.title = getLabel(processName + ".node." + name, TITLE_LABEL, name); + workflowTask.title = getLabel(processName + ".task." + name, TITLE_LABEL, null); if (workflowTask.title == null) { workflowTask.title = workflowTask.definition.metadata.getTitle(); @@ -1449,7 +1450,7 @@ public class JBPMEngine extends BPMEngine workflowTask.title = name; } } - workflowTask.description = getLabel(processName + ".node." + name, DESC_LABEL, workflowTask.title); + workflowTask.description = getLabel(processName + ".task." + name, DESC_LABEL, null); if (workflowTask.description == null) { String description = workflowTask.definition.metadata.getDescription(); diff --git a/source/java/org/alfresco/repo/workflow/jbpm/JBPMEngineTest.java b/source/java/org/alfresco/repo/workflow/jbpm/JBPMEngineTest.java index 77fd5765a7..160b482c9e 100644 --- a/source/java/org/alfresco/repo/workflow/jbpm/JBPMEngineTest.java +++ b/source/java/org/alfresco/repo/workflow/jbpm/JBPMEngineTest.java @@ -394,12 +394,6 @@ public class JBPMEngineTest extends BaseSpringTest } - public void testWorkflowPackageNodeRef() - { - - } - - public void testScript() throws IOException { diff --git a/source/java/org/alfresco/repo/workflow/jbpm/ReviewAndApproveTest.java b/source/java/org/alfresco/repo/workflow/jbpm/ReviewAndApproveTest.java index 2a82a02c7e..2d4cb38c46 100644 --- a/source/java/org/alfresco/repo/workflow/jbpm/ReviewAndApproveTest.java +++ b/source/java/org/alfresco/repo/workflow/jbpm/ReviewAndApproveTest.java @@ -23,7 +23,6 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import org.alfresco.model.ContentModel; import org.alfresco.repo.content.MimetypeMap; import org.alfresco.repo.security.authentication.AuthenticationComponent; import org.alfresco.repo.workflow.BPMEngineRegistry; @@ -69,18 +68,7 @@ public class ReviewAndApproveTest extends BaseSpringTest workflowComponent = registry.getWorkflowComponent("jbpm"); taskComponent = registry.getTaskComponent("jbpm"); - // retrieve review and approve process definition -// ClassPathResource processDef = new ClassPathResource("org/alfresco/repo/workflow/jbpm/review_and_approve_processdefinition.xml"); -// assertTrue(workflowComponent.isDefinitionDeployed(processDef.getInputStream(), MimetypeMap.MIMETYPE_XML)); -// List definitions = workflowComponent.getDefinitions(); -// for (WorkflowDefinition definition : definitions) -// { -// if (definition.title.equals("Review & Approve")) -// { -// testWorkflowDef = definition; -// break; -// } -// } + // deploy latest review and approve process definition ClassPathResource processDef = new ClassPathResource("org/alfresco/repo/workflow/jbpm/review_and_approve_processdefinition.xml"); WorkflowDeployment deployment = workflowComponent.deployDefinition(processDef.getInputStream(), MimetypeMap.MIMETYPE_XML); testWorkflowDef = deployment.definition; @@ -93,7 +81,6 @@ public class ReviewAndApproveTest extends BaseSpringTest // get valid node ref NodeService nodeService = (NodeService)applicationContext.getBean(ServiceRegistry.NODE_SERVICE.getLocalName()); testNodeRef = nodeService.getRootNode(new StoreRef(StoreRef.PROTOCOL_WORKSPACE, "spacesStore")); - nodeService.setProperty(testNodeRef, ContentModel.PROP_CREATED, new Date()); } @Override @@ -103,12 +90,14 @@ public class ReviewAndApproveTest extends BaseSpringTest } - public void testWorkflowPackage() + public void testSubmitForReview() { WorkflowDefinition workflowDef = testWorkflowDef; Map params = new HashMap(); params.put(WorkflowModel.ASSOC_PACKAGE, testNodeRef); + Date reviewDueDate = new Date(); + params.put(QName.createQName("http://www.alfresco.org/model/workflow/1.0", "reviewDueDate"), reviewDueDate); NodeRef reviewer = personService.getPerson("admin"); params.put(QName.createQName("http://www.alfresco.org/model/workflow/1.0", "reviewer"), reviewer); @@ -127,6 +116,7 @@ public class ReviewAndApproveTest extends BaseSpringTest assignedTasks = filterTasksByWorkflowInstance(assignedTasks, path.instance.id); assertEquals(testNodeRef, assignedTasks.get(0).properties.get(WorkflowModel.ASSOC_PACKAGE)); + assertEquals(reviewDueDate, assignedTasks.get(0).properties.get(WorkflowModel.PROP_DUE_DATE)); } /** diff --git a/source/java/org/alfresco/repo/workflow/jbpm/review_and_approve_processdefinition.xml b/source/java/org/alfresco/repo/workflow/jbpm/review_and_approve_processdefinition.xml index 8518b69726..9dc0642e16 100644 --- a/source/java/org/alfresco/repo/workflow/jbpm/review_and_approve_processdefinition.xml +++ b/source/java/org/alfresco/repo/workflow/jbpm/review_and_approve_processdefinition.xml @@ -2,47 +2,61 @@ - + + - + - - + + + + - - + - - + + + - - + + + + + + - + - - + + - - + + + - + - + - - + + + - + - + - + + + \ No newline at end of file diff --git a/source/java/org/alfresco/repo/workflow/jbpm/test_script.xml b/source/java/org/alfresco/repo/workflow/jbpm/test_script.xml index afa0e33e43..907e9558e8 100644 --- a/source/java/org/alfresco/repo/workflow/jbpm/test_script.xml +++ b/source/java/org/alfresco/repo/workflow/jbpm/test_script.xml @@ -30,9 +30,13 @@ diff --git a/source/java/org/alfresco/service/namespace/NamespaceService.java b/source/java/org/alfresco/service/namespace/NamespaceService.java index cfd2c7a350..2d2cf70c32 100644 --- a/source/java/org/alfresco/service/namespace/NamespaceService.java +++ b/source/java/org/alfresco/service/namespace/NamespaceService.java @@ -72,6 +72,12 @@ public interface NamespaceService extends NamespacePrefixResolver /** Business Process Model Prefix */ public static final String BPM_MODEL_PREFIX = "bpm"; + /** Workflow Model URI */ + public static final String WORKFLOW_MODEL_1_0_URI = "http://www.alfresco.org/model/workflow/1.0"; + + /** Workflow Model Prefix */ + public static final String WORKFLOW_MODEL_PREFIX = "wf"; + /** Alfresco View Namespace URI */ public static final String REPOSITORY_VIEW_1_0_URI = "http://www.alfresco.org/view/repository/1.0";