[jboss-svn-commits] JBL Code SVN: r24152 - in labs/jbossrules/trunk: drools-compiler/src/main/java/org/drools/xml/processes and 31 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Sun Nov 30 14:02:47 EST 2008


Author: KrisVerlaenen
Date: 2008-11-30 14:02:46 -0500 (Sun, 30 Nov 2008)
New Revision: 24152

Added:
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELDebugTest.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/RuleFlowNodeContainerFactory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/ActionNodeFactory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/CompositeNodeFactory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/EndNodeFactory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/EventNodeFactory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/FaultNodeFactory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/ForEachNodeFactory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/HumanTaskNodeFactory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/JoinFactory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/MilestoneNodeFactory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/NodeFactory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/RuleSetNodeFactory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/SplitFactory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/StartNodeFactory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/SubProcessNodeFactory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/TimerNodeFactory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/WorkItemNodeFactory.java
   labs/jbossrules/trunk/drools-process/drools-bam/pom.xml
Modified:
   labs/jbossrules/trunk/drools-clips/.classpath
   labs/jbossrules/trunk/drools-clips/.project
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/JoinNodeHandler.java
   labs/jbossrules/trunk/drools-compiler/src/main/resources/META-INF/drools-processes-4.0.xsd
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/xml/processes/XMLPersistenceTest.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/MVELConsequence.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/RuleFlowProcessFactory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/validation/RuleFlowProcessValidator.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/DroolsAction.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/Join.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/impl/NodeInstanceImpl.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/JoinInstance.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/RuleBaseConfigurationTest.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/process/ProcessFactoryTest.java
   labs/jbossrules/trunk/drools-core/src/test/resources/META-INF/WorkItemHandlers2.conf
   labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse.feature/feature.xml
   labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse.task.feature/.project
   labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse.task.feature/feature.xml
   labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse.task/META-INF/MANIFEST.MF
   labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/debug/DroolsDebugEventHandlerView.java
   labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/JoinWrapper.java
   labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/MilestoneWrapper.java
   labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/RuleSetNodeWrapper.java
   labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/WorkItemEditPart.java
   labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/action/ActionCellEditor.java
   labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/action/ActionCompletionProcessor.java
   labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/action/ActionDialog.java
   labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/action/ActionsDialog.java
   labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/action/OnEntryActionsCellEditor.java
   labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/action/OnExitActionsCellEditor.java
   labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/util/DroolsClasspathContainer.java
   labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/wizard/project/NewDroolsProjectRuntimeWizardPage.java
   labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/resources/org/drools/eclipse/wizard/project/DecisionTableLauncherSample.java.template
   labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/resources/org/drools/eclipse/wizard/project/RuleFlowLauncherSample.java.template
   labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/resources/org/drools/eclipse/wizard/project/RuleLauncherSample.java.template
   labs/jbossrules/trunk/drools-eclipse/org.eclipse.webdav/META-INF/MANIFEST.MF
   labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools.feature/feature.xml
   labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/META-INF/MANIFEST.MF
   labs/jbossrules/trunk/drools-process/drools-bam/src/main/java/org/drools/process/audit/ProcessInstanceDbLog.java
   labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/test/java/org/drools/persistence/session/SingleSessionCommandServiceTest.java
   labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/process/workitem/wsht/WSHumanTaskHandler.java
Log:
JBRULES-1877: n-of-m join
 - added to core, compiler and IDE
JBRULES-1844: Fluent process API
 - added other nodes (Salaboy)
JBRULES-1878: Update IDE to new API
 - debugging of KnowledgeSession
 - updated project wizards

Modified: labs/jbossrules/trunk/drools-clips/.classpath
===================================================================
--- labs/jbossrules/trunk/drools-clips/.classpath	2008-11-30 18:31:58 UTC (rev 24151)
+++ labs/jbossrules/trunk/drools-clips/.classpath	2008-11-30 19:02:46 UTC (rev 24152)
@@ -5,15 +5,16 @@
   <classpathentry kind="src" path="src/test/resources" output="target/test-classes" including="**" excluding="**/*.java"/>
   <classpathentry kind="output" path="target/classes"/>
   <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-  <classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar"/>
-  <classpathentry kind="src" path="/drools-compiler"/>
-  <classpathentry kind="src" path="/drools-core"/>
-  <classpathentry kind="var" path="M2_REPO/org/mvel/mvel2/2.0.1-SNAPSHOT/mvel2-2.0.1-SNAPSHOT.jar"/>
-  <classpathentry kind="src" path="/drools-api"/>
-  <classpathentry kind="var" path="M2_REPO/org/antlr/antlr-runtime/3.0.1/antlr-runtime-3.0.1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/antlr/antlr-runtime/3.1.1/antlr-runtime-3.1.1.jar"/>
   <classpathentry kind="var" path="M2_REPO/org/eclipse/jdt/core/3.4.2.v_883_R34x/core-3.4.2.v_883_R34x.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/drools/drools-api/5.0.0.SNAPSHOT/drools-api-5.0.0.SNAPSHOT.jar" sourcepath="M2_REPO/org/drools/drools-api/5.0.0.SNAPSHOT/drools-api-5.0.0.SNAPSHOT-sources.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/drools/drools-compiler/5.0.0.SNAPSHOT/drools-compiler-5.0.0.SNAPSHOT.jar" sourcepath="M2_REPO/org/drools/drools-compiler/5.0.0.SNAPSHOT/drools-compiler-5.0.0.SNAPSHOT-sources.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/drools/drools-core/5.0.0.SNAPSHOT/drools-core-5.0.0.SNAPSHOT.jar" sourcepath="M2_REPO/org/drools/drools-core/5.0.0.SNAPSHOT/drools-core-5.0.0.SNAPSHOT-sources.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/hamcrest/hamcrest-core/1.1/hamcrest-core-1.1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/hamcrest/hamcrest-library/1.1/hamcrest-library-1.1.jar"/>
   <classpathentry kind="var" path="M2_REPO/janino/janino/2.5.15/janino-2.5.15.jar"/>
   <classpathentry kind="var" path="M2_REPO/org/jmock/jmock/2.5.0.1/jmock-2.5.0.1.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/hamcrest/hamcrest-core/1.1/hamcrest-core-1.1.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/hamcrest/hamcrest-library/1.1/hamcrest-library-1.1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/joda-time/joda-time/1.5.2/joda-time-1.5.2.jar"/>
+  <classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/mvel/mvel2/2.0.4-SNAPSHOT/mvel2-2.0.4-SNAPSHOT.jar"/>
 </classpath>
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-clips/.project
===================================================================
--- labs/jbossrules/trunk/drools-clips/.project	2008-11-30 18:31:58 UTC (rev 24151)
+++ labs/jbossrules/trunk/drools-clips/.project	2008-11-30 19:02:46 UTC (rev 24152)
@@ -1,11 +1,7 @@
 <projectDescription>
   <name>drools-clips</name>
   <comment>A rule production system</comment>
-  <projects>
-    <project>drools-compiler</project>
-    <project>drools-core</project>
-    <project>drools-api</project>
-  </projects>
+  <projects/>
   <buildSpec>
     <buildCommand>
       <name>org.eclipse.jdt.core.javabuilder</name>

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/JoinNodeHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/JoinNodeHandler.java	2008-11-30 18:31:58 UTC (rev 24151)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/JoinNodeHandler.java	2008-11-30 19:02:46 UTC (rev 24152)
@@ -21,6 +21,10 @@
         if (type != null && type.length() != 0 ) {
             joinNode.setType(new Integer(type));
         }
+        String n = element.getAttribute("n");
+        if (n != null && n.length() != 0 ) {
+            joinNode.setN(n);
+        }
     }
 
     public Class generateNodeFor() {
@@ -34,6 +38,12 @@
         if (type != 0) {
             xmlDump.append("type=\"" + type + "\" ");
         }
+        if (type == Join.TYPE_N_OF_M) {
+        	String n = joinNode.getN();
+	        if (n != null && n.length() != 0) {
+	            xmlDump.append("n=\"" + n + "\" ");
+	        }
+        }
         endNode(xmlDump);
 	}
 

Modified: labs/jbossrules/trunk/drools-compiler/src/main/resources/META-INF/drools-processes-4.0.xsd
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/resources/META-INF/drools-processes-4.0.xsd	2008-11-30 18:31:58 UTC (rev 24151)
+++ labs/jbossrules/trunk/drools-compiler/src/main/resources/META-INF/drools-processes-4.0.xsd	2008-11-30 19:02:46 UTC (rev 24152)
@@ -283,6 +283,7 @@
 			<xs:attribute name="width" type="xs:string"/>
 			<xs:attribute name="height" type="xs:string"/>
 			<xs:attribute name="type" type="xs:string"/>
+			<xs:attribute name="n" type="xs:string"/>
 		</xs:complexType>
 	</xs:element>
 	<xs:element name="milestone">

Added: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELDebugTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELDebugTest.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELDebugTest.java	2008-11-30 19:02:46 UTC (rev 24152)
@@ -0,0 +1,32 @@
+package org.drools.rule.builder.dialect.mvel;
+
+import junit.framework.TestCase;
+
+import org.drools.base.mvel.MVELConsequence;
+import org.drools.compiler.DrlParser;
+import org.drools.compiler.PackageBuilder;
+import org.drools.lang.descr.PackageDescr;
+import org.drools.lang.descr.RuleDescr;
+import org.drools.rule.Package;
+import org.mvel2.compiler.CompiledExpression;
+
+public class MVELDebugTest extends TestCase {
+	
+	public void testDebug() throws Exception {
+		String rule = "package com.sample; dialect \"mvel\" rule myRule when then System.out.println( \"test\" ); end";
+		PackageBuilder builder = new PackageBuilder();
+		DrlParser parser = new DrlParser();
+		PackageDescr packageDescr = parser.parse(rule);
+		RuleDescr ruleDescr = packageDescr.getRules().get(0);
+		builder = new PackageBuilder( );
+		builder.addPackage(packageDescr);
+		Package pkg = builder.getPackage();
+		MVELConsequence consequence = (MVELConsequence) pkg.getRule("myRule").getConsequence();
+		String sourceName = ((CompiledExpression) consequence.getCompExpr()).getSourceName();
+		System.out.println(sourceName);
+		String ruleName = ruleDescr.getNamespace() + "." + ruleDescr.getClassName();
+		System.out.println(ruleName);
+		assertEquals(sourceName, ruleName);
+	}
+
+}

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/xml/processes/XMLPersistenceTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/xml/processes/XMLPersistenceTest.java	2008-11-30 18:31:58 UTC (rev 24151)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/xml/processes/XMLPersistenceTest.java	2008-11-30 19:02:46 UTC (rev 24152)
@@ -286,7 +286,8 @@
         join.setMetaData("y", 2);
         join.setMetaData("width", 3);
         join.setMetaData("height", 4);
-        join.setType(Join.TYPE_XOR);
+        join.setType(Join.TYPE_N_OF_M);
+        join.setN("#{var1}");
         process.addNode(join);
         new ConnectionImpl(actionNode, Node.CONNECTION_DEFAULT_TYPE, join, Node.CONNECTION_DEFAULT_TYPE);
         new ConnectionImpl(ruleSetNode, Node.CONNECTION_DEFAULT_TYPE, join, Node.CONNECTION_DEFAULT_TYPE);

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/MVELConsequence.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/MVELConsequence.java	2008-11-30 18:31:58 UTC (rev 24151)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/MVELConsequence.java	2008-11-30 19:02:46 UTC (rev 24152)
@@ -81,6 +81,7 @@
 
 		if (MVELDebugHandler.isDebugMode()) {
 			if (MVELDebugHandler.verbose) {
+				System.out.println("Executing expression " + compexpr.getSourceName());
 				System.out.println(DebugTools.decompile(compexpr));
 			}
 			MVEL.executeDebugger(compexpr, null, factory);

Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/RuleFlowNodeContainerFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/RuleFlowNodeContainerFactory.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/RuleFlowNodeContainerFactory.java	2008-11-30 19:02:46 UTC (rev 24152)
@@ -0,0 +1,121 @@
+/*
+ * Copyright 2008 JBoss Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.drools.ruleflow.core;
+
+import org.drools.definition.process.Node;
+import org.drools.ruleflow.core.factory.ActionNodeFactory;
+import org.drools.ruleflow.core.factory.CompositeNodeFactory;
+import org.drools.ruleflow.core.factory.EndNodeFactory;
+import org.drools.ruleflow.core.factory.EventNodeFactory;
+import org.drools.ruleflow.core.factory.FaultNodeFactory;
+import org.drools.ruleflow.core.factory.ForEachNodeFactory;
+import org.drools.ruleflow.core.factory.HumanTaskNodeFactory;
+import org.drools.ruleflow.core.factory.JoinFactory;
+import org.drools.ruleflow.core.factory.MilestoneNodeFactory;
+import org.drools.ruleflow.core.factory.RuleSetNodeFactory;
+import org.drools.ruleflow.core.factory.SplitFactory;
+import org.drools.ruleflow.core.factory.StartNodeFactory;
+import org.drools.ruleflow.core.factory.SubProcessNodeFactory;
+import org.drools.ruleflow.core.factory.TimerNodeFactory;
+import org.drools.ruleflow.core.factory.WorkItemNodeFactory;
+import org.drools.workflow.core.NodeContainer;
+import org.drools.workflow.core.impl.ConnectionImpl;
+
+public abstract class RuleFlowNodeContainerFactory {
+
+    private NodeContainer nodeContainer;
+
+    protected void setNodeContainer(NodeContainer nodeContainer) {
+    	this.nodeContainer = nodeContainer;
+    }
+    
+    protected NodeContainer getNodeContainer() {
+    	return nodeContainer;
+    }
+
+    public StartNodeFactory startNode(long id) {
+        return new StartNodeFactory(this, nodeContainer, id);
+    }
+
+    public EndNodeFactory endNode(long id) {
+        return new EndNodeFactory(this, nodeContainer, id);
+    }
+
+    public ActionNodeFactory actionNode(long id) {
+        return new ActionNodeFactory(this, nodeContainer, id);
+    }
+
+    public MilestoneNodeFactory milestoneNode(long id) {
+        return new MilestoneNodeFactory(this, nodeContainer, id);
+    }
+
+    public TimerNodeFactory timerNode(long id) {
+        return new TimerNodeFactory(this, nodeContainer, id);
+    }
+
+    public HumanTaskNodeFactory humanTaskNode(long id) {
+        return new HumanTaskNodeFactory(this, nodeContainer, id);
+    }
+
+    public SubProcessNodeFactory subProcessNode(long id) {
+        return new SubProcessNodeFactory(this, nodeContainer, id);
+    }
+
+    public SplitFactory splitNode(long id) {
+        return new SplitFactory(this, nodeContainer, id);
+    }
+
+    public JoinFactory joinNode(long id) {
+        return new JoinFactory(this, nodeContainer, id);
+    }
+
+    public RuleSetNodeFactory ruleSetNode(long id) {
+        return new RuleSetNodeFactory(this, nodeContainer, id);
+    }
+
+    public FaultNodeFactory faultNode(long id) {
+        return new FaultNodeFactory(this, nodeContainer, id);
+    }
+
+    public EventNodeFactory eventNode(long id) {
+        return new EventNodeFactory(this, nodeContainer, id);
+    }
+
+    public CompositeNodeFactory compositeNode(long id) {
+        return new CompositeNodeFactory(this, nodeContainer, id);
+    }
+
+    public ForEachNodeFactory forEachNode(long id) {
+        return new ForEachNodeFactory(this, nodeContainer, id);
+    }
+    
+    public WorkItemNodeFactory workItemNode(long id) {
+    	return new WorkItemNodeFactory(this, nodeContainer, id);
+    }
+
+    public RuleFlowNodeContainerFactory connection(long fromId, long toId) {
+        Node from = nodeContainer.getNode(fromId);
+        Node to = nodeContainer.getNode(toId);
+        new ConnectionImpl(
+            from, org.drools.workflow.core.Node.CONNECTION_DEFAULT_TYPE,
+            to, org.drools.workflow.core.Node.CONNECTION_DEFAULT_TYPE);
+        return this;
+    }
+    
+    public abstract RuleFlowNodeContainerFactory done();
+
+}
+

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/RuleFlowProcessFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/RuleFlowProcessFactory.java	2008-11-30 18:31:58 UTC (rev 24151)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/RuleFlowProcessFactory.java	2008-11-30 19:02:46 UTC (rev 24152)
@@ -1,165 +1,137 @@
+/*
+ * Copyright 2008 JBoss Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
 package org.drools.ruleflow.core;
 
-import org.drools.definition.process.Node;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.drools.process.core.context.exception.ActionExceptionHandler;
+import org.drools.process.core.context.exception.ExceptionHandler;
+import org.drools.process.core.context.swimlane.Swimlane;
+import org.drools.process.core.context.variable.Variable;
+import org.drools.process.core.datatype.DataType;
 import org.drools.process.core.validation.ProcessValidationError;
 import org.drools.ruleflow.core.validation.RuleFlowProcessValidator;
-import org.drools.workflow.core.NodeContainer;
-import org.drools.workflow.core.impl.ConnectionImpl;
 import org.drools.workflow.core.impl.DroolsConsequenceAction;
-import org.drools.workflow.core.node.ActionNode;
-import org.drools.workflow.core.node.EndNode;
-import org.drools.workflow.core.node.StartNode;
 
-public class RuleFlowProcessFactory {
-	
-	private RuleFlowProcess process;
-	
-	private RuleFlowProcessFactory(String id) {
-		process = new RuleFlowProcess();
-		process.setId(id);
-	}
-	
-	public static RuleFlowProcessFactory createProcess(String id) {
-		return new RuleFlowProcessFactory(id);
-	}
-	
-	public RuleFlowProcessFactory name(String name) {
-		process.setName(name);
-		return this;
-	}
-	
-	public RuleFlowProcessFactory packageName(String packageName) {
-		process.setPackageName(packageName);
-		return this;
-	}
-	
-	public StartNodeFactory startNode(long id) {
-		return new StartNodeFactory(process, id);
-	}
-	
-	public EndNodeFactory endNode(long id) {
-		return new EndNodeFactory(process, id);
-	}
-	
-	public ActionNodeFactory actionNode(long id) {
-		return new ActionNodeFactory(process, id);
-	}
-	
-	public RuleFlowProcessFactory connection(long fromId, long toId) {
-		Node from = process.getNode(fromId);
-		Node to = process.getNode(toId);
-		new ConnectionImpl(
-			from, org.drools.workflow.core.Node.CONNECTION_DEFAULT_TYPE,
-			to, org.drools.workflow.core.Node.CONNECTION_DEFAULT_TYPE);
-		return this;
-	}
-	
-	public RuleFlowProcessFactory validate() {
-		ProcessValidationError[] errors = RuleFlowProcessValidator.getInstance().validateProcess(process);
-		for (ProcessValidationError error: errors) {
-			System.err.println(error);
-		}
-		if (errors.length > 0) {
-			throw new RuntimeException("Process could not be validated !");
-		}
-		return this;
-	}
-	
-	public RuleFlowProcess done() {
-		return process;
-	}
-	
-	public abstract class NodeFactory {
-		
-		private org.drools.workflow.core.Node node;
-		private NodeContainer nodeContainer;
-		
-		private NodeFactory(NodeContainer nodeContainer, long id) {
-			this.nodeContainer = nodeContainer;
-			this.node = createNode();
-			this.node.setId(id);
-		}
-		
-		protected abstract org.drools.workflow.core.Node createNode();
-		
-		public RuleFlowProcessFactory done() {
-			nodeContainer.addNode(node);
-			return RuleFlowProcessFactory.this;
-		}
-		
-		protected org.drools.workflow.core.Node getNode() {
-			return node;
-		}
-		
-	}
-	
-	public class StartNodeFactory extends NodeFactory {
-		
-		private StartNodeFactory(NodeContainer nodeContainer, long id) {
-			super(nodeContainer, id);
-		}
-		
-		protected org.drools.workflow.core.Node createNode() {
-			return new StartNode();
-		}
-		
-		public StartNodeFactory name(String name) {
-			getNode().setName(name);
-			return this;
-		}
-		
-	}
+public class RuleFlowProcessFactory extends RuleFlowNodeContainerFactory {
 
-	public class EndNodeFactory extends NodeFactory {
-		
-		private EndNodeFactory(NodeContainer nodeContainer, long id) {
-			super(nodeContainer, id);
-		}
-		
-		protected org.drools.workflow.core.Node createNode() {
-			return new EndNode();
-		}
-		
-		protected EndNode getEndNode() {
-			return (EndNode) getNode();
-		}
-		
-		public EndNodeFactory name(String name) {
-			getNode().setName(name);
-			return this;
-		}
-		
-		public EndNodeFactory setTerminate(boolean terminate) {
-			getEndNode().setTerminate(terminate);
-			return this;
-		}
-		
-	}
+    public static RuleFlowProcessFactory createProcess(String id) {
+        return new RuleFlowProcessFactory(id);
+    }
 
-	public class ActionNodeFactory extends NodeFactory {
-		
-		private ActionNodeFactory(NodeContainer nodeContainer, long id) {
-			super(nodeContainer, id);
-		}
-		
-		protected org.drools.workflow.core.Node createNode() {
-			return new ActionNode();
-		}
-		
-		protected ActionNode getActionNode() {
-			return (ActionNode) getNode();
-		}
-		
-		public ActionNodeFactory name(String name) {
-			getNode().setName(name);
-			return this;
-		}
-		
-		public ActionNodeFactory action(String dialect, String action) {
-			getActionNode().setAction(new DroolsConsequenceAction(dialect, action));
-			return this;
-		}
-		
-	}
+    protected RuleFlowProcessFactory(String id) {
+        RuleFlowProcess process = new RuleFlowProcess();
+        process.setId(id);
+        setNodeContainer(process);
+    }
+    
+    protected RuleFlowProcess getRuleFlowProcess() {
+    	return (RuleFlowProcess) getNodeContainer();
+    }
 
-}
\ No newline at end of file
+    public RuleFlowProcessFactory name(String name) {
+    	getRuleFlowProcess().setName(name);
+        return this;
+    }
+
+    public RuleFlowProcessFactory version(String version) {
+    	getRuleFlowProcess().setVersion(version);
+        return this;
+    }
+
+    public RuleFlowProcessFactory packageName(String packageName) {
+    	getRuleFlowProcess().setPackageName(packageName);
+        return this;
+    }
+
+    public RuleFlowProcessFactory imports(String... imports) {
+    	getRuleFlowProcess().setImports(Arrays.asList(imports));
+        return this;
+    }
+    
+    public RuleFlowProcessFactory functionImports(String... functionImports) {
+    	getRuleFlowProcess().setFunctionImports(Arrays.asList(functionImports));
+        return this;
+    }
+    
+    public RuleFlowProcessFactory globals(Map<String, String> globals) {
+    	getRuleFlowProcess().setGlobals(globals);
+        return this;
+    }
+    
+    public RuleFlowProcessFactory global(String name, String type) {
+    	Map<String, String> globals = getRuleFlowProcess().getGlobals();
+    	if (globals == null) {
+    		globals = new HashMap<String, String>();
+    		getRuleFlowProcess().setGlobals(globals);
+    	}
+    	globals.put(name, type);
+    	return this;
+    }
+
+    public RuleFlowProcessFactory variable(String name, DataType type) {
+    	return variable(name, type, null);
+    }
+    
+    public RuleFlowProcessFactory variable(String name, DataType type, Object value) {
+    	Variable variable = new Variable();
+    	variable.setName(name);
+    	variable.setType(type);
+    	variable.setValue(value);
+    	getRuleFlowProcess().getVariableScope().getVariables().add(variable);
+        return this;
+    }
+    
+    public RuleFlowProcessFactory swimlane(String name) {
+    	Swimlane swimlane = new Swimlane();
+    	swimlane.setName(name);
+    	getRuleFlowProcess().getSwimlaneContext().addSwimlane(swimlane);
+    	return this;
+    }
+    
+    public RuleFlowProcessFactory exceptionHandler(String exception, ExceptionHandler exceptionHandler) {
+    	getRuleFlowProcess().getExceptionScope().setExceptionHandler(exception, exceptionHandler);
+    	return this;
+    }
+    
+    public RuleFlowProcessFactory exceptionHandler(String exception, String dialect, String action) {
+    	ActionExceptionHandler exceptionHandler = new ActionExceptionHandler();
+    	exceptionHandler.setAction(new DroolsConsequenceAction(dialect, action));
+    	return exceptionHandler(exception, exceptionHandler);
+    }
+    
+    public RuleFlowProcessFactory validate() {
+        ProcessValidationError[] errors = RuleFlowProcessValidator.getInstance().validateProcess(getRuleFlowProcess());
+        for (ProcessValidationError error : errors) {
+            System.err.println(error);
+        }
+        if (errors.length > 0) {
+            throw new RuntimeException("Process could not be validated !");
+        }
+        return this;
+    }
+    
+    public RuleFlowNodeContainerFactory done() {
+    	throw new IllegalArgumentException("Already on the top-level.");
+    }
+
+    public RuleFlowProcess getProcess() {
+        return getRuleFlowProcess();
+    }
+}
+

Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/ActionNodeFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/ActionNodeFactory.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/ActionNodeFactory.java	2008-11-30 19:02:46 UTC (rev 24152)
@@ -0,0 +1,51 @@
+/*
+ * Copyright 2008 JBoss Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.drools.ruleflow.core.factory;
+
+import org.drools.ruleflow.core.RuleFlowNodeContainerFactory;
+import org.drools.workflow.core.Node;
+import org.drools.workflow.core.NodeContainer;
+import org.drools.workflow.core.impl.DroolsConsequenceAction;
+import org.drools.workflow.core.node.ActionNode;
+
+/**
+ *
+ * @author salaboy
+ */
+public class ActionNodeFactory extends NodeFactory {
+
+    public ActionNodeFactory(RuleFlowNodeContainerFactory nodeContainerFactory, NodeContainer nodeContainer, long id) {
+        super(nodeContainerFactory, nodeContainer, id);
+    }
+
+    protected Node createNode() {
+        return new ActionNode();
+    }
+
+    protected ActionNode getActionNode() {
+        return (ActionNode) getNode();
+    }
+
+    public ActionNodeFactory name(String name) {
+        getNode().setName(name);
+        return this;
+    }
+
+    public ActionNodeFactory action(String dialect, String action) {
+        getActionNode().setAction(new DroolsConsequenceAction(dialect, action));
+        return this;
+    }
+}


Property changes on: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/ActionNodeFactory.java
___________________________________________________________________
Name: svn:executable
   + *

Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/CompositeNodeFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/CompositeNodeFactory.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/CompositeNodeFactory.java	2008-11-30 19:02:46 UTC (rev 24152)
@@ -0,0 +1,116 @@
+/*
+ * Copyright 2008 JBoss Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.drools.ruleflow.core.factory;
+
+import org.drools.process.core.context.exception.ActionExceptionHandler;
+import org.drools.process.core.context.exception.ExceptionHandler;
+import org.drools.process.core.context.exception.ExceptionScope;
+import org.drools.process.core.context.variable.Variable;
+import org.drools.process.core.context.variable.VariableScope;
+import org.drools.process.core.datatype.DataType;
+import org.drools.ruleflow.core.RuleFlowNodeContainerFactory;
+import org.drools.workflow.core.Node;
+import org.drools.workflow.core.NodeContainer;
+import org.drools.workflow.core.impl.DroolsConsequenceAction;
+import org.drools.workflow.core.node.CompositeContextNode;
+
+/**
+ *
+ * @author salaboy
+ */
+public class CompositeNodeFactory extends RuleFlowNodeContainerFactory {
+
+	private RuleFlowNodeContainerFactory nodeContainerFactory;
+	private NodeContainer nodeContainer;
+	private long linkedIncomingNodeId = -1;
+	private long linkedOutgoingNodeId = -1;
+	
+    public CompositeNodeFactory(RuleFlowNodeContainerFactory nodeContainerFactory, NodeContainer nodeContainer, long id) {
+    	this.nodeContainerFactory = nodeContainerFactory;
+    	this.nodeContainer = nodeContainer;
+    	CompositeContextNode compositeNode = new CompositeContextNode();
+        compositeNode.setId(id);
+        setNodeContainer(compositeNode);
+    }
+    
+    protected CompositeContextNode getCompositeNode() {
+    	return (CompositeContextNode) getNodeContainer();
+    }
+
+    public CompositeNodeFactory variable(String name, DataType type) {
+    	return variable(name, type, null);
+    }
+    
+    public CompositeNodeFactory variable(String name, DataType type, Object value) {
+    	Variable variable = new Variable();
+    	variable.setName(name);
+    	variable.setType(type);
+    	variable.setValue(value);
+    	VariableScope variableScope = (VariableScope)
+			getCompositeNode().getDefaultContext(VariableScope.VARIABLE_SCOPE);
+		if (variableScope == null) {
+			variableScope = new VariableScope();
+			getCompositeNode().addContext(variableScope);
+			getCompositeNode().setDefaultContext(variableScope);
+		}
+		variableScope.getVariables().add(variable);
+        return this;
+    }
+    
+    public CompositeNodeFactory exceptionHandler(String exception, ExceptionHandler exceptionHandler) {
+    	ExceptionScope exceptionScope = (ExceptionScope)
+			getCompositeNode().getDefaultContext(ExceptionScope.EXCEPTION_SCOPE);
+		if (exceptionScope == null) {
+			exceptionScope = new ExceptionScope();
+			getCompositeNode().addContext(exceptionScope);
+			getCompositeNode().setDefaultContext(exceptionScope);
+		}
+		exceptionScope.setExceptionHandler(exception, exceptionHandler);
+    	return this;
+    }
+    
+    public CompositeNodeFactory exceptionHandler(String exception, String dialect, String action) {
+    	ActionExceptionHandler exceptionHandler = new ActionExceptionHandler();
+    	exceptionHandler.setAction(new DroolsConsequenceAction(dialect, action));
+    	return exceptionHandler(exception, exceptionHandler);
+    }
+    
+    public CompositeNodeFactory linkIncomingConnections(long nodeId) {
+    	this.linkedIncomingNodeId = nodeId;
+        return this;
+    }
+
+    public CompositeNodeFactory linkOutgoingConnections(long nodeId) {
+    	this.linkedOutgoingNodeId = nodeId;
+    	return this;
+    }
+
+    public RuleFlowNodeContainerFactory done() {
+    	if (linkedIncomingNodeId != -1) {
+    		getCompositeNode().linkIncomingConnections(
+				Node.CONNECTION_DEFAULT_TYPE,
+		        linkedIncomingNodeId, Node.CONNECTION_DEFAULT_TYPE);
+    	}
+    	if (linkedOutgoingNodeId != -1) {
+    		getCompositeNode().linkOutgoingConnections(
+				linkedOutgoingNodeId, Node.CONNECTION_DEFAULT_TYPE,
+	            Node.CONNECTION_DEFAULT_TYPE);
+    	}
+        nodeContainer.addNode(getCompositeNode());
+        return nodeContainerFactory;
+    }
+
+}


Property changes on: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/CompositeNodeFactory.java
___________________________________________________________________
Name: svn:executable
   + *

Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/EndNodeFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/EndNodeFactory.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/EndNodeFactory.java	2008-11-30 19:02:46 UTC (rev 24152)
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2008 JBoss Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.drools.ruleflow.core.factory;
+
+import org.drools.ruleflow.core.RuleFlowNodeContainerFactory;
+import org.drools.workflow.core.Node;
+import org.drools.workflow.core.NodeContainer;
+import org.drools.workflow.core.node.EndNode;
+
+/**
+ *
+ * @author salaboy
+ */
+public class EndNodeFactory extends NodeFactory {
+
+    public EndNodeFactory(RuleFlowNodeContainerFactory nodeContainerFactory, NodeContainer nodeContainer, long id) {
+        super(nodeContainerFactory, nodeContainer, id);
+    }
+
+    protected Node createNode() {
+        return new EndNode();
+    }
+
+    protected EndNode getEndNode() {
+        return (EndNode) getNode();
+    }
+
+    public EndNodeFactory name(String name) {
+        getNode().setName(name);
+        return this;
+    }
+
+    public EndNodeFactory terminate(boolean terminate) {
+        getEndNode().setTerminate(terminate);
+        return this;
+    }
+}


Property changes on: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/EndNodeFactory.java
___________________________________________________________________
Name: svn:executable
   + *

Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/EventNodeFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/EventNodeFactory.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/EventNodeFactory.java	2008-11-30 19:02:46 UTC (rev 24152)
@@ -0,0 +1,74 @@
+/*
+ * Copyright 2008 JBoss Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.drools.ruleflow.core.factory;
+
+import org.drools.process.core.event.EventFilter;
+import org.drools.process.core.event.EventTransformer;
+import org.drools.process.core.event.EventTypeFilter;
+import org.drools.ruleflow.core.RuleFlowNodeContainerFactory;
+import org.drools.workflow.core.Node;
+import org.drools.workflow.core.NodeContainer;
+import org.drools.workflow.core.node.EventNode;
+
+/**
+ *
+ * @author salaboy
+ */
+public class EventNodeFactory extends NodeFactory {
+
+    public EventNodeFactory(RuleFlowNodeContainerFactory nodeContainerFactory, NodeContainer nodeContainer, long id) {
+        super(nodeContainerFactory, nodeContainer, id);
+    }
+
+    protected Node createNode() {
+        return new EventNode();
+    }
+    
+    protected EventNode getEventNode() {
+    	return(EventNode) getNode();
+    }
+
+    public EventNodeFactory name(String name) {
+        getNode().setName(name);
+        return this;
+    }
+
+    public EventNodeFactory variableName(String variableName) {
+    	getEventNode().setVariableName(variableName);
+        return this;
+    }
+
+    public EventNodeFactory eventFilter(EventFilter eventFilter) {
+    	getEventNode().addEventFilter(eventFilter);
+        return this;
+    }
+
+    public EventNodeFactory eventType(String eventType) {
+    	EventTypeFilter filter = new EventTypeFilter();
+    	filter.setType(eventType);
+    	return eventFilter(filter);
+    }
+
+    public EventNodeFactory eventTransformer(EventTransformer transformer) {
+    	getEventNode().setEventTransformer(transformer);
+        return this;
+    }
+
+    public EventNodeFactory scope(String scope) {
+    	getEventNode().setScope(scope);
+        return this;
+    }
+}


Property changes on: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/EventNodeFactory.java
___________________________________________________________________
Name: svn:executable
   + *

Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/FaultNodeFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/FaultNodeFactory.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/FaultNodeFactory.java	2008-11-30 19:02:46 UTC (rev 24152)
@@ -0,0 +1,51 @@
+/*
+ * Copyright 2008 JBoss Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.drools.ruleflow.core.factory;
+
+import org.drools.ruleflow.core.RuleFlowNodeContainerFactory;
+import org.drools.workflow.core.Node;
+import org.drools.workflow.core.NodeContainer;
+import org.drools.workflow.core.node.FaultNode;
+
+/**
+ *
+ * @author salaboy
+ */
+public class FaultNodeFactory extends NodeFactory {
+
+    public FaultNodeFactory(RuleFlowNodeContainerFactory nodeContainerFactory, NodeContainer nodeContainer, long id) {
+        super(nodeContainerFactory, nodeContainer, id);
+    }
+
+    protected Node createNode() {
+        return new FaultNode();
+    }
+
+    public FaultNodeFactory name(String name) {
+        getNode().setName(name);
+        return this;
+    }
+
+    public FaultNodeFactory setFaultVariable(String faultVariable) {
+        ((FaultNode) getNode()).setFaultVariable(faultVariable);
+        return this;
+    }
+
+    public FaultNodeFactory setFaultName(String faultName) {
+        ((FaultNode) getNode()).setFaultName(faultName);
+        return this;
+    }
+}


Property changes on: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/FaultNodeFactory.java
___________________________________________________________________
Name: svn:executable
   + *

Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/ForEachNodeFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/ForEachNodeFactory.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/ForEachNodeFactory.java	2008-11-30 19:02:46 UTC (rev 24152)
@@ -0,0 +1,88 @@
+/*
+/*
+ * Copyright 2008 JBoss Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.drools.ruleflow.core.factory;
+
+import org.drools.process.core.datatype.DataType;
+import org.drools.ruleflow.core.RuleFlowNodeContainerFactory;
+import org.drools.workflow.core.Node;
+import org.drools.workflow.core.NodeContainer;
+import org.drools.workflow.core.node.ForEachNode;
+
+/**
+ *
+ * @author salaboy
+ */
+public class ForEachNodeFactory extends RuleFlowNodeContainerFactory {
+	
+	private RuleFlowNodeContainerFactory nodeContainerFactory;
+	private NodeContainer nodeContainer;
+	private long linkedIncomingNodeId = -1;
+	private long linkedOutgoingNodeId = -1;
+
+    public ForEachNodeFactory(RuleFlowNodeContainerFactory nodeContainerFactory, NodeContainer nodeContainer, long id) {
+    	this.nodeContainerFactory = nodeContainerFactory;
+    	this.nodeContainer = nodeContainer;
+    	ForEachNode forEachNode = new ForEachNode();
+        forEachNode.setId(id);
+        setNodeContainer(forEachNode);
+    }
+    
+    protected ForEachNode getForEachNode() {
+    	return (ForEachNode) getNodeContainer();
+    }
+
+    public ForEachNodeFactory collectionExpression(String collectionExpression) {
+    	getForEachNode().setCollectionExpression(collectionExpression);
+        return this;
+    }
+
+    public ForEachNodeFactory variable(String variableName, DataType dataType) {
+    	getForEachNode().setVariable(variableName, dataType);
+        return this;
+    }
+
+    public ForEachNodeFactory waitForCompletion(boolean waitForCompletion) {
+    	getForEachNode().setWaitForCompletion(waitForCompletion);
+        return this;
+    }
+
+    public ForEachNodeFactory linkIncomingConnections(long nodeId) {
+    	this.linkedIncomingNodeId = nodeId;
+        return this;
+    }
+
+    public ForEachNodeFactory linkOutgoingConnections(long nodeId) {
+    	this.linkedOutgoingNodeId = nodeId;
+    	return this;
+    }
+
+    public RuleFlowNodeContainerFactory done() {
+    	if (linkedIncomingNodeId != -1) {
+			getForEachNode().linkIncomingConnections(
+				Node.CONNECTION_DEFAULT_TYPE,
+		        linkedIncomingNodeId, Node.CONNECTION_DEFAULT_TYPE);
+    	}
+    	if (linkedOutgoingNodeId != -1) {
+    		getForEachNode().linkOutgoingConnections(
+				linkedOutgoingNodeId, Node.CONNECTION_DEFAULT_TYPE,
+	            Node.CONNECTION_DEFAULT_TYPE);
+    	}
+        nodeContainer.addNode(getForEachNode());
+        return nodeContainerFactory;
+    }
+
+}


Property changes on: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/ForEachNodeFactory.java
___________________________________________________________________
Name: svn:executable
   + *

Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/HumanTaskNodeFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/HumanTaskNodeFactory.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/HumanTaskNodeFactory.java	2008-11-30 19:02:46 UTC (rev 24152)
@@ -0,0 +1,166 @@
+/*
+ * Copyright 2008 JBoss Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.drools.ruleflow.core.factory;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.drools.process.core.Work;
+import org.drools.process.core.impl.WorkImpl;
+import org.drools.process.core.timer.Timer;
+import org.drools.ruleflow.core.RuleFlowNodeContainerFactory;
+import org.drools.workflow.core.DroolsAction;
+import org.drools.workflow.core.Node;
+import org.drools.workflow.core.NodeContainer;
+import org.drools.workflow.core.impl.DroolsConsequenceAction;
+import org.drools.workflow.core.node.HumanTaskNode;
+import org.drools.workflow.core.node.MilestoneNode;
+
+/**
+ *
+ * @author salaboy
+ */
+public class HumanTaskNodeFactory extends NodeFactory {
+
+    public HumanTaskNodeFactory(RuleFlowNodeContainerFactory nodeContainerFactory, NodeContainer nodeContainer, long id) {
+        super(nodeContainerFactory, nodeContainer, id);
+    }
+
+    protected Node createNode() {
+        return new HumanTaskNode();
+    }
+    
+    protected HumanTaskNode getHumanTaskNode() {
+    	return (HumanTaskNode) getNode();
+    }
+
+    public HumanTaskNodeFactory name(String name) {
+        getNode().setName(name);
+        return this;
+    }
+    
+    public HumanTaskNodeFactory taskName(String taskName) {
+    	Work work = getHumanTaskNode().getWork();
+    	if (work == null) {
+    		work = new WorkImpl();
+    		getHumanTaskNode().setWork(work);
+    	}
+    	work.setParameter("TaskName", taskName);
+    	return this;
+    }
+    
+    public HumanTaskNodeFactory actorId(String actorId) {
+    	Work work = getHumanTaskNode().getWork();
+    	if (work == null) {
+    		work = new WorkImpl();
+    		getHumanTaskNode().setWork(work);
+    	}
+    	work.setParameter("ActorId", actorId);
+    	return this;
+    }
+    
+    public HumanTaskNodeFactory priority(String priority) {
+    	Work work = getHumanTaskNode().getWork();
+    	if (work == null) {
+    		work = new WorkImpl();
+    		getHumanTaskNode().setWork(work);
+    	}
+    	work.setParameter("Priority", priority);
+    	return this;
+    }
+    
+    public HumanTaskNodeFactory comment(String comment) {
+    	Work work = getHumanTaskNode().getWork();
+    	if (work == null) {
+    		work = new WorkImpl();
+    		getHumanTaskNode().setWork(work);
+    	}
+    	work.setParameter("Comment", comment);
+    	return this;
+    }
+    
+    public HumanTaskNodeFactory skippable(boolean skippable) {
+    	Work work = getHumanTaskNode().getWork();
+    	if (work == null) {
+    		work = new WorkImpl();
+    		getHumanTaskNode().setWork(work);
+    	}
+    	work.setParameter("Skippable", Boolean.toString(skippable));
+    	return this;
+    }
+    
+    public HumanTaskNodeFactory content(String content) {
+    	Work work = getHumanTaskNode().getWork();
+    	if (work == null) {
+    		work = new WorkImpl();
+    		getHumanTaskNode().setWork(work);
+    	}
+    	work.setParameter("Content", content);
+    	return this;
+    }
+    
+    public HumanTaskNodeFactory inMapping(String parameterName, String variableName) {
+    	getHumanTaskNode().addInMapping(parameterName, variableName);
+        return this;
+    }
+
+    public HumanTaskNodeFactory outMapping(String parameterName, String variableName) {
+    	getHumanTaskNode().addOutMapping(parameterName, variableName);
+        return this;
+    }
+
+    public HumanTaskNodeFactory waitForCompletion(boolean waitForCompletion) {
+    	getHumanTaskNode().setWaitForCompletion(waitForCompletion);
+        return this;
+    }
+
+    public HumanTaskNodeFactory swimlane(String swimlane) {
+    	getHumanTaskNode().setSwimlane(swimlane);
+        return this;
+    }
+
+    public HumanTaskNodeFactory onEntryAction(String dialect, String action) {
+        if (getHumanTaskNode().getActions(dialect) != null) {
+        	getHumanTaskNode().getActions(dialect).add(new DroolsConsequenceAction(dialect, action));
+        } else {
+            List<DroolsAction> actions = new ArrayList<DroolsAction>();
+            actions.add(new DroolsConsequenceAction(dialect, action));
+            getHumanTaskNode().setActions(MilestoneNode.EVENT_NODE_ENTER, actions);
+        }
+        return this;
+    }
+
+    public HumanTaskNodeFactory onExitAction(String dialect, String action) {
+        if (getHumanTaskNode().getActions(dialect) != null) {
+        	getHumanTaskNode().getActions(dialect).add(new DroolsConsequenceAction(dialect, action));
+        } else {
+            List<DroolsAction> actions = new ArrayList<DroolsAction>();
+            actions.add(new DroolsConsequenceAction(dialect, action));
+            getHumanTaskNode().setActions(MilestoneNode.EVENT_NODE_EXIT, actions);
+        }
+        return this;
+    }
+
+    public HumanTaskNodeFactory timer(long delay, long period, String dialect, String action) {
+    	Timer timer = new Timer();
+    	timer.setDelay(delay);
+    	timer.setPeriod(period);
+    	getHumanTaskNode().addTimer(timer, new DroolsConsequenceAction(dialect, action));
+    	return this;
+    }
+    
+}
+


Property changes on: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/HumanTaskNodeFactory.java
___________________________________________________________________
Name: svn:executable
   + *

Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/JoinFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/JoinFactory.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/JoinFactory.java	2008-11-30 19:02:46 UTC (rev 24152)
@@ -0,0 +1,56 @@
+/*
+ * Copyright 2008 JBoss Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.drools.ruleflow.core.factory;
+
+import org.drools.ruleflow.core.RuleFlowNodeContainerFactory;
+import org.drools.workflow.core.Node;
+import org.drools.workflow.core.NodeContainer;
+import org.drools.workflow.core.node.Join;
+
+/**
+ *
+ * @author salaboy
+ */
+public class JoinFactory extends NodeFactory {
+
+    public JoinFactory(RuleFlowNodeContainerFactory nodeContainerFactory, NodeContainer nodeContainer, long id) {
+        super(nodeContainerFactory, nodeContainer, id);
+    }
+
+    protected Node createNode() {
+        return new Join();
+    }
+    
+    protected Join getJoin() {
+    	return (Join) getNode();
+    }
+
+    public JoinFactory name(String name) {
+        getNode().setName(name);
+        return this;
+    }
+
+    public JoinFactory type(int type) {
+    	getJoin().setType(type);
+        return this;
+    }
+    
+    public JoinFactory type(String n) {
+    	getJoin().setN(n);
+        return this;
+    }
+
+}


Property changes on: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/JoinFactory.java
___________________________________________________________________
Name: svn:executable
   + *

Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/MilestoneNodeFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/MilestoneNodeFactory.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/MilestoneNodeFactory.java	2008-11-30 19:02:46 UTC (rev 24152)
@@ -0,0 +1,88 @@
+/*
+ * Copyright 2008 JBoss Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.drools.ruleflow.core.factory;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.drools.process.core.timer.Timer;
+import org.drools.ruleflow.core.RuleFlowNodeContainerFactory;
+import org.drools.workflow.core.DroolsAction;
+import org.drools.workflow.core.Node;
+import org.drools.workflow.core.NodeContainer;
+import org.drools.workflow.core.impl.DroolsConsequenceAction;
+import org.drools.workflow.core.node.MilestoneNode;
+
+/**
+ *
+ * @author salaboy
+ */
+public class MilestoneNodeFactory extends NodeFactory {
+
+    public MilestoneNodeFactory(RuleFlowNodeContainerFactory nodeContainerFactory, NodeContainer nodeContainer, long id) {
+        super(nodeContainerFactory, nodeContainer, id);
+    }
+
+    protected Node createNode() {
+        return new MilestoneNode();
+    }
+
+    protected MilestoneNode getMilestoneNode() {
+        return (MilestoneNode) getNode();
+    }
+
+    public MilestoneNodeFactory name(String name) {
+        getNode().setName(name);
+        return this;
+    }
+
+    public MilestoneNodeFactory onEntryAction(String dialect, String action) {
+        if (getMilestoneNode().getActions(dialect) != null) {
+            getMilestoneNode().getActions(dialect).add(new DroolsConsequenceAction(dialect, action));
+        } else {
+            List<DroolsAction> actions = new ArrayList<DroolsAction>();
+            actions.add(new DroolsConsequenceAction(dialect, action));
+            getMilestoneNode().setActions(MilestoneNode.EVENT_NODE_ENTER, actions);
+        }
+        return this;
+    }
+
+    public MilestoneNodeFactory onExitAction(String dialect, String action) {
+        if (getMilestoneNode().getActions(dialect) != null) {
+            getMilestoneNode().getActions(dialect).add(new DroolsConsequenceAction(dialect, action));
+        } else {
+            List<DroolsAction> actions = new ArrayList<DroolsAction>();
+            actions.add(new DroolsConsequenceAction(dialect, action));
+            getMilestoneNode().setActions(MilestoneNode.EVENT_NODE_EXIT, actions);
+        }
+        return this;
+    }
+
+    public MilestoneNodeFactory constraint(String constraint) {
+        getMilestoneNode().setConstraint(constraint);
+        return this;
+    }
+
+    public MilestoneNodeFactory timer(long delay, long period, String dialect, String action) {
+    	Timer timer = new Timer();
+    	timer.setDelay(delay);
+    	timer.setPeriod(period);
+    	getMilestoneNode().addTimer(timer, new DroolsConsequenceAction(dialect, action));
+    	return this;
+    }
+    
+}
+


Property changes on: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/MilestoneNodeFactory.java
___________________________________________________________________
Name: svn:executable
   + *

Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/NodeFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/NodeFactory.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/NodeFactory.java	2008-11-30 19:02:46 UTC (rev 24152)
@@ -0,0 +1,52 @@
+/*
+ * Copyright 2008 JBoss Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.drools.ruleflow.core.factory;
+
+import org.drools.ruleflow.core.RuleFlowNodeContainerFactory;
+import org.drools.workflow.core.Node;
+import org.drools.workflow.core.NodeContainer;
+
+/**
+ *
+ * @author salaboy
+ */
+public abstract class NodeFactory {
+
+    private Node node;
+    private NodeContainer nodeContainer;
+    protected RuleFlowNodeContainerFactory nodeContainerFactory;
+    
+    protected NodeFactory(RuleFlowNodeContainerFactory nodeContainerFactory, NodeContainer nodeContainer, long id) {
+        this.nodeContainerFactory = nodeContainerFactory;
+        this.nodeContainer = nodeContainer;
+        this.node = createNode();
+        this.node.setId(id);
+    }
+
+    protected abstract Node createNode();
+
+    public RuleFlowNodeContainerFactory done() {
+        nodeContainer.addNode(node);
+        return this.nodeContainerFactory;
+    }
+
+    protected Node getNode() {
+        return node;
+    }
+}
+
+
+    
\ No newline at end of file


Property changes on: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/NodeFactory.java
___________________________________________________________________
Name: svn:executable
   + *

Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/RuleSetNodeFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/RuleSetNodeFactory.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/RuleSetNodeFactory.java	2008-11-30 19:02:46 UTC (rev 24152)
@@ -0,0 +1,61 @@
+/*
+ * Copyright 2008 JBoss Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.drools.ruleflow.core.factory;
+
+import org.drools.process.core.timer.Timer;
+import org.drools.ruleflow.core.RuleFlowNodeContainerFactory;
+import org.drools.workflow.core.Node;
+import org.drools.workflow.core.NodeContainer;
+import org.drools.workflow.core.impl.DroolsConsequenceAction;
+import org.drools.workflow.core.node.RuleSetNode;
+
+/**
+ *
+ * @author salaboy
+ */
+public class RuleSetNodeFactory extends NodeFactory {
+
+    public RuleSetNodeFactory(RuleFlowNodeContainerFactory nodeContainerFactory, NodeContainer nodeContainer, long id) {
+        super(nodeContainerFactory, nodeContainer, id);
+    }
+
+    protected Node createNode() {
+        return new RuleSetNode();
+    }
+    
+    protected RuleSetNode getRuleSetNode() {
+    	return (RuleSetNode) getNode();
+    }
+
+    public RuleSetNodeFactory name(String name) {
+        getNode().setName(name);
+        return this;
+    }
+
+    public RuleSetNodeFactory ruleFlowGroup(String ruleFlowGroup) {
+        getRuleSetNode().setRuleFlowGroup(ruleFlowGroup);
+        return this;
+    }
+    
+    public RuleSetNodeFactory timer(long delay, long period, String dialect, String action) {
+    	Timer timer = new Timer();
+    	timer.setDelay(delay);
+    	timer.setPeriod(period);
+    	getRuleSetNode().addTimer(timer, new DroolsConsequenceAction(dialect, action));
+    	return this;
+    }
+
+}


Property changes on: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/RuleSetNodeFactory.java
___________________________________________________________________
Name: svn:executable
   + *

Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/SplitFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/SplitFactory.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/SplitFactory.java	2008-11-30 19:02:46 UTC (rev 24152)
@@ -0,0 +1,70 @@
+/*
+ * Copyright 2008 JBoss Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.drools.ruleflow.core.factory;
+
+import org.drools.ruleflow.core.RuleFlowNodeContainerFactory;
+import org.drools.workflow.core.Node;
+import org.drools.workflow.core.NodeContainer;
+import org.drools.workflow.core.impl.ConstraintImpl;
+import org.drools.workflow.core.node.Split;
+import org.drools.workflow.core.node.Split.ConnectionRef;
+
+/**
+ *
+ * @author salaboy
+ */
+public class SplitFactory extends NodeFactory {
+
+    public SplitFactory(RuleFlowNodeContainerFactory nodeContainerFactory, NodeContainer nodeContainer, long id) {
+        super(nodeContainerFactory, nodeContainer, id);
+    }
+
+    protected Node createNode() {
+        return new Split();
+    }
+    
+    protected Split getSplit() {
+    	return (Split) getNode();
+    }
+
+    public SplitFactory name(String name) {
+        getNode().setName(name);
+        return this;
+    }
+
+    public SplitFactory type(int type) {
+    	getSplit().setType(type);
+        return this;
+    }
+    
+    public SplitFactory constraint(long toNodeId, String name, String type, String dialect, String constraint) {
+    	return constraint(toNodeId, name, type, dialect, constraint, 0);
+    }
+    
+    public SplitFactory constraint(long toNodeId, String name, String type, String dialect, String constraint, int priority) {
+        ConstraintImpl constraintImpl = new ConstraintImpl();
+        constraintImpl.setName(name);
+        constraintImpl.setType(type); 
+        constraintImpl.setDialect(dialect);
+        constraintImpl.setConstraint(constraint);
+        constraintImpl.setPriority(priority);
+        getSplit().internalSetConstraint(
+    		new ConnectionRef(toNodeId, Node.CONNECTION_DEFAULT_TYPE), constraintImpl);
+        return this;
+    }
+
+
+}


Property changes on: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/SplitFactory.java
___________________________________________________________________
Name: svn:executable
   + *

Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/StartNodeFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/StartNodeFactory.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/StartNodeFactory.java	2008-11-30 19:02:46 UTC (rev 24152)
@@ -0,0 +1,44 @@
+/*
+ * Copyright 2008 JBoss Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.drools.ruleflow.core.factory;
+
+import org.drools.ruleflow.core.RuleFlowNodeContainerFactory;
+import org.drools.workflow.core.Node;
+import org.drools.workflow.core.NodeContainer;
+import org.drools.workflow.core.node.StartNode;
+
+/**
+ *
+ * @author salaboy
+ */
+public class StartNodeFactory extends NodeFactory {
+
+    public StartNodeFactory(RuleFlowNodeContainerFactory nodeContainerFactory, NodeContainer nodeContainer, long id) {
+        super(nodeContainerFactory, nodeContainer, id);
+    }
+
+    protected Node createNode() {
+        return new StartNode();
+    }
+
+    public StartNodeFactory name(String name) {
+        getNode().setName(name);
+        return this;
+    }
+    
+    // TODO event triggers
+    
+}


Property changes on: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/StartNodeFactory.java
___________________________________________________________________
Name: svn:executable
   + *

Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/SubProcessNodeFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/SubProcessNodeFactory.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/SubProcessNodeFactory.java	2008-11-30 19:02:46 UTC (rev 24152)
@@ -0,0 +1,108 @@
+/*
+ * Copyright 2008 JBoss Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.drools.ruleflow.core.factory;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.drools.process.core.timer.Timer;
+import org.drools.ruleflow.core.RuleFlowNodeContainerFactory;
+import org.drools.workflow.core.DroolsAction;
+import org.drools.workflow.core.Node;
+import org.drools.workflow.core.NodeContainer;
+import org.drools.workflow.core.impl.DroolsConsequenceAction;
+import org.drools.workflow.core.node.MilestoneNode;
+import org.drools.workflow.core.node.SubProcessNode;
+
+/**
+ *
+ * @author salaboy
+ */
+public class SubProcessNodeFactory extends NodeFactory {
+
+    public SubProcessNodeFactory(RuleFlowNodeContainerFactory nodeContainerFactory, NodeContainer nodeContainer, long id) {
+        super(nodeContainerFactory, nodeContainer, id);
+    }
+
+    protected Node createNode() {
+        return new SubProcessNode();
+    }
+    
+    protected SubProcessNode getSubProcessNode() {
+    	return (SubProcessNode) getNode();
+    }
+
+    public SubProcessNodeFactory name(String name) {
+        getNode().setName(name);
+        return this;
+    }
+
+    public SubProcessNodeFactory processId(final String processId) {
+    	getSubProcessNode().setProcessId(processId);
+        return this;
+    }
+
+    public SubProcessNodeFactory waitForCompletion(boolean waitForCompletion) {
+    	getSubProcessNode().setWaitForCompletion(waitForCompletion);
+        return this;
+    }
+
+    public SubProcessNodeFactory inMapping(String parameterName, String variableName) {
+    	getSubProcessNode().addInMapping(parameterName, variableName);
+        return this;
+    }
+
+    public SubProcessNodeFactory outMapping(String parameterName, String variableName) {
+    	getSubProcessNode().addOutMapping(parameterName, variableName);
+        return this;
+    }
+
+    public SubProcessNodeFactory independent(boolean independent) {
+    	getSubProcessNode().setIndependent(independent);
+        return this;
+    }
+
+    public SubProcessNodeFactory onEntryAction(String dialect, String action) {
+        if (getSubProcessNode().getActions(dialect) != null) {
+        	getSubProcessNode().getActions(dialect).add(new DroolsConsequenceAction(dialect, action));
+        } else {
+            List<DroolsAction> actions = new ArrayList<DroolsAction>();
+            actions.add(new DroolsConsequenceAction(dialect, action));
+            getSubProcessNode().setActions(MilestoneNode.EVENT_NODE_ENTER, actions);
+        }
+        return this;
+    }
+
+    public SubProcessNodeFactory onExitAction(String dialect, String action) {
+        if (getSubProcessNode().getActions(dialect) != null) {
+        	getSubProcessNode().getActions(dialect).add(new DroolsConsequenceAction(dialect, action));
+        } else {
+            List<DroolsAction> actions = new ArrayList<DroolsAction>();
+            actions.add(new DroolsConsequenceAction(dialect, action));
+            getSubProcessNode().setActions(MilestoneNode.EVENT_NODE_EXIT, actions);
+        }
+        return this;
+    }
+
+    public SubProcessNodeFactory timer(long delay, long period, String dialect, String action) {
+    	Timer timer = new Timer();
+    	timer.setDelay(delay);
+    	timer.setPeriod(period);
+    	getSubProcessNode().addTimer(timer, new DroolsConsequenceAction(dialect, action));
+    	return this;
+    }
+    
+}


Property changes on: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/SubProcessNodeFactory.java
___________________________________________________________________
Name: svn:executable
   + *

Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/TimerNodeFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/TimerNodeFactory.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/TimerNodeFactory.java	2008-11-30 19:02:46 UTC (rev 24152)
@@ -0,0 +1,67 @@
+/*
+ * Copyright 2008 JBoss Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.drools.ruleflow.core.factory;
+
+import org.drools.process.core.timer.Timer;
+import org.drools.ruleflow.core.RuleFlowNodeContainerFactory;
+import org.drools.workflow.core.Node;
+import org.drools.workflow.core.NodeContainer;
+import org.drools.workflow.core.node.TimerNode;
+
+/**
+ *
+ * @author salaboy
+ */
+public class TimerNodeFactory extends NodeFactory {
+
+    public TimerNodeFactory(RuleFlowNodeContainerFactory nodeContainerFactory, NodeContainer nodeContainer, long id) {
+        super(nodeContainerFactory, nodeContainer, id);
+    }
+
+    protected Node createNode() {
+        return new TimerNode();
+    }
+    
+    protected TimerNode getTimerNode() {
+    	return (TimerNode) getNode();
+    }
+
+    public TimerNodeFactory name(String name) {
+        getNode().setName(name);
+        return this;
+    }
+    
+    public TimerNodeFactory delay(long delay) {
+    	Timer timer = getTimerNode().getTimer();
+    	if (timer == null) {
+    		timer = new Timer();
+    		getTimerNode().setTimer(timer);
+    	}
+    	timer.setDelay(delay);
+    	return this;
+    }
+    
+    public TimerNodeFactory period(long period) {
+    	Timer timer = getTimerNode().getTimer();
+    	if (timer == null) {
+    		timer = new Timer();
+    		getTimerNode().setTimer(timer);
+    	}
+    	timer.setPeriod(period);
+    	return this;
+    }
+    
+}


Property changes on: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/TimerNodeFactory.java
___________________________________________________________________
Name: svn:executable
   + *

Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/WorkItemNodeFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/WorkItemNodeFactory.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/WorkItemNodeFactory.java	2008-11-30 19:02:46 UTC (rev 24152)
@@ -0,0 +1,137 @@
+/*
+ * Copyright 2008 JBoss Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.drools.ruleflow.core.factory;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+
+import org.drools.process.core.ParameterDefinition;
+import org.drools.process.core.Work;
+import org.drools.process.core.datatype.DataType;
+import org.drools.process.core.impl.ParameterDefinitionImpl;
+import org.drools.process.core.impl.WorkImpl;
+import org.drools.process.core.timer.Timer;
+import org.drools.ruleflow.core.RuleFlowNodeContainerFactory;
+import org.drools.workflow.core.DroolsAction;
+import org.drools.workflow.core.Node;
+import org.drools.workflow.core.NodeContainer;
+import org.drools.workflow.core.impl.DroolsConsequenceAction;
+import org.drools.workflow.core.node.ActionNode;
+import org.drools.workflow.core.node.MilestoneNode;
+import org.drools.workflow.core.node.WorkItemNode;
+
+/**
+ *
+ * @author salaboy
+ */
+public class WorkItemNodeFactory extends NodeFactory {
+
+    public WorkItemNodeFactory(RuleFlowNodeContainerFactory nodeContainerFactory, NodeContainer nodeContainer, long id) {
+        super(nodeContainerFactory, nodeContainer, id);
+    }
+
+    protected Node createNode() {
+        return new ActionNode();
+    }
+
+    protected WorkItemNode getWorkItemNode() {
+        return (WorkItemNode) getNode();
+    }
+
+    public WorkItemNodeFactory name(String name) {
+        getNode().setName(name);
+        return this;
+    }
+    
+    public WorkItemNodeFactory waitForCompletion(boolean waitForCompletion) {
+    	getWorkItemNode().setWaitForCompletion(waitForCompletion);
+    	return this;
+    }
+    
+    public WorkItemNodeFactory inMapping(String parameterName, String variableName) {
+    	getWorkItemNode().addInMapping(parameterName, variableName);
+    	return this;
+    }
+
+    public WorkItemNodeFactory outMapping(String parameterName, String variableName) {
+    	getWorkItemNode().addOutMapping(parameterName, variableName);
+    	return this;
+    }
+    
+    public WorkItemNodeFactory workName(String name) {
+    	Work work = getWorkItemNode().getWork();
+    	if (work == null) {
+    		work = new WorkImpl();
+    		getWorkItemNode().setWork(work);
+    	}
+    	work.setName(name);
+    	return this;
+    }
+
+    public WorkItemNodeFactory workParameter(String name, Object value) {
+    	Work work = getWorkItemNode().getWork();
+    	if (work == null) {
+    		work = new WorkImpl();
+    		getWorkItemNode().setWork(work);
+    	}
+    	work.setParameter(name, value);
+    	return this;
+    }
+    
+    public WorkItemNodeFactory workParameterDefinition(String name, DataType dataType) {
+    	Work work = getWorkItemNode().getWork();
+    	if (work == null) {
+    		work = new WorkImpl();
+    		getWorkItemNode().setWork(work);
+    	}
+    	Set<ParameterDefinition> parameterDefinitions = work.getParameterDefinitions();
+    	parameterDefinitions.add(new ParameterDefinitionImpl(name, dataType));
+    	work.setParameterDefinitions(parameterDefinitions);
+    	return this;
+    }
+
+    public WorkItemNodeFactory onEntryAction(String dialect, String action) {
+        if (getWorkItemNode().getActions(dialect) != null) {
+        	getWorkItemNode().getActions(dialect).add(new DroolsConsequenceAction(dialect, action));
+        } else {
+            List<DroolsAction> actions = new ArrayList<DroolsAction>();
+            actions.add(new DroolsConsequenceAction(dialect, action));
+            getWorkItemNode().setActions(MilestoneNode.EVENT_NODE_ENTER, actions);
+        }
+        return this;
+    }
+
+    public WorkItemNodeFactory onExitAction(String dialect, String action) {
+        if (getWorkItemNode().getActions(dialect) != null) {
+        	getWorkItemNode().getActions(dialect).add(new DroolsConsequenceAction(dialect, action));
+        } else {
+            List<DroolsAction> actions = new ArrayList<DroolsAction>();
+            actions.add(new DroolsConsequenceAction(dialect, action));
+            getWorkItemNode().setActions(MilestoneNode.EVENT_NODE_EXIT, actions);
+        }
+        return this;
+    }
+
+    public WorkItemNodeFactory timer(long delay, long period, String dialect, String action) {
+    	Timer timer = new Timer();
+    	timer.setDelay(delay);
+    	timer.setPeriod(period);
+    	getWorkItemNode().addTimer(timer, new DroolsConsequenceAction(dialect, action));
+    	return this;
+    }
+    
+}

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/validation/RuleFlowProcessValidator.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/validation/RuleFlowProcessValidator.java	2008-11-30 18:31:58 UTC (rev 24151)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/validation/RuleFlowProcessValidator.java	2008-11-30 19:02:46 UTC (rev 24152)
@@ -193,6 +193,17 @@
                     errors.add(new ProcessValidationErrorImpl(process,
                         "Join node '" + node.getName() + "' [" + node.getId() + "] has no outgoing connection."));
                 }
+                if (join.getType() == Join.TYPE_N_OF_M) {
+                	String n = join.getN();
+                	if (!n.startsWith("#{") || !n.endsWith("}")) {
+                		try {
+                			new Integer(n);
+                		} catch (NumberFormatException e) {
+                            errors.add(new ProcessValidationErrorImpl(process,
+                                "Join node '" + node.getName() + "' [" + node.getId() + "] has illegal n value: " + n));
+                		}
+                	}
+                }
             } else if (node instanceof MilestoneNode) {
                 final MilestoneNode milestone = (MilestoneNode) node;
                 if (milestone.getFrom() == null) {

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/DroolsAction.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/DroolsAction.java	2008-11-30 18:31:58 UTC (rev 24151)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/DroolsAction.java	2008-11-30 19:02:46 UTC (rev 24152)
@@ -38,10 +38,11 @@
 		this.name = name;
 	}
 
-    public void readExternal(ObjectInput in) throws IOException,
+    @SuppressWarnings("unchecked")
+	public void readExternal(ObjectInput in) throws IOException,
                                             ClassNotFoundException {
         this.name = (String) in.readObject();
-        this.metaData = (Map<String, Object>)in.readObject();
+        this.metaData = (Map<String, Object>) in.readObject();
         Object action = in.readObject();
         setMetaData( "Action", action );
     }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/Join.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/Join.java	2008-11-30 18:31:58 UTC (rev 24151)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/Join.java	2008-11-30 19:02:46 UTC (rev 24152)
@@ -46,10 +46,16 @@
      * before allowing 
      */
     public static final int TYPE_DISCRIMINATOR = 3;
+    /**
+     * The outgoing connection of a join of this type is triggered
+     * when n of its incoming connections have been triggered.
+     */
+    public static final int TYPE_N_OF_M = 4;
     
     private static final long serialVersionUID = 400L;
 
-    private int               type;
+    private int type;
+    private String n;
 
     public Join() {
         this.type = TYPE_UNDEFINED;
@@ -62,6 +68,14 @@
     public int getType() {
         return this.type;
     }
+    
+    public void setN(String n) {
+    	this.n = n;
+    }
+    
+    public String getN() {
+    	return n;
+    }
 
     public Connection getTo() {
         final List<Connection> list =

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/impl/NodeInstanceImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/impl/NodeInstanceImpl.java	2008-11-30 18:31:58 UTC (rev 24151)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/impl/NodeInstanceImpl.java	2008-11-30 19:02:46 UTC (rev 24152)
@@ -121,7 +121,11 @@
             ((org.drools.workflow.instance.NodeInstanceContainer) getNodeInstanceContainer()).removeNodeInstance(this);
         }
         for (Connection connection: getNode().getOutgoingConnections(type)) {
-            triggerConnection(connection);
+        	// stop if this process instance has been aborted / completed
+        	if (getProcessInstance().getState() != ProcessInstance.STATE_ACTIVE) {
+        		return;
+        	}
+    		triggerConnection(connection);
         }
     }
     

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/JoinInstance.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/JoinInstance.java	2008-11-30 18:31:58 UTC (rev 24151)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/JoinInstance.java	2008-11-30 19:02:46 UTC (rev 24152)
@@ -20,6 +20,8 @@
 import java.util.Map;
 
 import org.drools.definition.process.Connection;
+import org.drools.process.core.context.variable.VariableScope;
+import org.drools.process.instance.context.variable.VariableScopeInstance;
 import org.drools.runtime.process.NodeInstance;
 import org.drools.workflow.core.node.Join;
 import org.drools.workflow.instance.impl.NodeInstanceImpl;
@@ -73,6 +75,46 @@
                     triggerCompleted();
                 }
                 break;
+            case Join.TYPE_N_OF_M :
+                count = (Integer) this.triggers.get( from.getNodeId() );
+                if ( count == null ) {
+                    this.triggers.put( from.getNodeId(),
+                                       1 );
+                } else {
+                    this.triggers.put( from.getNodeId(),
+                                       count.intValue() + 1 );
+                }
+                int counter = 0;
+                for (final Connection connection: getJoin().getDefaultIncomingConnections()) {
+                    if ( this.triggers.get( connection.getFrom().getId() ) != null ) {
+                        counter++;
+                    }
+                }
+                String n = join.getN();
+                Integer number = null;
+                if (n.startsWith("#{") && n.endsWith("}")) {
+                	n = n.substring(2, n.length() - 1);
+                	VariableScopeInstance variableScopeInstance = (VariableScopeInstance)
+                		resolveContextInstance(VariableScope.VARIABLE_SCOPE, n);
+                	if (variableScopeInstance == null) {
+                		throw new IllegalArgumentException(
+            				"Could not find variable " + n + " when executing join.");
+                	}
+                	Object value = variableScopeInstance.getVariable(n);
+                	if (value instanceof Number) {
+                		number = ((Number) value).intValue();
+                	} else {
+                		throw new IllegalArgumentException(
+            				"Variable " + n + " did not return a number when executing join: " + value);
+                	}
+                } else {
+	            	number = new Integer(n);
+                }
+                if (counter >= number) {
+                    resetAllTriggers();
+                    triggerCompleted();
+                }
+                break;
             default :
                 throw new IllegalArgumentException( "Illegal join type " + join.getType() );
         }

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/RuleBaseConfigurationTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/RuleBaseConfigurationTest.java	2008-11-30 18:31:58 UTC (rev 24151)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/RuleBaseConfigurationTest.java	2008-11-30 19:02:46 UTC (rev 24152)
@@ -9,8 +9,8 @@
 import org.drools.RuleBaseConfiguration.SequentialAgenda;
 import org.drools.common.ArrayAgendaGroupFactory;
 import org.drools.common.PriorityQueueAgendaGroupFactory;
+import org.drools.process.instance.impl.demo.DoNothingWorkItemHandler;
 import org.drools.process.instance.impl.demo.SystemOutWorkItemHandler;
-import org.drools.process.instance.impl.demo.UIWorkItemHandler;
 
 public class RuleBaseConfigurationTest extends TestCase {
 
@@ -105,7 +105,8 @@
         RuleBaseConfiguration cfg = new RuleBaseConfiguration(properties);
         assertEquals(cfg.getWorkItemHandlers().size(), 3);
         assertEquals(cfg.getWorkItemHandlers().get("MyWork").getClass(), SystemOutWorkItemHandler.class);
-        assertEquals(cfg.getWorkItemHandlers().get("UIWork").getClass(), UIWorkItemHandler.class);
+        assertEquals(cfg.getWorkItemHandlers().get("UIWork").getClass(), SystemOutWorkItemHandler.class);
+        assertEquals(cfg.getWorkItemHandlers().get("Log").getClass(), DoNothingWorkItemHandler.class);
     }
 
 }

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/process/ProcessFactoryTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/process/ProcessFactoryTest.java	2008-11-30 18:31:58 UTC (rev 24151)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/process/ProcessFactoryTest.java	2008-11-30 19:02:46 UTC (rev 24152)
@@ -2,12 +2,14 @@
 
 import junit.framework.TestCase;
 
+import org.drools.ruleflow.core.RuleFlowProcess;
 import org.drools.ruleflow.core.RuleFlowProcessFactory;
 
 public class ProcessFactoryTest extends TestCase {
 	
 	public void testProcessFactory() {
-		RuleFlowProcessFactory.createProcess("org.drools.process")
+		RuleFlowProcessFactory factory = RuleFlowProcessFactory.createProcess("org.drools.process");
+		factory
 			// header
 			.name("My process").packageName("org.drools")
 			// nodes
@@ -17,8 +19,8 @@
 			.endNode(3).name("End").done()
 			// connections
 			.connection(1, 2)
-			.connection(2, 3)
-			.validate().done();
+			.connection(2, 3);
+		RuleFlowProcess process = factory.validate().getProcess();
 	}
 
 }

Modified: labs/jbossrules/trunk/drools-core/src/test/resources/META-INF/WorkItemHandlers2.conf
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/resources/META-INF/WorkItemHandlers2.conf	2008-11-30 18:31:58 UTC (rev 24151)
+++ labs/jbossrules/trunk/drools-core/src/test/resources/META-INF/WorkItemHandlers2.conf	2008-11-30 19:02:46 UTC (rev 24152)
@@ -3,11 +3,11 @@
 // The allowed properties are name, parameters, displayName, icon and customEditor
 // The returned result should thus be of type List<Map<String, Object>>
 import org.drools.process.instance.impl.demo.DoNothingWorkItemHandler;
-import org.drools.process.instance.impl.demo.UIWorkItemHandler;
+import org.drools.process.instance.impl.demo.SystemOutWorkItemHandler;
 
 [
 
   "Log" : new DoNothingWorkItemHandler(),
-  "UIWork" : new UIWorkItemHandler()
+  "UIWork" : new SystemOutWorkItemHandler()
     
 ]
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/debug/DroolsDebugEventHandlerView.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/debug/DroolsDebugEventHandlerView.java	2008-11-30 18:31:58 UTC (rev 24151)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/debug/DroolsDebugEventHandlerView.java	2008-11-30 19:02:46 UTC (rev 24152)
@@ -14,6 +14,7 @@
 import org.eclipse.debug.ui.contexts.DebugContextEvent;
 import org.eclipse.debug.ui.contexts.IDebugContextListener;
 import org.eclipse.debug.ui.contexts.IDebugContextService;
+import org.eclipse.jdt.debug.core.IJavaFieldVariable;
 import org.eclipse.jdt.debug.core.IJavaObject;
 import org.eclipse.jdt.debug.core.IJavaStackFrame;
 import org.eclipse.jdt.debug.core.IJavaThread;
@@ -70,10 +71,15 @@
         	IVariable variable = (IVariable) context;
             try {
                 IValue value = ((IVariable) context).getValue();
-                if (value != null && value instanceof IJavaObject
-                        && "org.drools.reteoo.ReteooStatefulSession".equals(
-                            variable.getValue().getReferenceTypeName())) {
-                    input = value;
+                if (value != null && value instanceof IJavaObject) {
+                    if ("org.drools.reteoo.ReteooStatefulSession".equals(variable.getValue().getReferenceTypeName())) {
+                    	input = value;
+                    } else if ("org.drools.impl.StatefulKnowledgeSessionImpl".equals(variable.getValue().getReferenceTypeName())) {
+                    	IJavaFieldVariable sessionVar = ((IJavaObject) value).getField("session", false);
+                    	if (sessionVar != null) {
+                            input = sessionVar.getValue();
+                    	}
+                    }
                 }
             } catch (Throwable t) {
                 DroolsEclipsePlugin.log(t);
@@ -95,8 +101,8 @@
 	                            IJavaObject stackObj = ((IJavaStackFrame) frames[i]).getThis();
 	                            if ((stackObj != null)
 	                                    && (stackObj.getJavaType() != null)
-	                                    && ("org.drools.reteoo.ReteooStatefulSession".equals(
-	                                        stackObj.getJavaType().getName()))) {
+	                                    && ("org.drools.reteoo.ReteooStatefulSession".equals(stackObj.getJavaType().getName())
+	                                    		|| "org.drools.impl.StatefulKnowledgeSessionImpl".equals(stackObj.getJavaType().getName()))) {
 	                                input = stackObj;
 	                                break;
 	                            }

Modified: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/JoinWrapper.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/JoinWrapper.java	2008-11-30 18:31:58 UTC (rev 24151)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/JoinWrapper.java	2008-11-30 19:02:46 UTC (rev 24152)
@@ -21,6 +21,7 @@
 import org.drools.workflow.core.node.Join;
 import org.eclipse.ui.views.properties.ComboBoxPropertyDescriptor;
 import org.eclipse.ui.views.properties.IPropertyDescriptor;
+import org.eclipse.ui.views.properties.TextPropertyDescriptor;
 
 /**
  * Wrapper for a join node.
@@ -32,19 +33,15 @@
 	public static final int CHANGE_TYPE = 5;
 
 	private static final long serialVersionUID = 400L;
-    private static IPropertyDescriptor[] descriptors;
+    private transient IPropertyDescriptor[] descriptors;
 
     public static final String TYPE = "type";
-    static {
-        descriptors = new IPropertyDescriptor[DefaultElementWrapper.descriptors.length + 1];
-        System.arraycopy(DefaultElementWrapper.descriptors, 0, descriptors, 0, DefaultElementWrapper.descriptors.length);
-        descriptors[descriptors.length - 1] = 
-            new ComboBoxPropertyDescriptor(TYPE, "Type", new String[] { "", "AND", "XOR", "Discriminator" });
-    }
+    public static final String N = "N";
     
     public JoinWrapper() {
         setNode(new Join());
         getJoin().setName("Join");
+        setDescriptors();
     }
     
     public Join getJoin() {
@@ -56,7 +53,20 @@
         	&& getOutgoingConnections().isEmpty();
     }
 
+    private void setDescriptors() {
+        descriptors = new IPropertyDescriptor[DefaultElementWrapper.descriptors.length + 1];
+        System.arraycopy(DefaultElementWrapper.descriptors, 0, descriptors, 0, DefaultElementWrapper.descriptors.length);
+        descriptors[descriptors.length - 1] = 
+            new ComboBoxPropertyDescriptor(TYPE, "Type", new String[] { "", "AND", "XOR", "Discriminator", "n-of-m" });
+    }
+
     public IPropertyDescriptor[] getPropertyDescriptors() {
+        if (getParent() != null && (getJoin().getType() == Join.TYPE_N_OF_M)) {
+            IPropertyDescriptor[] result = new IPropertyDescriptor[descriptors.length + 1];
+            System.arraycopy(descriptors, 0, result, 0, descriptors.length);
+            result[descriptors.length] = new TextPropertyDescriptor(N, "n");
+            return result;
+        }
         return descriptors;
     }
 
@@ -64,6 +74,9 @@
         if (TYPE.equals(id)) {
             return new Integer(getJoin().getType());
         }
+        if (N.equals(id)) {
+            return getJoin().getN() == null ? "" : getJoin().getN();
+        }
         return super.getPropertyValue(id);
     }
 
@@ -71,6 +84,8 @@
         if (TYPE.equals(id)) {
             getJoin().setType(Join.TYPE_UNDEFINED);
             notifyListeners(CHANGE_TYPE);
+        } else if (N.equals(id)) {
+            getJoin().setN(null);
         } else {
             super.resetPropertyValue(id);
         }
@@ -80,6 +95,8 @@
         if (TYPE.equals(id)) {
             getJoin().setType(((Integer) value).intValue());
             notifyListeners(CHANGE_TYPE);
+        }  else if (N.equals(id)) {
+            getJoin().setN((String) value);
         } else {
             super.setPropertyValue(id, value);
         }

Modified: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/MilestoneWrapper.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/MilestoneWrapper.java	2008-11-30 18:31:58 UTC (rev 24151)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/MilestoneWrapper.java	2008-11-30 19:02:46 UTC (rev 24152)
@@ -41,8 +41,10 @@
     protected void initDescriptors() {
     	super.initDescriptors();
     	IPropertyDescriptor[] oldDescriptors = descriptors; 
-        descriptors = new IPropertyDescriptor[oldDescriptors.length + 1];
+        descriptors = new IPropertyDescriptor[oldDescriptors.length + 3];
         System.arraycopy(oldDescriptors, 0, descriptors, 0, oldDescriptors.length);
+        descriptors[descriptors.length - 3] = getOnEntryPropertyDescriptor();
+        descriptors[descriptors.length - 2] = getOnExitPropertyDescriptor();
         descriptors[descriptors.length - 1] = 
             new MilestoneConstraintPropertyDescriptor(CONSTRAINT, "Constraint",
         		getMilestoneNode(), (WorkflowProcess) getParent().getProcessWrapper().getProcess());

Modified: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/RuleSetNodeWrapper.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/RuleSetNodeWrapper.java	2008-11-30 18:31:58 UTC (rev 24151)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/RuleSetNodeWrapper.java	2008-11-30 19:02:46 UTC (rev 24152)
@@ -65,7 +65,8 @@
     
     public Object getPropertyValue(Object id) {
         if (RULE_FLOW_GROUP.equals(id)) {
-            return getRuleSetNode().getRuleFlowGroup();
+            String ruleflowGroup = getRuleSetNode().getRuleFlowGroup();
+            return ruleflowGroup == null ? "" : ruleflowGroup;
         }
         return super.getPropertyValue(id);
     }

Modified: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/WorkItemEditPart.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/WorkItemEditPart.java	2008-11-30 18:31:58 UTC (rev 24151)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/WorkItemEditPart.java	2008-11-30 19:02:46 UTC (rev 24152)
@@ -107,10 +107,10 @@
         return getWorkItemWrapper().getWorkDefinition();
     }
     
-    public ConnectionAnchor getSourceConnectionAnchor(Request request) {
-    	Point p = ((DropRequest) request).getLocation();
-    	return ((WorkItemFigure) getFigure()).getOutgoingConnectionAnchorAt(p);
-    }
+//    public ConnectionAnchor getSourceConnectionAnchor(Request request) {
+//    	Point p = ((DropRequest) request).getLocation();
+//    	return ((WorkItemFigure) getFigure()).getOutgoingConnectionAnchorAt(p);
+//    }
     
     protected void doubleClicked() {
         super.doubleClicked();

Modified: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/action/ActionCellEditor.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/action/ActionCellEditor.java	2008-11-30 18:31:58 UTC (rev 24151)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/action/ActionCellEditor.java	2008-11-30 19:02:46 UTC (rev 24152)
@@ -17,9 +17,12 @@
 
 import org.drools.eclipse.flow.common.view.property.BeanDialogCellEditor;
 import org.drools.eclipse.flow.common.view.property.EditBeanDialog;
+import org.drools.workflow.core.DroolsAction;
 import org.drools.workflow.core.WorkflowProcess;
 import org.drools.workflow.core.node.ActionNode;
+import org.eclipse.jface.window.Window;
 import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Shell;
 
 /**
@@ -27,7 +30,7 @@
  * 
  * @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
  */
-public class ActionCellEditor extends BeanDialogCellEditor {
+public class ActionCellEditor extends BeanDialogCellEditor<DroolsAction> {
 
     private WorkflowProcess process;
     private ActionNode actionNode;
@@ -38,16 +41,27 @@
         this.actionNode = actionNode;
     }
 
-    protected EditBeanDialog createDialog(Shell shell) {
+	protected Object openDialogBox(Control cellEditorWindow) {
+        ActionDialog dialog = (ActionDialog) createDialog(cellEditorWindow.getShell());
+        dialog.setValue(actionNode.getAction());
+        int result = dialog.open();
+        if (result == Window.CANCEL) {
+            return null;
+        }
+        return dialog.getValue();
+    }
+	
+    protected EditBeanDialog<DroolsAction> createDialog(Shell shell) {
         ActionDialog dialog = new ActionDialog(shell, process);
         dialog.setValue(actionNode.getAction());
         return dialog;
     }
     
-    protected String getLabelText(Object value) {
+	protected String getLabelText(Object value) {
     	if (actionNode == null || actionNode.getAction() == null) {
     		return "";
     	}
         return actionNode.getAction().toString();
     }
+
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/action/ActionCompletionProcessor.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/action/ActionCompletionProcessor.java	2008-11-30 18:31:58 UTC (rev 24151)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/action/ActionCompletionProcessor.java	2008-11-30 19:02:46 UTC (rev 24152)
@@ -17,7 +17,6 @@
  */
 
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
@@ -39,7 +38,6 @@
 import org.eclipse.ui.IWorkbenchPage;
 import org.eclipse.ui.IWorkbenchWindow;
 import org.eclipse.ui.PlatformUI;
-import java.util.Arrays;
 
 /**
  * Completion for ruleflow constraints. 
@@ -95,7 +93,7 @@
     }
     
     private void loadImports() {
-    	this.imports = new ArrayList();
+    	this.imports = new ArrayList<String>();
     	List<String> imports = ((org.drools.process.core.Process) process).getImports();
     	
     	if (imports != null) {
@@ -155,12 +153,9 @@
     }
     
     private void loadAttributes() {
-        if (this.dialect == null) {
-            attributes = Collections.EMPTY_MAP;
-        } else {
-            Map<String, String> result = new HashMap<String, String>();
-            result.put("dialect", dialect);
-            attributes = result;
+        attributes = new HashMap<String, String>();
+        if (this.dialect != null) {
+            attributes.put("dialect", dialect);
         }
     }
     

Modified: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/action/ActionDialog.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/action/ActionDialog.java	2008-11-30 18:31:58 UTC (rev 24151)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/action/ActionDialog.java	2008-11-30 19:02:46 UTC (rev 24152)
@@ -25,6 +25,7 @@
 import org.drools.eclipse.flow.ruleflow.view.property.constraint.RuleFlowImportsDialog;
 import org.drools.process.core.Process;
 import org.drools.util.ArrayUtils;
+import org.drools.workflow.core.DroolsAction;
 import org.drools.workflow.core.WorkflowProcess;
 import org.drools.workflow.core.impl.DroolsConsequenceAction;
 import org.eclipse.jface.resource.JFaceResources;
@@ -60,7 +61,7 @@
  * 
  * @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
  */
-public class ActionDialog extends EditBeanDialog {
+public class ActionDialog extends EditBeanDialog<DroolsAction> {
 
     private static final String[] DIALECTS = new String[] { "mvel", "java" };
     
@@ -75,9 +76,14 @@
 		this.process = process;
 	}
 	
-	protected Object updateValue(Object value) {
+	protected DroolsAction updateValue(DroolsAction action) {
 		if (tabFolder.getSelectionIndex() == 0) {
-			return getAction();
+			if (action == null) {
+				action = new DroolsConsequenceAction();
+			}
+			((DroolsConsequenceAction) action).setDialect(dialectCombo.getItem(dialectCombo.getSelectionIndex()));
+			((DroolsConsequenceAction) action).setConsequence(actionViewer.getDocument().get());
+			return action;
 		}
 		return null;
 	}
@@ -157,12 +163,6 @@
         return dialectCombo;
 	}
 	
-	private Object getAction() {
-		return new DroolsConsequenceAction(
-	        dialectCombo.getItem(dialectCombo.getSelectionIndex()),
-	        actionViewer.getDocument().get());
-	}
-	
 	public Control createDialogArea(Composite parent) {
 		GridLayout layout = new GridLayout();
 		parent.setLayout(layout);
@@ -223,9 +223,9 @@
 				dialog.create();
 				int code = dialog.open();
 				if (code != CANCEL) {
-					List imports = dialog.getImports();
+					List<String> imports = dialog.getImports();
 					((Process) process).setImports(imports);
-					List functionImports = dialog.getFunctionImports();
+					List<String> functionImports = dialog.getFunctionImports();
 					process.setFunctionImports(functionImports);
 					completionProcessor.reset();
 				}
@@ -242,7 +242,7 @@
 				dialog.create();
 				int code = dialog.open();
 				if (code != CANCEL) {
-					Map globals = dialog.getGlobals();
+					Map<String, String> globals = dialog.getGlobals();
 					((Process) process).setGlobals(globals);
 					completionProcessor.reset();
 				}

Modified: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/action/ActionsDialog.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/action/ActionsDialog.java	2008-11-30 18:31:58 UTC (rev 24151)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/action/ActionsDialog.java	2008-11-30 19:02:46 UTC (rev 24152)
@@ -19,6 +19,7 @@
 import org.drools.eclipse.flow.common.view.property.EditListDialog;
 import org.drools.workflow.core.DroolsAction;
 import org.drools.workflow.core.WorkflowProcess;
+import org.drools.workflow.core.impl.DroolsConsequenceAction;
 import org.eclipse.swt.widgets.Shell;
 
 /**
@@ -26,7 +27,7 @@
  * 
  * @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
  */
-public class ActionsDialog extends EditListDialog {
+public class ActionsDialog extends EditListDialog<DroolsAction> {
     
 	private WorkflowProcess process;
 
@@ -35,11 +36,11 @@
 		this.process = process;
 	}
 
-    protected Object createItem() {
-        return new DroolsAction();
+    protected DroolsAction createItem() {
+        return new DroolsConsequenceAction();
     }
 
-    protected EditBeanDialog createEditItemDialog() {
+    protected EditBeanDialog<DroolsAction> createEditItemDialog() {
     	return new ActionDialog(getShell(), process);
     }
 }

Modified: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/action/OnEntryActionsCellEditor.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/action/OnEntryActionsCellEditor.java	2008-11-30 18:31:58 UTC (rev 24151)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/action/OnEntryActionsCellEditor.java	2008-11-30 19:02:46 UTC (rev 24152)
@@ -15,8 +15,11 @@
  * limitations under the License.
  */
 
+import java.util.List;
+
 import org.drools.eclipse.flow.common.view.property.BeanDialogCellEditor;
 import org.drools.eclipse.flow.common.view.property.EditBeanDialog;
+import org.drools.workflow.core.DroolsAction;
 import org.drools.workflow.core.WorkflowProcess;
 import org.drools.workflow.core.impl.ExtendedNodeImpl;
 import org.eclipse.swt.widgets.Composite;
@@ -27,7 +30,7 @@
  * 
  * @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
  */
-public class OnEntryActionsCellEditor extends BeanDialogCellEditor {
+public class OnEntryActionsCellEditor extends BeanDialogCellEditor<List<DroolsAction>> {
 
     private WorkflowProcess process;
     private ExtendedNodeImpl extendedNode;
@@ -38,7 +41,7 @@
         this.extendedNode = extendedNode;
     }
 
-    protected EditBeanDialog createDialog(Shell shell) {
+    protected EditBeanDialog<List<DroolsAction>> createDialog(Shell shell) {
         ActionsDialog dialog = new ActionsDialog(shell, process);
         dialog.setValue(extendedNode.getActions(ExtendedNodeImpl.EVENT_NODE_ENTER));
         return dialog;

Modified: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/action/OnExitActionsCellEditor.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/action/OnExitActionsCellEditor.java	2008-11-30 18:31:58 UTC (rev 24151)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/action/OnExitActionsCellEditor.java	2008-11-30 19:02:46 UTC (rev 24152)
@@ -15,8 +15,11 @@
  * limitations under the License.
  */
 
+import java.util.List;
+
 import org.drools.eclipse.flow.common.view.property.BeanDialogCellEditor;
 import org.drools.eclipse.flow.common.view.property.EditBeanDialog;
+import org.drools.workflow.core.DroolsAction;
 import org.drools.workflow.core.WorkflowProcess;
 import org.drools.workflow.core.impl.ExtendedNodeImpl;
 import org.eclipse.swt.widgets.Composite;
@@ -27,7 +30,7 @@
  * 
  * @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
  */
-public class OnExitActionsCellEditor extends BeanDialogCellEditor {
+public class OnExitActionsCellEditor extends BeanDialogCellEditor<List<DroolsAction>> {
 
     private WorkflowProcess process;
     private ExtendedNodeImpl extendedNode;
@@ -38,7 +41,7 @@
         this.extendedNode = extendedNode;
     }
 
-    protected EditBeanDialog createDialog(Shell shell) {
+    protected EditBeanDialog<List<DroolsAction>> createDialog(Shell shell) {
         ActionsDialog dialog = new ActionsDialog(shell, process);
         dialog.setValue(extendedNode.getActions(ExtendedNodeImpl.EVENT_NODE_EXIT));
         return dialog;

Modified: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/util/DroolsClasspathContainer.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/util/DroolsClasspathContainer.java	2008-11-30 18:31:58 UTC (rev 24151)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/util/DroolsClasspathContainer.java	2008-11-30 19:02:46 UTC (rev 24152)
@@ -11,10 +11,13 @@
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.Path;
+import org.eclipse.jdt.core.IAccessRule;
 import org.eclipse.jdt.core.IClasspathContainer;
 import org.eclipse.jdt.core.IClasspathEntry;
 import org.eclipse.jdt.core.IJavaProject;
 import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.jdt.internal.core.ClasspathAccessRule;
+import org.eclipse.jdt.internal.core.ClasspathEntry;
 
 public class DroolsClasspathContainer implements IClasspathContainer {
 
@@ -51,9 +54,17 @@
         List jarNames = getJarNames(project);
         List list = new ArrayList();
         for (int i = 0; i < jarNames.size(); i++) {
-            Path path = new Path((String) jarNames.get(i));
-            list.add(JavaCore.newLibraryEntry(
-                path, path, null));
+        	String jarName = (String) jarNames.get(i);
+        	Path path = new Path(jarName);
+//            if (jarName.contains("drools-api")) {
+            	list.add(JavaCore.newLibraryEntry(path, path, null));
+//            } else {
+//                IAccessRule[] accessRules = new IAccessRule[1];
+//                accessRules[0] = new ClasspathAccessRule(new Path("**"), IAccessRule.K_DISCOURAGED);
+//                list.add(JavaCore.newLibraryEntry(
+//                    path, path, null, accessRules, ClasspathEntry.NO_EXTRA_ATTRIBUTES, false));
+//            }
+            
         }
         // also add jdt core jar from eclipse itself
 //        String pluginRootString = Platform.getInstallLocation().getURL().getPath() + "plugins/";

Modified: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/wizard/project/NewDroolsProjectRuntimeWizardPage.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/wizard/project/NewDroolsProjectRuntimeWizardPage.java	2008-11-30 18:31:58 UTC (rev 24151)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/wizard/project/NewDroolsProjectRuntimeWizardPage.java	2008-11-30 19:02:46 UTC (rev 24152)
@@ -133,6 +133,9 @@
 	        droolsRuntimeCombo.select(0);
 			selectedRuntime = droolsRuntimeCombo.getText();
         }
+        DroolsRuntime defaultRuntime = DroolsRuntimeManager.getDefaultDroolsRuntime();
+		projectSpecificRuntime.setText("Use default Drools Runtime (currently "
+			+ (defaultRuntime == null ? "undefined)" : defaultRuntime.getName() + ")"));
 	}
 	
 	public DroolsRuntime getDroolsRuntime() {

Modified: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/resources/org/drools/eclipse/wizard/project/DecisionTableLauncherSample.java.template
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/resources/org/drools/eclipse/wizard/project/DecisionTableLauncherSample.java.template	2008-11-30 18:31:58 UTC (rev 24151)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/resources/org/drools/eclipse/wizard/project/DecisionTableLauncherSample.java.template	2008-11-30 19:02:46 UTC (rev 24152)
@@ -1,91 +1,69 @@
 package com.sample;
 
-/*
- * Copyright 2005 JBoss Inc
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
+import org.drools.KnowledgeBase;
+import org.drools.KnowledgeBaseFactory;
+import org.drools.builder.DecisionTableConfiguration;
+import org.drools.builder.DecisionTableInputType;
+import org.drools.builder.KnowledgeBuilder;
+import org.drools.builder.KnowledgeBuilderFactory;
+import org.drools.builder.KnowledgeType;
+import org.drools.io.impl.ClassPathResource;
+import org.drools.runtime.StatefulKnowledgeSession;
 
-import java.io.StringReader;
-
-import org.drools.RuleBase;
-import org.drools.RuleBaseFactory;
-import org.drools.WorkingMemory;
-import org.drools.compiler.PackageBuilder;
-import org.drools.decisiontable.InputType;
-import org.drools.decisiontable.SpreadsheetCompiler;
-import org.drools.rule.Package;
-
+/**
+ * This is a sample class to launch a decision table.
+ */
 public class DecisionTableTest {
 
-    public static final void main(String[] args) {
-        try {
-        	
-        	//load up the rulebase
-            RuleBase ruleBase = readDecisionTable();
-            WorkingMemory workingMemory = ruleBase.newStatefulSession();
-            
-            //go !
-            Message message = new Message();
-            message.setMessage(  "Hello World" );
-            message.setStatus( Message.HELLO );
-            workingMemory.insert( message );
-            workingMemory.fireAllRules();   
-            
-            
-        } catch (Throwable t) {
-            t.printStackTrace();
-        }
-    }
+	public static final void main(String[] args) {
+		try {
+			// load up the knowledge base
+			KnowledgeBase kbase = readKnowledgeBase();
+			StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+			// go !
+			Message message = new Message();
+			message.setMessage("Hello World");
+			message.setStatus(Message.HELLO);
+			ksession.insert(message);
+			ksession.fireAllRules();
+		} catch (Throwable t) {
+			t.printStackTrace();
+		}
+	}
 
-    /**
-     * Please note that this is the "low level" rule assembly API.
-     */
-	private static RuleBase readDecisionTable() throws Exception {
-		//read in the source
-        final SpreadsheetCompiler converter = new SpreadsheetCompiler();
-        final String drl = converter.compile( "/Sample.xls", InputType.XLS );
-		PackageBuilder builder = new PackageBuilder();
-		builder.addPackageFromDrl( new StringReader( drl ) );
-		Package pkg = builder.getPackage();
-		RuleBase ruleBase = RuleBaseFactory.newRuleBase();
-		ruleBase.addPackage( pkg );
-		return ruleBase;
+	private static KnowledgeBase readKnowledgeBase() throws Exception {
+		KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+		DecisionTableConfiguration config = KnowledgeBuilderFactory.newDecisionTableConfiguration();
+		config.setInputType(DecisionTableInputType.XLS);
+		kbuilder.add(new ClassPathResource("Sample.xls"), KnowledgeType.DTABLE, config);
+		KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+		kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());
+		return kbase;
 	}
 
 	public static class Message {
 		public static final int HELLO = 0;
 		public static final int GOODBYE = 1;
-		
+
 		private String message;
-		
+
 		private int status;
-		
+
 		public String getMessage() {
 			return this.message;
 		}
-		
+
 		public void setMessage(String message) {
 			this.message = message;
 		}
-		
+
 		public int getStatus() {
 			return this.status;
 		}
-		
-		public void setStatus( int status ) {
+
+		public void setStatus(int status) {
 			this.status = status;
 		}
 	}
-    
+
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/resources/org/drools/eclipse/wizard/project/RuleFlowLauncherSample.java.template
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/resources/org/drools/eclipse/wizard/project/RuleFlowLauncherSample.java.template	2008-11-30 18:31:58 UTC (rev 24151)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/resources/org/drools/eclipse/wizard/project/RuleFlowLauncherSample.java.template	2008-11-30 19:02:46 UTC (rev 24152)
@@ -1,47 +1,36 @@
 package com.sample;
 
-import java.io.InputStreamReader;
-import java.io.Reader;
+import org.drools.KnowledgeBase;
+import org.drools.KnowledgeBaseFactory;
+import org.drools.builder.KnowledgeBuilder;
+import org.drools.builder.KnowledgeBuilderFactory;
+import org.drools.builder.KnowledgeType;
+import org.drools.io.impl.ClassPathResource;
+import org.drools.runtime.StatefulKnowledgeSession;
 
-import org.drools.RuleBase;
-import org.drools.RuleBaseFactory;
-import org.drools.StatefulSession;
-import org.drools.compiler.PackageBuilder;
-import org.drools.rule.Package;
-
 /**
- * This is a sample file to launch a ruleflow.
+ * This is a sample file to launch a process.
  */
 public class RuleFlowTest {
 
 	public static final void main(String[] args) {
 		try {
-			//load the process
-			RuleBase ruleBase = createKnowledgeBase();
-			// create a new session
-			StatefulSession session = ruleBase.newStatefulSession();
+			// load up the knowledge base
+			KnowledgeBase kbase = readKnowledgeBase();
+			StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
 			// start a new process instance
-			session.startProcess("com.sample.ruleflow");
+			ksession.startProcess("com.sample.ruleflow");
 		} catch (Throwable t) {
 			t.printStackTrace();
 		}
 	}
 
-	/**
-	 * Creates the knowledge base by loading the process definition.
-	 */
-	private static RuleBase createKnowledgeBase() throws Exception {
-		// create a builder
-		PackageBuilder builder = new PackageBuilder();
-		// load the process
-		Reader source = new InputStreamReader(
-			RuleFlowTest.class.getResourceAsStream("/ruleflow.rf"));
-		builder.addProcessFromXml(source);
-		// create the knowledge base 
-		Package pkg = builder.getPackage();
-		RuleBase ruleBase = RuleBaseFactory.newRuleBase();
-		ruleBase.addPackage(pkg);
-		return ruleBase;
+	private static KnowledgeBase readKnowledgeBase() throws Exception {
+		KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+		kbuilder.add(new ClassPathResource("ruleflow.rf"), KnowledgeType.DRF);
+		KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+		kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());
+		return kbase;
 	}
 
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/resources/org/drools/eclipse/wizard/project/RuleLauncherSample.java.template
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/resources/org/drools/eclipse/wizard/project/RuleLauncherSample.java.template	2008-11-30 18:31:58 UTC (rev 24151)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/resources/org/drools/eclipse/wizard/project/RuleLauncherSample.java.template	2008-11-30 19:02:46 UTC (rev 24152)
@@ -1,93 +1,65 @@
 package com.sample;
 
-import java.io.InputStreamReader;
-import java.io.Reader;
+import org.drools.KnowledgeBase;
+import org.drools.KnowledgeBaseFactory;
+import org.drools.builder.KnowledgeBuilder;
+import org.drools.builder.KnowledgeBuilderFactory;
+import org.drools.builder.KnowledgeType;
+import org.drools.io.impl.ClassPathResource;
+import org.drools.runtime.StatefulKnowledgeSession;
 
-import org.drools.RuleBase;
-import org.drools.RuleBaseFactory;
-import org.drools.WorkingMemory;
-import org.drools.compiler.PackageBuilder;
-import org.drools.rule.Package;
-
 /**
- * This is a sample file to launch a rule package from a rule source file.
+ * This is a sample class to launch a rule.
  */
 public class DroolsTest {
 
-    public static final void main(String[] args) {
-        try {
-        	
-        	//load up the rulebase
-            RuleBase ruleBase = readRule();
-            WorkingMemory workingMemory = ruleBase.newStatefulSession();
-            
-            //go !
-            Message message = new Message();
-            message.setMessage(  "Hello World" );
-            message.setStatus( Message.HELLO );
-            workingMemory.insert( message );
-            workingMemory.fireAllRules();   
-            
-            
-        } catch (Throwable t) {
-            t.printStackTrace();
-        }
-    }
+	public static final void main(String[] args) {
+		try {
+			// load up the knowledge base
+			KnowledgeBase kbase = readKnowledgeBase();
+			StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+			// go !
+			Message message = new Message();
+			message.setMessage("Hello World");
+			message.setStatus(Message.HELLO);
+			ksession.insert(message);
+			ksession.fireAllRules();
+		} catch (Throwable t) {
+			t.printStackTrace();
+		}
+	}
 
-    /**
-     * Please note that this is the "low level" rule assembly API.
-     */
-	private static RuleBase readRule() throws Exception {
-		//read in the source
-		Reader source = new InputStreamReader( DroolsTest.class.getResourceAsStream( "/Sample.drl" ) );
-		
-		//optionally read in the DSL (if you are using it).
-		//Reader dsl = new InputStreamReader( DroolsTest.class.getResourceAsStream( "/mylang.dsl" ) );
-
-		//Use package builder to build up a rule package.
-		//An alternative lower level class called "DrlParser" can also be used...
-		
-		PackageBuilder builder = new PackageBuilder();
-
-		//this will parse and compile in one step
-		//NOTE: There are 2 methods here, the one argument one is for normal DRL.
-		builder.addPackageFromDrl( source );
-
-		//Use the following instead of above if you are using a DSL:
-		//builder.addPackageFromDrl( source, dsl );
-		
-		//get the compiled package (which is serializable)
-		Package pkg = builder.getPackage();
-		
-		//add the package to a rulebase (deploy the rule package).
-		RuleBase ruleBase = RuleBaseFactory.newRuleBase();
-		ruleBase.addPackage( pkg );
-		return ruleBase;
+	private static KnowledgeBase readKnowledgeBase() throws Exception {
+		KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+		kbuilder.add(new ClassPathResource("Sample.drl"), KnowledgeType.DRL);
+		KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+		kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());
+		return kbase;
 	}
-	
+
 	public static class Message {
 		public static final int HELLO = 0;
 		public static final int GOODBYE = 1;
-		
+
 		private String message;
-		
+
 		private int status;
-		
+
 		public String getMessage() {
 			return this.message;
 		}
-		
+
 		public void setMessage(String message) {
 			this.message = message;
 		}
-		
+
 		public int getStatus() {
 			return this.status;
 		}
-		
-		public void setStatus( int status ) {
+
+		public void setStatus(int status) {
 			this.status = status;
 		}
 	}
-    
+
 }

Modified: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse.feature/feature.xml
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse.feature/feature.xml	2008-11-30 18:31:58 UTC (rev 24151)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse.feature/feature.xml	2008-11-30 19:02:46 UTC (rev 24152)
@@ -1,20 +1,30 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <feature
       id="org.drools.eclipse.feature"
-      label="JBossRules Feature"
+      label="JBoss Drools Core Feature"
       version="5.0.0.SNAPSHOT"
       provider-name="JBoss, Inc.">
 
-   <description url="http://www.example.com/description">
-      [Enter Feature Description here.]
+   <description url="http://www.jboss.org/drools/">
+      Eclipse support for JBoss Drools Core.
    </description>
 
-   <copyright url="http://www.example.com/copyright">
-      [Enter Copyright Description here.]
+   <copyright>
+      (c) 2008 JBoss, a division of Red Hat
    </copyright>
 
-   <license url="http://www.example.com/license">
-      [Enter License Description here.]
+   <license>
+      Licensed under the Apache License, Version 2.0(the &quot;License&quot;);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+     http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an &quot;AS IS&quot; BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions
+and limitations under the License.
    </license>
 
    <requires>

Modified: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse.task/META-INF/MANIFEST.MF
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse.task/META-INF/MANIFEST.MF	2008-11-30 18:31:58 UTC (rev 24151)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse.task/META-INF/MANIFEST.MF	2008-11-30 19:02:46 UTC (rev 24152)
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: Drools Eclipse Task Plug-in
 Bundle-SymbolicName: org.drools.eclipse.task; singleton:=true
-Bundle-Version: 1.0.0
+Bundle-Version: 5.0.0.SNAPSHOT
 Bundle-Activator: org.drools.eclipse.task.Activator
 Require-Bundle: org.eclipse.ui,
  org.eclipse.core.runtime

Modified: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse.task.feature/.project
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse.task.feature/.project	2008-11-30 18:31:58 UTC (rev 24151)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse.task.feature/.project	2008-11-30 19:02:46 UTC (rev 24152)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <projectDescription>
-	<name>org.drools.eclips.task.feature</name>
+	<name>org.drools.eclipse.task.feature</name>
 	<comment></comment>
 	<projects>
 	</projects>

Modified: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse.task.feature/feature.xml
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse.task.feature/feature.xml	2008-11-30 18:31:58 UTC (rev 24151)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse.task.feature/feature.xml	2008-11-30 19:02:46 UTC (rev 24152)
@@ -1,20 +1,30 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <feature
       id="org.drools.eclipse.task.feature"
-      label="Drools Task Feature"
+      label="JBoss Drools Task Feature"
       version="5.0.0.SNAPSHOT"
       provider-name="JBoss, Inc">
 
-   <description url="http://www.example.com/description">
-      [Enter Feature Description here.]
+   <description url="http://www.jboss.org/drools/">
+      Eclipse support for JBoss Drools Task Management.
    </description>
 
-   <copyright url="http://www.example.com/copyright">
-      [Enter Copyright Description here.]
+   <copyright>
+      (c) 2008 JBoss, a division of Red Hat
    </copyright>
 
-   <license url="http://www.example.com/license">
-      [Enter License Description here.]
+   <license>
+      Licensed under the Apache License, Version 2.0(the &quot;License&quot;);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+     http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an &quot;AS IS&quot; BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions
+and limitations under the License.
    </license>
 
    <requires>
@@ -26,7 +36,7 @@
          id="org.drools.eclipse.task"
          download-size="0"
          install-size="0"
-         version="0.0.0"
+         version="5.0.0.SNAPSHOT"
          unpack="false"/>
 
 </feature>

Modified: labs/jbossrules/trunk/drools-eclipse/org.eclipse.webdav/META-INF/MANIFEST.MF
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.eclipse.webdav/META-INF/MANIFEST.MF	2008-11-30 18:31:58 UTC (rev 24151)
+++ labs/jbossrules/trunk/drools-eclipse/org.eclipse.webdav/META-INF/MANIFEST.MF	2008-11-30 19:02:46 UTC (rev 24152)
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.webdav
-Bundle-Version: 3.0.101.qualifier
+Bundle-Version: 3.0.101
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
 Export-Package: org.eclipse.webdav,

Modified: labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/META-INF/MANIFEST.MF
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/META-INF/MANIFEST.MF	2008-11-30 18:31:58 UTC (rev 24151)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/META-INF/MANIFEST.MF	2008-11-30 19:02:46 UTC (rev 24152)
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %plugin.name
 Bundle-SymbolicName: org.guvnor.tools;singleton:=true
-Bundle-Version: 1.0.0.2008010161136
+Bundle-Version: 5.0.0.SNAPSHOT
 Bundle-Activator: org.guvnor.tools.Activator
 Bundle-Vendor: %plugin.provider
 Bundle-Localization: plugin

Modified: labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools.feature/feature.xml
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools.feature/feature.xml	2008-11-30 18:31:58 UTC (rev 24151)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools.feature/feature.xml	2008-11-30 19:02:46 UTC (rev 24152)
@@ -1,12 +1,12 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <feature
       id="org.guvnor.tools.feature"
-      label="Drools Guvnor Feature"
-      version="1.0.0"
+      label="JBoss Drools Guvnor Feature"
+      version="5.0.0.SNAPSHOT"
       provider-name="JBoss, a division of Red Hat">
 
-   <description url="http://www.jboss.org/community/docs/DOC-9834">
-      Eclipse support for the JBoss Guvnor repository.
+   <description url="http://www.jboss.org/drools/">
+      Eclipse support for JBoss Drools Guvnor synchronization.
    </description>
 
    <copyright>
@@ -14,7 +14,17 @@
    </copyright>
 
    <license>
-      [Enter License Description here.]
+      Licensed under the Apache License, Version 2.0(the &quot;License&quot;);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+     http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an &quot;AS IS&quot; BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions
+and limitations under the License.
    </license>
 
    <requires>
@@ -30,14 +40,14 @@
          id="org.eclipse.webdav"
          download-size="0"
          install-size="0"
-         version="0.0.0"
+         version="3.0.101"
          unpack="false"/>
 
    <plugin
          id="org.guvnor.tools"
          download-size="0"
          install-size="0"
-         version="0.0.0"
+         version="5.0.0.SNAPSHOT"
          unpack="false"/>
 
 </feature>

Added: labs/jbossrules/trunk/drools-process/drools-bam/pom.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bam/pom.xml	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bam/pom.xml	2008-11-30 19:02:46 UTC (rev 24152)
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <artifactId>drools</artifactId>
+    <groupId>org.drools</groupId>
+    <version>5.0.0.SNAPSHOT</version>
+  </parent>
+
+  <artifactId>drools-bam</artifactId>
+  <packaging>jar</packaging>
+  <name>Drools :: Process :: BAM</name> 
+    
+      <dependencies>
+            
+    	<dependency>
+    		<groupId>org.drools</groupId>
+    		<artifactId>drools-api</artifactId>
+    	</dependency>
+    	         		  
+    	<dependency>
+    		<groupId>org.drools</groupId>
+    		<artifactId>drools-core</artifactId>
+    	</dependency>         		  
+       
+    	<dependency>
+    		<groupId>org.drools</groupId>
+    		<artifactId>drools-compiler</artifactId>
+    		<scope>test</scope>
+    	</dependency>         		  
+       
+    	<!-- Hibernate -->
+    	<dependency>
+    		<groupId>org.hibernate</groupId>
+    		<artifactId>hibernate-entitymanager</artifactId>
+    		<version>3.4.0.GA</version>
+    	</dependency>
+     	  
+    	<!-- HSQLDB -->
+    	<dependency>
+    		<groupId>com.h2database</groupId>
+    		<artifactId>h2</artifactId>
+    		<version>1.0.77</version>
+    	</dependency>  
+    	
+      </dependencies>              
+                  
+</project>

Modified: labs/jbossrules/trunk/drools-process/drools-bam/src/main/java/org/drools/process/audit/ProcessInstanceDbLog.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bam/src/main/java/org/drools/process/audit/ProcessInstanceDbLog.java	2008-11-30 18:31:58 UTC (rev 24151)
+++ labs/jbossrules/trunk/drools-process/drools-bam/src/main/java/org/drools/process/audit/ProcessInstanceDbLog.java	2008-11-30 19:02:46 UTC (rev 24152)
@@ -6,22 +6,35 @@
 
 public class ProcessInstanceDbLog {
     
-    public static List<ProcessInstanceLog> findProcessInstances() {
+    @SuppressWarnings("unchecked")
+	public static List<ProcessInstanceLog> findProcessInstances() {
         Session session = HibernateUtil.getSessionFactory().getCurrentSession();
         session.beginTransaction();
-        List result = session.createQuery("from ProcessInstanceLog").list();
+        List<ProcessInstanceLog> result = session.createQuery("from ProcessInstanceLog").list();
         session.getTransaction().commit();
         return result;
     }
 
-    public static List<ProcessInstanceLog> findProcessInstances(String processId) {
+    @SuppressWarnings("unchecked")
+	public static List<ProcessInstanceLog> findProcessInstances(String processId) {
         Session session = HibernateUtil.getSessionFactory().getCurrentSession();
         session.beginTransaction();
-        List result = session.createQuery(
+        List<ProcessInstanceLog> result = session.createQuery(
             "from ProcessInstanceLog as log where log.processId = ?")
                 .setString(0, processId).list();
         session.getTransaction().commit();
         return result;
     }
 
+    @SuppressWarnings("unchecked")
+	public static ProcessInstanceLog findProcessInstance(long processInstanceId) {
+        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
+        session.beginTransaction();
+        List<ProcessInstanceLog> result = session.createQuery(
+            "from ProcessInstanceLog as log where log.processInstanceId = ?")
+                .setLong(0, processInstanceId).list();
+        session.getTransaction().commit();
+        return result == null || result.size() == 0 ? null : result.get(0);
+    }
+
 }

Modified: labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/test/java/org/drools/persistence/session/SingleSessionCommandServiceTest.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/test/java/org/drools/persistence/session/SingleSessionCommandServiceTest.java	2008-11-30 18:31:58 UTC (rev 24151)
+++ labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/test/java/org/drools/persistence/session/SingleSessionCommandServiceTest.java	2008-11-30 19:02:46 UTC (rev 24152)
@@ -380,8 +380,7 @@
     	return packageBuilder.getPackage();
     }
     
-    // FIXME mdp
-	public void FIXME_testPersistenceTimer2() throws Exception {
+	public void testPersistenceTimer2() throws Exception {
 		Properties properties = new Properties();
 		properties.put(
 	        "processInstanceManagerFactory", 

Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/process/workitem/wsht/WSHumanTaskHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/process/workitem/wsht/WSHumanTaskHandler.java	2008-11-30 18:31:58 UTC (rev 24151)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/process/workitem/wsht/WSHumanTaskHandler.java	2008-11-30 19:02:46 UTC (rev 24152)
@@ -179,7 +179,7 @@
             synchronized ( idMapping ) {
                 idMapping.put(workItemId, taskId);           
             }
-            System.out.println("Created task " + taskId + " for work item " + workItemId);
+//            System.out.println("Created task " + taskId + " for work item " + workItemId);
             
             EventKey key = new TaskEventKey(TaskCompletedEvent.class, taskId );           
             TaskCompletedHandler eventResponseHandler =




More information about the jboss-svn-commits mailing list