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))