From 1c46628575ff973d8c9a17d011093885ddadcd5a Mon Sep 17 00:00:00 2001 From: David Caruana Date: Wed, 23 May 2007 16:15:07 +0000 Subject: [PATCH] Workflow Service: add support for task comment. git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@5763 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- config/alfresco/model/bpmModel.xml | 13 +++--- .../alfresco/repo/workflow/WorkflowModel.java | 1 + .../repo/workflow/jbpm/JBPMEngine.java | 42 ++++++++++++++++++- 3 files changed, 47 insertions(+), 9 deletions(-) diff --git a/config/alfresco/model/bpmModel.xml b/config/alfresco/model/bpmModel.xml index 09da790775..a8ac800697 100644 --- a/config/alfresco/model/bpmModel.xml +++ b/config/alfresco/model/bpmModel.xml @@ -135,7 +135,9 @@ - + + d:text + @@ -180,7 +182,8 @@ - d:text + + d:text @@ -394,12 +397,6 @@ - - - - - - diff --git a/source/java/org/alfresco/repo/workflow/WorkflowModel.java b/source/java/org/alfresco/repo/workflow/WorkflowModel.java index 27cfd61d09..030a359f5f 100644 --- a/source/java/org/alfresco/repo/workflow/WorkflowModel.java +++ b/source/java/org/alfresco/repo/workflow/WorkflowModel.java @@ -48,6 +48,7 @@ public interface WorkflowModel 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 PROP_COMMENT = QName.createQName(NamespaceService.BPM_MODEL_1_0_URI, "comment"); static final QName ASSOC_POOLED_ACTORS = QName.createQName(NamespaceService.BPM_MODEL_1_0_URI, "pooledActors"); // workflow task contstants diff --git a/source/java/org/alfresco/repo/workflow/jbpm/JBPMEngine.java b/source/java/org/alfresco/repo/workflow/jbpm/JBPMEngine.java index badd23884d..38dfd176cd 100644 --- a/source/java/org/alfresco/repo/workflow/jbpm/JBPMEngine.java +++ b/source/java/org/alfresco/repo/workflow/jbpm/JBPMEngine.java @@ -31,8 +31,8 @@ import java.util.ArrayList; import java.util.Collection; import java.util.Date; import java.util.HashMap; -import java.util.Map; import java.util.List; +import java.util.Map; import java.util.Set; import java.util.Map.Entry; import java.util.zip.ZipInputStream; @@ -96,6 +96,7 @@ import org.jbpm.graph.def.Event; import org.jbpm.graph.def.Node; import org.jbpm.graph.def.ProcessDefinition; import org.jbpm.graph.def.Transition; +import org.jbpm.graph.exe.Comment; import org.jbpm.graph.exe.ExecutionContext; import org.jbpm.graph.exe.ProcessInstance; import org.jbpm.graph.exe.Token; @@ -1809,6 +1810,14 @@ public class JBPMEngine extends BPMEngine properties.put(ContentModel.PROP_CREATED, instance.getCreate()); properties.put(ContentModel.PROP_OWNER, instance.getActorId()); + // map jBPM comments + // NOTE: Only use first comment in list + List comments = instance.getComments(); + if (comments != null && comments.size() > 0) + { + properties.put(WorkflowModel.PROP_COMMENT, comments.get(0).getMessage()); + } + // map jBPM task instance collections to associations Set pooledActors = instance.getPooledActors(); if (pooledActors != null) @@ -1918,6 +1927,37 @@ public class JBPMEngine extends BPMEngine instance.setPriority((Integer)value); continue; } + else if (key.equals(WorkflowModel.PROP_COMMENT)) + { + if (!(value instanceof String)) + { + throw new WorkflowException("Task comment '" + value + "' is invalid"); + } + + // NOTE: Only use first comment in list + final List comments = instance.getComments(); + if (comments != null && comments.size() > 0) + { + // remove existing comments + // TODO: jBPM does not provide assistance here + jbpmTemplate.execute(new JbpmCallback() + { + public Object doInJbpm(JbpmContext context) + { + Session session = context.getSession(); + for (Comment comment : comments) + { + comment.getToken().getComments().remove(comment); + session.delete(comment); + } + comments.clear(); + return null; + } + }); + } + instance.addComment((String)value); + continue; + } else if (key.equals(ContentModel.PROP_OWNER)) { if (value != null && !(value instanceof String))