[jboss-svn-commits] JBL Code SVN: r22331 - in labs/jbossrules/trunk/drools-core/src/main/java/org/drools: base/mvel and 7 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Tue Sep 2 16:58:29 EDT 2008


Author: KrisVerlaenen
Date: 2008-09-02 16:58:29 -0400 (Tue, 02 Sep 2008)
New Revision: 22331

Modified:
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/audit/WorkingMemoryLogger.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/MVELAction.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/MVELReturnValueEvaluator.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/DebugRuleFlowEventListener.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/DefaultRuleFlowEventListener.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/RuleFlowEventListener.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/RuleFlowEventSupport.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/ProcessContext.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/Constraint.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/impl/ConnectionImpl.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/impl/ConstraintImpl.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/Split.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/impl/NodeInstanceImpl.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/impl/ReturnValueConstraintEvaluator.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/impl/RuleConstraintEvaluator.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/EndNodeInstance.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/HumanTaskNodeInstance.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/SubProcessNodeInstance.java
Log:
JBRULES-1756: Add events for leaving nodes

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/audit/WorkingMemoryLogger.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/audit/WorkingMemoryLogger.java	2008-09-02 20:56:30 UTC (rev 22330)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/audit/WorkingMemoryLogger.java	2008-09-02 20:58:29 UTC (rev 22331)
@@ -421,6 +421,14 @@
                 event.getProcessInstance().getId()) );
     }
 
+    public void beforeRuleFlowNodeLeft(RuleFlowNodeTriggeredEvent event,
+    										WorkingMemory workingMemory) {
+    }
+
+    public void afterRuleFlowNodeLeft(RuleFlowNodeTriggeredEvent event,
+    								  WorkingMemory workingMemory) {
+    }
+
     public void afterPackageAdded(AfterPackageAddedEvent event) {
         filterLogEvent( new RuleBaseLogEvent( LogEvent.AFTER_PACKAGE_ADDED,
                                               event.getPackage().getName(),

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/MVELAction.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/MVELAction.java	2008-09-02 20:56:30 UTC (rev 22330)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/MVELAction.java	2008-09-02 20:58:29 UTC (rev 22331)
@@ -5,13 +5,14 @@
 import java.io.ObjectInput;
 import java.io.ObjectOutput;
 import java.io.Serializable;
+import java.util.List;
 
 import org.drools.WorkingMemory;
 import org.drools.rule.MVELDialectRuntimeData;
 import org.drools.rule.Package;
 import org.drools.spi.Action;
+import org.drools.spi.KnowledgeHelper;
 import org.drools.spi.ProcessContext;
-import org.drools.spi.KnowledgeHelper;
 import org.mvel.MVEL;
 import org.mvel.compiler.CompiledExpression;
 import org.mvel.debug.DebugTools;
@@ -29,6 +30,7 @@
 
     private Serializable      expr;
     private DroolsMVELFactory prototype;
+    private List<String> variableNames;
 
     public MVELAction() {
     }
@@ -37,11 +39,16 @@
                               final String id) {
         this.unit = unit;
         this.id = id;
-    }    
+    }
+    
+    public void setVariableNames(List<String> variableNames) {
+    	this.variableNames = variableNames;
+    }
 
     public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
         id = in.readUTF();
         unit = ( MVELCompilationUnit ) in.readObject();
+        variableNames = (List<String>) in.readObject();
 //        expr    = (Serializable)in.readObject();
 //        prototype   = (DroolsMVELFactory)in.readObject();
     }
@@ -49,6 +56,7 @@
     public void writeExternal(ObjectOutput out) throws IOException {
         out.writeUTF( id );
         out.writeObject( unit );
+        out.writeObject(variableNames);
 //        out.writeObject(expr);
 //        out.writeObject(prototype);
     }
@@ -67,6 +75,12 @@
         DroolsMVELFactory factory = (DroolsMVELFactory) this.prototype.clone();
         
         factory.addResolver("context", new SimpleValueResolver(context));
+        if (variableNames != null) {
+        	for (String variableName: variableNames) {
+        		factory.addResolver(
+    				variableName, new SimpleValueResolver(context.getVariable(variableName)));
+        	}
+        }
         
         factory.setContext( null,
                             knowledgeHelper,

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/MVELReturnValueEvaluator.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/MVELReturnValueEvaluator.java	2008-09-02 20:56:30 UTC (rev 22330)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/MVELReturnValueEvaluator.java	2008-09-02 20:58:29 UTC (rev 22331)
@@ -5,6 +5,7 @@
 import java.io.ObjectInput;
 import java.io.ObjectOutput;
 import java.io.Serializable;
+import java.util.List;
 
 import org.drools.WorkingMemory;
 import org.drools.rule.MVELDialectRuntimeData;
@@ -14,6 +15,7 @@
 import org.mvel.MVEL;
 import org.mvel.compiler.CompiledExpression;
 import org.mvel.debug.DebugTools;
+import org.mvel.integration.impl.SimpleValueResolver;
 
 public class MVELReturnValueEvaluator
     implements
@@ -27,6 +29,7 @@
 
     private Serializable        expr;
     private DroolsMVELFactory   prototype;
+    private List<String>        variableNames;
 
     public MVELReturnValueEvaluator() {
     }
@@ -37,10 +40,15 @@
         this.id = id;
     }
 
+    public void setVariableNames(List<String> variableNames) {
+    	this.variableNames = variableNames;
+    }
+
     public void readExternal(ObjectInput in) throws IOException,
                                             ClassNotFoundException {
         id = in.readUTF();
         unit = (MVELCompilationUnit) in.readObject();
+        variableNames = (List<String>) in.readObject();
         //        expr    = (Serializable)in.readObject();
         //        prototype   = (DroolsMVELFactory)in.readObject();
     }
@@ -48,6 +56,7 @@
     public void writeExternal(ObjectOutput out) throws IOException {
         out.writeUTF( id );
         out.writeObject( unit );
+        out.writeObject(variableNames);
         //        out.writeObject(expr);
         //        out.writeObject(prototype);
     }
@@ -64,12 +73,20 @@
     public Object evaluate(final WorkingMemory workingMemory,
                            ProcessContext context) throws Exception {
         DroolsMVELFactory factory = (DroolsMVELFactory) this.prototype.clone();
+        
+        if (variableNames != null) {
+        	for (String variableName: variableNames) {
+        		factory.addResolver(
+    				variableName, new SimpleValueResolver(context.getVariable(variableName)));
+        	}
+        }
+        
         factory.setContext( null,
                             null,
                             null,
                             workingMemory,
                             null );
-
+        
         // do we have any functions for this namespace?
         Package pkg = workingMemory.getRuleBase().getPackage( "MAIN" );
         if ( pkg != null ) {

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/DebugRuleFlowEventListener.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/DebugRuleFlowEventListener.java	2008-09-02 20:56:30 UTC (rev 22330)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/DebugRuleFlowEventListener.java	2008-09-02 20:58:29 UTC (rev 22331)
@@ -60,4 +60,14 @@
         System.err.println(event);
     }
 
+	public void afterRuleFlowNodeLeft(final RuleFlowNodeTriggeredEvent event,
+			                          final WorkingMemory workingMemory) {
+        System.err.println(event);
+	}
+
+	public void beforeRuleFlowNodeLeft(final RuleFlowNodeTriggeredEvent event,
+			                           final WorkingMemory workingMemory) {
+        System.err.println(event);
+	}
+
 }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/DefaultRuleFlowEventListener.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/DefaultRuleFlowEventListener.java	2008-09-02 20:56:30 UTC (rev 22330)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/DefaultRuleFlowEventListener.java	2008-09-02 20:58:29 UTC (rev 22331)
@@ -56,4 +56,14 @@
         // intentionally left blank
     }
 
+	public void afterRuleFlowNodeLeft(final RuleFlowNodeTriggeredEvent event,
+                                      final WorkingMemory workingMemory) {
+        // intentionally left blank
+	}
+
+	public void beforeRuleFlowNodeLeft(final RuleFlowNodeTriggeredEvent event,
+			                           final WorkingMemory workingMemory) {
+        // intentionally left blank
+	}
+
 }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/RuleFlowEventListener.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/RuleFlowEventListener.java	2008-09-02 20:56:30 UTC (rev 22330)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/RuleFlowEventListener.java	2008-09-02 20:58:29 UTC (rev 22331)
@@ -57,4 +57,10 @@
     void afterRuleFlowNodeTriggered(RuleFlowNodeTriggeredEvent event,
                                     WorkingMemory workingMemory);
 
+    void beforeRuleFlowNodeLeft(RuleFlowNodeTriggeredEvent event,
+            			        WorkingMemory workingMemory);
+
+    void afterRuleFlowNodeLeft(RuleFlowNodeTriggeredEvent event,
+    						   WorkingMemory workingMemory);
+
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/RuleFlowEventSupport.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/RuleFlowEventSupport.java	2008-09-02 20:56:30 UTC (rev 22330)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/RuleFlowEventSupport.java	2008-09-02 20:58:29 UTC (rev 22331)
@@ -209,6 +209,34 @@
         }
     }
 
+    public void fireBeforeRuleFlowNodeLeft(
+            final NodeInstance ruleFlowNodeInstance,
+            final InternalWorkingMemory workingMemory) {
+        if (this.listeners.isEmpty()) {
+            return;
+        }
+
+        final RuleFlowNodeTriggeredEvent event = new RuleFlowNodeTriggeredEvent( ruleFlowNodeInstance );
+
+        for ( RuleFlowEventListener listener: listeners ) {
+            listener.beforeRuleFlowNodeLeft( event, workingMemory );
+        }
+    }
+
+    public void fireAfterRuleFlowNodeLeft(
+            final NodeInstance ruleFlowNodeInstance,
+            final InternalWorkingMemory workingMemory) {
+        if (this.listeners.isEmpty()) {
+            return;
+        }
+
+        final RuleFlowNodeTriggeredEvent event = new RuleFlowNodeTriggeredEvent( ruleFlowNodeInstance );
+
+        for ( RuleFlowEventListener listener: listeners ) {
+            listener.afterRuleFlowNodeLeft( event, workingMemory );
+        }
+    }
+
     public void reset() {
         this.listeners.clear();
     }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/ProcessContext.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/ProcessContext.java	2008-09-02 20:56:30 UTC (rev 22330)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/ProcessContext.java	2008-09-02 20:58:29 UTC (rev 22331)
@@ -19,7 +19,8 @@
     public Object getVariable(String variableName) {
     	VariableScopeInstance variableScope = (VariableScopeInstance) nodeInstance.resolveContextInstance(VariableScope.VARIABLE_SCOPE, variableName);
     	if (variableScope == null) {
-    		return null;
+    		return ((VariableScopeInstance) nodeInstance.getProcessInstance()
+				.getContextInstance(VariableScope.VARIABLE_SCOPE)).getVariable(variableName);
     	}
     	return variableScope.getVariable(variableName);
     }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/Constraint.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/Constraint.java	2008-09-02 20:56:30 UTC (rev 22330)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/Constraint.java	2008-09-02 20:58:29 UTC (rev 22331)
@@ -93,5 +93,9 @@
      * @param type  the dialect of the constraint
      */
     void setDialect(String dialect);
+    
+    void setMetaData(String name, Object value);
+    
+    Object getMetaData(String name);
 
 }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/impl/ConnectionImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/impl/ConnectionImpl.java	2008-09-02 20:56:30 UTC (rev 22330)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/impl/ConnectionImpl.java	2008-09-02 20:58:29 UTC (rev 22331)
@@ -38,7 +38,7 @@
     private String toType;
     private Map<String, Object> metaData = new HashMap<String, Object>();
     
-    ConnectionImpl() {
+    public ConnectionImpl() {
     }
 
     /**
@@ -67,6 +67,10 @@
         this.fromType = fromType;
         this.to = to;
         this.toType = toType;
+        connect();
+    }
+    
+    public void connect() {
         this.from.addOutgoingConnection(fromType, this);
         this.to.addIncomingConnection(toType, this);
     }
@@ -96,7 +100,23 @@
         return this.toType;
     }
 
-    public void setMetaData(String name, Object value) {
+    public void setFrom(Node from) {
+		this.from = from;
+	}
+
+	public void setTo(Node to) {
+		this.to = to;
+	}
+
+	public void setFromType(String fromType) {
+		this.fromType = fromType;
+	}
+
+	public void setToType(String toType) {
+		this.toType = toType;
+	}
+
+	public void setMetaData(String name, Object value) {
         this.metaData.put(name, value);
     }
     

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/impl/ConstraintImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/impl/ConstraintImpl.java	2008-09-02 20:56:30 UTC (rev 22330)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/impl/ConstraintImpl.java	2008-09-02 20:58:29 UTC (rev 22331)
@@ -17,6 +17,8 @@
  */
 
 import java.io.Serializable;
+import java.util.HashMap;
+import java.util.Map;
 
 import org.drools.workflow.core.Constraint;
 
@@ -29,6 +31,8 @@
 
     private static final long  serialVersionUID = 400L;
 
+    private Map<String, Object> metaData = new HashMap<String, Object>();
+
     private String             name;
     private String             constraint;
     private int                priority;
@@ -79,4 +83,12 @@
         this.type = type;
     }
 
+    public void setMetaData(String name, Object value) {
+        this.metaData.put(name, value);
+    }
+    
+    public Object getMetaData(String name) {
+        return this.metaData.get(name);
+    }
+    
 }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/Split.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/Split.java	2008-09-02 20:56:30 UTC (rev 22330)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/Split.java	2008-09-02 20:58:29 UTC (rev 22331)
@@ -16,9 +16,6 @@
  * limitations under the License.
  */
 
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
 import java.io.Serializable;
 import java.util.Collections;
 import java.util.HashMap;
@@ -157,13 +154,23 @@
 
     public void removeOutgoingConnection(final String type, final Connection connection) {
         super.removeOutgoingConnection(type, connection);
-        ConnectionRef ref = new ConnectionRef(connection.getTo().getId(), connection.getToType());
-        this.constraints.remove(ref);
+        removeConstraint(connection);
     }
     
+    public void removeConstraint(Connection connection) {
+    	ConnectionRef ref = new ConnectionRef(connection.getTo().getId(), connection.getToType());
+        internalRemoveConstraint(ref);
+    }
+    
+    public void internalRemoveConstraint(ConnectionRef ref) {
+    	this.constraints.remove(ref);
+    }
+    
     public static class ConnectionRef implements Serializable {
         
-        private String toType;
+        private static final long serialVersionUID = 4L;
+		
+		private String toType;
         private long nodeId;
         
         public ConnectionRef(long nodeId, String toType) {

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/impl/NodeInstanceImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/impl/NodeInstanceImpl.java	2008-09-02 20:56:30 UTC (rev 22330)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/impl/NodeInstanceImpl.java	2008-09-02 20:58:29 UTC (rev 22331)
@@ -116,8 +116,18 @@
     }
     
     protected void triggerConnection(Connection connection) {
+    	boolean hidden = false;
+    	if (getNode().getMetaData("hidden") != null) {
+    		hidden = true;
+    	}
+    	if (!hidden) {
+    		((EventSupport) getProcessInstance().getWorkingMemory()).getRuleFlowEventSupport().fireBeforeRuleFlowNodeLeft(this, (InternalWorkingMemory) getProcessInstance().getWorkingMemory());
+    	}
         getNodeInstanceContainer().getNodeInstance(connection.getTo())
-            .trigger(this, connection.getToType());
+        	.trigger(this, connection.getToType());
+        if (!hidden) {
+            ((EventSupport) getProcessInstance().getWorkingMemory()).getRuleFlowEventSupport().fireAfterRuleFlowNodeLeft(this, (InternalWorkingMemory) getProcessInstance().getWorkingMemory());
+        }
     }
     
     public Context resolveContext(String contextId, Object param) {

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/impl/ReturnValueConstraintEvaluator.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/impl/ReturnValueConstraintEvaluator.java	2008-09-02 20:56:30 UTC (rev 22330)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/impl/ReturnValueConstraintEvaluator.java	2008-09-02 20:58:29 UTC (rev 22331)
@@ -20,7 +20,6 @@
 import java.io.IOException;
 import java.io.ObjectInput;
 import java.io.ObjectOutput;
-import java.io.Serializable;
 
 import org.drools.spi.CompiledInvoker;
 import org.drools.spi.ProcessContext;
@@ -154,4 +153,12 @@
         out.writeObject( type );
     }
 
+    public void setMetaData(String name, Object value) {
+    	// Do nothing
+    }
+    
+    public Object getMetaData(String name) {
+        return null;
+    }
+    
 }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/impl/RuleConstraintEvaluator.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/impl/RuleConstraintEvaluator.java	2008-09-02 20:56:30 UTC (rev 22330)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/impl/RuleConstraintEvaluator.java	2008-09-02 20:58:29 UTC (rev 22331)
@@ -92,6 +92,14 @@
         String rule = "RuleFlow-Split-" + processInstance.getProcess().getId() + "-" + instance.getNode().getId() + "-" + connection.getTo().getId();
 
         return agenda.isRuleActiveInRuleFlowGroup( "DROOLS_SYSTEM", rule );
-    }    
+    }
 
+	public Object getMetaData(String name) {
+		return null;
+	}
+
+	public void setMetaData(String name, Object value) {
+		// Do nothing
+	}    
+
 }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/EndNodeInstance.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/EndNodeInstance.java	2008-09-02 20:56:30 UTC (rev 22330)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/EndNodeInstance.java	2008-09-02 20:58:29 UTC (rev 22331)
@@ -16,6 +16,8 @@
  * limitations under the License.
  */
 
+import org.drools.common.EventSupport;
+import org.drools.common.InternalWorkingMemory;
 import org.drools.process.instance.ProcessInstance;
 import org.drools.workflow.core.Node;
 import org.drools.workflow.core.node.EndNode;
@@ -42,7 +44,17 @@
         }
         getNodeInstanceContainer().removeNodeInstance(this);
         if (getEndNode().isTerminate()) {
+        	boolean hidden = false;
+        	if (getNode().getMetaData("hidden") != null) {
+        		hidden = true;
+        	}
+        	if (!hidden) {
+        		((EventSupport) getProcessInstance().getWorkingMemory()).getRuleFlowEventSupport().fireBeforeRuleFlowNodeLeft(this, (InternalWorkingMemory) getProcessInstance().getWorkingMemory());
+        	}
         	getProcessInstance().setState( ProcessInstance.STATE_COMPLETED );
+            if (!hidden) {
+                ((EventSupport) getProcessInstance().getWorkingMemory()).getRuleFlowEventSupport().fireAfterRuleFlowNodeLeft(this, (InternalWorkingMemory) getProcessInstance().getWorkingMemory());
+            }
         }
     }
 

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/HumanTaskNodeInstance.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/HumanTaskNodeInstance.java	2008-09-02 20:56:30 UTC (rev 22330)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/HumanTaskNodeInstance.java	2008-09-02 20:58:29 UTC (rev 22331)
@@ -39,7 +39,7 @@
         // actor is specified for this human task
         if (actorId == null) {
         	actorId = (String) workItem.getParameter("ActorId");
-        	if (actorId != null) {
+        	if (actorId != null && swimlaneContextInstance != null) {
         		swimlaneContextInstance.setActorId(swimlaneName, actorId);
         	}
         }
@@ -67,13 +67,9 @@
         String swimlaneName = getHumanTaskNode().getSwimlane();
         SwimlaneContextInstance swimlaneContextInstance = getSwimlaneContextInstance(swimlaneName);
         if (swimlaneContextInstance != null) {
-            String oldActorId = swimlaneContextInstance.getActorId(swimlaneName);
-            // only assign if swimlane has not already been assigned to an actor
-            if (oldActorId == null) {
-                String newActorId = (String) workItem.getResult("ActorId");
-                if (newActorId != null) {
-                    swimlaneContextInstance.setActorId(swimlaneName, newActorId);
-                }
+            String newActorId = (String) workItem.getResult("ActorId");
+            if (newActorId != null) {
+                swimlaneContextInstance.setActorId(swimlaneName, newActorId);
             }
         }
         super.triggerCompleted(workItem);

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/SubProcessNodeInstance.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/SubProcessNodeInstance.java	2008-09-02 20:56:30 UTC (rev 22330)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/SubProcessNodeInstance.java	2008-09-02 20:58:29 UTC (rev 22331)
@@ -171,4 +171,14 @@
         // Do nothing
     }
 
+	public void afterRuleFlowNodeLeft(RuleFlowNodeTriggeredEvent event,
+			WorkingMemory workingMemory) {
+        // Do nothing
+	}
+
+	public void beforeRuleFlowNodeLeft(RuleFlowNodeTriggeredEvent event,
+			WorkingMemory workingMemory) {
+        // Do nothing
+	}
+
 }
\ No newline at end of file




More information about the jboss-svn-commits mailing list