[jbpm-commits] JBoss JBPM SVN: r4579 - in jbpm4/trunk/modules: api/src/main/java/org/jbpm/api/session and 9 other directories.

do-not-reply at jboss.org do-not-reply at jboss.org
Sat Apr 18 15:47:17 EDT 2009


Author: tom.baeyens at jboss.com
Date: 2009-04-18 15:47:17 -0400 (Sat, 18 Apr 2009)
New Revision: 4579

Modified:
   jbpm4/trunk/modules/api/src/main/java/org/jbpm/api/activity/ActivityBehaviour.java
   jbpm4/trunk/modules/api/src/main/java/org/jbpm/api/session/RepositorySession.java
   jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/SubProcessActivity.java
   jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/SubProcessBinding.java
   jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/model/JpdlExecution.java
   jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/xml/JpdlParser.java
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/builder/VariableBuilder.java
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/cmd/GetActivityCoordinates.java
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/cmd/StartProcessInstanceCmd.java
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/cmd/StartProcessInstanceInLatestCmd.java
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ExecutionImpl.java
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ScopeInstanceImpl.java
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/VariableDefinitionImpl.java
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/VariableOutDefinitionImpl.java
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/VariableOutDefinitionSet.java
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/query/ProcessDefinitionQueryImpl.java
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/repository/RepositorySessionImpl.java
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/task/SwimlaneImpl.java
Log:
JBPM-2025 started parsing and implementation of sub-process

Modified: jbpm4/trunk/modules/api/src/main/java/org/jbpm/api/activity/ActivityBehaviour.java
===================================================================
--- jbpm4/trunk/modules/api/src/main/java/org/jbpm/api/activity/ActivityBehaviour.java	2009-04-18 17:43:48 UTC (rev 4578)
+++ jbpm4/trunk/modules/api/src/main/java/org/jbpm/api/activity/ActivityBehaviour.java	2009-04-18 19:47:17 UTC (rev 4579)
@@ -24,7 +24,7 @@
 import java.io.Serializable;
 
 /** piece of Java code that is to be included in a process as the runtime 
- * activity behaviour or as a hidden listener to process events.
+ * activity behaviour.
  * 
  * @author Tom Baeyens
  */

Modified: jbpm4/trunk/modules/api/src/main/java/org/jbpm/api/session/RepositorySession.java
===================================================================
--- jbpm4/trunk/modules/api/src/main/java/org/jbpm/api/session/RepositorySession.java	2009-04-18 17:43:48 UTC (rev 4578)
+++ jbpm4/trunk/modules/api/src/main/java/org/jbpm/api/session/RepositorySession.java	2009-04-18 19:47:17 UTC (rev 4579)
@@ -41,5 +41,7 @@
 
   ProcessDefinitionQuery createProcessDefinitionQuery();
 
-  ClientProcessDefinition loadProcessDefinitionById(String processDefinitionId);
+  ClientProcessDefinition findProcessDefinitionById(String processDefinitionId);
+
+  ClientProcessDefinition findProcessDefinitionByKey(String processDefinitionKey);
 }

Modified: jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/SubProcessActivity.java
===================================================================
--- jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/SubProcessActivity.java	2009-04-18 17:43:48 UTC (rev 4578)
+++ jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/SubProcessActivity.java	2009-04-18 19:47:17 UTC (rev 4579)
@@ -25,7 +25,13 @@
 import java.util.Map;
 
 import org.jbpm.api.activity.ActivityExecution;
+import org.jbpm.api.client.ClientProcessDefinition;
+import org.jbpm.api.env.Environment;
+import org.jbpm.api.session.RepositorySession;
+import org.jbpm.jpdl.internal.model.JpdlExecution;
 import org.jbpm.pvm.internal.model.VariableDefinitionImpl;
+import org.jbpm.pvm.internal.model.VariableOutDefinitionImpl;
+import org.jbpm.pvm.internal.task.SwimlaneImpl;
 
 
 /**
@@ -35,31 +41,78 @@
 
   private static final long serialVersionUID = 1L;
   
-  protected Map<String, String> inSwimlaneMappings;
-  protected List<VariableDefinitionImpl> inDefinitions;
-  protected List<VariableDefinitionImpl> outDefinitions;
-  protected Map<String, String> outcomeStateMappings;
-  protected Map<String, String> outcomeVariableMappings;
+  protected String subProcessKey;
+  protected String subProcessId;
+  protected Map<String, String> swimlaneMappings;
+  protected List<VariableDefinitionImpl> variableDefinitions;
 
-  public void execute(ActivityExecution execution) throws Exception {
+  protected List<VariableOutDefinitionImpl> variableOutDefinitions;
+  protected Map<String, String> outcomeActivityMappings;
+  protected String outcomeExpression;
+  protected Map<Object, String> outcomeVariableMappings;
+
+  public void execute(ActivityExecution execution) {
+    JpdlExecution jpdlExecution = execution.getExtension(JpdlExecution.class);
+    
+    RepositorySession repositorySession = Environment.getFromCurrent(RepositorySession.class);
+    
+    ClientProcessDefinition processDefinition = null;
+    
+    if (subProcessId!=null) {
+      processDefinition = repositorySession.findProcessDefinitionById(subProcessId);
+    } else {
+      processDefinition = repositorySession.findProcessDefinitionByKey(subProcessKey);
+    }
+    
+    JpdlExecution subProcessInstance = (JpdlExecution) processDefinition.createProcessInstance();
+    
+    subProcessInstance.setSuperProcessExecution(jpdlExecution);
+    jpdlExecution.setSubProcessInstance(subProcessInstance);
+    
+    for (String swimlaneName: swimlaneMappings.keySet()) {
+      String subSwimlaneName = swimlaneMappings.get(swimlaneName);
+      SwimlaneImpl subSwimlane = subProcessInstance.createSwimlane(subSwimlaneName);
+      SwimlaneImpl swimlane = jpdlExecution.getSwimlane(swimlaneName);
+      if (swimlane!=null) {
+        subSwimlane.initialize(swimlane);
+      }
+    }
+    
+    for (VariableDefinitionImpl variableDefinition: variableDefinitions) {
+      String variableName = variableDefinition.getName();
+      Object value = variableDefinition.getInitValue(jpdlExecution);
+      subProcessInstance.setVariable(variableName, value);
+    }
+    
+    subProcessInstance.start();
   }
 
-  public void signal(ActivityExecution execution, String signalName, Map<String, Object> parameters) throws Exception {
+  public void signal(ActivityExecution execution, String signalName, Map<String, Object> parameters) {
+    // see VariableOutDefinitionSet: that is currently not yet used
   }
 
-  public void setInSwimlaneMappings(Map<String, String> inSwimlaneMappings) {
-    this.inSwimlaneMappings = inSwimlaneMappings;
+  public void setSwimlaneMappings(Map<String, String> swimlaneMappings) {
+    this.swimlaneMappings = swimlaneMappings;
   }
-  public void setInDefinitions(List<VariableDefinitionImpl> inDefinitions) {
-    this.inDefinitions = inDefinitions;
+  public void setOutcomeActivityMappings(Map<String, String> outcomeActivityMappings) {
+    this.outcomeActivityMappings = outcomeActivityMappings;
   }
-  public void setOutDefinitions(List<VariableDefinitionImpl> outDefinitions) {
-    this.outDefinitions = outDefinitions;
+  public void setOutcomeVariableMappings(Map<Object, String> outcomeVariableMappings) {
+    this.outcomeVariableMappings = outcomeVariableMappings;
   }
-  public void setOutcomeStateMappings(Map<String, String> outcomeStateMappings) {
-    this.outcomeStateMappings = outcomeStateMappings;
+  public void setSubProcessKey(String subProcessKey) {
+    this.subProcessKey = subProcessKey;
   }
-  public void setOutcomeVariableMappings(Map<String, String> outcomeVariableMappings) {
-    this.outcomeVariableMappings = outcomeVariableMappings;
+  public void setSubProcessId(String subProcessId) {
+    this.subProcessId = subProcessId;
   }
+  public void setVariableDefinitions(List<VariableDefinitionImpl> variableDefinitions) {
+    this.variableDefinitions = variableDefinitions;
+  }
+  public void setVariableOutDefinitions(List<VariableOutDefinitionImpl> variableOutDefinitions) {
+    this.variableOutDefinitions = variableOutDefinitions;
+  }
+  public void setOutcomeExpression(String outcomeExpression) {
+    this.outcomeExpression = outcomeExpression;
+  }
 }

Modified: jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/SubProcessBinding.java
===================================================================
--- jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/SubProcessBinding.java	2009-04-18 17:43:48 UTC (rev 4578)
+++ jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/SubProcessBinding.java	2009-04-18 19:47:17 UTC (rev 4579)
@@ -21,7 +21,17 @@
  */
 package org.jbpm.jpdl.internal.activity;
 
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.jbpm.jpdl.internal.xml.JpdlParser;
+import org.jbpm.pvm.internal.model.VariableDefinitionImpl;
+import org.jbpm.pvm.internal.model.VariableOutDefinitionImpl;
 import org.jbpm.pvm.internal.util.XmlUtil;
+import org.jbpm.pvm.internal.wire.Descriptor;
+import org.jbpm.pvm.internal.wire.WireContext;
+import org.jbpm.pvm.internal.wire.xml.WireParser;
 import org.jbpm.pvm.internal.xml.Parse;
 import org.jbpm.pvm.internal.xml.Parser;
 import org.w3c.dom.Element;
@@ -37,13 +47,77 @@
   }
 
   public Object parse(Element element, Parse parse, Parser parser) {
+    SubProcessActivity subProcessActivity = new SubProcessActivity();
     
     String subProcessKey = XmlUtil.attribute(element, "process-key");
+    subProcessActivity.setSubProcessKey(subProcessKey);
+    
     String subProcessId = XmlUtil.attribute(element, "process-id");
+    subProcessActivity.setSubProcessId(subProcessId);
     
+    List<VariableDefinitionImpl> variableDefinitions = JpdlParser.parseVariableDefinitions(element, parse, true);
+    subProcessActivity.setVariableDefinitions(variableDefinitions);
     
+    List<VariableOutDefinitionImpl> variableOutDefinitions = JpdlParser.parseVariableOutDefinitions(element, parse);
+    subProcessActivity.setVariableOutDefinitions(variableOutDefinitions);
      
-    return null;
+    Map<String, String> swimlaneMappings = parseSwimlaneMappings(element, parse);
+    subProcessActivity.setSwimlaneMappings(swimlaneMappings);
+
+    Map<String, String> outcomeActivityMappings = new HashMap<String, String>();
+    Map<Object, String> outcomeVariableMappings = new HashMap<Object, String>();
+
+    String outcomeExpression = XmlUtil.attribute(element, "outcome");
+    if (outcomeExpression!=null) {
+      for (Element transitionElement: XmlUtil.elements(element, "transition")) {
+        Element outcomeValueElement = XmlUtil.element(transitionElement, "outcome-value");
+        if (outcomeValueElement!=null) {
+          String transitionName = XmlUtil.attribute(transitionElement, "name");
+          if (transitionName==null) {
+            parse.addProblem("transitions with an outcome-value must have a name", transitionElement);
+          }
+          Element valueElement = XmlUtil.element(outcomeValueElement);
+          if (valueElement!=null) {
+            Descriptor descriptor = (Descriptor) WireParser.getInstance().parseElement(valueElement, parse);
+            Object value = WireContext.create(descriptor);
+            outcomeVariableMappings.put(value, transitionName);
+          } else {
+            parse.addProblem("outcome-value must contain exactly one element", outcomeValueElement);
+          }
+        }
+      }
+
+    } else {  // no outcome expression
+
+      // search for end activity mappings
+      for (Element transitionElement: XmlUtil.elements(element, "transition")) {
+        Element outcomeElement = XmlUtil.element(transitionElement, "outcome");
+        if (outcomeElement!=null) {
+          String transitionName = XmlUtil.attribute(transitionElement, "name");
+          if (transitionName==null) {
+            parse.addProblem("transitions with an outcome must have a name", transitionElement);
+          }
+          String activity = XmlUtil.attribute(outcomeElement, "activity");
+          if (activity!=null) {
+            outcomeActivityMappings.put(activity, transitionName);
+          }
+        }
+      }
+    }
+
+    return subProcessActivity;
   }
 
+  public static Map<String, String> parseSwimlaneMappings(Element element, Parse parse) {
+    Map<String, String> swimlaneMappings = new HashMap<String, String>();
+    
+    for (Element inElement: XmlUtil.elements(element, "swimlane-mapping")) {
+      String swimlane = XmlUtil.attribute(inElement, "swimlane", true, parse);
+      String subSwimlane = XmlUtil.attribute(inElement, "sub-swimlane", true, parse);
+      
+      swimlaneMappings.put(swimlane, subSwimlane);
+    }
+
+    return swimlaneMappings;
+  }
 }

Modified: jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/model/JpdlExecution.java
===================================================================
--- jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/model/JpdlExecution.java	2009-04-18 17:43:48 UTC (rev 4578)
+++ jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/model/JpdlExecution.java	2009-04-18 19:47:17 UTC (rev 4579)
@@ -172,6 +172,13 @@
     swimlane.setExecution(this);
   }
   
+  public SwimlaneImpl getSwimlane(String swimlaneName) {
+    if (swimlanes==null) {
+      return null;
+    }
+    return swimlanes.get(swimlaneName);
+  }
+  
   public void removeSwimlane(SwimlaneImpl swimlane) {
     swimlanes.remove(swimlane.getName());
     swimlane.setExecution(null);
@@ -186,14 +193,18 @@
 
     SwimlaneImpl swimlane = swimlanes.get(swimlaneName);
     if (swimlane==null) {
-      // initialize swimlane
-      swimlane = new SwimlaneImpl();
-      swimlane.setName(swimlaneName);
-      swimlane.setExecution(this);
-      swimlanes.put(swimlaneName, swimlane);
+      swimlane = createSwimlane(swimlaneName);
       initializeAssignments(swimlaneDefinition, swimlane);
     }
 
     return swimlane;
   }
+
+  public SwimlaneImpl createSwimlane(String swimlaneName) {
+    SwimlaneImpl swimlane = new SwimlaneImpl();
+    swimlane.setName(swimlaneName);
+    swimlane.setExecution(this);
+    swimlanes.put(swimlaneName, swimlane);
+    return swimlane;
+  }
 }

Modified: jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/xml/JpdlParser.java
===================================================================
--- jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/xml/JpdlParser.java	2009-04-18 17:43:48 UTC (rev 4578)
+++ jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/xml/JpdlParser.java	2009-04-18 19:47:17 UTC (rev 4579)
@@ -45,6 +45,7 @@
 import org.jbpm.pvm.internal.model.ScopeElementImpl;
 import org.jbpm.pvm.internal.model.TimerDefinitionImpl;
 import org.jbpm.pvm.internal.model.VariableDefinitionImpl;
+import org.jbpm.pvm.internal.model.VariableOutDefinitionImpl;
 import org.jbpm.pvm.internal.task.AssignableDefinitionImpl;
 import org.jbpm.pvm.internal.task.SwimlaneDefinitionImpl;
 import org.jbpm.pvm.internal.task.TaskDefinitionImpl;
@@ -450,14 +451,14 @@
       
       String initExpr = XmlUtil.attribute(inElement, "init");
       if (initExpr!=null) {
-        variableDefinition.setInExpression(initExpr);
+        variableDefinition.setInitExpression(initExpr);
         sources++;
       }
       
-      Element initElement = XmlUtil.element(inElement, "init");
-      if (initElement!=null) {
-        Descriptor initValueDescriptor = (Descriptor) WireParser.getInstance().parseElement(initElement, parse);
-        variableDefinition.setInDescriptor(initValueDescriptor);
+      Element valueElement = XmlUtil.element(inElement);
+      if (valueElement!=null) {
+        Descriptor initValueDescriptor = (Descriptor) WireParser.getInstance().parseElement(valueElement, parse);
+        variableDefinition.setInitDescriptor(initValueDescriptor);
         sources++;
       }
 
@@ -472,4 +473,22 @@
     return variableDefinitions;
   }
 
+  public static List<VariableOutDefinitionImpl> parseVariableOutDefinitions(Element element, Parse parse) {
+    List<VariableOutDefinitionImpl> variableOutDefinitions = new ArrayList<VariableOutDefinitionImpl>();
+    
+    for (Element inElement: XmlUtil.elements(element, "out-variable")) {
+      VariableOutDefinitionImpl variableOutDefinition = new VariableOutDefinitionImpl();
+
+      String name = XmlUtil.attribute(inElement, "name", true, parse);
+      variableOutDefinition.setName(name);
+      
+      String expression = XmlUtil.attribute(inElement, "init");
+      if (expression!=null) {
+        variableOutDefinition.setExpression(expression);
+      }
+    }
+
+    return variableOutDefinitions;
+  }
+
 }

Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/builder/VariableBuilder.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/builder/VariableBuilder.java	2009-04-18 17:43:48 UTC (rev 4578)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/builder/VariableBuilder.java	2009-04-18 19:47:17 UTC (rev 4579)
@@ -49,22 +49,16 @@
   }
   
   public VariableBuilder initialValue(Descriptor initialValueDescriptor) {
-    variableDefinition.setInDescriptor(initialValueDescriptor);
+    variableDefinition.setInitDescriptor(initialValueDescriptor);
     return this;
   }
 
   public VariableBuilder initialExpression(String initialExpression) {
-    variableDefinition.setInExpression(initialExpression);
+    variableDefinition.setInitExpression(initialExpression);
     return this;
   }
 
-  public VariableBuilder initialVariable(String initialVariable) {
-    variableDefinition.setInVariableName(initialVariable);
-    return this;
-  }
-  
   public CompositeBuilder endVariable() {
     return compositeBuilder;
   }
-
 }

Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/cmd/GetActivityCoordinates.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/cmd/GetActivityCoordinates.java	2009-04-18 17:43:48 UTC (rev 4578)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/cmd/GetActivityCoordinates.java	2009-04-18 19:47:17 UTC (rev 4579)
@@ -47,7 +47,7 @@
 
   public ActivityCoordinates execute(Environment environment) throws Exception {
     RepositorySession repositorySession = environment.get(RepositorySession.class);
-    ProcessDefinitionImpl processDefinition = (ProcessDefinitionImpl) repositorySession.loadProcessDefinitionById(processDefinitionId);
+    ProcessDefinitionImpl processDefinition = (ProcessDefinitionImpl) repositorySession.findProcessDefinitionById(processDefinitionId);
     if (processDefinition==null) {
       throw new JbpmException("process definition "+processDefinitionId+" doesn't exist");
     }

Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/cmd/StartProcessInstanceCmd.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/cmd/StartProcessInstanceCmd.java	2009-04-18 17:43:48 UTC (rev 4578)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/cmd/StartProcessInstanceCmd.java	2009-04-18 19:47:17 UTC (rev 4579)
@@ -51,7 +51,7 @@
     RepositorySession repositorySession = environment.get(RepositorySession.class);
 
     ClientProcessDefinition processDefinition = (ClientProcessDefinition) 
-      repositorySession.loadProcessDefinitionById(processDefinitionId);
+    repositorySession.findProcessDefinitionById(processDefinitionId);
     if (processDefinition==null) {
       throw new JbpmException("no process definition with id '"+processDefinitionId+"'");
     }

Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/cmd/StartProcessInstanceInLatestCmd.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/cmd/StartProcessInstanceInLatestCmd.java	2009-04-18 17:43:48 UTC (rev 4578)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/cmd/StartProcessInstanceInLatestCmd.java	2009-04-18 19:47:17 UTC (rev 4579)
@@ -56,18 +56,8 @@
     ClientProcessDefinition processDefinition = null;
     
     RepositorySession repositorySession = environment.get(RepositorySession.class);
-    processDefinition = (ClientProcessDefinition) repositorySession.createProcessDefinitionQuery()
-        .key(processDefinitionKey)
-        .orderDesc(ProcessDefinitionQuery.PROPERTY_VERSION)
-        .page(0, 1)
-        .uniqueResult();
+    processDefinition = (ClientProcessDefinition) repositorySession.findProcessDefinitionByKey(processDefinitionKey);
     
-    if (processDefinition==null) {
-      throw new JbpmException("no process definition with key '"+processDefinitionKey+"'");
-    }
-    
-    processDefinition = repositorySession.loadProcessDefinitionById(processDefinition.getId());
-    
     ClientProcessInstance processInstance = processDefinition.createProcessInstance(executionKey);
     processInstance.setVariables(variables);
     processInstance.start();

Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ExecutionImpl.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ExecutionImpl.java	2009-04-18 17:43:48 UTC (rev 4578)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ExecutionImpl.java	2009-04-18 19:47:17 UTC (rev 4579)
@@ -1063,7 +1063,7 @@
          && (processDefinitionId!=null) 
        ) {
       RepositorySession repositorySession = Environment.getFromCurrent(RepositorySession.class);
-      processDefinition = (ProcessDefinitionImpl) repositorySession.loadProcessDefinitionById(processDefinitionId);
+      processDefinition = (ProcessDefinitionImpl) repositorySession.findProcessDefinitionById(processDefinitionId);
       if (processDefinition==null) {
         throw new JbpmException("couldn't find process definition "+processDefinitionId+" in the repository");
       }

Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ScopeInstanceImpl.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ScopeInstanceImpl.java	2009-04-18 17:43:48 UTC (rev 4578)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ScopeInstanceImpl.java	2009-04-18 19:47:17 UTC (rev 4579)
@@ -76,7 +76,7 @@
       variables = new HashMap<String, Variable>();
       for (VariableDefinitionImpl variableDefinition: variableDefinitions) {
         String key = variableDefinition.getName();
-        Object value = variableDefinition.getInValue(outerExecution);
+        Object value = variableDefinition.getInitValue(outerExecution);
         String typeName = variableDefinition.getTypeName();
         createVariable(key, value, typeName);
       }

Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/VariableDefinitionImpl.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/VariableDefinitionImpl.java	2009-04-18 17:43:48 UTC (rev 4578)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/VariableDefinitionImpl.java	2009-04-18 19:47:17 UTC (rev 4579)
@@ -42,18 +42,14 @@
   protected String name;
   protected String typeName;
 
-  protected String inVariableName;
-  protected String inExpression;
-  protected Descriptor inDescriptor;
+  protected String initExpression;
+  protected Descriptor initDescriptor;
 
-  public Object getInValue(ExecutionImpl execution) {
-    if (inDescriptor!=null) {
-      return WireContext.create(inDescriptor);
+  public Object getInitValue(ExecutionImpl execution) {
+    if (initDescriptor!=null) {
+      return WireContext.create(initDescriptor);
     }
-    if (inVariableName!=null) {
-      return execution.getVariable(name);
-    }
-    if (inExpression!=null) {
+    if (initExpression!=null) {
       throw new UnsupportedOperationException("TODO add variable in expression resolution");
     }
     return null;
@@ -65,24 +61,18 @@
   public void setName(String name) {
     this.name = name;
   }
-  public String getInVariableName() {
-    return inVariableName;
+  public String getInitExpression() {
+    return initExpression;
   }
-  public void setInVariableName(String inVariableName) {
-    this.inVariableName = inVariableName;
+  public void setInitExpression(String initExpression) {
+    this.initExpression = initExpression;
   }
-  public String getInExpression() {
-    return inExpression;
+  public Descriptor getInitDescriptor() {
+    return initDescriptor;
   }
-  public void setInExpression(String inExpression) {
-    this.inExpression = inExpression;
+  public void setInitDescriptor(Descriptor inDescriptor) {
+    this.initDescriptor = inDescriptor;
   }
-  public Descriptor getInDescriptor() {
-    return inDescriptor;
-  }
-  public void setInDescriptor(Descriptor inDescriptor) {
-    this.inDescriptor = inDescriptor;
-  }
   public String getTypeName() {
     return typeName;
   }

Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/VariableOutDefinitionImpl.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/VariableOutDefinitionImpl.java	2009-04-18 17:43:48 UTC (rev 4578)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/VariableOutDefinitionImpl.java	2009-04-18 19:47:17 UTC (rev 4579)
@@ -34,7 +34,7 @@
   
   private static final long serialVersionUID = 1L;
   
-  protected String variableName;
+  protected String name;
   protected String expression;
   protected String language;
   
@@ -43,11 +43,11 @@
     return scriptManager.evaluateExpression(expression, execution, language);
   }
 
-  public String getVariableName() {
-    return variableName;
+  public String getName() {
+    return name;
   }
-  public void setVariableName(String variableName) {
-    this.variableName = variableName;
+  public void setName(String name) {
+    this.name = name;
   }
   public String getExpression() {
     return expression;

Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/VariableOutDefinitionSet.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/VariableOutDefinitionSet.java	2009-04-18 17:43:48 UTC (rev 4578)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/VariableOutDefinitionSet.java	2009-04-18 19:47:17 UTC (rev 4579)
@@ -39,10 +39,10 @@
     // loop over all variable definitions
     if (hasVariableOutDefinitions()) {
       for (VariableOutDefinitionImpl variableOutDefinition: variableOutDefinitions) {
-        String destination = variableOutDefinition.getVariableName();
-        if (destination!=null) {
+        String variableName = variableOutDefinition.getName();
+        if (variableName!=null) {
           Object value = variableOutDefinition.getOutValue(outerExecution);
-          outerExecution.setVariable(destination, value);
+          outerExecution.setVariable(variableName, value);
         }
       }
     }

Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/query/ProcessDefinitionQueryImpl.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/query/ProcessDefinitionQueryImpl.java	2009-04-18 17:43:48 UTC (rev 4578)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/query/ProcessDefinitionQueryImpl.java	2009-04-18 19:47:17 UTC (rev 4579)
@@ -30,12 +30,23 @@
 import org.jbpm.api.ProcessDefinition;
 import org.jbpm.api.ProcessDefinitionQuery;
 import org.jbpm.api.cmd.CommandService;
+import org.jbpm.api.session.RepositorySession;
 import org.jbpm.pvm.internal.model.ProcessDefinitionImpl;
 import org.jbpm.pvm.internal.repository.DeploymentImpl;
 import org.jbpm.pvm.internal.repository.DeploymentProperty;
 
 
-/**
+/** returns partially initialized ProcessDefinitionImpl's that can only be exposed 
+ * as {@link ProcessDefinition}.
+ * 
+ * To get the properly initialized {@link ProcessDefinitionImpl} objects,
+ * use {@link RepositorySession#findProcessDefinitionById(String)} or 
+ * {@link RepositorySession#findProcessDefinitionByKey(String)}
+ * 
+ * You can use the query query capabilities in this class to find the id 
+ * and then use  {@link RepositorySession#findProcessDefinitionById(String)}
+ * to get the properly initialized ProcessDefinitionImpl.
+ * 
  * @author Tom Baeyens
  */
 public class ProcessDefinitionQueryImpl extends AbstractQuery implements ProcessDefinitionQuery {

Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/repository/RepositorySessionImpl.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/repository/RepositorySessionImpl.java	2009-04-18 17:43:48 UTC (rev 4578)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/repository/RepositorySessionImpl.java	2009-04-18 19:47:17 UTC (rev 4579)
@@ -28,6 +28,7 @@
 import org.jbpm.api.Deployment;
 import org.jbpm.api.JbpmException;
 import org.jbpm.api.Problem;
+import org.jbpm.api.ProcessDefinition;
 import org.jbpm.api.ProcessDefinitionQuery;
 import org.jbpm.api.client.ClientProcessDefinition;
 import org.jbpm.api.session.RepositorySession;
@@ -101,8 +102,22 @@
   public ProcessDefinitionQuery createProcessDefinitionQuery() {
     return new ProcessDefinitionQueryImpl(session);
   }
+  
+  public ClientProcessDefinition findProcessDefinitionByKey(String processDefinitionKey) {
+    ProcessDefinition processDefinition = createProcessDefinitionQuery()
+      .key(processDefinitionKey)
+      .orderDesc(ProcessDefinitionQuery.PROPERTY_VERSION)
+      .page(0, 1)
+      .uniqueResult();
 
-  public ClientProcessDefinition loadProcessDefinitionById(String processDefinitionId) {
+    if (processDefinition!=null) {
+      return findProcessDefinitionById(processDefinition.getId());
+    }
+
+    return null;
+  }
+
+  public ClientProcessDefinition findProcessDefinitionById(String processDefinitionId) {
     DeploymentProperty deploymentProperty = (DeploymentProperty) session.createQuery(
       "select deploymentProperty " +
       "from "+DeploymentProperty.class.getName()+" as deploymentProperty " +

Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/task/SwimlaneImpl.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/task/SwimlaneImpl.java	2009-04-18 17:43:48 UTC (rev 4578)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/task/SwimlaneImpl.java	2009-04-18 19:47:17 UTC (rev 4579)
@@ -48,6 +48,23 @@
   protected Set<ParticipationImpl> participations = null;
   protected SwimlaneDefinitionImpl swimlaneDefinition = null;
   
+  // cloning //////////////////////////////////////////////////////////////////
+  
+  /** initialize this swimlane's assignee and participations from the 
+   * other swimlane. */
+  public void initialize(SwimlaneImpl other) {
+    this.assignee = other.getAssignee();
+    if (other.getParticipations()!=null) {
+      for (ParticipationImpl otherParticipation: other.getParticipations()) {
+        addParticipation(
+          otherParticipation.getUserId(), 
+          otherParticipation.getGroupId(), 
+          otherParticipation.getType()
+        );
+      }
+    }
+  }
+  
   // assignment methods ///////////////////////////////////////////////////////
 
   public String getAssignee() {
@@ -76,16 +93,16 @@
   }
 
   public Participation addParticipation(String userId, String groupId, String type) {
-    return addParticipant(new ParticipationImpl(userId, groupId, type));
+    return addParticipation(new ParticipationImpl(userId, groupId, type));
   }
   
-  private Participation addParticipant(ParticipationImpl participant) {
-    participant.setSwimlane(this);
+  private Participation addParticipation(ParticipationImpl participation) {
+    participation.setSwimlane(this);
     if (participations ==null) {
       participations = new HashSet<ParticipationImpl>();
     }
-    participations.add(participant);
-    return participant;
+    participations.add(participation);
+    return participation;
   }
 
   public void removeParticipant(ParticipationImpl participant) {




More information about the jbpm-commits mailing list