[jbpm-commits] JBoss JBPM SVN: r4580 - in jbpm4/trunk/modules: jpdl/src/main/java/org/jbpm/jpdl/internal/xml and 1 other directories.

do-not-reply at jboss.org do-not-reply at jboss.org
Sun Apr 19 14:34:59 EDT 2009


Author: tom.baeyens at jboss.com
Date: 2009-04-19 14:34:59 -0400 (Sun, 19 Apr 2009)
New Revision: 4580

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/SubProcessBinding.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/model/VariableOutDefinitionImpl.java
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/VariableOutDefinitionSet.java
Log:
JBPM-2025 sub process activity signal implementation

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 19:47:17 UTC (rev 4579)
+++ jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/SubProcessActivity.java	2009-04-19 18:34:59 UTC (rev 4580)
@@ -29,8 +29,10 @@
 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.ExecutionImpl;
 import org.jbpm.pvm.internal.model.VariableDefinitionImpl;
-import org.jbpm.pvm.internal.model.VariableOutDefinitionImpl;
+import org.jbpm.pvm.internal.model.VariableOutDefinitionSet;
+import org.jbpm.pvm.internal.script.ScriptManager;
 import org.jbpm.pvm.internal.task.SwimlaneImpl;
 
 
@@ -46,7 +48,7 @@
   protected Map<String, String> swimlaneMappings;
   protected List<VariableDefinitionImpl> variableDefinitions;
 
-  protected List<VariableOutDefinitionImpl> variableOutDefinitions;
+  protected VariableOutDefinitionSet variableOutDefinitionSet;
   protected Map<String, String> outcomeActivityMappings;
   protected String outcomeExpression;
   protected Map<Object, String> outcomeVariableMappings;
@@ -88,7 +90,28 @@
   }
 
   public void signal(ActivityExecution execution, String signalName, Map<String, Object> parameters) {
-    // see VariableOutDefinitionSet: that is currently not yet used
+    JpdlExecution jpdlExecution = execution.getExtension(JpdlExecution.class);
+
+    ExecutionImpl subProcessInstance = jpdlExecution.getSubProcessInstance();
+    variableOutDefinitionSet.processOutVariables(jpdlExecution, subProcessInstance);
+    
+    String transitionName = null;
+    
+    if (outcomeExpression!=null) {
+      ScriptManager scriptManager = Environment.getFromCurrent(ScriptManager.class);
+      Object value = scriptManager.evaluateExpression(outcomeExpression, subProcessInstance, null);
+      transitionName = outcomeActivityMappings.get(value);
+
+    } else if (!outcomeActivityMappings.isEmpty()) {
+      String subProcessActivityName = subProcessInstance.getActivityName();
+      transitionName = outcomeActivityMappings.get(subProcessActivityName);
+    }
+    
+    if (transitionName!=null) {
+      execution.take(transitionName);
+    } else {
+      execution.takeDefaultTransition();
+    }
   }
 
   public void setSwimlaneMappings(Map<String, String> swimlaneMappings) {
@@ -109,8 +132,8 @@
   public void setVariableDefinitions(List<VariableDefinitionImpl> variableDefinitions) {
     this.variableDefinitions = variableDefinitions;
   }
-  public void setVariableOutDefinitions(List<VariableOutDefinitionImpl> variableOutDefinitions) {
-    this.variableOutDefinitions = variableOutDefinitions;
+  public void setVariableOutDefinitionSet(VariableOutDefinitionSet variableOutDefinitionSet) {
+    this.variableOutDefinitionSet = variableOutDefinitionSet;
   }
   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 19:47:17 UTC (rev 4579)
+++ jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/SubProcessBinding.java	2009-04-19 18:34:59 UTC (rev 4580)
@@ -28,6 +28,7 @@
 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.model.VariableOutDefinitionSet;
 import org.jbpm.pvm.internal.util.XmlUtil;
 import org.jbpm.pvm.internal.wire.Descriptor;
 import org.jbpm.pvm.internal.wire.WireContext;
@@ -58,8 +59,8 @@
     List<VariableDefinitionImpl> variableDefinitions = JpdlParser.parseVariableDefinitions(element, parse, true);
     subProcessActivity.setVariableDefinitions(variableDefinitions);
     
-    List<VariableOutDefinitionImpl> variableOutDefinitions = JpdlParser.parseVariableOutDefinitions(element, parse);
-    subProcessActivity.setVariableOutDefinitions(variableOutDefinitions);
+    VariableOutDefinitionSet variableOutDefinitionSet = JpdlParser.parseVariableOutDefinitionSet(element, parse);
+    subProcessActivity.setVariableOutDefinitionSet(variableOutDefinitionSet);
      
     Map<String, String> swimlaneMappings = parseSwimlaneMappings(element, parse);
     subProcessActivity.setSwimlaneMappings(swimlaneMappings);

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 19:47:17 UTC (rev 4579)
+++ jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/xml/JpdlParser.java	2009-04-19 18:34:59 UTC (rev 4580)
@@ -46,6 +46,7 @@
 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.model.VariableOutDefinitionSet;
 import org.jbpm.pvm.internal.task.AssignableDefinitionImpl;
 import org.jbpm.pvm.internal.task.SwimlaneDefinitionImpl;
 import org.jbpm.pvm.internal.task.TaskDefinitionImpl;
@@ -473,11 +474,11 @@
     return variableDefinitions;
   }
 
-  public static List<VariableOutDefinitionImpl> parseVariableOutDefinitions(Element element, Parse parse) {
-    List<VariableOutDefinitionImpl> variableOutDefinitions = new ArrayList<VariableOutDefinitionImpl>();
+  public static VariableOutDefinitionSet parseVariableOutDefinitionSet(Element element, Parse parse) {
+    VariableOutDefinitionSet variableOutDefinitionSet = new VariableOutDefinitionSet();
     
     for (Element inElement: XmlUtil.elements(element, "out-variable")) {
-      VariableOutDefinitionImpl variableOutDefinition = new VariableOutDefinitionImpl();
+      VariableOutDefinitionImpl variableOutDefinition = variableOutDefinitionSet.createVariableOutDefinition();
 
       String name = XmlUtil.attribute(inElement, "name", true, parse);
       variableOutDefinition.setName(name);
@@ -488,7 +489,7 @@
       }
     }
 
-    return variableOutDefinitions;
+    return variableOutDefinitionSet;
   }
 
 }

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 19:47:17 UTC (rev 4579)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/VariableOutDefinitionImpl.java	2009-04-19 18:34:59 UTC (rev 4580)
@@ -23,10 +23,7 @@
 
 import java.io.Serializable;
 
-import org.jbpm.api.env.Environment;
-import org.jbpm.pvm.internal.script.ScriptManager;
 
-
 /**
  * @author Tom Baeyens
  */
@@ -38,11 +35,6 @@
   protected String expression;
   protected String language;
   
-  public Object getOutValue(ExecutionImpl execution) {
-    ScriptManager scriptManager = Environment.getFromCurrent(ScriptManager.class);
-    return scriptManager.evaluateExpression(expression, execution, language);
-  }
-
   public String getName() {
     return name;
   }

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 19:47:17 UTC (rev 4579)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/VariableOutDefinitionSet.java	2009-04-19 18:34:59 UTC (rev 4580)
@@ -26,6 +26,9 @@
 import java.util.Collections;
 import java.util.List;
 
+import org.jbpm.api.env.Environment;
+import org.jbpm.pvm.internal.script.ScriptManager;
+
 /**
  * @author Tom Baeyens
  */
@@ -35,13 +38,26 @@
   
   protected List<VariableOutDefinitionImpl> variableOutDefinitions;
 
-  protected void destroy(ExecutionImpl outerExecution) {
+  public void processOutVariables(ExecutionImpl outerExecution, ScopeInstanceImpl innerScopeInstance) {
     // loop over all variable definitions
     if (hasVariableOutDefinitions()) {
       for (VariableOutDefinitionImpl variableOutDefinition: variableOutDefinitions) {
         String variableName = variableOutDefinition.getName();
         if (variableName!=null) {
-          Object value = variableOutDefinition.getOutValue(outerExecution);
+          ScriptManager scriptManager = Environment.getFromCurrent(ScriptManager.class);
+          
+          // TODO update evaluateExpression so that scopeInstance can be passed in directly
+          ExecutionImpl innerExecution = null;
+          if (innerScopeInstance instanceof ExecutionImpl) {
+            innerExecution = (ExecutionImpl) innerScopeInstance;
+          } else {
+            throw new UnsupportedOperationException("implement me");
+          }
+
+          String expression = variableOutDefinition.getExpression();
+          String language = variableOutDefinition.getLanguage();
+
+          Object value = scriptManager.evaluateExpression(expression, innerExecution, language);
           outerExecution.setVariable(variableName, value);
         }
       }




More information about the jbpm-commits mailing list