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

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu Jul 31 07:16:10 EDT 2008


Author: KrisVerlaenen
Date: 2008-07-31 07:16:10 -0400 (Thu, 31 Jul 2008)
New Revision: 21310

Added:
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/event/EventTransformer.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/ProcessContext.java
   labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/core/BPELExit.java
   labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/core/BPELIf.java
   labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/core/BPELRepeatUntil.java
   labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/core/BPELWhile.java
   labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/instance/BPELExitInstance.java
   labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/instance/BPELIfInstance.java
   labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/instance/BPELRepeatUntilInstance.java
   labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/xpath/XMLDataType.java
Removed:
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/ActionContext.java
   labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/core/BPELSwitch.java
   labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/core/BPELWhile.java
   labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/instance/BPELSwitchInstance.java
Modified:
   labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/rule/builder/dialect/java/javaInvokers.mvel
   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/spi/Action.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/ReturnValueEvaluator.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/EventNode.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/impl/ExtendedNodeInstanceImpl.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/node/ActionNodeInstance.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/CompositeNodeInstance.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/EventNodeInstance.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/process/EventTest.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/process/ForEachTest.java
   labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/compiler/BPELCompiler.java
   labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/core/BPELAssign.java
   labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/core/BPELEmpty.java
   labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/core/BPELProcess.java
   labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/core/BPELReceive.java
   labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/instance/BPELAssignInstance.java
   labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/instance/BPELFlowInstance.java
   labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/instance/BPELLinkManager.java
   labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/instance/BPELProcessInstance.java
   labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/instance/BPELReceiveInstance.java
   labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/instance/BPELSequenceInstance.java
   labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/xpath/XPathReturnValueEvaluator.java
   labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/xpath/XPathReturnValueEvaluatorBuilder.java
   labs/jbossrules/trunk/drools-process/drools-bpel/src/main/resources/META-INF/bpelProcessNodeInstanceFactory.conf
   labs/jbossrules/trunk/drools-process/drools-bpel/src/test/java/org/drools/bpel/test/BPELCompilerTest.java
   labs/jbossrules/trunk/drools-process/drools-bpel/src/test/java/org/drools/bpel/test/BPELCoreTest.java
   labs/jbossrules/trunk/drools-process/drools-bpel/src/test/java/org/drools/bpel/test/BPELTestUtil.java
Log:


Modified: labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/rule/builder/dialect/java/javaInvokers.mvel
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/rule/builder/dialect/java/javaInvokers.mvel	2008-07-31 10:26:13 UTC (rev 21309)
+++ labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/rule/builder/dialect/java/javaInvokers.mvel	2008-07-31 11:16:10 UTC (rev 21310)
@@ -423,7 +423,7 @@
 {
     private static final long serialVersionUID  = 400L;
 
-    public Object evaluate(org.drools.WorkingMemory workingMemory) throws Exception {
+    public Object evaluate(org.drools.WorkingMemory workingMemory, org.drools.spi.ProcessContext) throws Exception {
 
         @foreach{type : globalTypes, identifier : globals} @{type} @{identifier} = ( @{type} ) workingMemory.getGlobal( "@{identifier}" );
         @end{}

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-07-31 10:26:13 UTC (rev 21309)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/MVELAction.java	2008-07-31 11:16:10 UTC (rev 21310)
@@ -10,7 +10,7 @@
 import org.drools.rule.MVELDialectRuntimeData;
 import org.drools.rule.Package;
 import org.drools.spi.Action;
-import org.drools.spi.ActionContext;
+import org.drools.spi.ProcessContext;
 import org.drools.spi.KnowledgeHelper;
 import org.mvel.MVEL;
 import org.mvel.compiler.CompiledExpression;
@@ -49,7 +49,7 @@
         return "mvel";
     }
     
-    public void execute(final KnowledgeHelper knowledgeHelper, final WorkingMemory workingMemory, ActionContext context) throws Exception {
+    public void execute(final KnowledgeHelper knowledgeHelper, final WorkingMemory workingMemory, ProcessContext context) throws Exception {
         // must clone to avoid concurrency problems
         DroolsMVELFactory factory = (DroolsMVELFactory) this.prototype.clone();
         

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-07-31 10:26:13 UTC (rev 21309)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/MVELReturnValueEvaluator.java	2008-07-31 11:16:10 UTC (rev 21310)
@@ -1,19 +1,20 @@
 package org.drools.base.mvel;
 
+import java.io.Externalizable;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import java.io.Serializable;
+
 import org.drools.WorkingMemory;
 import org.drools.rule.MVELDialectRuntimeData;
 import org.drools.rule.Package;
+import org.drools.spi.ProcessContext;
 import org.drools.spi.ReturnValueEvaluator;
 import org.mvel.MVEL;
 import org.mvel.compiler.CompiledExpression;
 import org.mvel.debug.DebugTools;
 
-import java.io.Externalizable;
-import java.io.IOException;
-import java.io.ObjectInput;
-import java.io.ObjectOutput;
-import java.io.Serializable;
-
 public class MVELReturnValueEvaluator
     implements
     ReturnValueEvaluator,
@@ -49,7 +50,7 @@
         return this.id;
     }
 
-    public Object evaluate(final WorkingMemory workingMemory) throws Exception {
+    public Object evaluate(final WorkingMemory workingMemory, ProcessContext context) throws Exception {
         DroolsMVELFactory factory = (DroolsMVELFactory) this.prototype.clone();
         factory.setContext( null,
                             null,

Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/event/EventTransformer.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/event/EventTransformer.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/event/EventTransformer.java	2008-07-31 11:16:10 UTC (rev 21310)
@@ -0,0 +1,7 @@
+package org.drools.process.core.event;
+
+public interface EventTransformer {
+	
+	Object transformEvent(Object event);
+
+}

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/Action.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/Action.java	2008-07-31 10:26:13 UTC (rev 21309)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/Action.java	2008-07-31 11:16:10 UTC (rev 21310)
@@ -4,6 +4,6 @@
 
 public interface Action {
     
-    void execute(final KnowledgeHelper knowledgeHelper, final WorkingMemory workingMemory, ActionContext context) throws Exception;
+    void execute(final KnowledgeHelper knowledgeHelper, final WorkingMemory workingMemory, ProcessContext context) throws Exception;
     
 }

Deleted: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/ActionContext.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/ActionContext.java	2008-07-31 10:26:13 UTC (rev 21309)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/ActionContext.java	2008-07-31 11:16:10 UTC (rev 21310)
@@ -1,27 +0,0 @@
-package org.drools.spi;
-
-import org.drools.process.core.context.variable.VariableScope;
-import org.drools.process.instance.context.variable.VariableScopeInstance;
-import org.drools.workflow.instance.NodeInstance;
-
-public class ActionContext {
-    
-    private NodeInstance nodeInstance;
-
-    public NodeInstance getNodeInstance() {
-        return nodeInstance;
-    }
-
-    public void setNodeInstance(NodeInstance nodeInstance) {
-        this.nodeInstance = nodeInstance;
-    }
-    
-    public Object getVariable(String variableName) {
-    	VariableScopeInstance variableScope = (VariableScopeInstance) nodeInstance.resolveContextInstance(VariableScope.VARIABLE_SCOPE, variableName);
-    	if (variableScope == null) {
-    		return null;
-    	}
-    	return variableScope.getVariable(variableName);
-    }
-    
-}

Copied: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/ProcessContext.java (from rev 21255, labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/ActionContext.java)
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/ProcessContext.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/ProcessContext.java	2008-07-31 11:16:10 UTC (rev 21310)
@@ -0,0 +1,27 @@
+package org.drools.spi;
+
+import org.drools.process.core.context.variable.VariableScope;
+import org.drools.process.instance.context.variable.VariableScopeInstance;
+import org.drools.workflow.instance.NodeInstance;
+
+public class ProcessContext {
+    
+    private NodeInstance nodeInstance;
+
+    public NodeInstance getNodeInstance() {
+        return nodeInstance;
+    }
+
+    public void setNodeInstance(NodeInstance nodeInstance) {
+        this.nodeInstance = nodeInstance;
+    }
+    
+    public Object getVariable(String variableName) {
+    	VariableScopeInstance variableScope = (VariableScopeInstance) nodeInstance.resolveContextInstance(VariableScope.VARIABLE_SCOPE, variableName);
+    	if (variableScope == null) {
+    		return null;
+    	}
+    	return variableScope.getVariable(variableName);
+    }
+    
+}

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/ReturnValueEvaluator.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/ReturnValueEvaluator.java	2008-07-31 10:26:13 UTC (rev 21309)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/ReturnValueEvaluator.java	2008-07-31 11:16:10 UTC (rev 21310)
@@ -4,5 +4,5 @@
 
 public interface ReturnValueEvaluator {
     
-    public Object evaluate(WorkingMemory workingMemory) throws Exception;
+    public Object evaluate(WorkingMemory workingMemory, ProcessContext processContext) throws Exception;
 }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/EventNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/EventNode.java	2008-07-31 10:26:13 UTC (rev 21309)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/EventNode.java	2008-07-31 11:16:10 UTC (rev 21310)
@@ -4,6 +4,7 @@
 import java.util.List;
 
 import org.drools.process.core.event.EventFilter;
+import org.drools.process.core.event.EventTransformer;
 import org.drools.workflow.core.Connection;
 import org.drools.workflow.core.Node;
 import org.drools.workflow.core.impl.NodeImpl;
@@ -13,6 +14,7 @@
 	private static final long serialVersionUID = 4L;
 	
 	private List<EventFilter> filters = new ArrayList<EventFilter>();
+	private EventTransformer transformer;
 	private String variableName;
 
 	public String getVariableName() {
@@ -48,16 +50,19 @@
     	return true;
     }
 	
+	public void setEventTransformer(EventTransformer transformer) {
+		this.transformer = transformer;
+	}
+	
+	public EventTransformer getEventTransformer() {
+		return transformer;
+	}
+	
 	public void validateAddIncomingConnection(final String type, final Connection connection) {
         throw new UnsupportedOperationException(
             "An event node does not have an incoming connection!");
     }
 
-    public void validateRemoveIncomingConnection(final String type, final Connection connection) {
-        throw new UnsupportedOperationException(
-            "An event node does not have an incoming connection!");
-    }
-
     public void validateAddOutgoingConnection(final String type, final Connection connection) {
         super.validateAddOutgoingConnection(type, connection);
         if (!Node.CONNECTION_DEFAULT_TYPE.equals(type)) {

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/impl/ExtendedNodeInstanceImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/impl/ExtendedNodeInstanceImpl.java	2008-07-31 10:26:13 UTC (rev 21309)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/impl/ExtendedNodeInstanceImpl.java	2008-07-31 11:16:10 UTC (rev 21310)
@@ -9,7 +9,7 @@
 import org.drools.process.core.context.exception.ExceptionScope;
 import org.drools.process.instance.context.exception.ExceptionScopeInstance;
 import org.drools.spi.Action;
-import org.drools.spi.ActionContext;
+import org.drools.spi.ProcessContext;
 import org.drools.spi.KnowledgeHelper;
 import org.drools.workflow.core.DroolsAction;
 import org.drools.workflow.core.impl.ExtendedNodeImpl;
@@ -42,7 +42,7 @@
 	        }
 			for (DroolsAction droolsAction: actions) {
 				Action action = (Action) droolsAction.getMetaData("Action");
-				ActionContext context = new ActionContext();
+				ProcessContext context = new ProcessContext();
 				context.setNodeInstance(this);
 				try {
 					action.execute(knowledgeHelper, workingMemory, context);

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-07-31 10:26:13 UTC (rev 21309)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/impl/ReturnValueConstraintEvaluator.java	2008-07-31 11:16:10 UTC (rev 21310)
@@ -18,6 +18,7 @@
 
 import java.io.Serializable;
 
+import org.drools.spi.ProcessContext;
 import org.drools.spi.ReturnValueEvaluator;
 import org.drools.workflow.core.Connection;
 import org.drools.workflow.core.Constraint;
@@ -94,7 +95,10 @@
                             Constraint constraint) {
         Object value;
         try {
-            value = this.evaluator.evaluate( instance.getProcessInstance().getWorkingMemory() );
+        	ProcessContext context = new ProcessContext();
+        	context.setNodeInstance(instance);
+            value = this.evaluator.evaluate(
+        		instance.getProcessInstance().getWorkingMemory(), context );
         } catch ( Exception e ) {
             throw  new RuntimeException("unable to execute ReturnValueEvaluator", e);
         }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/ActionNodeInstance.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/ActionNodeInstance.java	2008-07-31 10:26:13 UTC (rev 21309)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/ActionNodeInstance.java	2008-07-31 11:16:10 UTC (rev 21310)
@@ -21,7 +21,7 @@
 import org.drools.base.SequentialKnowledgeHelper;
 import org.drools.common.InternalRuleBase;
 import org.drools.spi.Action;
-import org.drools.spi.ActionContext;
+import org.drools.spi.ProcessContext;
 import org.drools.spi.KnowledgeHelper;
 import org.drools.workflow.core.Node;
 import org.drools.workflow.core.node.ActionNode;
@@ -49,7 +49,7 @@
 		Action action = (Action) getActionNode().getAction().getMetaData("Action");
 		try {
 		    KnowledgeHelper knowledgeHelper = createKnowledgeHelper();
-		    ActionContext context = new ActionContext();
+		    ProcessContext context = new ProcessContext();
 		    context.setNodeInstance(this);
 	        action.execute(knowledgeHelper, getProcessInstance().getWorkingMemory(), context);		    
 		} catch (Exception e) {

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/CompositeNodeInstance.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/CompositeNodeInstance.java	2008-07-31 10:26:13 UTC (rev 21309)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/CompositeNodeInstance.java	2008-07-31 11:16:10 UTC (rev 21310)
@@ -60,7 +60,8 @@
         for (Iterator<Connection> iterator = connections.iterator(); iterator.hasNext(); ) {
             Connection connection = iterator.next();
             if ((connection.getFrom() instanceof CompositeNode.CompositeNodeStart) &&
-            		((CompositeNode.CompositeNodeStart) connection.getFrom()).getInNode().getId() == from.getNodeId()) {
+            		(from == null || 
+    				((CompositeNode.CompositeNodeStart) connection.getFrom()).getInNode().getId() == from.getNodeId())) {
                 NodeInstance nodeInstance = getNodeInstance(connection.getFrom());
                 nodeInstance.trigger(null, nodeAndType.getType());
                 return;

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/EventNodeInstance.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/EventNodeInstance.java	2008-07-31 10:26:13 UTC (rev 21309)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/EventNodeInstance.java	2008-07-31 11:16:10 UTC (rev 21310)
@@ -17,6 +17,7 @@
  */
 
 import org.drools.process.core.context.variable.VariableScope;
+import org.drools.process.core.event.EventTransformer;
 import org.drools.process.instance.context.variable.VariableScopeInstance;
 import org.drools.workflow.core.Node;
 import org.drools.workflow.core.node.EventNode;
@@ -41,6 +42,10 @@
     			throw new IllegalArgumentException(
 					"Could not find variable for event node: " + variableName);
     		}
+    		EventTransformer transformer = getEventNode().getEventTransformer();
+    		if (transformer != null) {
+    			event = transformer.transformEvent(event);
+    		}
     		variableScopeInstance.setVariable(variableName, event);
     	}
     	trigger(null, null);

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/process/EventTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/process/EventTest.java	2008-07-31 10:26:13 UTC (rev 21309)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/process/EventTest.java	2008-07-31 11:16:10 UTC (rev 21310)
@@ -17,7 +17,7 @@
 import org.drools.reteoo.ReteooWorkingMemory;
 import org.drools.ruleflow.core.RuleFlowProcess;
 import org.drools.spi.Action;
-import org.drools.spi.ActionContext;
+import org.drools.spi.ProcessContext;
 import org.drools.spi.KnowledgeHelper;
 import org.drools.workflow.core.DroolsAction;
 import org.drools.workflow.core.Node;
@@ -75,7 +75,7 @@
         actionNode.setName("Print");
         DroolsAction action = new DroolsConsequenceAction("java", null);
         action.setMetaData("Action", new Action() {
-            public void execute(KnowledgeHelper knowledgeHelper, WorkingMemory workingMemory, ActionContext context) throws Exception {
+            public void execute(KnowledgeHelper knowledgeHelper, WorkingMemory workingMemory, ProcessContext context) throws Exception {
             	System.out.println("Detected event for person " + ((Person) context.getVariable("event")).getName());
                 myList.add("Executed action");
             }
@@ -174,7 +174,7 @@
         actionNode.setName("Print");
         DroolsAction action = new DroolsConsequenceAction("java", null);
         action.setMetaData("Action", new Action() {
-            public void execute(KnowledgeHelper knowledgeHelper, WorkingMemory workingMemory, ActionContext context) throws Exception {
+            public void execute(KnowledgeHelper knowledgeHelper, WorkingMemory workingMemory, ProcessContext context) throws Exception {
             	System.out.println("Detected event for person " + ((Person) context.getVariable("event")).getName());
                 myList.add("Executed action");
             }
@@ -244,7 +244,7 @@
         actionNode.setName("Print");
         DroolsAction action = new DroolsConsequenceAction("java", null);
         action.setMetaData("Action", new Action() {
-            public void execute(KnowledgeHelper knowledgeHelper, WorkingMemory workingMemory, ActionContext context) throws Exception {
+            public void execute(KnowledgeHelper knowledgeHelper, WorkingMemory workingMemory, ProcessContext context) throws Exception {
             	System.out.println("Detected event for person " + ((Person) context.getVariable("event")).getName());
                 myList.add("Executed action");
             }
@@ -269,7 +269,7 @@
         actionNode2.setName("Print");
         action = new DroolsConsequenceAction("java", null);
         action.setMetaData("Action", new Action() {
-            public void execute(KnowledgeHelper knowledgeHelper, WorkingMemory workingMemory, ActionContext context) throws Exception {
+            public void execute(KnowledgeHelper knowledgeHelper, WorkingMemory workingMemory, ProcessContext context) throws Exception {
             	System.out.println("Detected other event for person " + ((Person) context.getVariable("event")).getName());
                 myList.add("Executed action");
             }
@@ -360,7 +360,7 @@
         actionNode.setName("Print");
         DroolsAction action = new DroolsConsequenceAction("java", null);
         action.setMetaData("Action", new Action() {
-            public void execute(KnowledgeHelper knowledgeHelper, WorkingMemory workingMemory, ActionContext context) throws Exception {
+            public void execute(KnowledgeHelper knowledgeHelper, WorkingMemory workingMemory, ProcessContext context) throws Exception {
                 myList.add("Executed action");
             }
         });
@@ -383,7 +383,7 @@
         actionNode2.setName("Print");
         action = new DroolsConsequenceAction("java", null);
         action.setMetaData("Action", new Action() {
-            public void execute(KnowledgeHelper knowledgeHelper, WorkingMemory workingMemory, ActionContext context) throws Exception {
+            public void execute(KnowledgeHelper knowledgeHelper, WorkingMemory workingMemory, ProcessContext context) throws Exception {
                 myList.add("Executed action");
             }
         });
@@ -478,7 +478,7 @@
         actionNode.setName("Print");
         DroolsAction action = new DroolsConsequenceAction("java", null);
         action.setMetaData("Action", new Action() {
-            public void execute(KnowledgeHelper knowledgeHelper, WorkingMemory workingMemory, ActionContext context) throws Exception {
+            public void execute(KnowledgeHelper knowledgeHelper, WorkingMemory workingMemory, ProcessContext context) throws Exception {
             	System.out.println("Detected event for person " + ((Person) context.getVariable("event")).getName());
                 myList.add("Executed action");
             }

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/process/ForEachTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/process/ForEachTest.java	2008-07-31 10:26:13 UTC (rev 21309)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/process/ForEachTest.java	2008-07-31 11:16:10 UTC (rev 21310)
@@ -18,7 +18,7 @@
 import org.drools.reteoo.ReteooWorkingMemory;
 import org.drools.ruleflow.core.RuleFlowProcess;
 import org.drools.spi.Action;
-import org.drools.spi.ActionContext;
+import org.drools.spi.ProcessContext;
 import org.drools.spi.KnowledgeHelper;
 import org.drools.workflow.core.DroolsAction;
 import org.drools.workflow.core.Node;
@@ -76,7 +76,7 @@
         actionNode.setName("Print child");
         DroolsAction action = new DroolsConsequenceAction("java", null);
         action.setMetaData("Action", new Action() {
-            public void execute(KnowledgeHelper knowledgeHelper, WorkingMemory workingMemory, ActionContext context) throws Exception {
+            public void execute(KnowledgeHelper knowledgeHelper, WorkingMemory workingMemory, ProcessContext context) throws Exception {
             	System.out.println("Executed action for child " + ((Person) context.getVariable("child")).getName());
                 myList.add("Executed action");
             }

Modified: labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/compiler/BPELCompiler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/compiler/BPELCompiler.java	2008-07-31 10:26:13 UTC (rev 21309)
+++ labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/compiler/BPELCompiler.java	2008-07-31 11:16:10 UTC (rev 21310)
@@ -13,6 +13,7 @@
 import org.apache.ode.bpel.compiler.bom.EmptyActivity;
 import org.apache.ode.bpel.compiler.bom.FlowActivity;
 import org.apache.ode.bpel.compiler.bom.From;
+import org.apache.ode.bpel.compiler.bom.IfActivity;
 import org.apache.ode.bpel.compiler.bom.InvokeActivity;
 import org.apache.ode.bpel.compiler.bom.Link;
 import org.apache.ode.bpel.compiler.bom.LinkSource;
@@ -22,34 +23,40 @@
 import org.apache.ode.bpel.compiler.bom.PickActivity;
 import org.apache.ode.bpel.compiler.bom.Process;
 import org.apache.ode.bpel.compiler.bom.ReceiveActivity;
+import org.apache.ode.bpel.compiler.bom.RepeatUntilActivity;
 import org.apache.ode.bpel.compiler.bom.ReplyActivity;
 import org.apache.ode.bpel.compiler.bom.ScopeActivity;
 import org.apache.ode.bpel.compiler.bom.SequenceActivity;
 import org.apache.ode.bpel.compiler.bom.SwitchActivity;
+import org.apache.ode.bpel.compiler.bom.TerminateActivity;
 import org.apache.ode.bpel.compiler.bom.ThrowActivity;
 import org.apache.ode.bpel.compiler.bom.To;
 import org.apache.ode.bpel.compiler.bom.WaitActivity;
 import org.apache.ode.bpel.compiler.bom.WhileActivity;
+import org.apache.ode.utils.DOMUtils;
 import org.apache.ode.utils.StreamUtils;
 import org.drools.RuleBase;
 import org.drools.bpel.core.BPELActivity;
 import org.drools.bpel.core.BPELAssign;
 import org.drools.bpel.core.BPELEmpty;
+import org.drools.bpel.core.BPELExit;
 import org.drools.bpel.core.BPELFaultHandler;
 import org.drools.bpel.core.BPELFlow;
+import org.drools.bpel.core.BPELIf;
 import org.drools.bpel.core.BPELInvoke;
 import org.drools.bpel.core.BPELPick;
 import org.drools.bpel.core.BPELProcess;
 import org.drools.bpel.core.BPELReceive;
+import org.drools.bpel.core.BPELRepeatUntil;
 import org.drools.bpel.core.BPELReply;
 import org.drools.bpel.core.BPELScope;
 import org.drools.bpel.core.BPELSequence;
-import org.drools.bpel.core.BPELSwitch;
 import org.drools.bpel.core.BPELThrow;
 import org.drools.bpel.core.BPELWait;
 import org.drools.bpel.core.BPELWhile;
 import org.drools.bpel.core.BPELActivity.SourceLink;
 import org.drools.bpel.core.BPELActivity.TargetLink;
+import org.drools.bpel.xpath.XMLDataType;
 import org.drools.bpel.xpath.XPathDialectConfiguration;
 import org.drools.common.AbstractRuleBase;
 import org.drools.compiler.DroolsError;
@@ -58,7 +65,7 @@
 import org.drools.compiler.ProcessBuilder;
 import org.drools.process.core.context.variable.Variable;
 import org.drools.process.core.context.variable.VariableScope;
-import org.drools.process.core.datatype.impl.type.StringDataType;
+import org.drools.process.core.datatype.DataType;
 import org.xml.sax.InputSource;
 
 public class BPELCompiler {
@@ -97,6 +104,7 @@
 		result.setId(process.getTargetNamespace());
 		result.setPackageName("org.drools.bpel");
 		result.setVersion("1.0");
+		result.setNamespaceContext(process.getNamespaceContext());
 		BPELActivity activity = compileActivity(process.getRootActivity());
 		result.setActivity(activity);
 		// variables
@@ -105,7 +113,7 @@
 		for (org.apache.ode.bpel.compiler.bom.Variable variable: process.getVariables()) {
 	        Variable bpelVariable =	new Variable();
 	        bpelVariable.setName(variable.getName());
-	        bpelVariable.setType(new StringDataType());
+	        bpelVariable.setType(getDataType(variable.getTypeName().toString()));
 	        variables.add(bpelVariable);
 		}
 		variableScope.setVariables(variables);
@@ -130,9 +138,10 @@
 			ReceiveActivity receiveActivity = (ReceiveActivity) activity;
 			BPELReceive receive = new BPELReceive();
 			receive.setCreateInstance(receiveActivity.isCreateInstance());
-			receive.setPartnerLink(receiveActivity.getPartnerLink());
-			receive.setPortType(receiveActivity.getPortType().toString());
-			receive.setOperation(receiveActivity.getOperation());
+			receive.setOperation(
+				receiveActivity.getPartnerLink(),
+				receiveActivity.getPortType().toString(),
+				receiveActivity.getOperation());
 			receive.setVariable(receiveActivity.getVariable());
 			result = receive;
 		} else if (activity instanceof ReplyActivity) {
@@ -191,15 +200,20 @@
 				if (from.isVariableVal()) {
 					BPELAssign.VariablePart bpelFrom = assign.new VariablePart(
 						from.getAsVariableVal().getVariable(), 
-						from.getAsVariableVal().getNamespaceContext().toString() + ":" + from.getAsVariableVal().getPart());
+						from.getAsVariableVal().getPart());
 					bpelCopy.setFrom(bpelFrom);
+				} else if (from.isLiteralVal()) {
+					BPELAssign.LiteralValue bpelFrom = assign.new LiteralValue(
+						DOMUtils.domToString(from.getAsLiteralVal().getLiteral().getFirstChild()));
+					bpelCopy.setFrom(bpelFrom);
 				} else {
-					throw new UnsupportedOperationException("Assign from does not yet support non-variable values");
+					BPELAssign.Expression bpelFrom = assign.new Expression(from.getAsExpression().toString());
+					bpelCopy.setFrom(bpelFrom);
 				}
 				if (to.isVariableVal()) {
 					BPELAssign.VariablePart bpelTo = assign.new VariablePart(
 						to.getAsVariableVal().getVariable(), 
-						to.getAsVariableVal().getNamespaceContext().toString() + ":" + to.getAsVariableVal().getPart());
+						to.getAsVariableVal().getPart());
 					bpelCopy.setTo(bpelTo);
 				} else {
 					throw new UnsupportedOperationException("Assign to does not yet support non-variable values");
@@ -247,7 +261,7 @@
 			for (org.apache.ode.bpel.compiler.bom.Variable variable: scopeActivity.getScope().getVariables()) {
 		        Variable bpelVariable =	new Variable();
 		        bpelVariable.setName(variable.getName());
-		        bpelVariable.setType(new StringDataType());
+		        bpelVariable.setType(getDataType(variable.getTypeName().toString()));
 		        variables.add(bpelVariable);
 			}
 			variableScope.setVariables(variables);
@@ -264,11 +278,21 @@
 			result = scope;
 		} else if (activity instanceof SwitchActivity) {
 			SwitchActivity switchActivity = (SwitchActivity) activity;
-			BPELSwitch bpelSwitch = new BPELSwitch();
+			BPELIf bpelSwitch = new BPELIf();
 			for (SwitchActivity.Case bpelCase: switchActivity.getCases()) {
 				bpelSwitch.addCase(bpelCase.getCondition().toString(), compileActivity(bpelCase.getActivity()));
 			}
 			result = bpelSwitch;
+		} else if (activity instanceof IfActivity) {
+			IfActivity ifActivity = (IfActivity) activity;
+			BPELIf bpelSwitch = new BPELIf();
+			bpelSwitch.addCase(ifActivity.getCondition().toString(), compileActivity(ifActivity.getActivity()));
+			for (IfActivity.Case bpelCase: ifActivity.getCases()) {
+				bpelSwitch.addCase(
+					bpelCase.getCondition() == null ? null : bpelCase.getCondition().toString(), 
+					compileActivity(bpelCase.getActivity()));
+			}
+			result = bpelSwitch;
 		} else if (activity instanceof WaitActivity) {
 			WaitActivity waitActivity = (WaitActivity) activity;
 			BPELWait wait = new BPELWait();
@@ -286,10 +310,17 @@
 				whileActivity.getCondition().toString(),
 				compileActivity(whileActivity.getActivity()));
 			result = bpelWhile;
+		} else if (activity instanceof RepeatUntilActivity) {
+			RepeatUntilActivity repeatUntilActivity = (RepeatUntilActivity) activity;
+			BPELRepeatUntil bpelRepeatUntil = new BPELRepeatUntil();
+			bpelRepeatUntil.setActivity(compileActivity(repeatUntilActivity.getActivity()));
+			bpelRepeatUntil.setCondition(repeatUntilActivity.getCondition().toString());
+			result = bpelRepeatUntil;
+		} else if (activity instanceof TerminateActivity) {
+			result = new BPELExit();
 		} else {
 			// TODO: compensate
-			// TODO: exit
-			// BPEL2.0: If, RepeatUntil, CompensateScope, Rethrow, Validate
+			// BPEL2.0: ForEach, CompensateScope, Rethrow, Validate
 			throw new IllegalArgumentException("Unknown activity type " + activity.getClass());
 		}
 		result.setName(activity.getName());
@@ -315,5 +346,11 @@
 		}
 		return result;
 	}
+	
+	private DataType getDataType(String typeName) {
+		XMLDataType result = new XMLDataType();
+		result.setTypeDefinition(typeName);
+		return result;
+	}
 
 }

Modified: labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/core/BPELAssign.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/core/BPELAssign.java	2008-07-31 10:26:13 UTC (rev 21309)
+++ labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/core/BPELAssign.java	2008-07-31 11:16:10 UTC (rev 21310)
@@ -72,28 +72,34 @@
     
     public class Copy {
 
-    	private VariablePart from;
-    	private VariablePart to;
+    	private From from;
+    	private To to;
     	
-		public VariablePart getFrom() {
+		public From getFrom() {
 			return from;
 		}
 		
-		public void setFrom(VariablePart from) {
+		public void setFrom(From from) {
 			this.from = from;
 		}
 		
-		public VariablePart getTo() {
+		public To getTo() {
 			return to;
 		}
 		
-		public void setTo(VariablePart to) {
+		public void setTo(To to) {
 			this.to = to;
 		}
 			
     }
     
-    public class VariablePart {
+    public interface From {
+    }
+    
+    public interface To {
+    }
+    
+    public class VariablePart implements From, To {
 
     	private String variable;
     	private String part;
@@ -112,5 +118,33 @@
     	}
     	
     }
+    
+    public class LiteralValue implements From {
+    	
+    	private String value;
+    	
+    	public LiteralValue(String value) {
+    		this.value = value;
+    	}
+    	
+    	public String getValue() {
+    		return value;
+    	}
+    	
+    }
 
+    public class Expression implements From {
+    	
+    	private String expression;
+    	
+    	public Expression(String expression) {
+    		this.expression = expression;
+    	}
+    	
+    	public String getExpression() {
+    		return expression;
+    	}
+    	
+    }
+
 }

Modified: labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/core/BPELEmpty.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/core/BPELEmpty.java	2008-07-31 10:26:13 UTC (rev 21309)
+++ labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/core/BPELEmpty.java	2008-07-31 11:16:10 UTC (rev 21310)
@@ -15,7 +15,7 @@
     private TargetLink[] targetLinks;
     
     public BPELEmpty() {
-    	this.setAction(new DroolsConsequenceAction("java", ""));
+    	this.setAction(new DroolsConsequenceAction("mvel", ""));
     }
 
     public SourceLink[] getSourceLinks() {

Added: labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/core/BPELExit.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/core/BPELExit.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/core/BPELExit.java	2008-07-31 11:16:10 UTC (rev 21310)
@@ -0,0 +1,28 @@
+package org.drools.bpel.core;
+
+import org.drools.workflow.core.node.EndNode;
+
+public class BPELExit extends EndNode implements BPELActivity {
+
+	private static final long serialVersionUID = 4L;
+
+	private SourceLink[] sourceLinks;
+    private TargetLink[] targetLinks;
+    
+    public SourceLink[] getSourceLinks() {
+        return sourceLinks;
+    }
+
+    public void setSourceLinks(SourceLink[] sourceLinks) {
+        this.sourceLinks = sourceLinks;
+    }
+
+    public TargetLink[] getTargetLinks() {
+        return targetLinks;
+    }
+
+    public void setTargetLinks(TargetLink[] targetLinks) {
+        this.targetLinks = targetLinks;
+    }
+
+}

Copied: labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/core/BPELIf.java (from rev 21241, labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/core/BPELSwitch.java)
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/core/BPELIf.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/core/BPELIf.java	2008-07-31 11:16:10 UTC (rev 21310)
@@ -0,0 +1,83 @@
+package org.drools.bpel.core;
+
+import org.drools.workflow.core.Node;
+import org.drools.workflow.core.impl.ConnectionImpl;
+import org.drools.workflow.core.impl.ConstraintImpl;
+import org.drools.workflow.core.node.CompositeNode;
+import org.drools.workflow.core.node.Join;
+import org.drools.workflow.core.node.Split;
+
+/**
+ * 
+ * @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
+ */
+public class BPELIf extends CompositeNode implements BPELActivity {
+
+    private static final long serialVersionUID = 400L;
+
+    private Split split;
+    private Join join;
+    private SourceLink[] sourceLinks;
+    private TargetLink[] targetLinks;
+
+    public BPELIf() {
+    	split = new Split();
+        split.setType(Split.TYPE_XOR);
+        split.setMetaData("hidden", true);
+        addNode(split);
+        join = new Join();
+        join.setType(Join.TYPE_XOR);
+        join.setMetaData("hidden", true);
+        addNode(join);
+        linkIncomingConnections(
+            Node.CONNECTION_DEFAULT_TYPE,
+            new CompositeNode.NodeAndType(
+                split, Node.CONNECTION_DEFAULT_TYPE));
+        linkOutgoingConnections(
+            new CompositeNode.NodeAndType(
+                join, Node.CONNECTION_DEFAULT_TYPE),
+            Node.CONNECTION_DEFAULT_TYPE);
+        ConnectionImpl connection = new ConnectionImpl(
+            split, Node.CONNECTION_DEFAULT_TYPE,
+            join, Node.CONNECTION_DEFAULT_TYPE);
+        ConstraintImpl constraint = new ConstraintImpl();
+        constraint.setConstraint("true");
+        constraint.setType("code");
+        constraint.setDialect("mvel");
+        constraint.setPriority(Integer.MAX_VALUE - 1);
+        split.setConstraint(connection, constraint);
+    }
+    
+    public void addCase(String expression, BPELActivity activity) {
+    	addNode(activity);
+        ConnectionImpl connection = new ConnectionImpl(
+            split, Node.CONNECTION_DEFAULT_TYPE,
+            activity, Node.CONNECTION_DEFAULT_TYPE);
+        new ConnectionImpl(
+            activity, Node.CONNECTION_DEFAULT_TYPE,
+            join, Node.CONNECTION_DEFAULT_TYPE);
+        ConstraintImpl constraint = new ConstraintImpl();
+        constraint.setConstraint(expression == null ? "true" : expression);
+        constraint.setType("code");
+        constraint.setDialect(expression == null ? "mvel" : "XPath2.0");
+        constraint.setPriority(getNodes().length - 2);
+        split.setConstraint(connection, constraint);
+    }
+    
+    public SourceLink[] getSourceLinks() {
+        return sourceLinks;
+    }
+
+    public void setSourceLinks(SourceLink[] sourceLinks) {
+        this.sourceLinks = sourceLinks;
+    }
+
+    public TargetLink[] getTargetLinks() {
+        return targetLinks;
+    }
+
+    public void setTargetLinks(TargetLink[] targetLinks) {
+        this.targetLinks = targetLinks;
+    }
+
+}

Modified: labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/core/BPELProcess.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/core/BPELProcess.java	2008-07-31 10:26:13 UTC (rev 21309)
+++ labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/core/BPELProcess.java	2008-07-31 11:16:10 UTC (rev 21310)
@@ -2,12 +2,15 @@
 
 import java.util.List;
 
+import javax.xml.namespace.NamespaceContext;
+
 import org.drools.process.core.context.exception.ExceptionScope;
 import org.drools.process.core.context.variable.VariableScope;
 import org.drools.workflow.core.Node;
 import org.drools.workflow.core.impl.ConnectionImpl;
 import org.drools.workflow.core.impl.WorkflowProcessImpl;
 import org.drools.workflow.core.node.EndNode;
+import org.drools.workflow.core.node.StartNode;
 
 
 /**
@@ -21,6 +24,7 @@
     public static final String BPEL_TYPE = "BPEL";
     
     private BPELActivity activity;
+    private NamespaceContext namespaceContext;
     
     public BPELProcess() {
         setType(BPEL_TYPE);
@@ -45,8 +49,15 @@
         this.activity = activity;
         activity.setId(1);
         addNode(activity);
+        StartNode start = new StartNode();
+        start.setMetaData("hidden", true);
+        start.setId(2);
+        addNode(start);
+        new ConnectionImpl(
+            start, Node.CONNECTION_DEFAULT_TYPE,
+            activity, Node.CONNECTION_DEFAULT_TYPE);
         EndNode end = new EndNode();
-        end.setId(2);
+        end.setId(3);
         end.setMetaData("hidden", true);
         addNode(end);
         new ConnectionImpl(
@@ -70,5 +81,13 @@
         }
         // TODO: process should end once fault handler has been executed
     }
+
+	public NamespaceContext getNamespaceContext() {
+		return namespaceContext;
+	}
+
+	public void setNamespaceContext(NamespaceContext namespaceContext) {
+		this.namespaceContext = namespaceContext;
+	}
     
 }

Modified: labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/core/BPELReceive.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/core/BPELReceive.java	2008-07-31 10:26:13 UTC (rev 21309)
+++ labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/core/BPELReceive.java	2008-07-31 11:16:10 UTC (rev 21310)
@@ -5,12 +5,13 @@
 import org.drools.workflow.core.Connection;
 import org.drools.workflow.core.Node;
 import org.drools.workflow.core.impl.NodeImpl;
+import org.drools.workflow.core.node.EventNodeInterface;
 
 /**
  * 
  * @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
  */
-public class BPELReceive extends NodeImpl implements BPELActivity {
+public class BPELReceive extends NodeImpl implements BPELActivity, EventNodeInterface {
 
     private static final long serialVersionUID = 400L;
 
@@ -23,38 +24,20 @@
     private TargetLink[] targetLinks;
     private BPELCorrelation[] correlations;
     
-    public String getPartnerLink() {
-        return partnerLink;
+    public void setOperation(String partnerLink, String portType, String operation) {
+    	this.partnerLink = partnerLink;
+    	this.portType = portType;
+    	this.operation = operation;
     }
-
-    public void setPartnerLink(String partnerLink) {
-        this.partnerLink = partnerLink;
+    
+    public void setVariable(String variable) {
+    	this.variable = variable;
     }
-
-    public String getPortType() {
-        return portType;
-    }
-
-    public void setPortType(String portType) {
-        this.portType = portType;
-    }
-
-    public String getOperation() {
-        return operation;
-    }
-
-    public void setOperation(String operation) {
-        this.operation = operation;
-    }
-
+    
     public String getVariable() {
-        return variable;
+    	return variable;
     }
 
-    public void setVariable(String variable) {
-        this.variable = variable;
-    }
-
     public boolean isCreateInstance() {
         return createInstance;
     }
@@ -96,4 +79,12 @@
 		this.correlations = correlations;
 	}
 
+	public boolean acceptsEvent(String type, Object event) {
+		if ("message".equals(type)) {
+			String[] message = (String[]) event;
+			return partnerLink.equals(message[0]) && portType.equals(message[1]) && operation.equals(message[2]);
+		}
+		return false;
+	}
+    	
 }

Added: labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/core/BPELRepeatUntil.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/core/BPELRepeatUntil.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/core/BPELRepeatUntil.java	2008-07-31 11:16:10 UTC (rev 21310)
@@ -0,0 +1,92 @@
+package org.drools.bpel.core;
+
+import org.drools.workflow.core.Node;
+import org.drools.workflow.core.impl.ConnectionImpl;
+import org.drools.workflow.core.impl.ConstraintImpl;
+import org.drools.workflow.core.node.CompositeNode;
+import org.drools.workflow.core.node.Join;
+import org.drools.workflow.core.node.Split;
+
+/**
+ * 
+ * @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
+ */
+public class BPELRepeatUntil extends CompositeNode implements BPELActivity {
+
+    private static final long serialVersionUID = 400L;
+
+    private Join join;
+    private Split split;
+    private SourceLink[] sourceLinks;
+    private TargetLink[] targetLinks;
+
+    public BPELRepeatUntil() {
+        join = new Join();
+        join.setType(Join.TYPE_XOR);
+        join.setMetaData("hidden", true);
+        addNode(join);
+    	split = new Split();
+        split.setType(Split.TYPE_XOR);
+        split.setMetaData("hidden", true);
+        addNode(split);
+        linkIncomingConnections(
+            Node.CONNECTION_DEFAULT_TYPE,
+            new CompositeNode.NodeAndType(
+                join, Node.CONNECTION_DEFAULT_TYPE));
+    }
+    
+    public void setCondition(String condition) {
+    	BPELEmpty empty = new BPELEmpty();
+        empty.setMetaData("hidden", true);
+        addNode(empty);
+        linkOutgoingConnections(
+            new CompositeNode.NodeAndType(
+                empty, Node.CONNECTION_DEFAULT_TYPE),
+            Node.CONNECTION_DEFAULT_TYPE);
+        ConnectionImpl connection = new ConnectionImpl(
+            split, Node.CONNECTION_DEFAULT_TYPE,
+            empty, Node.CONNECTION_DEFAULT_TYPE);
+        ConstraintImpl constraint = new ConstraintImpl();
+        constraint.setConstraint("true");
+        constraint.setType("code");
+        constraint.setDialect("mvel");
+        constraint.setPriority(Integer.MAX_VALUE - 1);
+        split.setConstraint(connection, constraint);
+        connection = new ConnectionImpl(
+            split, Node.CONNECTION_DEFAULT_TYPE,
+            join, Node.CONNECTION_DEFAULT_TYPE);
+        constraint = new ConstraintImpl();
+        constraint.setConstraint(condition);
+        constraint.setType("code");
+        constraint.setDialect("XPath2.0");
+        constraint.setPriority(getNodes().length - 2);
+        split.setConstraint(connection, constraint);
+    }
+    
+    public void setActivity(BPELActivity activity) {
+    	addNode(activity);
+        new ConnectionImpl(
+            join, Node.CONNECTION_DEFAULT_TYPE,
+            activity, Node.CONNECTION_DEFAULT_TYPE);
+        new ConnectionImpl(
+            activity, Node.CONNECTION_DEFAULT_TYPE,
+            split, Node.CONNECTION_DEFAULT_TYPE);
+    }
+    
+    public SourceLink[] getSourceLinks() {
+        return sourceLinks;
+    }
+
+    public void setSourceLinks(SourceLink[] sourceLinks) {
+        this.sourceLinks = sourceLinks;
+    }
+
+    public TargetLink[] getTargetLinks() {
+        return targetLinks;
+    }
+
+    public void setTargetLinks(TargetLink[] targetLinks) {
+        this.targetLinks = targetLinks;
+    }
+
+}

Deleted: labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/core/BPELSwitch.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/core/BPELSwitch.java	2008-07-31 10:26:13 UTC (rev 21309)
+++ labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/core/BPELSwitch.java	2008-07-31 11:16:10 UTC (rev 21310)
@@ -1,74 +0,0 @@
-package org.drools.bpel.core;
-
-import org.drools.workflow.core.Node;
-import org.drools.workflow.core.impl.ConnectionImpl;
-import org.drools.workflow.core.impl.ConstraintImpl;
-import org.drools.workflow.core.node.CompositeNode;
-import org.drools.workflow.core.node.Join;
-import org.drools.workflow.core.node.Split;
-
-/**
- * 
- * @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
- */
-public class BPELSwitch extends CompositeNode implements BPELActivity {
-
-    private static final long serialVersionUID = 400L;
-
-    private Split split;
-    private Join join;
-    private SourceLink[] sourceLinks;
-    private TargetLink[] targetLinks;
-
-    public BPELSwitch() {
-    	split = new Split();
-        split.setType(Split.TYPE_XOR);
-        split.setMetaData("hidden", true);
-        addNode(split);
-        join = new Join();
-        join.setType(Join.TYPE_XOR);
-        join.setMetaData("hidden", true);
-        addNode(join);
-        linkIncomingConnections(
-            Node.CONNECTION_DEFAULT_TYPE,
-            new CompositeNode.NodeAndType(
-                split, Node.CONNECTION_DEFAULT_TYPE));
-        linkOutgoingConnections(
-            new CompositeNode.NodeAndType(
-                join, Node.CONNECTION_DEFAULT_TYPE),
-            Node.CONNECTION_DEFAULT_TYPE);
-    }
-    
-    public void addCase(String expression, BPELActivity activity) {
-    	addNode(activity);
-        ConnectionImpl connection = new ConnectionImpl(
-            split, Node.CONNECTION_DEFAULT_TYPE,
-            activity, Node.CONNECTION_DEFAULT_TYPE);
-        new ConnectionImpl(
-            activity, Node.CONNECTION_DEFAULT_TYPE,
-            join, Node.CONNECTION_DEFAULT_TYPE);
-        ConstraintImpl constraint = new ConstraintImpl();
-        constraint.setConstraint(expression);
-        constraint.setType("code");
-        constraint.setDialect("XPath");
-        constraint.setPriority(getNodes().length - 2);
-        split.setConstraint(connection, constraint);
-    }
-    
-    public SourceLink[] getSourceLinks() {
-        return sourceLinks;
-    }
-
-    public void setSourceLinks(SourceLink[] sourceLinks) {
-        this.sourceLinks = sourceLinks;
-    }
-
-    public TargetLink[] getTargetLinks() {
-        return targetLinks;
-    }
-
-    public void setTargetLinks(TargetLink[] targetLinks) {
-        this.targetLinks = targetLinks;
-    }
-
-}

Deleted: labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/core/BPELWhile.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/core/BPELWhile.java	2008-07-31 10:26:13 UTC (rev 21309)
+++ labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/core/BPELWhile.java	2008-07-31 11:16:10 UTC (rev 21310)
@@ -1,90 +0,0 @@
-package org.drools.bpel.core;
-
-import org.drools.workflow.core.Node;
-import org.drools.workflow.core.impl.ConnectionImpl;
-import org.drools.workflow.core.impl.ConstraintImpl;
-import org.drools.workflow.core.node.CompositeNode;
-import org.drools.workflow.core.node.Join;
-import org.drools.workflow.core.node.Split;
-
-/**
- * 
- * @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
- */
-public class BPELWhile extends CompositeNode implements BPELActivity {
-
-    private static final long serialVersionUID = 400L;
-
-    private Join join;
-    private Split split;
-    private SourceLink[] sourceLinks;
-    private TargetLink[] targetLinks;
-
-    public BPELWhile() {
-        join = new Join();
-        join.setType(Join.TYPE_XOR);
-        join.setMetaData("hidden", true);
-        addNode(join);
-    	split = new Split();
-        split.setType(Split.TYPE_XOR);
-        split.setMetaData("hidden", true);
-        addNode(split);
-        BPELEmpty empty = new BPELEmpty();
-        empty.setMetaData("hidden", true);
-        addNode(empty);
-        linkIncomingConnections(
-            Node.CONNECTION_DEFAULT_TYPE,
-            new CompositeNode.NodeAndType(
-                join, Node.CONNECTION_DEFAULT_TYPE));
-        linkOutgoingConnections(
-            new CompositeNode.NodeAndType(
-                empty, Node.CONNECTION_DEFAULT_TYPE),
-            Node.CONNECTION_DEFAULT_TYPE);
-        new ConnectionImpl(
-            join, Node.CONNECTION_DEFAULT_TYPE,
-            split, Node.CONNECTION_DEFAULT_TYPE);
-        ConnectionImpl connection = new ConnectionImpl(
-            split, Node.CONNECTION_DEFAULT_TYPE,
-            empty, Node.CONNECTION_DEFAULT_TYPE);
-        ConstraintImpl constraint = new ConstraintImpl();
-        constraint.setConstraint("true");
-        constraint.setType("code");
-        constraint.setDialect("mvel");
-        constraint.setPriority(Integer.MAX_VALUE - 1);
-        split.setConstraint(connection, constraint);
-    }
-    
-    public void setActivity(String condition, BPELActivity activity) {
-    	addNode(activity);
-        ConnectionImpl connection = new ConnectionImpl(
-            split, Node.CONNECTION_DEFAULT_TYPE,
-            activity, Node.CONNECTION_DEFAULT_TYPE);
-        new ConnectionImpl(
-            activity, Node.CONNECTION_DEFAULT_TYPE,
-            join, Node.CONNECTION_DEFAULT_TYPE);
-        ConstraintImpl constraint = new ConstraintImpl();
-        // TODO While constraint dialect
-        constraint.setConstraint(condition);
-        constraint.setType("code");
-        constraint.setDialect("XPath2.0");
-        constraint.setPriority(getNodes().length - 2);
-        split.setConstraint(connection, constraint);
-    }
-    
-    public SourceLink[] getSourceLinks() {
-        return sourceLinks;
-    }
-
-    public void setSourceLinks(SourceLink[] sourceLinks) {
-        this.sourceLinks = sourceLinks;
-    }
-
-    public TargetLink[] getTargetLinks() {
-        return targetLinks;
-    }
-
-    public void setTargetLinks(TargetLink[] targetLinks) {
-        this.targetLinks = targetLinks;
-    }
-
-}

Added: labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/core/BPELWhile.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/core/BPELWhile.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/core/BPELWhile.java	2008-07-31 11:16:10 UTC (rev 21310)
@@ -0,0 +1,89 @@
+package org.drools.bpel.core;
+
+import org.drools.workflow.core.Node;
+import org.drools.workflow.core.impl.ConnectionImpl;
+import org.drools.workflow.core.impl.ConstraintImpl;
+import org.drools.workflow.core.node.CompositeNode;
+import org.drools.workflow.core.node.Join;
+import org.drools.workflow.core.node.Split;
+
+/**
+ * 
+ * @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
+ */
+public class BPELWhile extends CompositeNode implements BPELActivity {
+
+    private static final long serialVersionUID = 400L;
+
+    private Join join;
+    private Split split;
+    private SourceLink[] sourceLinks;
+    private TargetLink[] targetLinks;
+
+    public BPELWhile() {
+        join = new Join();
+        join.setType(Join.TYPE_XOR);
+        join.setMetaData("hidden", true);
+        addNode(join);
+    	split = new Split();
+        split.setType(Split.TYPE_XOR);
+        split.setMetaData("hidden", true);
+        addNode(split);
+        BPELEmpty empty = new BPELEmpty();
+        empty.setMetaData("hidden", true);
+        addNode(empty);
+        linkIncomingConnections(
+            Node.CONNECTION_DEFAULT_TYPE,
+            new CompositeNode.NodeAndType(
+                join, Node.CONNECTION_DEFAULT_TYPE));
+        linkOutgoingConnections(
+            new CompositeNode.NodeAndType(
+                empty, Node.CONNECTION_DEFAULT_TYPE),
+            Node.CONNECTION_DEFAULT_TYPE);
+        new ConnectionImpl(
+            join, Node.CONNECTION_DEFAULT_TYPE,
+            split, Node.CONNECTION_DEFAULT_TYPE);
+        ConnectionImpl connection = new ConnectionImpl(
+            split, Node.CONNECTION_DEFAULT_TYPE,
+            empty, Node.CONNECTION_DEFAULT_TYPE);
+        ConstraintImpl constraint = new ConstraintImpl();
+        constraint.setConstraint("true");
+        constraint.setType("code");
+        constraint.setDialect("mvel");
+        constraint.setPriority(Integer.MAX_VALUE - 1);
+        split.setConstraint(connection, constraint);
+    }
+    
+    public void setActivity(String condition, BPELActivity activity) {
+    	addNode(activity);
+        ConnectionImpl connection = new ConnectionImpl(
+            split, Node.CONNECTION_DEFAULT_TYPE,
+            activity, Node.CONNECTION_DEFAULT_TYPE);
+        new ConnectionImpl(
+            activity, Node.CONNECTION_DEFAULT_TYPE,
+            join, Node.CONNECTION_DEFAULT_TYPE);
+        ConstraintImpl constraint = new ConstraintImpl();
+        constraint.setConstraint(condition);
+        constraint.setType("code");
+        constraint.setDialect("XPath2.0");
+        constraint.setPriority(getNodes().length - 2);
+        split.setConstraint(connection, constraint);
+    }
+    
+    public SourceLink[] getSourceLinks() {
+        return sourceLinks;
+    }
+
+    public void setSourceLinks(SourceLink[] sourceLinks) {
+        this.sourceLinks = sourceLinks;
+    }
+
+    public TargetLink[] getTargetLinks() {
+        return targetLinks;
+    }
+
+    public void setTargetLinks(TargetLink[] targetLinks) {
+        this.targetLinks = targetLinks;
+    }
+
+}

Modified: labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/instance/BPELAssignInstance.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/instance/BPELAssignInstance.java	2008-07-31 10:26:13 UTC (rev 21309)
+++ labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/instance/BPELAssignInstance.java	2008-07-31 11:16:10 UTC (rev 21310)
@@ -4,13 +4,21 @@
 
 import javax.xml.namespace.QName;
 import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.xpath.XPathConstants;
 
 import org.apache.ode.utils.DOMUtils;
 import org.drools.bpel.core.BPELAssign;
 import org.drools.bpel.core.BPELAssign.Copy;
+import org.drools.bpel.core.BPELAssign.Expression;
+import org.drools.bpel.core.BPELAssign.From;
+import org.drools.bpel.core.BPELAssign.LiteralValue;
 import org.drools.bpel.core.BPELAssign.VariablePart;
+import org.drools.bpel.xpath.XMLDataType;
+import org.drools.bpel.xpath.XPathReturnValueEvaluator;
 import org.drools.process.core.context.variable.VariableScope;
+import org.drools.process.core.datatype.DataType;
 import org.drools.process.instance.context.variable.VariableScopeInstance;
+import org.drools.spi.ProcessContext;
 import org.drools.workflow.core.Node;
 import org.drools.workflow.instance.NodeInstance;
 import org.drools.workflow.instance.impl.NodeInstanceImpl;
@@ -36,39 +44,97 @@
         if (BPELLinkManager.checkActivityEnabled(this)) {
         	BPELAssign assign = getBPELAssign();
         	for (Copy copy: assign.getCopies()) {
-        		VariablePart fromPart = copy.getFrom();
-        		VariablePart toPart = copy.getTo();
-        		String fromValue = getVariableValue(fromPart.getVariable());
-        		String toValue = getVariableValue(toPart.getVariable());
-        		if (toValue == null) {
-        			toValue = initializeVariable(toPart.getVariable());
+        		From fromPart = copy.getFrom();
+        		VariablePart toPart = (VariablePart) copy.getTo();
+        		Object fromValue = getValue(fromPart);
+        		if (toPart.getPart() == null) {
+        			setVariableValue(toPart.getVariable(), fromValue);
+        		} else {
+            		String toValue = getVariableValue(toPart.getVariable());
+	        		if (toValue == null) {
+	        			toValue = initializeVariable(toPart.getVariable());
+	        		}
+	        		toValue = copy(fromValue, toValue, toPart.getPart());
+	        		setVariableValue(toPart.getVariable(), toValue);
         		}
-        		toValue = copy(fromValue, fromPart.getPart(), toValue, toPart.getPart());
-        		setVariableValue(toPart.getVariable(), toValue);
         	}
             triggerCompleted(Node.CONNECTION_DEFAULT_TYPE, true);
         }
     }
     
-    private String copy(String fromValue, String fromPart, String toValue, String toPart) {
+    private Object getValue(From from) {
+    	if (from instanceof VariablePart) {
+    		VariablePart fromPart = (VariablePart) from;
+    		String fromValue = getVariableValue(fromPart.getVariable());
+    		if (fromPart.getPart() == null) {
+    			return fromValue;
+    		}
+            try {
+	        	DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+	    		Document fromDocument = factory.newDocumentBuilder().parse(new ByteArrayInputStream(fromValue.getBytes()));
+	        	return DOMUtils.findChildByName((Element) fromDocument.getDocumentElement(), new QName(fromPart.getPart()));
+            } catch (Throwable t) {
+            	throw new IllegalArgumentException("Could not get value", t);
+            }
+    	} else if (from instanceof LiteralValue) {
+    		return ((LiteralValue) from).getValue();
+    	} else if (from instanceof Expression) {
+    		String expression = ((Expression) from).getExpression();
+    		try {
+	    		XPathReturnValueEvaluator evaluator = new XPathReturnValueEvaluator();
+	    		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+				Document document = factory.newDocumentBuilder().parse(new ByteArrayInputStream(expression.getBytes()));
+				org.w3c.dom.Node node = document.getFirstChild().getFirstChild();
+		        if (node == null) {
+		            throw new IllegalStateException();
+		        }
+		        if (node.getNodeType() != org.w3c.dom.Node.TEXT_NODE) {
+		            throw new IllegalArgumentException("Unexpected node type for XPath");
+		        }
+		        String xpathString = node.getNodeValue();
+	    		evaluator.setExpression(xpathString);
+	    		ProcessContext processContext = new ProcessContext();
+	    		processContext.setNodeInstance(this);
+    			return (String) evaluator.evaluate(getProcessInstance().getWorkingMemory(), processContext, XPathConstants.STRING);
+    		} catch (Throwable t) {
+    			throw new IllegalArgumentException("Could not evaluate expression " + expression, t);
+    		}
+    	} else {
+    		throw new UnsupportedOperationException();
+    	}
+    }
+    
+    private String copy(Object fromValue, String toValue, String toPart) {
         try {
         	DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
-    		Document fromDocument = factory.newDocumentBuilder().parse(new ByteArrayInputStream(fromValue.getBytes()));
-        	Element from = DOMUtils.findChildByName((Element) fromDocument.getDocumentElement(), new QName(fromPart));
     		Document toDocument = factory.newDocumentBuilder().parse(new ByteArrayInputStream(toValue.getBytes()));
         	Element to = DOMUtils.findChildByName((Element) toDocument.getDocumentElement(), new QName(toPart));
-        	
-        	Element replacement = toDocument.createElementNS(from.getNamespaceURI(), from.getNodeName());
-            NodeList nl = from.getChildNodes();
-            for (int i = 0; i < nl.getLength(); ++i)
-                replacement.appendChild(toDocument.importNode(nl.item(i), true));
-            NamedNodeMap attrs = from.getAttributes();
-            for (int i = 0; i < attrs.getLength(); ++i) {
-                if (!((Attr)attrs.item(i)).getName().startsWith("xmlns")) {
-                    replacement.setAttributeNodeNS((Attr) toDocument.importNode(attrs.item(i), true));
-                }
-            }
-        	to.getParentNode().replaceChild(replacement, to);
+        	if (fromValue instanceof Element) {
+        		Element from = (Element) fromValue;
+	        	Element replacement = toDocument.createElementNS(from.getNamespaceURI(), from.getNodeName());
+	            NodeList nl = from.getChildNodes();
+	            for (int i = 0; i < nl.getLength(); ++i)
+	                replacement.appendChild(toDocument.importNode(nl.item(i), true));
+	            NamedNodeMap attrs = from.getAttributes();
+	            for (int i = 0; i < attrs.getLength(); ++i) {
+	                if (!((Attr)attrs.item(i)).getName().startsWith("xmlns")) {
+	                    replacement.setAttributeNodeNS((Attr) toDocument.importNode(attrs.item(i), true));
+	                }
+	            }
+	            if (to == null) {
+	            	toDocument.getDocumentElement().appendChild(replacement);
+	            } else {
+	            	to.getParentNode().replaceChild(replacement, to);
+	            }
+        	} else {
+        		Element replacement = toDocument.createElementNS(null, toPart);
+        		replacement.setTextContent((String) fromValue);
+        		if (to == null) {
+        			toDocument.getDocumentElement().appendChild(replacement);
+	            } else {
+	            	to.getParentNode().replaceChild(replacement, to);
+	            }
+        	}
         	return DOMUtils.domToString(toDocument.getDocumentElement());
         } catch (Throwable t) {
         	throw new IllegalArgumentException("Could not copy value", t);
@@ -76,8 +142,17 @@
     }
     
     private String initializeVariable(String variable) {
-    	// TODO
-    	return "<shippingRequestMessage><customerInfo></customerInfo></shippingRequestMessage>";
+    	VariableScopeInstance variableScopeInstance = (VariableScopeInstance)
+			resolveContextInstance(VariableScope.VARIABLE_SCOPE, variable);
+		if (variableScopeInstance != null) {
+			DataType dataType = ((VariableScope) variableScopeInstance.getContext()).findVariable(variable).getType();
+			if (dataType instanceof XMLDataType) {
+				String type = ((XMLDataType) dataType).getTypeDefinition();
+				type = type.substring(type.lastIndexOf("}") + 1);
+				return "<" + type + "></" + type + ">";
+			}
+		}
+        return "";
     }
     
     private String getVariableValue(String variable) {
@@ -93,7 +168,7 @@
     	return null;
     }
     
-    private void setVariableValue(String variable, String value) {
+    private void setVariableValue(String variable, Object value) {
     	VariableScopeInstance variableScopeInstance = (VariableScopeInstance)
     		resolveContextInstance(VariableScope.VARIABLE_SCOPE, variable);
     	if (variableScopeInstance != null) {

Added: labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/instance/BPELExitInstance.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/instance/BPELExitInstance.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/instance/BPELExitInstance.java	2008-07-31 11:16:10 UTC (rev 21310)
@@ -0,0 +1,16 @@
+package org.drools.bpel.instance;
+
+import org.drools.workflow.instance.NodeInstance;
+import org.drools.workflow.instance.node.EndNodeInstance;
+
+public class BPELExitInstance extends EndNodeInstance {
+
+	private static final long serialVersionUID = 1L;
+
+    public void internalTrigger(NodeInstance from, String type) {
+        if (BPELLinkManager.checkActivityEnabled(this)) {
+            super.internalTrigger(from, type);
+        }
+    }
+    
+}

Modified: labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/instance/BPELFlowInstance.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/instance/BPELFlowInstance.java	2008-07-31 10:26:13 UTC (rev 21309)
+++ labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/instance/BPELFlowInstance.java	2008-07-31 11:16:10 UTC (rev 21310)
@@ -6,6 +6,8 @@
 import java.util.Map;
 
 import org.drools.bpel.core.BPELFlow;
+import org.drools.workflow.core.Node;
+import org.drools.workflow.core.node.CompositeNode;
 import org.drools.workflow.instance.NodeInstance;
 import org.drools.workflow.instance.node.CompositeNodeInstance;
 
@@ -28,7 +30,7 @@
         activatedLinks.add(linkName);
         NodeInstance waitingActivityInstance = waitingActivityInstances.get(linkName);
         if (waitingActivityInstance != null) {
-            waitingActivityInstance.trigger(null, null);
+            waitingActivityInstance.trigger(null, Node.CONNECTION_DEFAULT_TYPE);
         }
     }
     
@@ -46,6 +48,13 @@
         }
     }
     
+	public void triggerEvent(String type, Object event) {
+		super.triggerEvent(type, event);
+		CompositeNode.NodeAndType nodeAndType = getCompositeNode().internalGetLinkedIncomingNode(Node.CONNECTION_DEFAULT_TYPE);
+		NodeInstance nodeInstance = getNodeInstance(nodeAndType.getNode());
+        nodeInstance.trigger(null, nodeAndType.getType());
+	}
+
     public void triggerCompleted(String outType) {
         super.triggerCompleted(outType);
         BPELLinkManager.activateTargetLinks(this);

Copied: labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/instance/BPELIfInstance.java (from rev 21226, labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/instance/BPELSwitchInstance.java)
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/instance/BPELIfInstance.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/instance/BPELIfInstance.java	2008-07-31 11:16:10 UTC (rev 21310)
@@ -0,0 +1,24 @@
+package org.drools.bpel.instance;
+
+import org.drools.workflow.instance.NodeInstance;
+import org.drools.workflow.instance.node.CompositeNodeInstance;
+
+/**
+ * 
+ * @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
+ */
+public class BPELIfInstance extends CompositeNodeInstance {
+
+    private static final long serialVersionUID = 400L;
+    
+    public void internalTrigger(NodeInstance from, String type) {
+        if (BPELLinkManager.checkActivityEnabled(this)) {
+            super.internalTrigger(from, type);
+        }
+    }
+    
+    public void triggerCompleted(String outType) {
+        super.triggerCompleted(outType);
+        BPELLinkManager.activateTargetLinks(this);
+    }
+}

Modified: labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/instance/BPELLinkManager.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/instance/BPELLinkManager.java	2008-07-31 10:26:13 UTC (rev 21309)
+++ labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/instance/BPELLinkManager.java	2008-07-31 11:16:10 UTC (rev 21310)
@@ -3,6 +3,8 @@
 import org.drools.bpel.core.BPELActivity;
 import org.drools.bpel.core.BPELActivity.SourceLink;
 import org.drools.bpel.core.BPELActivity.TargetLink;
+import org.drools.bpel.xpath.XPathReturnValueEvaluator;
+import org.drools.spi.ProcessContext;
 import org.drools.util.ArrayUtils;
 import org.drools.workflow.instance.NodeInstance;
 import org.drools.workflow.instance.NodeInstanceContainer;
@@ -50,7 +52,7 @@
             for (int i = 0; i < outgoingLinks.length; i++) {
                 BPELFlowInstance flowInstance = getFlowInstance(activityInstance, outgoingLinks[i].getLinkName());
                 String transitionCondition = outgoingLinks[i].getTransitionCondition(); 
-                if (transitionCondition == null || evaluateTransitionCondition(transitionCondition)) {
+                if (transitionCondition == null || evaluateTransitionCondition(transitionCondition, activityInstance)) {
                 	flowInstance.activateLink(outgoingLinks[i].getLinkName());
                 }
             }
@@ -66,9 +68,16 @@
         return (BPELFlowInstance) parent;
     }
     
-    private static boolean evaluateTransitionCondition(String transitionCondition) {
-    	// TODO SourceLink transitionCondition
-    	return true;
+    private static boolean evaluateTransitionCondition(String transitionCondition, NodeInstance activityInstance) {
+    	try {
+	    	XPathReturnValueEvaluator evaluator = new XPathReturnValueEvaluator();
+	    	evaluator.setExpression(transitionCondition);
+	    	ProcessContext processContext = new ProcessContext();
+	    	processContext.setNodeInstance(activityInstance);
+	    	return (Boolean) evaluator.evaluate(activityInstance.getProcessInstance().getWorkingMemory(), processContext);
+    	} catch (Throwable t) {
+    		throw new IllegalArgumentException("Could not evaluate transition condition " + transitionCondition, t);
+    	}
     }
 
 }

Modified: labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/instance/BPELProcessInstance.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/instance/BPELProcessInstance.java	2008-07-31 10:26:13 UTC (rev 21309)
+++ labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/instance/BPELProcessInstance.java	2008-07-31 11:16:10 UTC (rev 21310)
@@ -28,65 +28,65 @@
     }
     
     // TODO: unification with signalEvent
-    public void acceptMessage(String partnerLink, String portType, String operation, String message) {
-        if (getState() == STATE_PENDING) {
-            setState(STATE_ACTIVE);
-        }
-        BPELReceive receive = findBPELReceive(partnerLink, portType, operation);
-        if (receive == null) {
-            throw new IllegalArgumentException(
-                "Could not find BPELReceive for " + partnerLink + ", " + portType + ", " + operation);
-        }
-        BPELActivity activity = receive;
-        List<BPELActivity> parents = new ArrayList<BPELActivity>(); 
-        while (!activity.getNodeContainer().equals(getBPELProcess())) {
-            activity = (BPELActivity) activity.getNodeContainer();
-            parents.add(0, activity);
-        }
-        NodeInstanceContainer nodeInstanceContainer = this;
-        for (Iterator<BPELActivity> iterator = parents.iterator(); iterator.hasNext(); ) {
-            BPELActivity parent = iterator.next();
-            NodeInstance nodeInstance = nodeInstanceContainer.getFirstNodeInstance(parent.getId());
-            if (nodeInstance != null) {
-                nodeInstanceContainer = (NodeInstanceContainer) nodeInstance;
-            } else if (receive.isCreateInstance()) {
-                nodeInstanceContainer = (NodeInstanceContainer) nodeInstanceContainer.getNodeInstance(parent);
-            } else {
-                // TODO: store message in cache of accepted messages
-                return;
-            }
-        }
-        BPELReceiveInstance bpelReceiveInstance = (BPELReceiveInstance) nodeInstanceContainer.getNodeInstance(receive);
-        ((EventSupport) getWorkingMemory()).getRuleFlowEventSupport().fireBeforeRuleFlowNodeTriggered(bpelReceiveInstance, (InternalWorkingMemory) getWorkingMemory());
-        bpelReceiveInstance.triggerCompleted(message);
-        ((EventSupport) getWorkingMemory()).getRuleFlowEventSupport().fireAfterRuleFlowNodeTriggered(bpelReceiveInstance, (InternalWorkingMemory) getWorkingMemory());
-    }
-    
-    private BPELReceive findBPELReceive(String partnerLink, String portType, String operation) {
-        return findBPELReceive(partnerLink, portType, operation, getBPELProcess().getActivity());
-    }
-    
-    private BPELReceive findBPELReceive(String partnerLink, String portType, String operation, Node node) {
-        if (node instanceof BPELReceive) {
-            BPELReceive receive = (BPELReceive) node;
-            if (receive.getPartnerLink().equals(partnerLink)
-                    && receive.getPortType().equals(portType)
-                    && receive.getOperation().equals(operation)) {
-                return receive;
-            }
-            return null;
-        }
-        if (node instanceof NodeContainer) {
-            Node[] nodes = ((NodeContainer) node).getNodes();
-            for (int i = 0; i < nodes.length; i++) {
-                BPELReceive result = findBPELReceive(partnerLink, portType, operation, nodes[i]);
-                if (result != null) {
-                    return result;
-                }
-            }
-        }
-        return null;
-    }
+//    public void acceptMessage(String partnerLink, String portType, String operation, String message) {
+//        if (getState() == STATE_PENDING) {
+//            setState(STATE_ACTIVE);
+//        }
+//        BPELReceive receive = findBPELReceive(partnerLink, portType, operation);
+//        if (receive == null) {
+//            throw new IllegalArgumentException(
+//                "Could not find BPELReceive for " + partnerLink + ", " + portType + ", " + operation);
+//        }
+//        BPELActivity activity = receive;
+//        List<BPELActivity> parents = new ArrayList<BPELActivity>(); 
+//        while (!activity.getNodeContainer().equals(getBPELProcess())) {
+//            activity = (BPELActivity) activity.getNodeContainer();
+//            parents.add(0, activity);
+//        }
+//        NodeInstanceContainer nodeInstanceContainer = this;
+//        for (Iterator<BPELActivity> iterator = parents.iterator(); iterator.hasNext(); ) {
+//            BPELActivity parent = iterator.next();
+//            NodeInstance nodeInstance = nodeInstanceContainer.getFirstNodeInstance(parent.getId());
+//            if (nodeInstance != null) {
+//                nodeInstanceContainer = (NodeInstanceContainer) nodeInstance;
+//            } else if (receive.isCreateInstance()) {
+//                nodeInstanceContainer = (NodeInstanceContainer) nodeInstanceContainer.getNodeInstance(parent);
+//            } else {
+//                // TODO: store message in cache of accepted messages
+//                return;
+//            }
+//        }
+//        BPELReceiveInstance bpelReceiveInstance = (BPELReceiveInstance) nodeInstanceContainer.getNodeInstance(receive);
+//        ((EventSupport) getWorkingMemory()).getRuleFlowEventSupport().fireBeforeRuleFlowNodeTriggered(bpelReceiveInstance, (InternalWorkingMemory) getWorkingMemory());
+//        bpelReceiveInstance.triggerCompleted(message);
+//        ((EventSupport) getWorkingMemory()).getRuleFlowEventSupport().fireAfterRuleFlowNodeTriggered(bpelReceiveInstance, (InternalWorkingMemory) getWorkingMemory());
+//    }
+//    
+//    private BPELReceive findBPELReceive(String partnerLink, String portType, String operation) {
+//        return findBPELReceive(partnerLink, portType, operation, getBPELProcess().getActivity());
+//    }
+//    
+//    private BPELReceive findBPELReceive(String partnerLink, String portType, String operation, Node node) {
+//        if (node instanceof BPELReceive) {
+//            BPELReceive receive = (BPELReceive) node;
+//            if (receive.getPartnerLink().equals(partnerLink)
+//                    && receive.getPortType().equals(portType)
+//                    && receive.getOperation().equals(operation)) {
+//                return receive;
+//            }
+//            return null;
+//        }
+//        if (node instanceof NodeContainer) {
+//            Node[] nodes = ((NodeContainer) node).getNodes();
+//            for (int i = 0; i < nodes.length; i++) {
+//                BPELReceive result = findBPELReceive(partnerLink, portType, operation, nodes[i]);
+//                if (result != null) {
+//                    return result;
+//                }
+//            }
+//        }
+//        return null;
+//    }
 
     @Override
     protected void internalStart() {

Modified: labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/instance/BPELReceiveInstance.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/instance/BPELReceiveInstance.java	2008-07-31 10:26:13 UTC (rev 21309)
+++ labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/instance/BPELReceiveInstance.java	2008-07-31 11:16:10 UTC (rev 21310)
@@ -3,30 +3,37 @@
 import org.drools.bpel.core.BPELReceive;
 import org.drools.process.core.context.variable.VariableScope;
 import org.drools.process.instance.context.variable.VariableScopeInstance;
-import org.drools.workflow.core.Connection;
 import org.drools.workflow.core.Node;
 import org.drools.workflow.instance.NodeInstance;
 import org.drools.workflow.instance.impl.NodeInstanceImpl;
+import org.drools.workflow.instance.node.EventNodeInstanceInterface;
 
 /**
  * 
  * @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
  */
-public class BPELReceiveInstance extends NodeInstanceImpl {
+public class BPELReceiveInstance extends NodeInstanceImpl implements EventNodeInstanceInterface {
 
     private static final long serialVersionUID = 400L;
 
+    private boolean triggered = false;
+    private boolean event = false;
+    private String message;
+    
     public BPELReceive getBPELReceive() {
         return (BPELReceive) getNode();
     }
     
     public void internalTrigger(NodeInstance from, String type) {
         if (BPELLinkManager.checkActivityEnabled(this)) {
-            // TODO look in cache of already receive messages
+            triggered = true;
+            if (triggered && event) {
+            	triggerCompleted();
+            }
         }
     }
     
-    public void triggerCompleted(String message) {
+    public void triggerCompleted() {
         String variable = getBPELReceive().getVariable();
         if (variable != null) {
             VariableScopeInstance variableScope = (VariableScopeInstance) resolveContextInstance(VariableScope.VARIABLE_SCOPE, variable);
@@ -36,9 +43,16 @@
             }
             variableScope.setVariable(variable, message);
         }
-        Connection to = getBPELReceive().getTo();
         triggerCompleted(Node.CONNECTION_DEFAULT_TYPE, true);
         BPELLinkManager.activateTargetLinks(this);
     }
 
+	public void triggerEvent(String type, Object event) {
+		this.event = true;
+		message = ((String[]) event)[3];
+		if (this.event && triggered) {
+			triggerCompleted();
+		}
+	}
+
 }

Added: labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/instance/BPELRepeatUntilInstance.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/instance/BPELRepeatUntilInstance.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/instance/BPELRepeatUntilInstance.java	2008-07-31 11:16:10 UTC (rev 21310)
@@ -0,0 +1,24 @@
+package org.drools.bpel.instance;
+
+import org.drools.workflow.instance.NodeInstance;
+import org.drools.workflow.instance.node.CompositeNodeInstance;
+
+/**
+ * 
+ * @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
+ */
+public class BPELRepeatUntilInstance extends CompositeNodeInstance {
+
+    private static final long serialVersionUID = 400L;
+    
+    public void internalTrigger(NodeInstance from, String type) {
+        if (BPELLinkManager.checkActivityEnabled(this)) {
+            super.internalTrigger(from, type);
+        }
+    }
+    
+    public void triggerCompleted(String outType) {
+        super.triggerCompleted(outType);
+        BPELLinkManager.activateTargetLinks(this);
+    }
+}

Modified: labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/instance/BPELSequenceInstance.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/instance/BPELSequenceInstance.java	2008-07-31 10:26:13 UTC (rev 21309)
+++ labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/instance/BPELSequenceInstance.java	2008-07-31 11:16:10 UTC (rev 21310)
@@ -1,5 +1,7 @@
 package org.drools.bpel.instance;
 
+import org.drools.workflow.core.Node;
+import org.drools.workflow.core.node.CompositeNode;
 import org.drools.workflow.instance.NodeInstance;
 import org.drools.workflow.instance.node.CompositeNodeInstance;
 
@@ -17,7 +19,7 @@
         }
     }
     
-    public void triggerCompleted(String outType) {
+	public void triggerCompleted(String outType) {
         super.triggerCompleted(outType);
         BPELLinkManager.activateTargetLinks(this);
     }

Deleted: labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/instance/BPELSwitchInstance.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/instance/BPELSwitchInstance.java	2008-07-31 10:26:13 UTC (rev 21309)
+++ labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/instance/BPELSwitchInstance.java	2008-07-31 11:16:10 UTC (rev 21310)
@@ -1,24 +0,0 @@
-package org.drools.bpel.instance;
-
-import org.drools.workflow.instance.NodeInstance;
-import org.drools.workflow.instance.node.CompositeNodeInstance;
-
-/**
- * 
- * @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
- */
-public class BPELSwitchInstance extends CompositeNodeInstance {
-
-    private static final long serialVersionUID = 400L;
-    
-    public void internalTrigger(NodeInstance from, String type) {
-        if (BPELLinkManager.checkActivityEnabled(this)) {
-            super.internalTrigger(from, type);
-        }
-    }
-    
-    public void triggerCompleted(String outType) {
-        super.triggerCompleted(outType);
-        BPELLinkManager.activateTargetLinks(this);
-    }
-}

Added: labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/xpath/XMLDataType.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/xpath/XMLDataType.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/xpath/XMLDataType.java	2008-07-31 11:16:10 UTC (rev 21310)
@@ -0,0 +1,33 @@
+package org.drools.bpel.xpath;
+
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+
+import org.drools.process.core.datatype.DataType;
+
+public class XMLDataType implements DataType {
+
+	private String typeDefinition;
+	
+	public boolean verifyDataType(Object value) {
+		return value instanceof String;
+	}
+
+	public String getTypeDefinition() {
+		return typeDefinition;
+	}
+
+	public void setTypeDefinition(String typeDefinition) {
+		this.typeDefinition = typeDefinition;
+	}
+
+	public void readExternal(ObjectInput input) throws IOException, ClassNotFoundException {
+		typeDefinition = input.readUTF();
+	}
+
+	public void writeExternal(ObjectOutput output) throws IOException {
+		output.writeUTF(typeDefinition);
+	}
+
+}

Modified: labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/xpath/XPathReturnValueEvaluator.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/xpath/XPathReturnValueEvaluator.java	2008-07-31 10:26:13 UTC (rev 21309)
+++ labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/xpath/XPathReturnValueEvaluator.java	2008-07-31 11:16:10 UTC (rev 21310)
@@ -1,22 +1,108 @@
 package org.drools.bpel.xpath;
 
+import java.io.ByteArrayInputStream;
+import java.util.List;
+
+import javax.xml.namespace.QName;
+import javax.xml.parsers.DocumentBuilderFactory;
 import javax.xml.xpath.XPathConstants;
 import javax.xml.xpath.XPathExpression;
+import javax.xml.xpath.XPathFactory;
+import javax.xml.xpath.XPathFunction;
+import javax.xml.xpath.XPathFunctionException;
+import javax.xml.xpath.XPathFunctionResolver;
+import javax.xml.xpath.XPathVariableResolver;
 
+import net.sf.saxon.om.NamespaceConstant;
+import net.sf.saxon.xpath.XPathEvaluator;
+
+import org.apache.ode.bpel.elang.xpath20.compiler.Constants;
 import org.apache.ode.utils.DOMUtils;
+import org.apache.ode.utils.Namespaces;
 import org.drools.WorkingMemory;
+import org.drools.bpel.core.BPELProcess;
+import org.drools.spi.ProcessContext;
 import org.drools.spi.ReturnValueEvaluator;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
 
 public class XPathReturnValueEvaluator implements ReturnValueEvaluator {
 	
-	private XPathExpression expression;
+	private String expression;
 	
-	public void setExpression(XPathExpression expression) {
+	public void setExpression(String expression) {
 		this.expression = expression;
 	}
 
-	public Object evaluate(WorkingMemory workingMemory) throws Exception {
-		return expression.evaluate(DOMUtils.newDocument(), XPathConstants.BOOLEAN);
+	public Object evaluate(WorkingMemory workingMemory, final ProcessContext processContext) throws Exception {
+		return evaluate(workingMemory, processContext, XPathConstants.BOOLEAN);
 	}
+	
+	public Object evaluate(WorkingMemory workingMemory, final ProcessContext processContext, QName type) throws Exception {
+		XPathFactory xpf = XPathFactory.newInstance(NamespaceConstant.OBJECT_MODEL_SAXON);
+        xpf.setXPathFunctionResolver(new XPathFunctionResolver() {
+			public XPathFunction resolveFunction(QName functionName, int arity) {
+				if (functionName.getNamespaceURI() == null) {
+		            throw new IllegalArgumentException("Undeclared namespace for " + functionName);
+		        } else if (functionName.getNamespaceURI().equals(Namespaces.WSBPEL2_0_FINAL_EXEC)) {
+		            String localName = functionName.getLocalPart();
+		            if (Constants.EXT_FUNCTION_GETVARIABLEPROPRTY.equals(localName)) {
+		                return new GetVariableProperty(processContext);
+		            } else {
+		            	//TODO: DoXSLTransform, GetLinkStatus, GetVariableData
+		                throw new IllegalArgumentException(
+	                		"Unknown Bpel function " + functionName.getLocalPart());
+		            }
+		        } 
+				return null;
+			}
+        });
+        xpf.setXPathVariableResolver(new XPathVariableResolver() {
+        	public Object resolveVariable(QName name) {
+        		return processContext.getVariable(name.getLocalPart());
+			}
+        });
+        XPathEvaluator xpe = (XPathEvaluator) xpf.newXPath();
+        xpe.setNamespaceContext(((BPELProcess) processContext.getNodeInstance()
+    		.getProcessInstance().getProcess()).getNamespaceContext());
+        XPathExpression xpathExpression = xpe.compile(expression);
+		return xpathExpression.evaluate(DOMUtils.newDocument(), type);
+	}
+	
+	public class GetVariableProperty implements XPathFunction {
+		
+		private ProcessContext processContext;
+		   
+		public GetVariableProperty(ProcessContext processContext) {
+			this.processContext = processContext;
+		}
+		
+		public Object evaluate(List params) throws XPathFunctionException {
+			if (params.size() != 2) {
+				throw new IllegalArgumentException(
+					"Invalid number of arguments for the getVariable function");
+			}
+			String variableName = (String) params.get(0);
+			String propertyName = (String) params.get(1);
+			String variableValue = (String) processContext.getVariable(variableName);
+			if (variableValue == null) {
+				throw new IllegalArgumentException(
+					"Could not find variable " + variableName);
+			}
+			try {
+				DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+				Document document = factory.newDocumentBuilder().parse(
+					new ByteArrayInputStream(variableValue.getBytes()));
+		    	Element element = DOMUtils.findChildByName(
+	    			(Element) document.getDocumentElement(), new QName(propertyName));
+				return DOMUtils.domToString(element.getFirstChild());
+			} catch (Throwable t) {
+				throw new IllegalArgumentException(
+					"Could not parse variable value " + variableValue, t);
+			}
+		}
+	}
 
+
+
 }

Modified: labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/xpath/XPathReturnValueEvaluatorBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/xpath/XPathReturnValueEvaluatorBuilder.java	2008-07-31 10:26:13 UTC (rev 21309)
+++ labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/xpath/XPathReturnValueEvaluatorBuilder.java	2008-07-31 11:16:10 UTC (rev 21310)
@@ -1,16 +1,25 @@
 package org.drools.bpel.xpath;
 
 import java.io.ByteArrayInputStream;
+import java.util.List;
 
+import javax.xml.namespace.QName;
 import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.xpath.XPathExpression;
 import javax.xml.xpath.XPathFactory;
+import javax.xml.xpath.XPathFunction;
+import javax.xml.xpath.XPathFunctionException;
+import javax.xml.xpath.XPathFunctionResolver;
+import javax.xml.xpath.XPathVariableResolver;
 
 import net.sf.saxon.om.NamespaceConstant;
 import net.sf.saxon.xpath.XPathEvaluator;
 
+import org.apache.ode.bpel.elang.xpath20.compiler.Constants;
+import org.apache.ode.utils.Namespaces;
+import org.drools.bpel.core.BPELProcess;
 import org.drools.compiler.ReturnValueDescr;
 import org.drools.rule.builder.PackageBuildContext;
+import org.drools.rule.builder.ProcessBuildContext;
 import org.drools.rule.builder.ReturnValueEvaluatorBuilder;
 import org.drools.workflow.instance.impl.ReturnValueConstraintEvaluator;
 import org.w3c.dom.Document;
@@ -34,34 +43,48 @@
 	        }
 	        String xpathString = node.getNodeValue();
 			XPathFactory xpf = XPathFactory.newInstance(NamespaceConstant.OBJECT_MODEL_SAXON);
-//	        xpf.setXPathFunctionResolver(new XPathFunctionResolver() {
-//				public XPathFunction resolveFunction(QName arg0, int arg1) {
-//					return null;
-//				}
-//	        });
-//	        xpf.setXPathVariableResolver(new XPathVariableResolver() {
-//	        	public Object resolveVariable(QName arg0) {
-//					return null;
-//				}
-//	        });
+	        xpf.setXPathFunctionResolver(new XPathFunctionResolver() {
+				public XPathFunction resolveFunction(QName functionName, int arity) {
+					if (functionName.getNamespaceURI() == null) {
+			            throw new IllegalArgumentException("Undeclared namespace for " + functionName);
+			        } else if (functionName.getNamespaceURI().equals(Namespaces.WSBPEL2_0_FINAL_EXEC)) {
+			            String localName = functionName.getLocalPart();
+			            if (Constants.EXT_FUNCTION_GETVARIABLEPROPRTY.equals(localName)) {
+			                return new GetVariableProperty();
+			            } else {
+			            	//TODO: DoXSLTransform, GetLinkStatus, GetVariableData
+			                throw new IllegalArgumentException(
+		                		"Unknown Bpel function " + functionName.getLocalPart());
+			            }
+			        } 
+					return null;
+				}
+	        });
+	        xpf.setXPathVariableResolver(new XPathVariableResolver() {
+	        	public Object resolveVariable(QName arg0) {
+					return "";
+				}
+	        });
 	        XPathEvaluator xpe = (XPathEvaluator) xpf.newXPath();
-//	        xpe.setNamespaceContext(new NamespaceContext() {
-//				public String getNamespaceURI(String arg0) {
-//					return null;
-//				}
-//				public String getPrefix(String arg0) {
-//					return null;
-//				}
-//				public Iterator getPrefixes(String arg0) {
-//					return null;
-//				}
-//	        });
-	        XPathExpression expression = xpe.compile(xpathString);
-	        evaluator.setExpression(expression);
+	        xpe.setNamespaceContext(
+        		((BPELProcess) ((ProcessBuildContext) context).getProcess()).getNamespaceContext());
+	        xpe.compile(xpathString);
+	        evaluator.setExpression(xpathString);
 			returnValueConstraintEvaluator.setEvaluator(evaluator);
 		} catch (Throwable t) {
 			throw new IllegalArgumentException("Could not compile XPath expression " + returnValueDescr.getText(), t);
 		}
 	}
+	
+	public class GetVariableProperty implements XPathFunction {
+		   
+		public Object evaluate(List params) throws XPathFunctionException {
+			if (params.size() != 2) {
+				throw new IllegalArgumentException(
+					"Invalid number of arguments for the getVariable function");
+			}
+			return "";
+		}
+	}
 
 }

Modified: labs/jbossrules/trunk/drools-process/drools-bpel/src/main/resources/META-INF/bpelProcessNodeInstanceFactory.conf
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpel/src/main/resources/META-INF/bpelProcessNodeInstanceFactory.conf	2008-07-31 10:26:13 UTC (rev 21309)
+++ labs/jbossrules/trunk/drools-process/drools-bpel/src/main/resources/META-INF/bpelProcessNodeInstanceFactory.conf	2008-07-31 11:16:10 UTC (rev 21310)
@@ -8,10 +8,12 @@
 import org.drools.bpel.core.BPELSequence;
 import org.drools.bpel.core.BPELEmpty;
 import org.drools.bpel.core.BPELPick;
-import org.drools.bpel.core.BPELSwitch;
+import org.drools.bpel.core.BPELIf;
 import org.drools.bpel.core.BPELThrow;
 import org.drools.bpel.core.BPELWait;
 import org.drools.bpel.core.BPELWhile;
+import org.drools.bpel.core.BPELRepeatUntil;
+import org.drools.bpel.core.BPELExit;
 import org.drools.bpel.instance.BPELAssignInstance;
 import org.drools.bpel.instance.BPELFlowInstance;
 import org.drools.bpel.instance.BPELInvokeInstance;
@@ -21,24 +23,28 @@
 import org.drools.bpel.instance.BPELSequenceInstance;
 import org.drools.bpel.instance.BPELEmptyInstance;
 import org.drools.bpel.instance.BPELPickInstance;
-import org.drools.bpel.instance.BPELSwitchInstance;
+import org.drools.bpel.instance.BPELIfInstance;
 import org.drools.bpel.instance.BPELThrowInstance;
 import org.drools.bpel.instance.BPELWaitInstance;
 import org.drools.bpel.instance.BPELWhileInstance;
-import org.drools.workflow.instance.impl.factory.CreateNewNodeFactory;
+import org.drools.bpel.instance.BPELRepeatUntilInstance;
+import org.drools.bpel.instance.BPELExitInstance;
+import org.drools.workflow.instance.impl.factory.ReuseNodeFactory;
 
 [
-    BPELAssign   : new CreateNewNodeFactory( BPELAssignInstance ),
-    BPELFlow     : new CreateNewNodeFactory( BPELFlowInstance ),
-    BPELInvoke   : new CreateNewNodeFactory( BPELInvokeInstance ),
-    BPELReceive  : new CreateNewNodeFactory( BPELReceiveInstance ),
-    BPELReply    : new CreateNewNodeFactory( BPELReplyInstance ),
-    BPELScope    : new CreateNewNodeFactory( BPELScopeInstance ),
-    BPELSequence : new CreateNewNodeFactory( BPELSequenceInstance ),
-    BPELEmpty    : new CreateNewNodeFactory( BPELEmptyInstance ),
-    BPELPick     : new CreateNewNodeFactory( BPELPickInstance ),
-    BPELSwitch   : new CreateNewNodeFactory( BPELSwitchInstance ),
-    BPELThrow    : new CreateNewNodeFactory( BPELThrowInstance ),
-    BPELWait     : new CreateNewNodeFactory( BPELWaitInstance ),
-    BPELWhile    : new CreateNewNodeFactory( BPELWhileInstance ),
+    BPELAssign      : new ReuseNodeFactory( BPELAssignInstance ),
+    BPELFlow        : new ReuseNodeFactory( BPELFlowInstance ),
+    BPELInvoke      : new ReuseNodeFactory( BPELInvokeInstance ),
+    BPELReceive     : new ReuseNodeFactory( BPELReceiveInstance ),
+    BPELReply       : new ReuseNodeFactory( BPELReplyInstance ),
+    BPELScope       : new ReuseNodeFactory( BPELScopeInstance ),
+    BPELSequence    : new ReuseNodeFactory( BPELSequenceInstance ),
+    BPELEmpty       : new ReuseNodeFactory( BPELEmptyInstance ),
+    BPELPick        : new ReuseNodeFactory( BPELPickInstance ),
+    BPELIf          : new ReuseNodeFactory( BPELIfInstance ),
+    BPELThrow       : new ReuseNodeFactory( BPELThrowInstance ),
+    BPELWait        : new ReuseNodeFactory( BPELWaitInstance ),
+    BPELWhile       : new ReuseNodeFactory( BPELWhileInstance ),
+    BPELRepeatUntil : new ReuseNodeFactory( BPELRepeatUntilInstance ),
+    BPELExit        : new ReuseNodeFactory( BPELExitInstance ),
 ]

Modified: labs/jbossrules/trunk/drools-process/drools-bpel/src/test/java/org/drools/bpel/test/BPELCompilerTest.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpel/src/test/java/org/drools/bpel/test/BPELCompilerTest.java	2008-07-31 10:26:13 UTC (rev 21309)
+++ labs/jbossrules/trunk/drools-process/drools-bpel/src/test/java/org/drools/bpel/test/BPELCompilerTest.java	2008-07-31 11:16:10 UTC (rev 21310)
@@ -46,7 +46,8 @@
         	workingMemory.startProcess("http://drools.jboss.org/example/bpel/purchase");
         
         // start process
-        BPELTestUtil.webServiceInvocation(processInstance, "purchasing", "{http://manufacturing.org/wsdl/purchase}purchaseOrderPT", "sendPurchaseOrder", "PURCHASE ORDER");
+        BPELTestUtil.webServiceInvocation(processInstance, "purchasing", "{http://manufacturing.org/wsdl/purchase}purchaseOrderPT", "sendPurchaseOrder", 
+    		"<POMessage><customerInfo>Jack</customerInfo><purchaseOrder>PURCHASE_ORDER</purchaseOrder></POMessage>");
 
         // reply to web service invocations
         WorkItem workItem = BPELTestUtil.findWebServiceInvocation(workingMemory, "scheduling", "{http://manufacturing.org/wsdl/purchase}schedulingPT", "requestProductionScheduling");
@@ -56,19 +57,19 @@
         BPELTestUtil.replyWebServiceInvocation(workingMemory, workItem, null);
         
         workItem = BPELTestUtil.findWebServiceInvocation(workingMemory, "shipping", "{http://manufacturing.org/wsdl/purchase}shippingPT", "requestShipping");
-        BPELTestUtil.replyWebServiceInvocation(workingMemory, workItem, "SHIPPING");
+        BPELTestUtil.replyWebServiceInvocation(workingMemory, workItem, "<shippingInfoMessage><shippingInfo>SHIPPING_INFO</shippingInfo></shippingInfoMessage>");
         
         workItem = BPELTestUtil.findWebServiceInvocation(workingMemory, "invoicing", "{http://manufacturing.org/wsdl/purchase}computePricePT", "sendShippingPrice");
         BPELTestUtil.replyWebServiceInvocation(workingMemory, workItem, null);
         
         // invoke web service callbacks
-        BPELTestUtil.webServiceInvocation(processInstance, "shipping", "{http://manufacturing.org/wsdl/purchase}shippingCallbackPT", "sendSchedule", "SCHEDULE");
-        BPELTestUtil.webServiceInvocation(processInstance, "invoicing", "{http://manufacturing.org/wsdl/purchase}invoiceCallbackPT", "sendInvoice", "INVOICE");
+        BPELTestUtil.webServiceInvocation(processInstance, "shipping", "{http://manufacturing.org/wsdl/purchase}shippingCallbackPT", "sendSchedule", "<scheduleMessage><schedule>SCHEDULE</schedule></scheduleMessage>");
+        BPELTestUtil.webServiceInvocation(processInstance, "invoicing", "{http://manufacturing.org/wsdl/purchase}invoiceCallbackPT", "sendInvoice", "<InvMessage><IVC>INVOICE</IVC></InvMessage>");
 
         // reply to web service invocation
         workItem = BPELTestUtil.findWebServiceInvocation(workingMemory, "scheduling", "{http://manufacturing.org/wsdl/purchase}schedulingPT", "sendShippingSchedule");
         BPELTestUtil.replyWebServiceInvocation(workingMemory, workItem, null);
-        
+
         workItem = BPELTestUtil.findWebServiceInvocation(workingMemory, "purchasing", "{http://manufacturing.org/wsdl/purchase}purchaseOrderPT", "sendPurchaseOrder");
         BPELTestUtil.replyWebServiceInvocation(workingMemory, workItem, null);
         
@@ -82,7 +83,8 @@
         	workingMemory.startProcess("http://drools.jboss.org/example/bpel/purchase");
         
         // start process
-        BPELTestUtil.webServiceInvocation(processInstance, "purchasing", "{http://manufacturing.org/wsdl/purchase}purchaseOrderPT", "sendPurchaseOrder", "PURCHASE ORDER");
+        BPELTestUtil.webServiceInvocation(processInstance, "purchasing", "{http://manufacturing.org/wsdl/purchase}purchaseOrderPT", "sendPurchaseOrder", 
+    		"<POMessage><customerInfo>Jack</customerInfo><purchaseOrder>PURCHASE_ORDER</purchaseOrder></POMessage>");
 
         // reply to web service invocations
         WorkItem workItem = BPELTestUtil.findWebServiceInvocation(workingMemory, "scheduling", "{http://manufacturing.org/wsdl/purchase}schedulingPT", "requestProductionScheduling");

Modified: labs/jbossrules/trunk/drools-process/drools-bpel/src/test/java/org/drools/bpel/test/BPELCoreTest.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpel/src/test/java/org/drools/bpel/test/BPELCoreTest.java	2008-07-31 10:26:13 UTC (rev 21309)
+++ labs/jbossrules/trunk/drools-process/drools-bpel/src/test/java/org/drools/bpel/test/BPELCoreTest.java	2008-07-31 11:16:10 UTC (rev 21310)
@@ -4,9 +4,10 @@
 import java.util.List;
 import java.util.Properties;
 
+import junit.framework.TestCase;
+
 import org.drools.RuleBaseConfiguration;
 import org.drools.RuleBaseFactory;
-import org.drools.audit.WorkingMemoryFileLogger;
 import org.drools.bpel.core.BPELActivity;
 import org.drools.bpel.core.BPELAssign;
 import org.drools.bpel.core.BPELFaultHandler;
@@ -28,11 +29,12 @@
 import org.drools.process.core.context.variable.Variable;
 import org.drools.process.core.context.variable.VariableScope;
 import org.drools.process.core.datatype.impl.type.StringDataType;
+import org.drools.process.instance.ProcessInstance;
 import org.drools.process.instance.WorkItem;
 import org.drools.process.instance.WorkItemHandler;
 import org.drools.reteoo.ReteooWorkingMemory;
 
-public class BPELCoreTest {
+public class BPELCoreTest extends TestCase {
 
     public static BPELProcess getProcess() {
         BPELProcess process = new BPELProcess();
@@ -74,7 +76,7 @@
         // faultHandler
         List<BPELFaultHandler> faultHandlers = new ArrayList<BPELFaultHandler>();
         BPELFaultHandler faultHandler = new BPELFaultHandler();
-        faultHandler.setFaultName("cannotCompleteOrder");
+        faultHandler.setFaultName("lns:cannotCompleteOrder");
         faultHandler.setFaultVariable("POFault");
         BPELReply reply = new BPELReply();
         reply.setId(++nodeId);
@@ -97,9 +99,7 @@
         BPELReceive receive = new BPELReceive();
         receive.setId(++nodeId);
         receive.setName("Receive Purchase Order");
-        receive.setPartnerLink("purchasing");
-        receive.setPortType("lns:purchaseOrderPT");
-        receive.setOperation("sendPurchaseOrder");
+        receive.setOperation("purchasing", "lns:purchaseOrderPT", "sendPurchaseOrder");
         receive.setVariable("PO");
         receive.setCreateInstance(true);
         sequenceActivities.add(receive);
@@ -142,9 +142,7 @@
             BPELReceive receive1 = new BPELReceive();
             receive1.setId(++nodeId);
             receive1.setName("Arrange Logistics");
-            receive1.setPartnerLink("shipping");
-            receive1.setPortType("lns:shippingCallbackPT");
-            receive1.setOperation("sendSchedule");
+            receive1.setOperation("shipping", "lns:shippingCallbackPT", "sendSchedule");
             receive1.setVariable("shippingSchedule");
             receive1.setCreateInstance(false);
             receive1.setSourceLinks(new SourceLink[] { new SourceLink("ship-to-scheduling") });
@@ -184,9 +182,7 @@
             BPELReceive receive2 = new BPELReceive();
             receive2.setId(++nodeId);
             receive2.setName("Receive Invoice");
-            receive2.setPartnerLink("invoicing");
-            receive2.setPortType("lns:invoiceCallbackPT");
-            receive2.setOperation("sendInvoice");
+            receive2.setOperation("invoicing", "lns:invoiceCallbackPT", "sendInvoice");
             receive2.setVariable("Invoice");
             receive2.setCreateInstance(false);
             sequence2Activities.add(receive2);
@@ -250,7 +246,7 @@
     }
     
     // normal execution
-    public static void main(String[] args) {
+    public void testPurchaseOrderProcessNormalFlow() {
         BPELProcess process = getProcess();
         // execute
         Properties properties = new Properties(); 
@@ -263,7 +259,6 @@
         InternalWorkingMemory workingMemory = new ReteooWorkingMemory(1, ruleBase);
         WorkItemHandler handler = new WebServiceInvocationHandler();
         workingMemory.getWorkItemManager().registerWorkItemHandler("WebServiceInvocation", handler);
-        WorkingMemoryFileLogger logger = new WorkingMemoryFileLogger(workingMemory);
         BPELProcessInstance processInstance = (BPELProcessInstance) workingMemory.startProcess("1");
         
         // start process
@@ -291,11 +286,14 @@
         workItem = BPELTestUtil.findWebServiceInvocation(workingMemory, "scheduling", "lns:schedulingPT", "sendShippingSchedule");
         BPELTestUtil.replyWebServiceInvocation(workingMemory, workItem, null);
 
-        logger.writeToDisk();
+        workItem = BPELTestUtil.findWebServiceInvocation(workingMemory, "purchasing", "lns:purchaseOrderPT", "sendPurchaseOrder");
+        BPELTestUtil.replyWebServiceInvocation(workingMemory, workItem, null);
+        
+        assertEquals(ProcessInstance.STATE_COMPLETED, processInstance.getState());
     }
     
     // shipping returns fault
-    public static void main1(String[] args) {
+    public static void testPurchaseOrderProcessFault() {
         BPELProcess process = getProcess();
         // execute
         Properties properties = new Properties(); 
@@ -308,11 +306,11 @@
         InternalWorkingMemory workingMemory = new ReteooWorkingMemory(1, ruleBase);
         WorkItemHandler handler = new WebServiceInvocationHandler();
         workingMemory.getWorkItemManager().registerWorkItemHandler("WebServiceInvocation", handler);
-        WorkingMemoryFileLogger logger = new WorkingMemoryFileLogger(workingMemory);
         BPELProcessInstance processInstance = (BPELProcessInstance) workingMemory.startProcess("1");
         
         // start process
-        BPELTestUtil.webServiceInvocation(processInstance, "purchasing", "lns:purchaseOrderPT", "sendPurchaseOrder", "PURCHASE ORDER");
+        BPELTestUtil.webServiceInvocation(processInstance, "purchasing", "lns:purchaseOrderPT", "sendPurchaseOrder", 
+    		"<POMessage><customerInfo>Jack</customerInfo><purchaseOrder>PURCHASE_ORDER</purchaseOrder></POMessage>");
 
         // reply to web service invocations
         WorkItem workItem = BPELTestUtil.findWebServiceInvocation(workingMemory, "scheduling", "lns:schedulingPT", "requestProductionScheduling");
@@ -322,9 +320,9 @@
         BPELTestUtil.replyWebServiceInvocation(workingMemory, workItem, null);
         
         workItem = BPELTestUtil.findWebServiceInvocation(workingMemory, "shipping", "lns:shippingPT", "requestShipping");
-        BPELTestUtil.replyWebServiceInvocationFault(workingMemory, workItem, "cannotCompleteOrder", "SHIPPING FAULT");
+        BPELTestUtil.replyWebServiceInvocationFault(workingMemory, workItem, "lns:cannotCompleteOrder", "SHIPPING FAULT");
 
-        logger.writeToDisk();
+        assertEquals(ProcessInstance.STATE_ABORTED, processInstance.getState());
     }
 
     

Modified: labs/jbossrules/trunk/drools-process/drools-bpel/src/test/java/org/drools/bpel/test/BPELTestUtil.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpel/src/test/java/org/drools/bpel/test/BPELTestUtil.java	2008-07-31 10:26:13 UTC (rev 21309)
+++ labs/jbossrules/trunk/drools-process/drools-bpel/src/test/java/org/drools/bpel/test/BPELTestUtil.java	2008-07-31 11:16:10 UTC (rev 21310)
@@ -62,7 +62,7 @@
                 + portType + " "
                 + operation + ": "
                 + result);
-        processInstance.acceptMessage(partnerLink, portType, operation, result);
+        processInstance.signalEvent("message", new String[] { partnerLink, portType, operation, result } );
     }
     
     public static class WebServiceInvocationHandler implements WorkItemHandler {




More information about the jboss-svn-commits mailing list