[jboss-svn-commits] JBL Code SVN: r19434 - in labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin: icons and 23 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Sun Apr 6 19:51:00 EDT 2008


Author: KrisVerlaenen
Date: 2008-04-06 19:51:00 -0400 (Sun, 06 Apr 2008)
New Revision: 19434

Added:
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/icons/composite.gif
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/icons/human_task.gif
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/icons/timer.gif
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/core/ElementContainer.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/core/ElementContainerElementWrapper.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/editpart/ElementContainerEditPart.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/editpart/figure/AbstractElementFigure.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/editpart/figure/ElementContainerFigure.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/policy/ElementContainerLayoutEditPolicy.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/view/property/ProcessLabelProvider.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/view/property/ProcessTypeMapper.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/AbstractNodeWrapper.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/CompositeNodeWrapper.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/DefaultNodeWrapper.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/RuleFlowWrapperBuilder.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/TimerWrapper.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/DefaultNodeEditPart.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/TimerEditPart.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/figure/
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/figure/DefaultNodeFigure.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/ElementNameSection.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/NodeSection.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/ProcessNameSection.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/workitem/
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/workitem/WorkItemParameterMappingCellEditor.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/workitem/WorkItemParameterMappingDialog.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/workitem/WorkItemParameterMappingPropertyDescriptor.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/workitem/WorkItemResultMappingCellEditor.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/workitem/WorkItemResultMappingDialog.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/workitem/WorkItemResultMappingPropertyDescriptor.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/preferences/DroolsBuildPathPropertyPage.java
Removed:
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/editpart/work/WorkEditor.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/policy/ProcessLayoutEditPolicy.java
Modified:
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/.classpath
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/DroolsEclipsePlugin.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/DroolsPluginImages.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/ProcessInfo.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/WorkItemDefinitions.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/builder/DroolsBuilder.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/debug/ProcessInstanceViewer.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/debug/ProcessInstancesView.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/GenericModelEditor.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/core/DefaultElementWrapper.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/core/ElementConnection.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/core/ElementConnectionFactory.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/core/ElementWrapper.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/core/ProcessWrapper.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/core/command/AddElementCommand.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/core/command/DeleteElementCommand.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/editpart/ElementConnectionEditPart.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/editpart/ElementEditPart.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/editpart/ProcessEditPart.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/editpart/figure/ElementFigure.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/editpart/work/SampleCustomEditor.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/policy/ElementEditPolicy.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/ActionWrapper.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/ConnectionWrapper.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/ConnectionWrapperFactory.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/EndNodeWrapper.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/JoinWrapper.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/MilestoneWrapper.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/NodeWrapper.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/RuleFlowProcessWrapper.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/RuleSetNodeWrapper.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/SplitWrapper.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/StartNodeWrapper.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/SubFlowWrapper.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/WorkItemWrapper.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/editor/RuleFlowModelEditor.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/editor/RuleFlowPaletteFactory.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/ActionEditPart.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/EndNodeEditPart.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/JoinEditPart.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/MilestoneEditPart.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/RuleFlowEditPartFactory.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/RuleSetNodeEditPart.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/SplitEditPart.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/StartNodeEditPart.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/SubFlowEditPart.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/WorkItemEditPart.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/constraint/ConstraintListDialog.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/variable/VariableDialog.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/variable/VariableListDialog.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/view/rules/RulesView.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/resources/org/drools/eclipse/flow/ruleflow/SampleRuleFlow.rf.template
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/resources/org/drools/eclipse/wizard/project/Sample.xls.template
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/resources/org/drools/eclipse/wizard/project/ruleflow.rf.template
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/resources/org/drools/eclipse/wizard/project/ruleflow.rfm.template
Log:
JBRULES-1548: ePDL: XML-based process definition language 
 - Ruleflow processes now stored using nicer XML format
JBRULES-1549: Workflow Context
 - Context as the basis for grouping nodes
JBRULES-1550: Workflow timer
 - Timer node + service
JBRULES-1551: Workflow human tasks
 - Added initial implementation for integration human tasks

Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/.classpath
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/.classpath	2008-04-06 23:49:40 UTC (rev 19433)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/.classpath	2008-04-06 23:51:00 UTC (rev 19434)
@@ -2,6 +2,8 @@
 <classpath>
 	<classpathentry kind="src" path="src/main/java"/>
 	<classpathentry kind="src" path="src/main/resources"/>
+	<classpathentry combineaccessrules="false" kind="src" path="/drools-compiler"/>
+	<classpathentry combineaccessrules="false" kind="src" path="/drools-core"/>
 	<classpathentry exported="true" kind="lib" path="lib/drools-compiler.jar" sourcepath="/drools-compiler"/>
 	<classpathentry exported="true" kind="lib" path="lib/drools-core.jar" sourcepath="/drools-core"/>
 	<classpathentry exported="true" kind="lib" path="lib/drools-decisiontables.jar"/>

Added: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/icons/composite.gif
===================================================================
(Binary files differ)


Property changes on: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/icons/composite.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/icons/human_task.gif
===================================================================
(Binary files differ)


Property changes on: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/icons/human_task.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/icons/timer.gif
===================================================================
(Binary files differ)


Property changes on: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/icons/timer.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/DroolsEclipsePlugin.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/DroolsEclipsePlugin.java	2008-04-06 23:49:40 UTC (rev 19433)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/DroolsEclipsePlugin.java	2008-04-06 23:51:00 UTC (rev 19434)
@@ -16,6 +16,7 @@
  */
 
 import java.io.Reader;
+import java.io.StringReader;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
@@ -34,12 +35,13 @@
 import org.drools.eclipse.builder.Util;
 import org.drools.eclipse.dsl.editor.DSLAdapter;
 import org.drools.eclipse.editors.AbstractRuleEditor;
-import org.drools.eclipse.flow.ruleflow.core.RuleFlowProcessWrapper;
 import org.drools.eclipse.preferences.IDroolsConstants;
 import org.drools.eclipse.util.ProjectClassLoader;
 import org.drools.lang.descr.PackageDescr;
+import org.drools.process.core.Process;
 import org.drools.rule.builder.dialect.java.JavaDialectConfiguration;
 import org.drools.ruleflow.core.RuleFlowProcess;
+import org.drools.xml.XmlProcessReader;
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.resources.IResourceVisitor;
@@ -60,8 +62,6 @@
 import org.eclipse.ui.plugin.AbstractUIPlugin;
 import org.osgi.framework.BundleContext;
 
-import com.thoughtworks.xstream.XStream;
-
 /**
  * The main plugin class to be used in the desktop.
  * 
@@ -412,21 +412,20 @@
 	
 	public ProcessInfo parseProcess(String input, IResource resource) {
 	    try {
-            XStream stream = new XStream();
-            stream.setMode(XStream.ID_REFERENCES);
-            
             ClassLoader oldLoader = Thread.currentThread().getContextClassLoader();
             ClassLoader newLoader = this.getClass().getClassLoader();
             try {
                 Thread.currentThread().setContextClassLoader(newLoader);
-                Object o = stream.fromXML(input);
-                if (o instanceof RuleFlowProcessWrapper) {
-                    RuleFlowProcessWrapper processWrapper = (RuleFlowProcessWrapper) o;
-                    RuleFlowProcess process = processWrapper.getRuleFlowProcess();
+                PackageBuilderConfiguration configuration = new PackageBuilderConfiguration();
+                XmlProcessReader xmlReader = new XmlProcessReader( configuration.getSemanticModules() );
+                
+                Process o = xmlReader.read(new StringReader(input));
+                if (o instanceof RuleFlowProcess) {
+                    RuleFlowProcess process = (RuleFlowProcess) o;
                     PackageBuilder packageBuilder = new PackageBuilder();
                     ProcessBuilder processBuilder = new ProcessBuilder(packageBuilder);
                     processBuilder.buildProcess(process);
-                    ProcessInfo processInfo = new ProcessInfo(process.getId(), processWrapper, packageBuilder.getPackage());
+                    ProcessInfo processInfo = new ProcessInfo(process.getId(), process);
                     processInfo.setErrors(processBuilder.getErrors());
                     if (useCachePreference) {
                         processInfos.put(resource, processInfo);

Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/DroolsPluginImages.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/DroolsPluginImages.java	2008-04-06 23:49:40 UTC (rev 19433)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/DroolsPluginImages.java	2008-04-06 23:51:00 UTC (rev 19434)
@@ -98,7 +98,7 @@
      * @param path  The path where the image can be found. This path is relative to where
      *              this plugin class is found (i.e. typically the packages directory)
      */
-    private final static void declareRegistryImage(String key, String path) {
+    public final static void declareRegistryImage(String key, String path) {
         ImageDescriptor desc= ImageDescriptor.getMissingImageDescriptor();
         try {
             desc= ImageDescriptor.createFromURL(makeIconFileURL(path));
@@ -132,6 +132,10 @@
         return getImageRegistry().get(key);
     }
     
+    public static void putImage(String key, Image image) {
+        getImageRegistry().put(key, image);
+    }
+    
     /**
      * Returns the <code>ImageDescriptor</code> identified by the given key,
      * or <code>null</code> if it does not exist.

Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/ProcessInfo.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/ProcessInfo.java	2008-04-06 23:49:40 UTC (rev 19433)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/ProcessInfo.java	2008-04-06 23:51:00 UTC (rev 19434)
@@ -2,33 +2,25 @@
 
 import java.util.List;
 
-import org.drools.eclipse.flow.common.editor.core.ProcessWrapper;
 import org.drools.process.core.Process;
-import org.drools.rule.Package;
 
 public class ProcessInfo {
     
-    private Package processPackage;
     private String processId;
-    private ProcessWrapper processWrapper;
+    private Process process;
     private List errors;
     
-    public ProcessInfo(String processId, ProcessWrapper processWrapper, Package processPackage) {
+    public ProcessInfo(String processId, Process process) {
         this.processId = processId;
-        this.processPackage = processPackage;
-        this.processWrapper = processWrapper;
+        this.process = process;
     }
     
-    public Process getProcess() {
-        return (Process) processPackage.getRuleFlows().get(processId);
-    }
-    
     public String getProcessId() {
         return processId;
     }
     
-    public ProcessWrapper getProcessWrapper() {
-        return processWrapper;
+    public Process getProcess() {
+        return process;
     }
     
     public List getErrors() {

Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/WorkItemDefinitions.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/WorkItemDefinitions.java	2008-04-06 23:49:40 UTC (rev 19433)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/WorkItemDefinitions.java	2008-04-06 23:51:00 UTC (rev 19434)
@@ -1,60 +1,52 @@
 package org.drools.eclipse;
 
-import java.util.Collection;
 import java.util.HashMap;
 import java.util.Map;
 
+import org.drools.RuleBaseConfiguration;
+import org.drools.eclipse.builder.DroolsBuilder;
+import org.drools.eclipse.util.ProjectClassLoader;
 import org.drools.process.core.WorkDefinition;
-import org.drools.process.core.datatype.impl.type.StringDataType;
-import org.drools.process.core.impl.ParameterDefinitionImpl;
-import org.drools.process.core.impl.WorkDefinitionExtensionImpl;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.JavaCore;
 
 public final class WorkItemDefinitions {
     
-    private static Map workDefinitions = new HashMap();
-    
-    static {
-        // Email
-        WorkDefinitionExtensionImpl emailDefinition = new WorkDefinitionExtensionImpl();
-        emailDefinition.setName("Email");
-        emailDefinition.addParameter(new ParameterDefinitionImpl("From", new StringDataType()));
-        emailDefinition.addParameter(new ParameterDefinitionImpl("To", new StringDataType()));
-        emailDefinition.addParameter(new ParameterDefinitionImpl("Subject", new StringDataType()));
-        emailDefinition.addParameter(new ParameterDefinitionImpl("Text", new StringDataType()));
-        emailDefinition.setDisplayName("Email");
-        emailDefinition.setIcon("icons/import_statement.gif");
-        emailDefinition.setCustomEditor("org.drools.eclipse.flow.common.editor.editpart.work.SampleCustomEditor");
-        addWorkDefinition(emailDefinition);
-        // Log
-        WorkDefinitionExtensionImpl logDefinition = new WorkDefinitionExtensionImpl();
-        logDefinition.setName("Log");
-        logDefinition.addParameter(new ParameterDefinitionImpl("Message", new StringDataType()));
-        logDefinition.setDisplayName("Log");
-        logDefinition.setIcon("icons/open.gif");
-        addWorkDefinition(logDefinition);
-        // Order
-//        WorkDefinitionExtensionImpl orderDefinition = new WorkDefinitionExtensionImpl();
-//        orderDefinition.setName("Order");
-//        orderDefinition.addParameter(new ParameterDefinitionImpl("OrderId", new StringDataType()));
-//        orderDefinition.setDisplayName("Order");
-//        orderDefinition.setIcon("icons/open.gif");
-//        addWorkDefinition(orderDefinition);
+    private WorkItemDefinitions() {
+    }
 
+    public static Map<String, WorkDefinition> getWorkDefinitions(IResource resource) {
+        return getWorkDefinitions(resource == null ? null : resource.getProject());
     }
     
-    private WorkItemDefinitions() {
+    public static Map<String, WorkDefinition> getWorkDefinitions(IProject project) {
+        if (project != null) {
+            ClassLoader oldLoader = Thread.currentThread().getContextClassLoader();
+            ClassLoader newLoader = DroolsBuilder.class.getClassLoader();
+            try {
+                if (project.getNature("org.eclipse.jdt.core.javanature") != null) {
+                    IJavaProject javaProject = JavaCore.create(project);
+                    newLoader = ProjectClassLoader.getProjectClassLoader(javaProject);
+                }
+                try {
+                    Thread.currentThread().setContextClassLoader(newLoader);
+                    return new RuleBaseConfiguration().getProcessWorkDefinitions();
+                } finally {
+                    Thread.currentThread().setContextClassLoader(oldLoader);
+                }
+            } catch (Exception e) {
+                DroolsEclipsePlugin.log(e);
+            }
+        }
+        return new HashMap<String, WorkDefinition>();
     }
     
-    private static void addWorkDefinition(WorkDefinition workDefinition) {
-        workDefinitions.put(workDefinition.getName(), workDefinition);
+    public static void main(String[] args) {
+        for (WorkDefinition def: new RuleBaseConfiguration().getProcessWorkDefinitions().values()) {
+            System.out.println(def);
+        }
     }
     
-    public static Collection getWorkDefinitions() {
-        return workDefinitions.values();
-    }
-
-    public static WorkDefinition getWorkDefinition(String name) {
-        return (WorkDefinition) workDefinitions.get(name);
-    }
-
 }

Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/builder/DroolsBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/builder/DroolsBuilder.java	2008-04-06 23:49:40 UTC (rev 19433)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/builder/DroolsBuilder.java	2008-04-06 23:51:00 UTC (rev 19434)
@@ -276,13 +276,19 @@
     }
     
     private DroolsBuildMarker[] parseRuleFlowFile(IFile file) {
+        if (!file.exists()) {
+            return new DroolsBuildMarker[0];
+        }
     	List markers = new ArrayList();
 		try {
             String input = convertToString(file.getContents());
 		    ProcessInfo processInfo =
                 DroolsEclipsePlugin.getDefault().parseProcess(input, file);
-		    markParseErrors(markers, processInfo.getErrors());  
+		    if (processInfo != null) {
+		        markParseErrors(markers, processInfo.getErrors());
+		    }
         } catch (Exception t) {
+            t.printStackTrace();
         	String message = t.getMessage();
             if (message == null || message.trim().equals( "" )) {
                 message = "Error: " + t.getClass().getName();

Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/debug/ProcessInstanceViewer.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/debug/ProcessInstanceViewer.java	2008-04-06 23:49:40 UTC (rev 19433)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/debug/ProcessInstanceViewer.java	2008-04-06 23:51:00 UTC (rev 19434)
@@ -13,7 +13,9 @@
 import org.drools.eclipse.flow.common.editor.editpart.ProcessEditPart;
 import org.drools.eclipse.flow.common.editor.editpart.figure.ElementFigure;
 import org.drools.eclipse.flow.ruleflow.core.RuleFlowProcessWrapper;
+import org.drools.eclipse.flow.ruleflow.core.RuleFlowWrapperBuilder;
 import org.drools.eclipse.flow.ruleflow.editor.editpart.RuleFlowEditPartFactory;
+import org.drools.ruleflow.core.RuleFlowProcess;
 import org.eclipse.draw2d.ColorConstants;
 import org.eclipse.gef.GraphicalViewer;
 import org.eclipse.gef.editparts.ScalableRootEditPart;
@@ -21,8 +23,6 @@
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.custom.CTabFolder;
-import org.eclipse.swt.custom.CTabFolder2Adapter;
-import org.eclipse.swt.custom.CTabFolderEvent;
 import org.eclipse.swt.custom.CTabItem;
 import org.eclipse.swt.layout.FillLayout;
 import org.eclipse.swt.layout.GridData;
@@ -85,7 +85,8 @@
             graphicalViewer.createControl(composite);
             graphicalViewer.getControl().setBackground(ColorConstants.listBackground);
             graphicalViewer.setRootEditPart(new ScalableRootEditPart());
-            graphicalViewer.setEditPartFactory(new RuleFlowEditPartFactory());
+            // TODO fix this !
+            graphicalViewer.setEditPartFactory(new RuleFlowEditPartFactory(null));
             setProcess(processInfo);
             for (String nodeId: nodeIds) {
             	handleNodeInstanceSelection(nodeId);
@@ -93,7 +94,8 @@
         }
         
         private void setProcess(ProcessInfo processInfo) {
-            ProcessWrapper processWrapper = processInfo.getProcessWrapper();
+            RuleFlowProcess process = (RuleFlowProcess) processInfo.getProcess();
+            ProcessWrapper processWrapper = RuleFlowWrapperBuilder.getProcessWrapper(process, null);
             graphicalViewer.setContents(
                 processWrapper == null ? new RuleFlowProcessWrapper() : processWrapper);
         }
@@ -126,7 +128,7 @@
     }
 
     public void selectionChanged(IWorkbenchPart part, ISelection selection) {
-        System.out.println("Selection changed: " + selection);
+        // Do nothing
     }
 
 }

Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/debug/ProcessInstancesView.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/debug/ProcessInstancesView.java	2008-04-06 23:49:40 UTC (rev 19433)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/debug/ProcessInstancesView.java	2008-04-06 23:51:00 UTC (rev 19434)
@@ -93,6 +93,7 @@
                 }
                 nodeIds.add(nodeId);
             }
+            // TODO: pass current java project, to retrieve work item definitions
             ((ProcessInstanceViewer) view).showProcessInstance(id, processId, nodeIds);
         }
     }

Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/GenericModelEditor.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/GenericModelEditor.java	2008-04-06 23:49:40 UTC (rev 19433)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/GenericModelEditor.java	2008-04-06 23:51:00 UTC (rev 19434)
@@ -19,8 +19,6 @@
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
 import java.io.OutputStream;
 import java.util.EventObject;
 
@@ -65,7 +63,7 @@
  * 
  * @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
  */
-public abstract class GenericModelEditor extends GraphicalEditorWithPalette {
+public abstract class GenericModelEditor extends GraphicalEditorWithPalette { // implements ITabbedPropertySheetPageContributor {
 
 	private Object model;
 	private boolean savePreviouslyNeeded = false;
@@ -137,11 +135,7 @@
 		super.commandStackChanged(event);
 	}
 
-	protected void createOutputStream(OutputStream os) throws IOException {
-		ObjectOutputStream out = new ObjectOutputStream(os);
-		out.writeObject(model);
-		out.close();
-	}
+	protected abstract void writeModel(OutputStream os) throws IOException;
 
 	protected void configureGraphicalViewer() {
 		super.configureGraphicalViewer();
@@ -170,7 +164,7 @@
 	public void doSave(IProgressMonitor monitor) {
 		try {
 			ByteArrayOutputStream out = new ByteArrayOutputStream();
-			createOutputStream(out);
+			writeModel(out);
 			IFile file = ((IFileEditorInput) getEditorInput()).getFile();
 			file.setContents(new ByteArrayInputStream(out.toByteArray()), true,
 					false, monitor);
@@ -200,7 +194,7 @@
 					throws CoreException {
 				try {
 					ByteArrayOutputStream out = new ByteArrayOutputStream();
-					createOutputStream(out);
+					writeModel(out);
 					file.create(new ByteArrayInputStream(out.toByteArray()),
 							true, monitor);
 					out.close();
@@ -266,29 +260,25 @@
 	protected void setInput(IEditorInput input) {
 		super.setInput(input);
 
-		IFile file = ((IFileEditorInput) input).getFile();
+		IFile file = getFile();
 		setPartName(file.getName());
 		try {
 			InputStream is = file.getContents(false);
-			createInputStream(is);
-		} catch (Exception e) {
-			DroolsEclipsePlugin.log(e);
-			model = createModel();
+			createModel(is);
+		} catch (Throwable t) {
+			DroolsEclipsePlugin.log(t);
 		}
 		if (getGraphicalViewer() != null) {
 			initializeGraphicalViewer();
 		}
 	}
-
-	protected void createInputStream(InputStream is) throws Exception {
-		ObjectInputStream ois = new ObjectInputStreamWithLoader(is, getClass()
-				.getClassLoader());
-		model = ois.readObject();
-		ois.close();
+	
+	public IFile getFile() {
+	    return ((IFileEditorInput) getEditorInput()).getFile();
 	}
+	
+	protected abstract void createModel(InputStream is);
 
-	protected abstract Object createModel();
-
 	public Object getAdapter(Class type) {
 		if (type == IContentOutlinePage.class) {
 			return getOverviewOutlinePage();
@@ -297,6 +287,9 @@
 			return ((ScalableRootEditPart) getGraphicalViewer()
 					.getRootEditPart()).getZoomManager();
 		}
+//		if (type == IPropertySheetPage.class) {
+//            return new TabbedPropertySheetPage(this);
+//		}
 		return super.getAdapter(type);
 	}
 
@@ -308,4 +301,8 @@
 		}
 		return overviewOutlinePage;
 	}
+	
+	public String getContributorId() {
+	    return getSite().getId();
+	}
 }

Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/core/DefaultElementWrapper.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/core/DefaultElementWrapper.java	2008-04-06 23:49:40 UTC (rev 19433)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/core/DefaultElementWrapper.java	2008-04-06 23:51:00 UTC (rev 19434)
@@ -20,7 +20,6 @@
 import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.Collections;
-import java.util.Iterator;
 import java.util.List;
 
 import org.eclipse.draw2d.geometry.Rectangle;
@@ -33,7 +32,7 @@
  * 
  * @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
  */
-public abstract class DefaultElementWrapper implements IPropertySource, ElementWrapper, Serializable {
+public abstract class DefaultElementWrapper implements ElementWrapper, IPropertySource, Serializable {
 
     protected static IPropertyDescriptor[] descriptors;
 
@@ -45,11 +44,11 @@
     }
     
     private Object element;
-    private Rectangle constraint;
-    private ProcessWrapper parent;
-    private List incomingConnections = new ArrayList();
-    private List outgoingConnections = new ArrayList();
-    private transient List listeners = new ArrayList();
+    private ElementContainer parent;
+    private transient Rectangle constraint;
+    private List<ElementConnection> incomingConnections = new ArrayList<ElementConnection>();
+    private List<ElementConnection> outgoingConnections = new ArrayList<ElementConnection>();
+    private transient List<ModelListener> listeners = new ArrayList<ModelListener>();
     
     protected void setElement(Object element) {
 		this.element = element;
@@ -60,35 +59,47 @@
 	}
 
 	public void setConstraint(Rectangle constraint) {
-		this.constraint = constraint;
+	    this.constraint = constraint;
+		internalSetConstraint(constraint);
 		notifyListeners(CHANGE_CONSTRAINT);
 	}
-
+	
+	protected abstract void internalSetConstraint(Rectangle constraint);
+	
 	public Rectangle getConstraint() {
-		return constraint;
+	    if (constraint == null) {
+	        constraint = internalGetConstraint();
+	    }
+	    return constraint;
 	}
+	
+	protected abstract Rectangle internalGetConstraint();
 
-	public void setParent(ProcessWrapper parent) {
+	public void setParent(ElementContainer parent) {
 		this.parent = parent;
 	}
 
-	protected ProcessWrapper getParent() {
+	public ElementContainer getParent() {
 		return parent;
 	}
 
-	public List getOutgoingConnections() {
+	public List<ElementConnection> getOutgoingConnections() {
 		return Collections.unmodifiableList(outgoingConnections);
 	}
 
-	public List getIncomingConnections() {
+	public List<ElementConnection> getIncomingConnections() {
 		return Collections.unmodifiableList(incomingConnections);
 	}
 
 	public void addIncomingConnection(ElementConnection connection) {
-		incomingConnections.add(connection);
+	    localAddIncomingConnection(connection);
 		internalAddIncomingConnection(connection);
 		notifyListeners(CHANGE_INCOMING_CONNECTIONS);
 	}
+	
+	public void localAddIncomingConnection(ElementConnection connection) {
+	    incomingConnections.add(connection);
+	}
 
 	protected void internalAddIncomingConnection(ElementConnection connection) {
 	}
@@ -103,11 +114,15 @@
 	}
 
 	public void addOutgoingConnection(ElementConnection connection) {
-		outgoingConnections.add(connection);
+	    localAddOutgoingConnection(connection);
 		internalAddOutgoingConnection(connection);
 		notifyListeners(CHANGE_OUTGOING_CONNECTIONS);
 	}
 
+    public void localAddOutgoingConnection(ElementConnection connection) {
+        outgoingConnections.add(connection);
+    }
+
 	protected void internalAddOutgoingConnection(ElementConnection connection) {
 	}
 
@@ -138,8 +153,7 @@
 
 	protected void notifyListeners(int change) {
 		ModelEvent event = new ModelEvent(change);
-		for (Iterator it = listeners.iterator(); it.hasNext();) {
-			ModelListener listener = (ModelListener) it.next();
+		for (ModelListener listener: listeners) {
 			listener.modelChanged(event);
 		}
 	}
@@ -147,7 +161,7 @@
 	private void readObject(ObjectInputStream aInputStream)
 			throws ClassNotFoundException, IOException {
 		aInputStream.defaultReadObject();
-		listeners = new ArrayList();
+		listeners = new ArrayList<ModelListener>();
 	}
 
 	public IPropertyDescriptor[] getPropertyDescriptors() {

Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/core/ElementConnection.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/core/ElementConnection.java	2008-04-06 23:49:40 UTC (rev 19433)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/core/ElementConnection.java	2008-04-06 23:51:00 UTC (rev 19434)
@@ -29,7 +29,7 @@
  * 
  * @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
  */
-public class ElementConnection implements Serializable {
+public abstract class ElementConnection implements Serializable {
     
 	private static final long serialVersionUID = 400L;
 	
@@ -37,20 +37,17 @@
 	
 	private ElementWrapper source;
     private ElementWrapper target;
-    private List bendpoints = new ArrayList();
-    private transient List listeners = new ArrayList();
+    private transient List<Point> bendpoints = new ArrayList<Point>();
+    private transient List<ModelListener> listeners = new ArrayList<ModelListener>();
     
     public ElementConnection() {
     }
     
-    public ElementConnection(ElementWrapper source, ElementWrapper target) {
-        if (source == null) {
-        	throw new IllegalArgumentException("source is null");        	
-        }
-        if (target == null) {
-        	throw new IllegalArgumentException("target is null");
-        }
+    public void localSetSource(ElementWrapper source) {
     	this.source = source;
+    }
+    
+    public void localSetTarget(ElementWrapper target) {
         this.target = target;
     }
     
@@ -91,29 +88,43 @@
         return source;
     }
     
-    
     public ElementWrapper getTarget() {
         return target;
     }
 
     public void addBendpoint(int index, Point point) {
         bendpoints.add(index, point);
+        internalSetBendpoints(bendpoints);
         notifyListeners(CHANGE_BENDPOINTS);
     }
-
+    
     public void removeBendpoint(int index) {
         bendpoints.remove(index);
+        internalSetBendpoints(bendpoints);
         notifyListeners(CHANGE_BENDPOINTS);
     }
 
     public void replaceBendpoint(int index, Point point) {
         bendpoints.set(index, point);
+        internalSetBendpoints(bendpoints);
         notifyListeners(CHANGE_BENDPOINTS);
     }
 
-    public List getBendpoints() {
+    protected void internalSetBendpoints(List<Point> bendPoints) {
+    }
+
+    public void localSetBendpoints(List<Point> bendpoints) {
+        this.bendpoints = bendpoints;
+    }
+    
+    public List<Point> getBendpoints() {
+        if (bendpoints == null) {
+            bendpoints = internalGetBendpoints();
+        }
         return bendpoints;
     }
+    
+    protected abstract List<Point> internalGetBendpoints();
 
     public void addListener(ModelListener listener) {
         listeners.add(listener);

Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/core/ElementConnectionFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/core/ElementConnectionFactory.java	2008-04-06 23:49:40 UTC (rev 19433)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/core/ElementConnectionFactory.java	2008-04-06 23:51:00 UTC (rev 19434)
@@ -20,10 +20,8 @@
  * 
  * @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
  */
-public class ElementConnectionFactory {
+public interface ElementConnectionFactory {
 	
-	public ElementConnection createElementConnection() {
-		return new ElementConnection();
-	}
+	ElementConnection createElementConnection();
 	
 }

Added: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/core/ElementContainer.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/core/ElementContainer.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/core/ElementContainer.java	2008-04-06 23:51:00 UTC (rev 19434)
@@ -0,0 +1,17 @@
+package org.drools.eclipse.flow.common.editor.core;
+
+import java.util.List;
+
+public interface ElementContainer {
+    
+    void addElement(ElementWrapper element);
+    
+    void localAddElement(ElementWrapper element);
+    
+    void removeElement(ElementWrapper element);
+    
+    List<ElementWrapper> getElements();
+    
+    ProcessWrapper getProcessWrapper();
+
+}

Added: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/core/ElementContainerElementWrapper.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/core/ElementContainerElementWrapper.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/core/ElementContainerElementWrapper.java	2008-04-06 23:51:00 UTC (rev 19434)
@@ -0,0 +1,42 @@
+package org.drools.eclipse.flow.common.editor.core;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public abstract class ElementContainerElementWrapper extends DefaultElementWrapper implements ElementContainer {
+
+    public static final int ADD_ELEMENT = 5;
+    public static final int REMOVE_ELEMENT = 6;
+    
+    List<ElementWrapper> elements = new ArrayList<ElementWrapper>();
+    
+    public void addElement(ElementWrapper element) {
+        internalAddElement(element);
+        localAddElement(element);
+        notifyListeners(ADD_ELEMENT);
+    }
+    
+    public void localAddElement(ElementWrapper element) {
+        elements.add(element);
+    }
+    
+    protected abstract void internalAddElement(ElementWrapper element);
+    
+    public void removeElement(ElementWrapper element) {
+        internalRemoveElement(element);
+        elements.remove(element);
+        element.setParent(null);
+        notifyListeners(REMOVE_ELEMENT);
+    }
+    
+    protected abstract void internalRemoveElement(ElementWrapper element);
+    
+    public List<ElementWrapper> getElements() {
+        return elements;
+    }
+    
+    public ProcessWrapper getProcessWrapper() {
+        return getParent().getProcessWrapper();
+    }
+
+}

Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/core/ElementWrapper.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/core/ElementWrapper.java	2008-04-06 23:49:40 UTC (rev 19433)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/core/ElementWrapper.java	2008-04-06 23:51:00 UTC (rev 19434)
@@ -38,13 +38,16 @@
     void setConstraint(Rectangle constraint);
     Rectangle getConstraint();
     
-    void setParent(ProcessWrapper parent);
+    void setParent(ElementContainer parent);
+    ElementContainer getParent();
     
-    List getOutgoingConnections();
-    List getIncomingConnections();
+    List<ElementConnection> getOutgoingConnections();
+    List<ElementConnection> getIncomingConnections();
     void addIncomingConnection(ElementConnection connection);
+    void localAddIncomingConnection(ElementConnection connection);
     void removeIncomingConnection(ElementConnection connection);
     void addOutgoingConnection(ElementConnection connection);
+    void localAddOutgoingConnection(ElementConnection connection);
     void removeOutgoingConnection(ElementConnection connection);
     boolean acceptsIncomingConnection(ElementConnection connection);
     boolean acceptsOutgoingConnection(ElementConnection connection);

Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/core/ProcessWrapper.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/core/ProcessWrapper.java	2008-04-06 23:49:40 UTC (rev 19433)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/core/ProcessWrapper.java	2008-04-06 23:51:00 UTC (rev 19434)
@@ -21,13 +21,14 @@
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
 import org.drools.eclipse.flow.common.view.property.ListPropertyDescriptor;
 import org.drools.eclipse.flow.ruleflow.view.property.variable.VariableListCellEditor;
 import org.drools.process.core.Process;
+import org.drools.process.core.context.variable.Variable;
+import org.drools.process.core.context.variable.VariableScope;
 import org.eclipse.ui.views.properties.ComboBoxPropertyDescriptor;
 import org.eclipse.ui.views.properties.IPropertyDescriptor;
 import org.eclipse.ui.views.properties.IPropertySource;
@@ -38,7 +39,7 @@
  * 
  * @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
  */
-public abstract class ProcessWrapper implements IPropertySource, Serializable {
+public abstract class ProcessWrapper implements ElementContainer, IPropertySource, Serializable {
 
 	public static final int CHANGE_ELEMENTS = 1;
 	public static final int CHANGE_ROUTER_LAYOUT = 2;
@@ -70,20 +71,23 @@
     }
     
     private Process process;
-    private Map elements = new HashMap();
-    private Integer routerLayout;
-    private transient List listeners = new ArrayList();
+    private Map<String, ElementWrapper> elements = new HashMap<String, ElementWrapper>();
+    private transient List<ModelListener> listeners = new ArrayList<ModelListener>();
     
     public ProcessWrapper() {
         process = createProcess();
     }
-
+    
     protected abstract Process createProcess();
 
     public Process getProcess() {
         return process;
     }
     
+    public void localSetProcess(Process process) {
+        this.process = process;
+    }
+    
     public String getName() {
         return process.getName() == null ? "" : process.getName();
     }
@@ -117,19 +121,21 @@
     }
     
     public Integer getRouterLayout() {
+        Integer routerLayout = (Integer) process.getMetaData("routerLayout");
     	if (routerLayout == null) {
-    		routerLayout = ROUTER_LAYOUT_SHORTEST_PATH;
+    		return ROUTER_LAYOUT_MANUAL;
     	}
     	return routerLayout;
     }
     
     public void setRouterLayout(Integer routerLayout) {
-    	this.routerLayout = routerLayout;
+    	process.setMetaData("routerLayout", routerLayout);
     	notifyListeners(CHANGE_ROUTER_LAYOUT);
     }
     
-    public List getElements() {
-        return Collections.unmodifiableList(new ArrayList(elements.values()));
+    public List<ElementWrapper> getElements() {
+        return Collections.unmodifiableList(
+            new ArrayList<ElementWrapper>(elements.values()));
     }
     
     public ElementWrapper getElement(String id) {
@@ -139,10 +145,14 @@
     public void addElement(ElementWrapper element) {
         internalAddElement(element);
 		//id is set in methode above
-		elements.put(element.getId(), element);
+		localAddElement(element);
 		notifyListeners(CHANGE_ELEMENTS);
     }
     
+    public void localAddElement(ElementWrapper element) {
+        elements.put(element.getId(), element);
+    }
+    
     protected abstract void internalAddElement(ElementWrapper element);
     
     public void removeElement(ElementWrapper element) {
@@ -153,6 +163,10 @@
     
     protected abstract void internalRemoveElement(ElementWrapper element);
     
+    public ProcessWrapper getProcessWrapper() {
+        return this;
+    }
+    
     public void addListener(ModelListener listener) {
         listeners.add(listener);
     }
@@ -163,15 +177,14 @@
     
     public void notifyListeners(int change) {
         ModelEvent event = new ModelEvent(change);
-        for (Iterator it = listeners.iterator(); it.hasNext(); ) {
-        	ModelListener listener = (ModelListener) it.next();
+        for (ModelListener listener: listeners) {
         	listener.modelChanged(event);
         }
     }
     
     private void readObject(ObjectInputStream aInputStream) throws ClassNotFoundException, IOException {
         aInputStream.defaultReadObject();
-        listeners = new ArrayList();
+        listeners = new ArrayList<ModelListener>();
     }
     
     public Object getEditableValue() {
@@ -196,10 +209,10 @@
             return getPackageName();
         }
         if (ROUTER_LAYOUT.equals(id)) {
-            return routerLayout;
+            return getRouterLayout();
         }
         if (VARIABLES.equals(id)) {
-            return getProcess().getVariables();
+            return ((VariableScope) getProcess().getDefaultContext(VariableScope.VARIABLE_SCOPE)).getVariables();
         }
         return null;
     }
@@ -225,7 +238,8 @@
             setRouterLayout(null);
         }
         if (VARIABLES.equals(id)) {
-            getProcess().setVariables(new ArrayList());
+            ((VariableScope) getProcess().getDefaultContext(
+                VariableScope.VARIABLE_SCOPE)).setVariables(new ArrayList<Variable>());
         }
     }
 
@@ -241,7 +255,8 @@
         } else if (ROUTER_LAYOUT.equals(id)) {
             setRouterLayout((Integer) value);
         } else if (VARIABLES.equals(id)) {
-            getProcess().setVariables((List) value);
+            ((VariableScope) getProcess().getDefaultContext(
+                VariableScope.VARIABLE_SCOPE)).setVariables((List<Variable>) value);
         }
     }
 }

Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/core/command/AddElementCommand.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/core/command/AddElementCommand.java	2008-04-06 23:49:40 UTC (rev 19433)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/core/command/AddElementCommand.java	2008-04-06 23:51:00 UTC (rev 19434)
@@ -15,8 +15,8 @@
  * limitations under the License.
  */
 
+import org.drools.eclipse.flow.common.editor.core.ElementContainer;
 import org.drools.eclipse.flow.common.editor.core.ElementWrapper;
-import org.drools.eclipse.flow.common.editor.core.ProcessWrapper;
 import org.eclipse.gef.commands.Command;
 
 /**
@@ -27,14 +27,14 @@
 public class AddElementCommand extends Command {
 
     private ElementWrapper child;
-    private ProcessWrapper parent;
+    private ElementContainer parent;
 
     public void execute() {
         parent.addElement(child);
         child.setParent(parent);
     }
 
-    protected ProcessWrapper getParent() {
+    protected ElementContainer getParent() {
         return parent;
     }
     
@@ -46,7 +46,7 @@
         child = newChild;
     }
 
-    public void setParent(ProcessWrapper newParent) {
+    public void setParent(ElementContainer newParent) {
         parent = newParent;
     }
 

Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/core/command/DeleteElementCommand.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/core/command/DeleteElementCommand.java	2008-04-06 23:49:40 UTC (rev 19433)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/core/command/DeleteElementCommand.java	2008-04-06 23:51:00 UTC (rev 19434)
@@ -20,8 +20,8 @@
 import java.util.List;
 
 import org.drools.eclipse.flow.common.editor.core.ElementConnection;
+import org.drools.eclipse.flow.common.editor.core.ElementContainer;
 import org.drools.eclipse.flow.common.editor.core.ElementWrapper;
-import org.drools.eclipse.flow.common.editor.core.ProcessWrapper;
 import org.eclipse.gef.commands.Command;
 
 /**
@@ -32,7 +32,7 @@
 public class DeleteElementCommand extends Command {
 
     private ElementWrapper child;
-    private ProcessWrapper parent;
+    private ElementContainer parent;
     
     private List incomingElementWrappers = new ArrayList();
     private List outgoingElementWrappers = new ArrayList();
@@ -89,7 +89,7 @@
         this.child = child;
     }
 
-    public void setParent(ProcessWrapper parent) {
+    public void setParent(ElementContainer parent) {
         this.parent = parent;
     }
 

Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/editpart/ElementConnectionEditPart.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/editpart/ElementConnectionEditPart.java	2008-04-06 23:49:40 UTC (rev 19433)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/editpart/ElementConnectionEditPart.java	2008-04-06 23:51:00 UTC (rev 19434)
@@ -40,7 +40,7 @@
  * 
  * @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
  */
-public class ElementConnectionEditPart extends AbstractConnectionEditPart implements ModelListener {
+public abstract class ElementConnectionEditPart extends AbstractConnectionEditPart implements ModelListener {
     
     protected void createEditPolicies() {
     	ConnectionEditPolicy connectionEditPolicy = new ConnectionEditPolicy();
@@ -50,9 +50,7 @@
         installEditPolicy(EditPolicy.CONNECTION_BENDPOINTS_ROLE, new ConnectionBendpointEditPolicy());
     }
     
-    protected ElementConnectionFactory getDefaultElementConnectionFactory() {
-    	return new ElementConnectionFactory();
-    }
+    protected abstract ElementConnectionFactory getDefaultElementConnectionFactory();
 
     protected IFigure createFigure() {
         PolylineConnection result = new PolylineConnection();

Added: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/editpart/ElementContainerEditPart.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/editpart/ElementContainerEditPart.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/editpart/ElementContainerEditPart.java	2008-04-06 23:51:00 UTC (rev 19434)
@@ -0,0 +1,54 @@
+package org.drools.eclipse.flow.common.editor.editpart;
+
+import java.util.List;
+
+import org.drools.eclipse.flow.common.editor.core.ElementContainerElementWrapper;
+import org.drools.eclipse.flow.common.editor.core.ModelEvent;
+import org.drools.eclipse.flow.common.editor.editpart.figure.ElementContainerFigure;
+import org.drools.eclipse.flow.common.editor.policy.ElementContainerLayoutEditPolicy;
+import org.eclipse.draw2d.IFigure;
+import org.eclipse.gef.EditPolicy;
+import org.eclipse.gef.MouseWheelHelper;
+import org.eclipse.gef.editparts.ViewportMouseWheelHelper;
+
+public class ElementContainerEditPart extends ElementEditPart {
+
+    protected ElementContainerElementWrapper getElementContainerElementWrapper() {
+        return (ElementContainerElementWrapper) getModel();
+    }
+
+    protected IFigure createFigure() {
+        return new ElementContainerFigure();
+    }
+
+    protected void createEditPolicies() {
+        super.createEditPolicies();
+        installEditPolicy(EditPolicy.DIRECT_EDIT_ROLE, null);
+        installEditPolicy(EditPolicy.LAYOUT_ROLE, new ElementContainerLayoutEditPolicy());
+    }
+    
+    public void modelChanged(ModelEvent event) {
+        if (event.getChange() == ElementContainerElementWrapper.ADD_ELEMENT) {
+            refreshChildren();
+        } else if (event.getChange() == ElementContainerElementWrapper.REMOVE_ELEMENT) {
+            refreshChildren();
+        } else {
+            super.modelChanged(event);
+        }
+    }
+    
+    public Object getAdapter(Class key) {
+        if (key == MouseWheelHelper.class) {
+            return new ViewportMouseWheelHelper(this);
+        }
+        return super.getAdapter(key);
+    }
+    
+    protected List getModelChildren() {
+        return getElementContainerElementWrapper().getElements();
+    }
+
+    public IFigure getContentPane() {
+        return ((ElementContainerFigure) getFigure()).getPane();
+    }
+}

Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/editpart/ElementEditPart.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/editpart/ElementEditPart.java	2008-04-06 23:49:40 UTC (rev 19433)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/editpart/ElementEditPart.java	2008-04-06 23:51:00 UTC (rev 19434)
@@ -17,6 +17,8 @@
 
 import java.util.List;
 
+import org.drools.eclipse.flow.common.editor.GenericModelEditor;
+import org.drools.eclipse.flow.common.editor.core.ElementConnection;
 import org.drools.eclipse.flow.common.editor.core.ElementWrapper;
 import org.drools.eclipse.flow.common.editor.core.ModelEvent;
 import org.drools.eclipse.flow.common.editor.core.ModelListener;
@@ -45,6 +47,7 @@
 public abstract class ElementEditPart extends AbstractGraphicalEditPart implements NodeEditPart, ModelListener {
     
     private DirectEditManager manager;
+    private GenericModelEditor editor;
     
     protected void createEditPolicies() {
         installEditPolicy(EditPolicy.GRAPHICAL_NODE_ROLE, new ElementNodeEditPolicy());
@@ -52,15 +55,15 @@
         installEditPolicy(EditPolicy.DIRECT_EDIT_ROLE, new ElementDirectEditPolicy());
     }
     
-    protected ElementWrapper getElementWrapper() {
+    public ElementWrapper getElementWrapper() {
     	return (ElementWrapper) getModel();
     }
 
-    protected List getModelSourceConnections() {
+    protected List<ElementConnection> getModelSourceConnections() {
         return getElementWrapper().getOutgoingConnections();
     }
     
-    protected List getModelTargetConnections() {
+    protected List<ElementConnection> getModelTargetConnections() {
         return getElementWrapper().getIncomingConnections();
     }
     
@@ -136,5 +139,13 @@
         }
         manager.show();
     }
+    
+    public void setEditor(GenericModelEditor editor) {
+        this.editor = editor;
+    }
+    
+    public GenericModelEditor getEditor() {
+        return this.editor;
+    }
 
 }

Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/editpart/ProcessEditPart.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/editpart/ProcessEditPart.java	2008-04-06 23:49:40 UTC (rev 19433)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/editpart/ProcessEditPart.java	2008-04-06 23:51:00 UTC (rev 19434)
@@ -23,7 +23,7 @@
 import org.drools.eclipse.flow.common.editor.core.ModelListener;
 import org.drools.eclipse.flow.common.editor.core.ProcessWrapper;
 import org.drools.eclipse.flow.common.editor.editpart.figure.ElementFigure;
-import org.drools.eclipse.flow.common.editor.policy.ProcessLayoutEditPolicy;
+import org.drools.eclipse.flow.common.editor.policy.ElementContainerLayoutEditPolicy;
 import org.eclipse.draw2d.Animation;
 import org.eclipse.draw2d.AutomaticRouter;
 import org.eclipse.draw2d.BendpointConnectionRouter;
@@ -65,7 +65,7 @@
         installEditPolicy(EditPolicy.NODE_ROLE, null);
         installEditPolicy(EditPolicy.GRAPHICAL_NODE_ROLE, null);
         installEditPolicy(EditPolicy.SELECTION_FEEDBACK_ROLE, null);
-        installEditPolicy(EditPolicy.LAYOUT_ROLE, new ProcessLayoutEditPolicy());
+        installEditPolicy(EditPolicy.LAYOUT_ROLE, new ElementContainerLayoutEditPolicy());
         installEditPolicy(EditPolicy.COMPONENT_ROLE, new RootComponentEditPolicy());
     }
 
@@ -73,7 +73,7 @@
         return getProcessWrapper().getElements();
     }
     
-    protected ProcessWrapper getProcessWrapper() {
+    public ProcessWrapper getProcessWrapper() {
     	return (ProcessWrapper) getModel();
     }
 

Added: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/editpart/figure/AbstractElementFigure.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/editpart/figure/AbstractElementFigure.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/editpart/figure/AbstractElementFigure.java	2008-04-06 23:51:00 UTC (rev 19434)
@@ -0,0 +1,69 @@
+package org.drools.eclipse.flow.common.editor.editpart.figure;
+/*
+ * 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.eclipse.draw2d.Label;
+import org.eclipse.draw2d.Panel;
+import org.eclipse.draw2d.geometry.Rectangle;
+import org.eclipse.swt.graphics.Image;
+
+/**
+ * Default implementation of an element Figure.
+ * 
+ * @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
+ */
+public abstract class AbstractElementFigure extends Panel implements ElementFigure {
+    
+    private boolean selected;
+    private Label label = new Label();
+
+    public AbstractElementFigure() {
+        add(label);
+        customizeFigure();
+        setSize(80, 40);
+    }
+    
+    public void setIcon(Image icon) {
+        label.setIcon(icon);
+    }
+    
+    public void setText(String text) {
+        label.setText(text);
+    }
+    
+    public Label getLabel() {
+        return label;
+    }
+    
+    public void setBounds(Rectangle bounds) {
+        super.setBounds(bounds);
+        label.setBounds(bounds);
+    }
+    
+    protected abstract void customizeFigure();
+    
+    public void setSelected(boolean b) {
+        selected = b;
+    }
+    
+    public boolean isSelected() {
+        return selected;
+    }
+
+    public void setFocus(boolean b) {
+        repaint();
+    }
+}

Added: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/editpart/figure/ElementContainerFigure.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/editpart/figure/ElementContainerFigure.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/editpart/figure/ElementContainerFigure.java	2008-04-06 23:51:00 UTC (rev 19434)
@@ -0,0 +1,55 @@
+package org.drools.eclipse.flow.common.editor.editpart.figure;
+
+import org.eclipse.draw2d.Figure;
+import org.eclipse.draw2d.FreeformLayer;
+import org.eclipse.draw2d.FreeformLayout;
+import org.eclipse.draw2d.FreeformViewport;
+import org.eclipse.draw2d.IFigure;
+import org.eclipse.draw2d.Label;
+import org.eclipse.draw2d.LineBorder;
+import org.eclipse.draw2d.ScrollPane;
+import org.eclipse.draw2d.StackLayout;
+import org.eclipse.swt.graphics.Image;
+
+public class ElementContainerFigure extends Figure implements ElementFigure {
+    
+    private IFigure pane;
+    private boolean selected = false;
+    
+    public ElementContainerFigure() {
+        setSize(200, 150);
+        ScrollPane scrollpane = new ScrollPane();
+        pane = new FreeformLayer();
+        pane.setLayoutManager(new FreeformLayout());
+        setLayoutManager(new StackLayout());
+        add(scrollpane);
+        scrollpane.setViewport(new FreeformViewport());
+        scrollpane.setContents(pane);
+    }
+
+    public Label getLabel() {
+        return null;
+    }
+
+    public boolean isSelected() {
+        return selected;
+    }
+
+    public void setIcon(Image icon) {
+        // Do nothing
+    }
+
+    public void setSelected(boolean b) {
+        this.selected = b;
+        ((LineBorder) getBorder()).setWidth(b ? 3 : 1);
+    }
+
+    public void setText(String text) {
+        // Do nothing
+    }
+    
+    public IFigure getPane() {
+        return pane;
+    }
+
+}

Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/editpart/figure/ElementFigure.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/editpart/figure/ElementFigure.java	2008-04-06 23:49:40 UTC (rev 19433)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/editpart/figure/ElementFigure.java	2008-04-06 23:51:00 UTC (rev 19434)
@@ -15,9 +15,8 @@
  * limitations under the License.
  */
 
+import org.eclipse.draw2d.IFigure;
 import org.eclipse.draw2d.Label;
-import org.eclipse.draw2d.Panel;
-import org.eclipse.draw2d.geometry.Rectangle;
 import org.eclipse.swt.graphics.Image;
 
 /**
@@ -25,45 +24,16 @@
  * 
  * @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
  */
-public abstract class ElementFigure extends Panel {
+public interface ElementFigure extends IFigure {
     
-    private boolean selected;
-    private Label label = new Label();
-
-    public ElementFigure() {
-        add(label);
-        customizeFigure();
-        setSize(80, 40);
-    }
+    void setIcon(Image icon);
     
-    public void setIcon(Image icon) {
-        label.setIcon(icon);
-    }
+    void setText(String text);
     
-    public void setText(String text) {
-        label.setText(text);
-    }
+    void setSelected(boolean b);
     
-    public Label getLabel() {
-        return label;
-    }
+    boolean isSelected();
     
-    public void setBounds(Rectangle bounds) {
-        super.setBounds(bounds);
-        label.setBounds(bounds);
-    }
-    
-    protected abstract void customizeFigure();
-    
-    public void setSelected(boolean b) {
-        selected = b;
-    }
-    
-    public boolean isSelected() {
-        return selected;
-    }
+    Label getLabel();
 
-    public void setFocus(boolean b) {
-        repaint();
-    }
 }

Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/editpart/work/SampleCustomEditor.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/editpart/work/SampleCustomEditor.java	2008-04-06 23:49:40 UTC (rev 19433)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/editpart/work/SampleCustomEditor.java	2008-04-06 23:51:00 UTC (rev 19434)
@@ -8,6 +8,7 @@
 import org.drools.process.core.ParameterDefinition;
 import org.drools.process.core.Work;
 import org.drools.process.core.WorkDefinition;
+import org.drools.process.core.WorkEditor;
 import org.drools.process.core.impl.WorkImpl;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.layout.GridData;

Deleted: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/editpart/work/WorkEditor.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/editpart/work/WorkEditor.java	2008-04-06 23:49:40 UTC (rev 19433)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/editpart/work/WorkEditor.java	2008-04-06 23:51:00 UTC (rev 19434)
@@ -1,16 +0,0 @@
-package org.drools.eclipse.flow.common.editor.editpart.work;
-
-import org.drools.process.core.Work;
-import org.drools.process.core.WorkDefinition;
-
-public interface WorkEditor {
-    
-    void setWorkDefinition(WorkDefinition definition);
-    
-    void setWork(Work work);
-    
-    void show();
-    
-    Work getWork();
-
-}

Copied: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/policy/ElementContainerLayoutEditPolicy.java (from rev 18471, labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/policy/ProcessLayoutEditPolicy.java)
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/policy/ElementContainerLayoutEditPolicy.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/policy/ElementContainerLayoutEditPolicy.java	2008-04-06 23:51:00 UTC (rev 19434)
@@ -0,0 +1,60 @@
+package org.drools.eclipse.flow.common.editor.policy;
+/*
+ * 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.eclipse.flow.common.editor.core.ElementContainer;
+import org.drools.eclipse.flow.common.editor.core.ElementWrapper;
+import org.drools.eclipse.flow.common.editor.core.command.AddElementCommand;
+import org.drools.eclipse.flow.common.editor.core.command.ChangeConstraintCommand;
+import org.eclipse.draw2d.geometry.Rectangle;
+import org.eclipse.gef.EditPart;
+import org.eclipse.gef.Request;
+import org.eclipse.gef.commands.Command;
+import org.eclipse.gef.editpolicies.XYLayoutEditPolicy;
+import org.eclipse.gef.requests.CreateRequest;
+
+/**
+ * Policy for performing layout of a process.
+ * 
+ * @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
+ */
+public class ElementContainerLayoutEditPolicy extends XYLayoutEditPolicy {
+    
+    protected Command getCreateCommand(CreateRequest request) {
+        AddElementCommand command = new AddElementCommand();
+        command.setParent((ElementContainer) getHost().getModel());
+        ElementWrapper element = (ElementWrapper) request.getNewObject();
+        element.setConstraint((Rectangle) getConstraintFor(request));
+        command.setChild(element);
+        return command;
+    }
+
+    protected Command getDeleteDependantCommand(Request request) {
+        return null;
+    }
+
+    protected Command createAddCommand(EditPart child, Object constraint) {
+        // TODO this is needed to allow dragging of elements from one container to another
+        return null;
+    }
+
+    protected Command createChangeConstraintCommand(EditPart child, Object constraint) {
+        ChangeConstraintCommand command = new ChangeConstraintCommand();
+        command.setElement((ElementWrapper) child.getModel());
+        command.setConstraint((Rectangle)constraint);
+        return command;
+    }
+}

Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/policy/ElementEditPolicy.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/policy/ElementEditPolicy.java	2008-04-06 23:49:40 UTC (rev 19433)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/policy/ElementEditPolicy.java	2008-04-06 23:51:00 UTC (rev 19434)
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 
+import org.drools.eclipse.flow.common.editor.core.ElementContainer;
 import org.drools.eclipse.flow.common.editor.core.ElementWrapper;
 import org.drools.eclipse.flow.common.editor.core.ProcessWrapper;
 import org.drools.eclipse.flow.common.editor.core.command.DeleteElementCommand;
@@ -30,7 +31,7 @@
 public class ElementEditPolicy extends ComponentEditPolicy {
 
     protected Command createDeleteCommand(GroupRequest deleteRequest) {
-        ProcessWrapper parent = (ProcessWrapper) getHost().getParent().getModel();
+        ElementContainer parent = (ElementContainer) getHost().getParent().getModel();
         DeleteElementCommand deleteCmd = new DeleteElementCommand();
         deleteCmd.setParent(parent);
         deleteCmd.setChild((ElementWrapper) (getHost().getModel()));

Deleted: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/policy/ProcessLayoutEditPolicy.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/policy/ProcessLayoutEditPolicy.java	2008-04-06 23:49:40 UTC (rev 19433)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/policy/ProcessLayoutEditPolicy.java	2008-04-06 23:51:00 UTC (rev 19434)
@@ -1,63 +0,0 @@
-package org.drools.eclipse.flow.common.editor.policy;
-/*
- * 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.eclipse.flow.common.editor.core.ElementWrapper;
-import org.drools.eclipse.flow.common.editor.core.ProcessWrapper;
-import org.drools.eclipse.flow.common.editor.core.command.AddElementCommand;
-import org.drools.eclipse.flow.common.editor.core.command.ChangeConstraintCommand;
-import org.eclipse.draw2d.geometry.Rectangle;
-import org.eclipse.gef.EditPart;
-import org.eclipse.gef.Request;
-import org.eclipse.gef.commands.Command;
-import org.eclipse.gef.editpolicies.XYLayoutEditPolicy;
-import org.eclipse.gef.requests.CreateRequest;
-
-/**
- * Policy for performing layout of a process.
- * 
- * @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
- */
-public class ProcessLayoutEditPolicy extends XYLayoutEditPolicy {
-    
-    protected Command getCreateCommand(CreateRequest request) {
-        AddElementCommand command = new AddElementCommand();
-        command.setParent((ProcessWrapper) getHost().getModel());
-        ElementWrapper element = (ElementWrapper) request.getNewObject();
-        element.setConstraint((Rectangle) getConstraintFor(request));
-        command.setChild(element);
-        return command;
-    }
-
-    protected Command getDeleteDependantCommand(Request request) {
-        return null;
-    }
-
-    protected Command createAddCommand(EditPart child, Object constraint) {
-        ElementWrapper element = (ElementWrapper) child.getModel();
-        AddElementCommand add = new AddElementCommand();
-        add.setParent((ProcessWrapper) getHost().getModel());
-        add.setChild(element);
-        return add;
-    }
-
-    protected Command createChangeConstraintCommand(EditPart child, Object constraint) {
-        ChangeConstraintCommand command = new ChangeConstraintCommand();
-        command.setElement((ElementWrapper) child.getModel());
-        command.setConstraint((Rectangle)constraint);
-        return command;
-    }
-}

Added: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/view/property/ProcessLabelProvider.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/view/property/ProcessLabelProvider.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/view/property/ProcessLabelProvider.java	2008-04-06 23:51:00 UTC (rev 19434)
@@ -0,0 +1,44 @@
+package org.drools.eclipse.flow.common.view.property;
+
+import org.drools.eclipse.flow.common.editor.editpart.ElementConnectionEditPart;
+import org.drools.eclipse.flow.common.editor.editpart.ElementEditPart;
+import org.drools.eclipse.flow.common.editor.editpart.ProcessEditPart;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.swt.graphics.Image;
+
+public class ProcessLabelProvider implements ILabelProvider {
+
+    public Image getImage(Object element) {
+        return null;
+    }
+
+    public String getText(Object element) {
+        if (element instanceof IStructuredSelection) {
+            element = ((IStructuredSelection)element).getFirstElement();
+        }
+        if (element instanceof ElementEditPart) {
+            return "Element " + ((ElementEditPart) element).getElementWrapper().getName();
+        } else if (element instanceof ProcessEditPart) {
+            return "Process " + ((ProcessEditPart) element).getProcessWrapper().getName();
+        } else if (element instanceof ElementConnectionEditPart) {
+            element = ((ElementConnectionEditPart) element).getModel().toString();
+        }
+        return element.toString();
+    }
+
+    public boolean isLabelProperty(Object element, String property) {
+        return false;
+    }
+
+    public void addListener(ILabelProviderListener listener) {
+    }
+
+    public void removeListener(ILabelProviderListener listener) {
+    }
+
+    public void dispose() {
+    }
+
+}

Added: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/view/property/ProcessTypeMapper.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/view/property/ProcessTypeMapper.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/view/property/ProcessTypeMapper.java	2008-04-06 23:51:00 UTC (rev 19434)
@@ -0,0 +1,26 @@
+package org.drools.eclipse.flow.common.view.property;
+
+import org.drools.eclipse.flow.common.editor.editpart.ElementConnectionEditPart;
+import org.drools.eclipse.flow.common.editor.editpart.ElementEditPart;
+import org.drools.eclipse.flow.common.editor.editpart.ProcessEditPart;
+import org.eclipse.ui.views.properties.tabbed.ITypeMapper;
+
+public class ProcessTypeMapper implements ITypeMapper {
+    
+    public ProcessTypeMapper() {
+    }
+
+    public Class<?> mapType(Object object) {
+        if (object instanceof ElementEditPart) {
+            return ((ElementEditPart) object).getModel().getClass();
+        }
+        if (object instanceof ProcessEditPart) {
+            return ((ProcessEditPart) object).getModel().getClass();
+        }
+        if (object instanceof ElementConnectionEditPart) {
+            return ((ElementConnectionEditPart) object).getModel().getClass();
+        }
+        return object.getClass();
+    }
+
+}

Added: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/AbstractNodeWrapper.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/AbstractNodeWrapper.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/AbstractNodeWrapper.java	2008-04-06 23:51:00 UTC (rev 19434)
@@ -0,0 +1,71 @@
+package org.drools.eclipse.flow.ruleflow.core;
+/*
+ * 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.eclipse.flow.common.editor.core.DefaultElementWrapper;
+import org.drools.workflow.core.Node;
+import org.eclipse.draw2d.geometry.Rectangle;
+
+/**
+ * Wrapper for a node.
+ * 
+ * @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
+ */
+public abstract class AbstractNodeWrapper extends DefaultElementWrapper implements NodeWrapper {
+	
+    public void setNode(Node node) {
+        setElement(node);
+    }
+    
+    public Node getNode() {
+        return (Node) getElement();
+    }
+    
+    public String getId() {
+        long id = getNode().getId();
+        return id == -1 ? null : getNode().getId() + "";
+    }
+
+    public String getName() {
+        return getNode().getName();
+    }
+
+    public void internalSetName(String name) {
+        getNode().setName(name);    
+        notifyListeners(CHANGE_NAME);
+    }
+    
+    protected void internalSetConstraint(Rectangle constraint) {
+        Node node = getNode();
+        node.setMetaData("x", constraint.x);
+        node.setMetaData("y", constraint.y);
+        node.setMetaData("width", constraint.width);
+        node.setMetaData("height", constraint.height);
+    }
+    
+    public Rectangle internalGetConstraint() {
+        Node node = getNode();
+        Integer x = (Integer) node.getMetaData("x");
+        Integer y = (Integer) node.getMetaData("y");
+        Integer width = (Integer) node.getMetaData("width");
+        Integer height = (Integer) node.getMetaData("height");
+        return new Rectangle(
+            x == null ? 0 : x,
+            y == null ? 0 : y,
+            width == null ? -1 : width,
+            height == null ? -1 : height);
+    }
+}

Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/ActionWrapper.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/ActionWrapper.java	2008-04-06 23:49:40 UTC (rev 19433)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/ActionWrapper.java	2008-04-06 23:51:00 UTC (rev 19434)
@@ -18,6 +18,7 @@
 import org.drools.eclipse.flow.common.editor.core.DefaultElementWrapper;
 import org.drools.eclipse.flow.common.editor.core.ElementConnection;
 import org.drools.eclipse.flow.ruleflow.view.property.action.ActionPropertyDescriptor;
+import org.drools.workflow.core.WorkflowProcess;
 import org.drools.workflow.core.node.ActionNode;
 import org.eclipse.ui.views.properties.IPropertyDescriptor;
 
@@ -26,7 +27,7 @@
  * 
  * @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
  */
-public class ActionWrapper extends NodeWrapper {
+public class ActionWrapper extends AbstractNodeWrapper {
 
 	private static final long serialVersionUID = -3618183280436588589L;
 
@@ -43,7 +44,7 @@
         descriptors = new IPropertyDescriptor[DefaultElementWrapper.descriptors.length + 1];
         System.arraycopy(DefaultElementWrapper.descriptors, 0, descriptors, 0, DefaultElementWrapper.descriptors.length);
         descriptors[descriptors.length - 1] = 
-            new ActionPropertyDescriptor(ACTION, "Action", getActionNode(), ((RuleFlowProcessWrapper) getParent()).getRuleFlowProcess());
+            new ActionPropertyDescriptor(ACTION, "Action", getActionNode(), (WorkflowProcess) getParent().getProcessWrapper().getProcess());
     }
     
     public ActionNode getActionNode() {

Added: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/CompositeNodeWrapper.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/CompositeNodeWrapper.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/CompositeNodeWrapper.java	2008-04-06 23:51:00 UTC (rev 19434)
@@ -0,0 +1,82 @@
+package org.drools.eclipse.flow.ruleflow.core;
+
+import org.drools.eclipse.flow.common.editor.core.ElementConnection;
+import org.drools.eclipse.flow.common.editor.core.ElementContainerElementWrapper;
+import org.drools.eclipse.flow.common.editor.core.ElementWrapper;
+import org.drools.workflow.core.Node;
+import org.drools.workflow.core.node.CompositeNode;
+import org.eclipse.draw2d.geometry.Rectangle;
+
+public class CompositeNodeWrapper extends ElementContainerElementWrapper implements NodeWrapper {
+
+    private static final long serialVersionUID = 400L;
+
+    public CompositeNodeWrapper() {
+        setNode(new CompositeNode());
+        getCompositeNode().setName("CompositeNode");
+    }
+    
+    public void setNode(Node node) {
+        setElement(node);
+    }
+    
+    public Node getNode() {
+        return (Node) getElement();
+    }
+    
+    public String getId() {
+        long id = getNode().getId();
+        return id == -1 ? null : getNode().getId() + "";
+    }
+
+    public String getName() {
+        return getNode().getName();
+    }
+
+    public void internalSetName(String name) {
+        getNode().setName(name);    
+        notifyListeners(CHANGE_NAME);
+    }
+    
+    protected void internalSetConstraint(Rectangle constraint) {
+        Node node = getNode();
+        node.setMetaData("x", constraint.x);
+        node.setMetaData("y", constraint.y);
+        node.setMetaData("width", constraint.width);
+        node.setMetaData("height", constraint.height);
+    }
+    
+    public Rectangle internalGetConstraint() {
+        Node node = getNode();
+        Integer x = (Integer) node.getMetaData("x");
+        Integer y = (Integer) node.getMetaData("y");
+        Integer width = (Integer) node.getMetaData("width");
+        Integer height = (Integer) node.getMetaData("height");
+        return new Rectangle(
+            x == null ? 0 : x,
+            y == null ? 0 : y,
+            width == null ? -1 : width,
+            height == null ? -1 : height);
+    }
+    
+    public CompositeNode getCompositeNode() {
+        return (CompositeNode) getNode();
+    }
+    
+    public boolean acceptsIncomingConnection(ElementConnection connection) {
+        return getIncomingConnections().isEmpty();
+    }
+
+    public boolean acceptsOutgoingConnection(ElementConnection connection) {
+        return getOutgoingConnections().isEmpty();
+    }
+
+    protected void internalAddElement(ElementWrapper element) {
+        getCompositeNode().addNode(((NodeWrapper) element).getNode());
+    }
+
+    protected void internalRemoveElement(ElementWrapper element) {
+        getCompositeNode().removeNode(((NodeWrapper) element).getNode());
+    }
+
+}

Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/ConnectionWrapper.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/ConnectionWrapper.java	2008-04-06 23:49:40 UTC (rev 19433)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/ConnectionWrapper.java	2008-04-06 23:51:00 UTC (rev 19434)
@@ -15,10 +15,16 @@
  * limitations under the License.
  */
 
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
 import org.drools.eclipse.flow.common.editor.core.ElementConnection;
 import org.drools.eclipse.flow.common.editor.core.ElementWrapper;
+import org.drools.workflow.core.Connection;
 import org.drools.workflow.core.Node;
 import org.drools.workflow.core.impl.ConnectionImpl;
+import org.eclipse.draw2d.geometry.Point;
 
 /**
  * Wrapper for a connection.
@@ -34,10 +40,14 @@
 	public ConnectionWrapper() {
 	}
 	
-	public ConnectionWrapper(NodeWrapper source, NodeWrapper target) {
-        super(source, target);
-    }
+	public Connection getConnection() {
+	    return connection;
+	}
 	
+	public void localSetConnection(Connection connection) {
+	    this.connection = (ConnectionImpl) connection;
+	}
+	
 	public void disconnect() {
 		super.disconnect();
 		connection.terminate();
@@ -50,4 +60,40 @@
 		Node to = ((NodeWrapper) getTarget()).getNode();
 		connection = new ConnectionImpl(from, Node.CONNECTION_DEFAULT_TYPE, to, Node.CONNECTION_DEFAULT_TYPE);		
 	}
+
+    protected List<Point> internalGetBendpoints() {
+        return (List<Point>) stringToBendpoints((String) connection.getMetaData("bendpoints"));
+    }
+    
+    protected void internalSetBendpoints(List<Point> bendpoints) {
+        connection.setMetaData("bendpoints", bendpointsToString(bendpoints));
+    }
+    
+    private String bendpointsToString(List<Point> bendpoints) {
+        if (bendpoints == null) {
+            return null;
+        }
+        String result = "[";
+        for (Iterator<Point> iterator = bendpoints.iterator(); iterator.hasNext(); ) {
+            Point point = iterator.next();
+            result += point.x + "," + point.y + (iterator.hasNext() ? ";" : "");
+        }
+        result += "]";
+        return result;
+    }
+    
+    private List<Point> stringToBendpoints(String s) {
+        List<Point> result = new ArrayList<Point>();
+        if (s == null) {
+            return result;
+        }
+        s = s.substring(1, s.length() - 1);
+        String[] bendpoints = s.split(";");
+        for (String bendpoint: bendpoints) {
+            String[] xy = bendpoint.split(",");
+            result.add(new Point(new Integer(xy[0]), new Integer(xy[1])));
+        }
+        return result;
+    }
+	
 }

Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/ConnectionWrapperFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/ConnectionWrapperFactory.java	2008-04-06 23:49:40 UTC (rev 19433)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/ConnectionWrapperFactory.java	2008-04-06 23:51:00 UTC (rev 19434)
@@ -23,14 +23,10 @@
  * 
  * @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
  */
-public class ConnectionWrapperFactory extends ElementConnectionFactory {
+public class ConnectionWrapperFactory implements ElementConnectionFactory {
 	
-	public ConnectionWrapperFactory() {
-	}
-	
 	public ElementConnection createElementConnection() {
-		ConnectionWrapper connection = new ConnectionWrapper();
-		return connection;
+		return new ConnectionWrapper();
 	}
 
 }

Added: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/DefaultNodeWrapper.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/DefaultNodeWrapper.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/DefaultNodeWrapper.java	2008-04-06 23:51:00 UTC (rev 19434)
@@ -0,0 +1,34 @@
+package org.drools.eclipse.flow.ruleflow.core;
+
+import org.drools.eclipse.DroolsEclipsePlugin;
+import org.drools.eclipse.flow.common.editor.core.ElementConnection;
+import org.drools.workflow.core.Node;
+import org.drools.workflow.core.NodeExtension;
+
+public class DefaultNodeWrapper extends AbstractNodeWrapper {
+
+    private static final long serialVersionUID = 400L;
+    
+    public DefaultNodeWrapper(String nodeClassName) {
+        try {
+            Class<?> nodeClass = Class.forName(nodeClassName);
+            Node node = (Node) nodeClass.newInstance();
+            if (node instanceof NodeExtension) {
+                NodeExtension nodeExtension = (NodeExtension) node;
+                node.setName(nodeExtension.getDefaultName());
+            }
+            setNode(node);
+        } catch (Throwable t) {
+            DroolsEclipsePlugin.log(t);
+        }
+    }
+
+    public boolean acceptsIncomingConnection(ElementConnection connection) {
+        return getIncomingConnections().isEmpty();
+    }
+
+    public boolean acceptsOutgoingConnection(ElementConnection connection) {
+        return getOutgoingConnections().isEmpty();
+    }
+
+}

Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/EndNodeWrapper.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/EndNodeWrapper.java	2008-04-06 23:49:40 UTC (rev 19433)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/EndNodeWrapper.java	2008-04-06 23:51:00 UTC (rev 19434)
@@ -23,7 +23,7 @@
  * 
  * @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
  */
-public class EndNodeWrapper extends NodeWrapper {
+public class EndNodeWrapper extends AbstractNodeWrapper {
 
     private static final long serialVersionUID = 400L;
 

Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/JoinWrapper.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/JoinWrapper.java	2008-04-06 23:49:40 UTC (rev 19433)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/JoinWrapper.java	2008-04-06 23:51:00 UTC (rev 19434)
@@ -17,7 +17,6 @@
 
 import org.drools.eclipse.flow.common.editor.core.DefaultElementWrapper;
 import org.drools.eclipse.flow.common.editor.core.ElementConnection;
-import org.drools.workflow.core.Connection;
 import org.drools.workflow.core.node.Join;
 import org.eclipse.ui.views.properties.ComboBoxPropertyDescriptor;
 import org.eclipse.ui.views.properties.IPropertyDescriptor;
@@ -27,7 +26,7 @@
  * 
  * @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
  */
-public class JoinWrapper extends NodeWrapper {
+public class JoinWrapper extends AbstractNodeWrapper {
 
     private static final long serialVersionUID = 400L;
     private static IPropertyDescriptor[] descriptors;

Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/MilestoneWrapper.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/MilestoneWrapper.java	2008-04-06 23:49:40 UTC (rev 19433)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/MilestoneWrapper.java	2008-04-06 23:51:00 UTC (rev 19434)
@@ -18,6 +18,7 @@
 import org.drools.eclipse.flow.common.editor.core.DefaultElementWrapper;
 import org.drools.eclipse.flow.common.editor.core.ElementConnection;
 import org.drools.eclipse.flow.ruleflow.view.property.constraint.MilestoneConstraintPropertyDescriptor;
+import org.drools.workflow.core.WorkflowProcess;
 import org.drools.workflow.core.node.MilestoneNode;
 import org.eclipse.ui.views.properties.IPropertyDescriptor;
 
@@ -26,7 +27,7 @@
  * 
  * @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
  */
-public class MilestoneWrapper extends NodeWrapper {
+public class MilestoneWrapper extends AbstractNodeWrapper {
 
 	private static final long serialVersionUID = -5976489437109982927L;
 	private IPropertyDescriptor[] descriptors;
@@ -42,7 +43,7 @@
         descriptors = new IPropertyDescriptor[DefaultElementWrapper.descriptors.length + 1];
         System.arraycopy(DefaultElementWrapper.descriptors, 0, descriptors, 0, DefaultElementWrapper.descriptors.length);
         descriptors[descriptors.length - 1] = 
-            new MilestoneConstraintPropertyDescriptor(CONSTRAINT, "Constraint", getMilestoneNode(), ((RuleFlowProcessWrapper) getParent()).getRuleFlowProcess());
+            new MilestoneConstraintPropertyDescriptor(CONSTRAINT, "Constraint", getMilestoneNode(), (WorkflowProcess) getParent().getProcessWrapper().getProcess());
     }
     
     public MilestoneNode getMilestoneNode() {

Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/NodeWrapper.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/NodeWrapper.java	2008-04-06 23:49:40 UTC (rev 19433)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/NodeWrapper.java	2008-04-06 23:51:00 UTC (rev 19434)
@@ -1,4 +1,8 @@
 package org.drools.eclipse.flow.ruleflow.core;
+
+import org.drools.eclipse.flow.common.editor.core.ElementWrapper;
+import org.drools.workflow.core.Node;
+
 /*
  * Copyright 2005 JBoss Inc
  * 
@@ -15,36 +19,16 @@
  * limitations under the License.
  */
 
-import org.drools.eclipse.flow.common.editor.core.DefaultElementWrapper;
-import org.drools.workflow.core.Node;
 
 /**
  * Wrapper for a node.
  * 
  * @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
  */
-public abstract class NodeWrapper extends DefaultElementWrapper {
+public interface NodeWrapper extends ElementWrapper {
 	
-    protected void setNode(Node node) {
-        setElement(node);
-    }
+    void setNode(Node node);
     
-    public Node getNode() {
-        return (Node) getElement();
-    }
+    Node getNode();
     
-    public String getId() {
-        long id = getNode().getId();
-        return id == -1 ? null : getNode().getId() + "";
-    }
-
-    public String getName() {
-        return getNode().getName();
-    }
-
-    public void internalSetName(String name) {
-        getNode().setName(name);    
-        notifyListeners(CHANGE_NAME);
-    }
-    
 }

Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/RuleFlowProcessWrapper.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/RuleFlowProcessWrapper.java	2008-04-06 23:49:40 UTC (rev 19433)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/RuleFlowProcessWrapper.java	2008-04-06 23:51:00 UTC (rev 19434)
@@ -19,6 +19,7 @@
 import org.drools.eclipse.flow.common.editor.core.ProcessWrapper;
 import org.drools.process.core.Process;
 import org.drools.ruleflow.core.RuleFlowProcess;
+import org.drools.workflow.core.Node;
 
 /**
  * Wrapper for a RuleFlow process.
@@ -38,7 +39,15 @@
     }
 
     protected void internalAddElement(ElementWrapper element) {
-        getRuleFlowProcess().addNode(((NodeWrapper) element).getNode()); 
+        Node node = ((NodeWrapper) element).getNode();
+        long id = 0;
+        for (Node n: getRuleFlowProcess().getNodes()) {
+            if (n.getId() > id) {
+                id = n.getId();
+            }
+        }
+        node.setId(++id);
+        getRuleFlowProcess().addNode(node); 
     }
 
     protected void internalRemoveElement(ElementWrapper element) {

Added: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/RuleFlowWrapperBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/RuleFlowWrapperBuilder.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/RuleFlowWrapperBuilder.java	2008-04-06 23:51:00 UTC (rev 19434)
@@ -0,0 +1,117 @@
+package org.drools.eclipse.flow.ruleflow.core;
+
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.drools.eclipse.WorkItemDefinitions;
+import org.drools.eclipse.flow.common.editor.core.ElementContainer;
+import org.drools.process.core.Work;
+import org.drools.process.core.WorkDefinition;
+import org.drools.ruleflow.core.RuleFlowProcess;
+import org.drools.workflow.core.Connection;
+import org.drools.workflow.core.Node;
+import org.drools.workflow.core.node.ActionNode;
+import org.drools.workflow.core.node.CompositeNode;
+import org.drools.workflow.core.node.EndNode;
+import org.drools.workflow.core.node.Join;
+import org.drools.workflow.core.node.MilestoneNode;
+import org.drools.workflow.core.node.RuleSetNode;
+import org.drools.workflow.core.node.Split;
+import org.drools.workflow.core.node.StartNode;
+import org.drools.workflow.core.node.SubProcessNode;
+import org.drools.workflow.core.node.TimerNode;
+import org.drools.workflow.core.node.WorkItemNode;
+import org.eclipse.core.resources.IResource;
+
+public class RuleFlowWrapperBuilder {
+    
+    public static RuleFlowProcessWrapper getProcessWrapper(RuleFlowProcess process, IResource resource) {
+        if (process == null) {
+            return null;
+        }
+        RuleFlowProcessWrapper processWrapper = new RuleFlowProcessWrapper();
+        processWrapper.localSetProcess(process);
+        Set<Node> nodes = new HashSet<Node>();
+        nodes.addAll(Arrays.asList(process.getNodes()));
+        Set<Connection> connections = new HashSet<Connection>();
+        processNodes(nodes, connections, processWrapper, resource);
+        return processWrapper;
+    }
+    
+    private static void processNodes(Set<Node> nodes, Set<Connection> connections, ElementContainer container, IResource resource) {
+        Map<Node, NodeWrapper> nodeWrappers = new HashMap<Node, NodeWrapper>();
+        for (Node node: nodes) {
+            NodeWrapper nodeWrapper = getNodeWrapper(node, resource);
+            nodeWrapper.setNode(node);
+            nodeWrapper.setParent(container);
+            container.localAddElement(nodeWrapper);
+            nodeWrappers.put(node, nodeWrapper);
+            for (List<Connection> inConnections: node.getIncomingConnections().values()) {
+                for (Connection connection: inConnections) {
+                    connections.add(connection);
+                }
+            }
+            for (List<Connection> outConnections: node.getOutgoingConnections().values()) {
+                for (Connection connection: outConnections) {
+                    connections.add(connection);
+                }
+            }
+        }
+        for (Connection connection: connections) {
+            ConnectionWrapper connectionWrapper = new ConnectionWrapper();
+            connectionWrapper.localSetConnection(connection);
+            connectionWrapper.localSetBendpoints(null);
+            NodeWrapper from = nodeWrappers.get(connection.getFrom());
+            connectionWrapper.localSetSource(from);
+            from.localAddOutgoingConnection(connectionWrapper);
+            NodeWrapper to = nodeWrappers.get(connection.getTo());
+            connectionWrapper.localSetTarget(to);
+            to.localAddIncomingConnection(connectionWrapper);
+        }
+    }
+    
+    private static NodeWrapper getNodeWrapper(Node node, IResource resource) {
+        if (node instanceof StartNode) {
+            return new StartNodeWrapper();
+        } else if (node instanceof EndNode) {
+            return new EndNodeWrapper();
+        } else if (node instanceof ActionNode) {
+            return new ActionWrapper();
+        } else if (node instanceof RuleSetNode) {
+            return new RuleSetNodeWrapper();
+        } else if (node instanceof SubProcessNode) {
+            return new SubFlowWrapper();
+        } else if (node instanceof CompositeNode) {
+            return new CompositeNodeWrapper();
+        } else if (node instanceof Join) {
+            return new JoinWrapper();
+        } else if (node instanceof Split) {
+            return new SplitWrapper();
+        } else if (node instanceof MilestoneNode) {
+            return new MilestoneWrapper();
+        } else if (node instanceof TimerNode) {
+            return new TimerWrapper();
+        } else if (node instanceof WorkItemNode) {
+            WorkItemWrapper workItemWrapper = new WorkItemWrapper();
+            Work work = ((WorkItemNode) node).getWork();
+            if (work != null && work.getName() != null) {
+                WorkDefinition workDefinition = 
+                    WorkItemDefinitions.getWorkDefinitions(resource)
+                        .get(work.getName());
+                if (workDefinition == null) {
+                    throw new IllegalArgumentException(
+                        "Could not find work definition for work " + work.getName());
+                }
+                workItemWrapper.setWorkDefinition(workDefinition);
+            }
+            return workItemWrapper;
+        }
+        throw new IllegalArgumentException(
+            "Could not find node wrapper for node " + node);
+    }
+
+}

Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/RuleSetNodeWrapper.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/RuleSetNodeWrapper.java	2008-04-06 23:49:40 UTC (rev 19433)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/RuleSetNodeWrapper.java	2008-04-06 23:51:00 UTC (rev 19434)
@@ -26,7 +26,7 @@
  * 
  * @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
  */
-public class RuleSetNodeWrapper extends NodeWrapper {
+public class RuleSetNodeWrapper extends AbstractNodeWrapper {
 
     private static final long serialVersionUID = 400L;
     private static IPropertyDescriptor[] descriptors;

Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/SplitWrapper.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/SplitWrapper.java	2008-04-06 23:49:40 UTC (rev 19433)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/SplitWrapper.java	2008-04-06 23:51:00 UTC (rev 19434)
@@ -26,6 +26,7 @@
 import org.drools.eclipse.flow.ruleflow.view.property.constraint.ConstraintsPropertyDescriptor;
 import org.drools.workflow.core.Connection;
 import org.drools.workflow.core.Constraint;
+import org.drools.workflow.core.WorkflowProcess;
 import org.drools.workflow.core.node.Split;
 import org.eclipse.ui.views.properties.ComboBoxPropertyDescriptor;
 import org.eclipse.ui.views.properties.IPropertyDescriptor;
@@ -35,7 +36,7 @@
  * 
  * @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
  */
-public class SplitWrapper extends NodeWrapper {
+public class SplitWrapper extends AbstractNodeWrapper {
 
     public static final String TYPE = "type";
     public static final String CONSTRAINTS = "constraints";
@@ -75,7 +76,7 @@
             IPropertyDescriptor[] result = new IPropertyDescriptor[descriptors.length + 1];
             System.arraycopy(descriptors, 0, result, 0, descriptors.length);
             result[descriptors.length] = 
-                new ConstraintsPropertyDescriptor(CONSTRAINTS, "Constraints", getSplit(), ((RuleFlowProcessWrapper) getParent()).getRuleFlowProcess());
+                new ConstraintsPropertyDescriptor(CONSTRAINTS, "Constraints", getSplit(), (WorkflowProcess) getParent().getProcessWrapper().getProcess());
             return result;
         }
         return descriptors;
@@ -88,7 +89,8 @@
         if (CONSTRAINTS.equals(id)) {
         	return getSplit().getType() == Split.TYPE_XOR
         		|| getSplit().getType() == Split.TYPE_OR
-        		? new MyHashMap(getSplit().getConstraints()) : new MyHashMap();
+        		? new MyHashMap<Split.ConnectionRef, Constraint>(getSplit().getConstraints())
+	            : new MyHashMap<Split.ConnectionRef, Constraint>();
         }
         return super.getPropertyValue(id);
     }
@@ -97,8 +99,7 @@
         if (TYPE.equals(id)) {
             getSplit().setType(Split.TYPE_UNDEFINED);
         } else if (CONSTRAINTS.equals(id)) {
-        	for (Iterator it = getSplit().getDefaultOutgoingConnections().iterator(); it.hasNext(); ) {
-        		Connection connection = (Connection) it.next();
+        	for (Connection connection: getSplit().getDefaultOutgoingConnections()) {
         		getSplit().setConstraint(connection, null);
         	}
         } else {
@@ -110,10 +111,21 @@
         if (TYPE.equals(id)) {
             getSplit().setType(((Integer) value).intValue());
         } else if (CONSTRAINTS.equals(id)) {
-        	Iterator iterator = ((Map) value).entrySet().iterator();
+        	Iterator<Map.Entry<Split.ConnectionRef, Constraint>> iterator = ((Map<Split.ConnectionRef, Constraint>) value).entrySet().iterator();
         	while (iterator.hasNext()) {
-				Map.Entry element = (Map.Entry) iterator.next();
-				getSplit().setConstraint((Connection) element.getKey(), (Constraint) element.getValue()); 
+				Map.Entry<Split.ConnectionRef, Constraint> element = iterator.next();
+				Split.ConnectionRef connectionRef = element.getKey();
+				Connection outgoingConnection = null; 
+				for (Connection out: getSplit().getDefaultOutgoingConnections()) {
+				    if (out.getToType().equals(connectionRef.getToType())
+			            && out.getTo().getId() == connectionRef.getNodeId()) {
+				        outgoingConnection = out;
+				    }
+				}
+				if (outgoingConnection == null) {
+				    throw new IllegalArgumentException("Could not find outgoing connection");
+				}
+				getSplit().setConstraint(outgoingConnection, (Constraint) element.getValue()); 
 			}
         } else {
             super.setPropertyValue(id, value);
@@ -125,11 +137,11 @@
         setDescriptors();
     }
 
-    public class MyHashMap extends HashMap {
+    public class MyHashMap<K, V> extends HashMap<K, V> {
 		private static final long serialVersionUID = -1748055291307174539L;
 		public MyHashMap() {
     	}
-    	public MyHashMap(Map map) {
+    	public MyHashMap(Map<K, V> map) {
     		super(map);
     	}
 		public String toString() {

Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/StartNodeWrapper.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/StartNodeWrapper.java	2008-04-06 23:49:40 UTC (rev 19433)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/StartNodeWrapper.java	2008-04-06 23:51:00 UTC (rev 19434)
@@ -16,7 +16,6 @@
  */
 
 import org.drools.eclipse.flow.common.editor.core.ElementConnection;
-import org.drools.workflow.core.Connection;
 import org.drools.workflow.core.node.StartNode;
 
 /**
@@ -24,7 +23,7 @@
  * 
  * @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
  */
-public class StartNodeWrapper extends NodeWrapper {
+public class StartNodeWrapper extends AbstractNodeWrapper {
 
     private static final long serialVersionUID = 400L;
 

Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/SubFlowWrapper.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/SubFlowWrapper.java	2008-04-06 23:49:40 UTC (rev 19433)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/SubFlowWrapper.java	2008-04-06 23:51:00 UTC (rev 19434)
@@ -27,7 +27,7 @@
  * 
  * @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
  */
-public class SubFlowWrapper extends NodeWrapper {
+public class SubFlowWrapper extends AbstractNodeWrapper {
 
 	private static final long serialVersionUID = 3668348577732020324L;
     private static IPropertyDescriptor[] descriptors;

Added: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/TimerWrapper.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/TimerWrapper.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/TimerWrapper.java	2008-04-06 23:51:00 UTC (rev 19434)
@@ -0,0 +1,119 @@
+package org.drools.eclipse.flow.ruleflow.core;
+/*
+ * 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.eclipse.flow.common.editor.core.DefaultElementWrapper;
+import org.drools.eclipse.flow.common.editor.core.ElementConnection;
+import org.drools.process.core.timer.Timer;
+import org.drools.workflow.core.node.TimerNode;
+import org.eclipse.ui.views.properties.IPropertyDescriptor;
+import org.eclipse.ui.views.properties.TextPropertyDescriptor;
+
+/**
+ * Wrapper for a timer node.
+ * 
+ * @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
+ */
+public class TimerWrapper extends AbstractNodeWrapper {
+
+	private static final long serialVersionUID = 400L;
+
+	private IPropertyDescriptor[] descriptors;
+
+    public static final String TIMER_DELAY = "TimerDelay";
+    public static final String TIMER_PERIOD = "TimerPeriod";
+
+    public TimerWrapper() {
+        setNode(new TimerNode());
+        getTimerNode().setName("Timer");
+        getTimerNode().setTimer(new Timer());
+    }
+    
+    private void setDescriptors() {
+        descriptors = new IPropertyDescriptor[DefaultElementWrapper.descriptors.length + 2];
+        System.arraycopy(DefaultElementWrapper.descriptors, 0, descriptors, 0, DefaultElementWrapper.descriptors.length);
+        descriptors[descriptors.length - 2] = 
+            new TextPropertyDescriptor(TIMER_DELAY, "Timer Delay");
+        descriptors[descriptors.length - 1] = 
+            new TextPropertyDescriptor(TIMER_PERIOD, "Timer Period");
+    }
+    
+    public TimerNode getTimerNode() {
+        return (TimerNode) getNode();
+    }
+    
+    public IPropertyDescriptor[] getPropertyDescriptors() {
+    	if (descriptors == null) {
+    		setDescriptors();
+    	}
+        return descriptors;
+    }
+
+    public boolean acceptsIncomingConnection(ElementConnection connection) {
+        return getIncomingConnections().isEmpty();
+    }
+
+    public boolean acceptsOutgoingConnection(ElementConnection connection) {
+        return getOutgoingConnections().isEmpty();
+    }
+    
+    public Object getPropertyValue(Object id) {
+        Timer timer = getTimerNode().getTimer();
+        if (TIMER_DELAY.equals(id)) {
+        	return timer == null ? "" : timer.getDelay() + "";
+        }
+        if (TIMER_PERIOD.equals(id)) {
+            return timer == null ? "" : timer.getPeriod() + "";
+        }
+        return super.getPropertyValue(id);
+    }
+
+    public void resetPropertyValue(Object id) {
+        Timer timer = getTimerNode().getTimer();
+        if (TIMER_DELAY.equals(id)) {
+            if (timer == null) {
+                timer = new Timer();
+                getTimerNode().setTimer(timer);
+            } else {
+                timer.setDelay(0);
+            }
+        } else if (TIMER_PERIOD.equals(id)) {
+            if (timer == null) {
+                timer = new Timer();
+                getTimerNode().setTimer(timer);
+            } else {
+                timer.setPeriod(0);
+            }
+        } else {
+            super.resetPropertyValue(id);
+        }
+    }
+
+    public void setPropertyValue(Object id, Object value) {
+        Timer timer = getTimerNode().getTimer();
+        if (TIMER_DELAY.equals(id)) {
+            if (timer == null) {
+                timer = new Timer();
+                getTimerNode().setTimer(timer);
+            }
+            timer.setDelay(new Long((String) value));
+        } else if (TIMER_PERIOD.equals(id)) {
+            timer.setPeriod(new Long((String) value));
+        } else {
+            super.setPropertyValue(id, value);
+        }
+    }
+}

Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/WorkItemWrapper.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/WorkItemWrapper.java	2008-04-06 23:49:40 UTC (rev 19433)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/WorkItemWrapper.java	2008-04-06 23:51:00 UTC (rev 19434)
@@ -15,30 +15,38 @@
  * limitations under the License.
  */
 
-import java.util.Iterator;
+import java.util.HashMap;
+import java.util.Map;
 import java.util.Set;
 
-import org.drools.eclipse.WorkItemDefinitions;
 import org.drools.eclipse.flow.common.editor.core.DefaultElementWrapper;
 import org.drools.eclipse.flow.common.editor.core.ElementConnection;
+import org.drools.eclipse.flow.ruleflow.view.property.workitem.WorkItemParameterMappingPropertyDescriptor;
+import org.drools.eclipse.flow.ruleflow.view.property.workitem.WorkItemResultMappingPropertyDescriptor;
 import org.drools.process.core.ParameterDefinition;
 import org.drools.process.core.Work;
 import org.drools.process.core.WorkDefinition;
+import org.drools.process.core.impl.WorkImpl;
+import org.drools.workflow.core.Node;
 import org.drools.workflow.core.node.WorkItemNode;
+import org.eclipse.ui.views.properties.ComboBoxPropertyDescriptor;
 import org.eclipse.ui.views.properties.IPropertyDescriptor;
 import org.eclipse.ui.views.properties.TextPropertyDescriptor;
 
 /**
- * Wrapper for a task node.
+ * Wrapper for a work item node.
  * 
  * @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
  */
-public class WorkItemWrapper extends NodeWrapper {
+public class WorkItemWrapper extends AbstractNodeWrapper {
 
-    public static final String TASK = "Task";
+    public static final String WAIT_FOR_COMPLETION = "WaitForCompletion";
+    public static final String RESULT_MAPPING = "ResultMapping";
+    public static final String PARAMETER_MAPPING = "ParameterMapping";
     
-	private static final long serialVersionUID = -3618183280436588589L;
+	private static final long serialVersionUID = 400L;
 
+	private WorkDefinition workDefinition;
 	private IPropertyDescriptor[] descriptors;
 
     public WorkItemWrapper() {
@@ -49,16 +57,35 @@
         return (WorkItemNode) getNode();
     }
     
-    private WorkDefinition getWorkDefinition() {
+    public void setNode(Node node) {
+        super.setNode(node);
+        if (this.workDefinition != null) {
+            Work work = getWorkItemNode().getWork();
+            if (work == null) {
+                work = new WorkImpl();
+                work.setName(workDefinition.getName());
+                getWorkItemNode().setWork(work);
+            }
+            work.setParameterDefinitions(workDefinition.getParameters());
+        }
+    }
+    
+    public void setWorkDefinition(WorkDefinition workDefinition) {
+        this.workDefinition = workDefinition;
         Work work = getWorkItemNode().getWork();
-        if (work != null && work.getName() != null) {
-            return WorkItemDefinitions.getWorkDefinition(work.getName());
+        if (work == null) {
+            work = new WorkImpl();
+            work.setName(workDefinition.getName());
+            getWorkItemNode().setWork(work);
         }
-        return null;
+        work.setParameterDefinitions(workDefinition.getParameters());
     }
     
+    public WorkDefinition getWorkDefinition() {
+        return this.workDefinition;
+    }
+
     private boolean workParameterExists(String parameterName) {
-        WorkDefinition workDefinition = getWorkDefinition();
         if (workDefinition != null) {
             return workDefinition.getParameter(parameterName) != null;
         }
@@ -66,17 +93,21 @@
     }
     
     private void setDescriptors() {
-        WorkDefinition workDefinition = getWorkDefinition();
         if (workDefinition != null) {
-            Set parameters = workDefinition.getParameters();
-            descriptors = new IPropertyDescriptor[DefaultElementWrapper.descriptors.length + parameters.size()];
+            Set<ParameterDefinition> parameters = workDefinition.getParameters();
+            descriptors = new IPropertyDescriptor[DefaultElementWrapper.descriptors.length + parameters.size() + 3];
             System.arraycopy(DefaultElementWrapper.descriptors, 0, descriptors, 0, DefaultElementWrapper.descriptors.length);
             int i = 0;
-            for (Iterator iterator = parameters.iterator(); iterator.hasNext(); ) {
-                ParameterDefinition def = (ParameterDefinition) iterator.next();
-                descriptors[descriptors.length - parameters.size() + (i++)] = 
+            for (ParameterDefinition def: parameters) {
+                descriptors[DefaultElementWrapper.descriptors.length + (i++)] = 
                     new TextPropertyDescriptor(def.getName(), def.getName());
             }
+            descriptors[descriptors.length - 3] = 
+                new ComboBoxPropertyDescriptor(WAIT_FOR_COMPLETION, "Wait for completion", new String[] {"true", "false"});
+            descriptors[descriptors.length - 2] = 
+                new WorkItemParameterMappingPropertyDescriptor(PARAMETER_MAPPING, "Parameter Mapping", getWorkItemNode());
+            descriptors[descriptors.length - 1] = 
+                new WorkItemResultMappingPropertyDescriptor(RESULT_MAPPING, "Result Mapping", getWorkItemNode());
         }
         if (descriptors == null) {
             descriptors = DefaultElementWrapper.descriptors;
@@ -99,7 +130,13 @@
     }
     
     public Object getPropertyValue(Object id) {
-        if (id instanceof String) {
+        if (WAIT_FOR_COMPLETION.equals(id)) {
+            return getWorkItemNode().isWaitForCompletion() ? new Integer(0) : new Integer(1);
+        } else if (PARAMETER_MAPPING.equals(id)) {
+            return getWorkItemNode().getInMappings();
+        } else if (RESULT_MAPPING.equals(id)) {
+            return getWorkItemNode().getOutMappings();
+        } else if (id instanceof String) {
             String name = (String) id;
             if (workParameterExists(name)) {
             	Object value = getWorkItemNode().getWork().getParameter(name);
@@ -113,7 +150,13 @@
     }
 
     public void resetPropertyValue(Object id) {
-        if (id instanceof String && workParameterExists((String) id)) {
+        if (WAIT_FOR_COMPLETION.equals(id)) {
+            getWorkItemNode().setWaitForCompletion(true);
+        } else if (PARAMETER_MAPPING.equals(id)) {
+            getWorkItemNode().setInMappings(new HashMap<String, String>());
+        } else if (RESULT_MAPPING.equals(id)) {
+            getWorkItemNode().setOutMappings(new HashMap<String, String>());
+        } else if (id instanceof String && workParameterExists((String) id)) {
             getWorkItemNode().getWork().setParameter((String) id, null);
         } else {
             super.resetPropertyValue(id);
@@ -121,7 +164,13 @@
     }
 
     public void setPropertyValue(Object id, Object value) {
-        if (id instanceof String && workParameterExists((String) id)) {
+        if (WAIT_FOR_COMPLETION.equals(id)) {
+            getWorkItemNode().setWaitForCompletion(((Integer) value).intValue() == 0);
+        } else if (PARAMETER_MAPPING.equals(id)) {
+            getWorkItemNode().setInMappings((Map<String, String>) value);
+        } else if (RESULT_MAPPING.equals(id)) {
+            getWorkItemNode().setOutMappings((Map<String, String>) value);
+        } else if (id instanceof String && workParameterExists((String) id)) {
             getWorkItemNode().getWork().setParameter((String) id, value);
         } else {
             super.setPropertyValue(id, value);

Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/editor/RuleFlowModelEditor.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/editor/RuleFlowModelEditor.java	2008-04-06 23:49:40 UTC (rev 19433)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/editor/RuleFlowModelEditor.java	2008-04-06 23:51:00 UTC (rev 19434)
@@ -16,18 +16,32 @@
  */
 
 import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.io.OutputStream;
 import java.io.OutputStreamWriter;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
 
+import org.drools.compiler.PackageBuilderConfiguration;
 import org.drools.eclipse.DroolsEclipsePlugin;
+import org.drools.eclipse.DroolsPluginImages;
+import org.drools.eclipse.WorkItemDefinitions;
+import org.drools.eclipse.builder.DroolsBuilder;
 import org.drools.eclipse.flow.common.editor.GenericModelEditor;
 import org.drools.eclipse.flow.ruleflow.core.RuleFlowProcessWrapper;
+import org.drools.eclipse.flow.ruleflow.core.RuleFlowWrapperBuilder;
 import org.drools.eclipse.flow.ruleflow.core.StartNodeWrapper;
+import org.drools.eclipse.flow.ruleflow.core.WorkItemWrapper;
 import org.drools.eclipse.flow.ruleflow.editor.editpart.RuleFlowEditPartFactory;
+import org.drools.eclipse.util.ProjectClassLoader;
+import org.drools.process.core.WorkDefinition;
+import org.drools.process.core.WorkDefinitionExtension;
+import org.drools.ruleflow.core.RuleFlowProcess;
+import org.drools.xml.XmlProcessReader;
+import org.drools.xml.XmlRuleFlowProcessDumper;
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.runtime.CoreException;
@@ -35,14 +49,20 @@
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.draw2d.geometry.Rectangle;
 import org.eclipse.gef.EditPartFactory;
+import org.eclipse.gef.palette.CombinedTemplateCreationEntry;
+import org.eclipse.gef.palette.PaletteDrawer;
 import org.eclipse.gef.palette.PaletteRoot;
+import org.eclipse.gef.requests.SimpleFactory;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.JavaCore;
 import org.eclipse.jface.dialogs.ProgressMonitorDialog;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.ui.IEditorInput;
 import org.eclipse.ui.IFileEditorInput;
 import org.eclipse.ui.actions.WorkspaceModifyOperation;
 import org.eclipse.ui.part.FileEditorInput;
 
-import com.thoughtworks.xstream.XStream;
-
 /**
  * Graphical editor for a RuleFlow.
  * 
@@ -51,7 +71,7 @@
 public class RuleFlowModelEditor extends GenericModelEditor {
 
     protected EditPartFactory createEditPartFactory() {
-        return new RuleFlowEditPartFactory();
+        return new RuleFlowEditPartFactory(this);
     }
 
     protected PaletteRoot createPalette() {
@@ -73,25 +93,86 @@
         return (RuleFlowProcessWrapper) getModel();
     }
 
-    protected void createOutputStream(OutputStream os) throws IOException {
-    	createOutputStream(os, true);
+    protected void setInput(IEditorInput input) {
+        super.setInput(input);
+        refreshPalette(((IFileEditorInput) input).getFile());
     }
+    
+    private void refreshPalette(IFile file) {
+        IProject project = getFile().getProject();
+        if (project != null) {
+            ClassLoader oldLoader = Thread.currentThread().getContextClassLoader();
+            ClassLoader newLoader = DroolsBuilder.class.getClassLoader();
+            try {
+                if (project.getNature("org.eclipse.jdt.core.javanature") != null) {
+                    IJavaProject javaProject = JavaCore.create(project);
+                    newLoader = ProjectClassLoader.getProjectClassLoader(javaProject);
+                }
+                try {
+                    Thread.currentThread().setContextClassLoader(newLoader);
+                    PaletteDrawer drawer = (PaletteDrawer) getPaletteRoot().getChildren().get(2);
+                    List entries = new ArrayList();
+                    for (final WorkDefinition workDefinition: WorkItemDefinitions.getWorkDefinitions(file).values()) {
+                        final String label;
+                        String description = workDefinition.getName();
+                        String icon = null;
+                        if (workDefinition instanceof WorkDefinitionExtension) {
+                            WorkDefinitionExtension extension = (WorkDefinitionExtension) workDefinition;
+                            label = extension.getDisplayName();
+                            description = extension.getExplanationText();
+                            icon = extension.getIcon();
+                        } else {
+                            label = workDefinition.getName();
+                        }
+                        
+                        URL iconUrl = null;
+                        if (icon != null) {
+                            iconUrl = newLoader.getResource(icon);
+                        }
+                        if (iconUrl == null) {
+                            iconUrl = DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/action.gif");
+                        }
+                        CombinedTemplateCreationEntry combined = new CombinedTemplateCreationEntry(
+                            label,
+                            description,
+                            WorkItemWrapper.class,
+                            new SimpleFactory(WorkItemWrapper.class) {
+                                public Object getNewObject() {
+                                    WorkItemWrapper workItemWrapper = (WorkItemWrapper) super.getNewObject();
+                                    workItemWrapper.setName(label);
+                                    workItemWrapper.setWorkDefinition(workDefinition);
+                                    return workItemWrapper;
+                                }
+                            },
+                            ImageDescriptor.createFromURL(iconUrl), 
+                            ImageDescriptor.createFromURL(iconUrl)
+                        );
+                        entries.add(combined);
+                    }
+                    drawer.setChildren(entries);
+                } finally {
+                    Thread.currentThread().setContextClassLoader(oldLoader);
+                }
+            } catch (Exception e) {
+                DroolsEclipsePlugin.log(e);
+            }
+        }
+    }
 
+    protected void writeModel(OutputStream os) throws IOException {
+    	writeModel(os, true);
+    }
     
-    protected void createOutputStream(OutputStream os, boolean includeGraphics) throws IOException {
+    protected void writeModel(OutputStream os, boolean includeGraphics) throws IOException {
         OutputStreamWriter writer = new OutputStreamWriter(os);
         try {
-            XStream stream = new XStream();
-            stream.setMode(XStream.ID_REFERENCES);
-            if (includeGraphics) {
-            	stream.toXML(getRuleFlowModel(), writer);
-            } else {
-            	stream.toXML(getRuleFlowModel().getProcess(), writer);
-            }
-            writer.close();
+            XmlRuleFlowProcessDumper dumper = new XmlRuleFlowProcessDumper();
+            String out = dumper.dump(getRuleFlowModel().getRuleFlowProcess(), includeGraphics);
+            writer.write(out);
         } catch (Throwable t) {
             DroolsEclipsePlugin.log(t);
         }
+        writer.close();
     }
     
     public void doSave(IProgressMonitor monitor) {
@@ -105,11 +186,9 @@
 	            public void execute(final IProgressMonitor monitor)
 	                    throws CoreException {
 	                try {
-	                    ByteArrayOutputStream out = new ByteArrayOutputStream();
-	                    createOutputStream(out, false);
-	                    modelFile.create(new ByteArrayInputStream(out.toByteArray()),
-	                            true, monitor);
-	                    out.close();
+	                    XmlRuleFlowProcessDumper dumper = new XmlRuleFlowProcessDumper();
+	                    String out = dumper.dump(getRuleFlowModel().getRuleFlowProcess(), false);
+	                    modelFile.create(new ByteArrayInputStream(out.getBytes()), true, monitor);
 	                } catch (Exception e) {
 	                    e.printStackTrace();
 	                }
@@ -125,13 +204,10 @@
 	            e.printStackTrace();
 	        }
 		} else {
-	        ByteArrayOutputStream out = new ByteArrayOutputStream();
 	        try {
-	        	createOutputStream(out, false);
-	            modelFile.setContents(
-	        		new ByteArrayInputStream(out.toByteArray()),
-	        		true, false, monitor);
-	            out.close();
+	            XmlRuleFlowProcessDumper dumper = new XmlRuleFlowProcessDumper();
+                String out = dumper.dump(getRuleFlowModel().getRuleFlowProcess(), false);
+	            modelFile.setContents(new ByteArrayInputStream(out.getBytes()), true, false, monitor);
 	        } catch (Throwable t) {
 	        	DroolsEclipsePlugin.log(t);
 	        }
@@ -147,19 +223,25 @@
 		return modelFile;
 	}
 
-    protected void createInputStream(InputStream is) throws Exception {
-        InputStreamReader reader = new InputStreamReader(is);
-        XStream stream = new XStream();
-        stream.setMode(XStream.ID_REFERENCES);
-        
-        ClassLoader oldLoader = Thread.currentThread().getContextClassLoader();
-        ClassLoader newLoader = this.getClass().getClassLoader();
+    protected void createModel(InputStream is) {
         try {
-            Thread.currentThread().setContextClassLoader(newLoader);
-            setModel(stream.fromXML(reader));
-        } finally {
-            Thread.currentThread().setContextClassLoader(oldLoader);
+            InputStreamReader reader = new InputStreamReader(is);
+            PackageBuilderConfiguration configuration = new PackageBuilderConfiguration();
+            XmlProcessReader xmlReader = new XmlProcessReader( configuration.getSemanticModules() );
+            try {
+                RuleFlowProcess process = (RuleFlowProcess) xmlReader.read(reader);
+                if (process == null) {
+                    setModel(createModel());
+                } else {
+                    setModel(RuleFlowWrapperBuilder.getProcessWrapper(process, getFile()));
+                }
+            } catch (Throwable t) {
+                DroolsEclipsePlugin.log(t);
+                setModel(createModel());
+            }
+            reader.close();
+        } catch (Throwable t) {
+            DroolsEclipsePlugin.log(t);
         }
-        reader.close();
     }
 }

Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/editor/RuleFlowPaletteFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/editor/RuleFlowPaletteFactory.java	2008-04-06 23:49:40 UTC (rev 19433)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/editor/RuleFlowPaletteFactory.java	2008-04-06 23:51:00 UTC (rev 19434)
@@ -16,11 +16,9 @@
  */
 
 import java.util.ArrayList;
-import java.util.Iterator;
 import java.util.List;
 
 import org.drools.eclipse.DroolsEclipsePlugin;
-import org.drools.eclipse.WorkItemDefinitions;
 import org.drools.eclipse.flow.common.editor.core.ElementConnectionFactory;
 import org.drools.eclipse.flow.ruleflow.core.ActionWrapper;
 import org.drools.eclipse.flow.ruleflow.core.ConnectionWrapper;
@@ -32,11 +30,7 @@
 import org.drools.eclipse.flow.ruleflow.core.SplitWrapper;
 import org.drools.eclipse.flow.ruleflow.core.StartNodeWrapper;
 import org.drools.eclipse.flow.ruleflow.core.SubFlowWrapper;
-import org.drools.eclipse.flow.ruleflow.core.WorkItemWrapper;
-import org.drools.process.core.WorkDefinition;
-import org.drools.process.core.WorkDefinitionExtension;
-import org.drools.process.core.impl.WorkImpl;
-import org.drools.workflow.core.Connection;
+import org.drools.eclipse.flow.ruleflow.core.TimerWrapper;
 import org.eclipse.gef.palette.CombinedTemplateCreationEntry;
 import org.eclipse.gef.palette.ConnectionCreationToolEntry;
 import org.eclipse.gef.palette.MarqueeToolEntry;
@@ -67,7 +61,7 @@
         List categories = new ArrayList();
         categories.add(createControlGroup(root));
         categories.add(createComponentsDrawer());
-        categories.add(createTaskNodesDrawer());
+        categories.add(createWorkNodesDrawer());
         return categories;
     }
 
@@ -157,51 +151,71 @@
         );
         entries.add(combined);
                       
+        combined = new CombinedTemplateCreationEntry(
+            "Timer",
+            "Create a new Timer",
+            TimerWrapper.class,
+            new SimpleFactory(TimerWrapper.class),
+            ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/timer.gif")), 
+            ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/timer.gif"))
+        );
+        entries.add(combined);
+                          
+//        combined = new CombinedTemplateCreationEntry(
+//            "Composite Node",
+//            "Create a new Composite Node",
+//            CompositeNodeWrapper.class,
+//            new SimpleFactory(CompositeNodeWrapper.class),
+//            ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/composite.gif")), 
+//            ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/composite.gif"))
+//        );
+//        entries.add(combined);
+                          
         drawer.addAll(entries);
         return drawer;
     }
     
-    private static PaletteContainer createTaskNodesDrawer() {
+    private static PaletteContainer createWorkNodesDrawer() {
 
         PaletteDrawer drawer = new PaletteDrawer("Work Items", null);
 
-        List entries = new ArrayList();
-
-        for (Iterator iterator = WorkItemDefinitions.getWorkDefinitions().iterator(); iterator.hasNext(); ) {
-            final WorkDefinition workDefinition = (WorkDefinition) iterator.next();
-            final String label;
-            String description = workDefinition.getName();
-            String icon = null;
-            if (workDefinition instanceof WorkDefinitionExtension) {
-                WorkDefinitionExtension extension = (WorkDefinitionExtension) workDefinition;
-                label = extension.getDisplayName();
-                description = extension.getExplanationText();
-                icon = extension.getIcon();
-            } else {
-                label = workDefinition.getName();
-            }
-            
-            CombinedTemplateCreationEntry combined = new CombinedTemplateCreationEntry(
-                label,
-                description,
-                WorkItemWrapper.class,
-                new SimpleFactory(WorkItemWrapper.class) {
-                    public Object getNewObject() {
-                        WorkItemWrapper taskWrapper = (WorkItemWrapper) super.getNewObject();
-                        taskWrapper.setName(label);
-                        taskWrapper.getWorkItemNode().setName(label);
-                        taskWrapper.getWorkItemNode().setWork(new WorkImpl());
-                        taskWrapper.getWorkItemNode().getWork().setName(workDefinition.getName());
-                        return taskWrapper;
-                    }
-                },
-                ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry(icon == null? "icons/action.gif" : icon)), 
-                ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry(icon == null? "icons/action.gif" : icon))
-            );
-            entries.add(combined);
-        }
-                                        
-        drawer.addAll(entries);
+//        List entries = new ArrayList();
+//
+//        for (Iterator iterator = WorkItemDefinitions.getWorkDefinitions().iterator(); iterator.hasNext(); ) {
+//            final WorkDefinition workDefinition = (WorkDefinition) iterator.next();
+//            final String label;
+//            String description = workDefinition.getName();
+//            String icon = null;
+//            if (workDefinition instanceof WorkDefinitionExtension) {
+//                WorkDefinitionExtension extension = (WorkDefinitionExtension) workDefinition;
+//                label = extension.getDisplayName();
+//                description = extension.getExplanationText();
+//                icon = extension.getIcon();
+//            } else {
+//                label = workDefinition.getName();
+//            }
+//            
+//            CombinedTemplateCreationEntry combined = new CombinedTemplateCreationEntry(
+//                label,
+//                description,
+//                WorkItemWrapper.class,
+//                new SimpleFactory(WorkItemWrapper.class) {
+//                    public Object getNewObject() {
+//                        WorkItemWrapper taskWrapper = (WorkItemWrapper) super.getNewObject();
+//                        taskWrapper.setName(label);
+//                        taskWrapper.getWorkItemNode().setName(label);
+//                        taskWrapper.getWorkItemNode().setWork(new WorkImpl());
+//                        taskWrapper.getWorkItemNode().getWork().setName(workDefinition.getName());
+//                        return taskWrapper;
+//                    }
+//                },
+//                ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry(icon == null? "icons/action.gif" : icon)), 
+//                ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry(icon == null? "icons/action.gif" : icon))
+//            );
+//            entries.add(combined);
+//        }
+//                                        
+//        drawer.addAll(entries);
         return drawer;
     }
     

Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/ActionEditPart.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/ActionEditPart.java	2008-04-06 23:49:40 UTC (rev 19433)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/ActionEditPart.java	2008-04-06 23:51:00 UTC (rev 19434)
@@ -17,7 +17,7 @@
 
 import org.drools.eclipse.DroolsEclipsePlugin;
 import org.drools.eclipse.flow.common.editor.editpart.ElementEditPart;
-import org.drools.eclipse.flow.common.editor.editpart.figure.ElementFigure;
+import org.drools.eclipse.flow.common.editor.editpart.figure.AbstractElementFigure;
 import org.eclipse.draw2d.IFigure;
 import org.eclipse.draw2d.RoundedRectangle;
 import org.eclipse.draw2d.geometry.Dimension;
@@ -40,7 +40,7 @@
         return new RuleSetNodeFigure();
     }
     
-    public static class RuleSetNodeFigure extends ElementFigure {
+    public static class RuleSetNodeFigure extends AbstractElementFigure {
         
         private static final Image ICON = ImageDescriptor.createFromURL(
     		DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/action.gif")).createImage();

Added: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/DefaultNodeEditPart.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/DefaultNodeEditPart.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/DefaultNodeEditPart.java	2008-04-06 23:51:00 UTC (rev 19434)
@@ -0,0 +1,21 @@
+package org.drools.eclipse.flow.ruleflow.editor.editpart;
+
+import org.drools.eclipse.flow.common.editor.editpart.ElementEditPart;
+import org.drools.eclipse.flow.ruleflow.core.NodeWrapper;
+import org.drools.eclipse.flow.ruleflow.editor.editpart.figure.DefaultNodeFigure;
+import org.drools.workflow.core.Node;
+import org.drools.workflow.core.NodeExtension;
+import org.eclipse.draw2d.IFigure;
+
+public class DefaultNodeEditPart extends ElementEditPart {
+
+    protected IFigure createFigure() {
+        DefaultNodeFigure figure = new DefaultNodeFigure();
+        Node node = ((NodeWrapper) getElementWrapper()).getNode();
+        if (node instanceof NodeExtension) {
+            figure.setIcon(((NodeExtension) node).getIcon());
+        }
+        return figure;
+    }
+
+}

Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/EndNodeEditPart.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/EndNodeEditPart.java	2008-04-06 23:49:40 UTC (rev 19433)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/EndNodeEditPart.java	2008-04-06 23:51:00 UTC (rev 19434)
@@ -17,7 +17,7 @@
 
 import org.drools.eclipse.DroolsEclipsePlugin;
 import org.drools.eclipse.flow.common.editor.editpart.ElementEditPart;
-import org.drools.eclipse.flow.common.editor.editpart.figure.ElementFigure;
+import org.drools.eclipse.flow.common.editor.editpart.figure.AbstractElementFigure;
 import org.eclipse.draw2d.IFigure;
 import org.eclipse.draw2d.LineBorder;
 import org.eclipse.jface.resource.ImageDescriptor;
@@ -34,7 +34,7 @@
         return new EndNodeFigure();
     }
 
-    public static class EndNodeFigure extends ElementFigure {
+    public static class EndNodeFigure extends AbstractElementFigure {
         
         private static final Image icon = ImageDescriptor.createFromURL(
         	DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/process_stop.gif")).createImage();

Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/JoinEditPart.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/JoinEditPart.java	2008-04-06 23:49:40 UTC (rev 19433)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/JoinEditPart.java	2008-04-06 23:51:00 UTC (rev 19434)
@@ -16,7 +16,7 @@
  */
 
 import org.drools.eclipse.flow.common.editor.editpart.ElementEditPart;
-import org.drools.eclipse.flow.common.editor.editpart.figure.ElementFigure;
+import org.drools.eclipse.flow.common.editor.editpart.figure.AbstractElementFigure;
 import org.eclipse.draw2d.ConnectionAnchor;
 import org.eclipse.draw2d.Ellipse;
 import org.eclipse.draw2d.EllipseAnchor;
@@ -56,7 +56,7 @@
         return new EllipseAnchor(getFigure());
     }
 
-    public class JoinFigure extends ElementFigure {
+    public class JoinFigure extends AbstractElementFigure {
         
         private Ellipse ellipse;
         

Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/MilestoneEditPart.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/MilestoneEditPart.java	2008-04-06 23:49:40 UTC (rev 19433)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/MilestoneEditPart.java	2008-04-06 23:51:00 UTC (rev 19434)
@@ -17,7 +17,7 @@
 
 import org.drools.eclipse.DroolsEclipsePlugin;
 import org.drools.eclipse.flow.common.editor.editpart.ElementEditPart;
-import org.drools.eclipse.flow.common.editor.editpart.figure.ElementFigure;
+import org.drools.eclipse.flow.common.editor.editpart.figure.AbstractElementFigure;
 import org.eclipse.draw2d.IFigure;
 import org.eclipse.draw2d.RoundedRectangle;
 import org.eclipse.draw2d.geometry.Dimension;
@@ -40,7 +40,7 @@
         return new RuleSetNodeFigure();
     }
     
-    public static class RuleSetNodeFigure extends ElementFigure {
+    public static class RuleSetNodeFigure extends AbstractElementFigure {
         
         private static final Image ICON = ImageDescriptor.createFromURL(
     		DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/question.gif")).createImage();

Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/RuleFlowEditPartFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/RuleFlowEditPartFactory.java	2008-04-06 23:49:40 UTC (rev 19433)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/RuleFlowEditPartFactory.java	2008-04-06 23:51:00 UTC (rev 19434)
@@ -15,8 +15,10 @@
  * limitations under the License.
  */
 
+import org.drools.eclipse.flow.common.editor.editpart.ElementContainerEditPart;
 import org.drools.eclipse.flow.common.editor.editpart.ProcessEditPart;
 import org.drools.eclipse.flow.ruleflow.core.ActionWrapper;
+import org.drools.eclipse.flow.ruleflow.core.CompositeNodeWrapper;
 import org.drools.eclipse.flow.ruleflow.core.ConnectionWrapper;
 import org.drools.eclipse.flow.ruleflow.core.EndNodeWrapper;
 import org.drools.eclipse.flow.ruleflow.core.JoinWrapper;
@@ -26,7 +28,9 @@
 import org.drools.eclipse.flow.ruleflow.core.SplitWrapper;
 import org.drools.eclipse.flow.ruleflow.core.StartNodeWrapper;
 import org.drools.eclipse.flow.ruleflow.core.SubFlowWrapper;
+import org.drools.eclipse.flow.ruleflow.core.TimerWrapper;
 import org.drools.eclipse.flow.ruleflow.core.WorkItemWrapper;
+import org.drools.eclipse.flow.ruleflow.editor.RuleFlowModelEditor;
 import org.eclipse.gef.EditPart;
 import org.eclipse.gef.EditPartFactory;
 
@@ -36,7 +40,13 @@
  * @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
  */
 public class RuleFlowEditPartFactory implements EditPartFactory {
-
+    
+    private RuleFlowModelEditor editor;
+    
+    public RuleFlowEditPartFactory(RuleFlowModelEditor editor) {
+        this.editor = editor;
+    }
+    
     public EditPart createEditPart(EditPart context, Object model) {
         EditPart result = null;
         if (model instanceof RuleFlowProcessWrapper) {
@@ -61,6 +71,11 @@
             result = new ActionEditPart();
         } else if (model instanceof WorkItemWrapper) {
             result = new WorkItemEditPart();
+            ((WorkItemEditPart) result).setEditor(editor);
+        } else if (model instanceof TimerWrapper) {
+            result = new TimerEditPart();
+        } else if (model instanceof CompositeNodeWrapper) {
+            result = new ElementContainerEditPart();
         } else {
             throw new IllegalArgumentException(
                 "Unknown model object " + model);

Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/RuleSetNodeEditPart.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/RuleSetNodeEditPart.java	2008-04-06 23:49:40 UTC (rev 19433)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/RuleSetNodeEditPart.java	2008-04-06 23:51:00 UTC (rev 19434)
@@ -16,7 +16,7 @@
  */
 
 import org.drools.eclipse.flow.common.editor.editpart.ElementEditPart;
-import org.drools.eclipse.flow.common.editor.editpart.figure.ElementFigure;
+import org.drools.eclipse.flow.common.editor.editpart.figure.AbstractElementFigure;
 import org.eclipse.draw2d.IFigure;
 import org.eclipse.draw2d.RoundedRectangle;
 import org.eclipse.draw2d.geometry.Dimension;
@@ -37,7 +37,7 @@
         return new RuleSetNodeFigure();
     }
     
-    public class RuleSetNodeFigure extends ElementFigure {
+    public class RuleSetNodeFigure extends AbstractElementFigure {
         
         private RoundedRectangle rectangle;
         

Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/SplitEditPart.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/SplitEditPart.java	2008-04-06 23:49:40 UTC (rev 19433)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/SplitEditPart.java	2008-04-06 23:51:00 UTC (rev 19434)
@@ -16,7 +16,7 @@
  */
 
 import org.drools.eclipse.flow.common.editor.editpart.ElementEditPart;
-import org.drools.eclipse.flow.common.editor.editpart.figure.ElementFigure;
+import org.drools.eclipse.flow.common.editor.editpart.figure.AbstractElementFigure;
 import org.eclipse.draw2d.ConnectionAnchor;
 import org.eclipse.draw2d.Ellipse;
 import org.eclipse.draw2d.EllipseAnchor;
@@ -56,7 +56,7 @@
         return new EllipseAnchor(getFigure());
     }
 
-    public class SplitFigure extends ElementFigure {
+    public class SplitFigure extends AbstractElementFigure {
         
         private Ellipse ellipse;
         

Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/StartNodeEditPart.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/StartNodeEditPart.java	2008-04-06 23:49:40 UTC (rev 19433)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/StartNodeEditPart.java	2008-04-06 23:51:00 UTC (rev 19434)
@@ -17,7 +17,7 @@
 
 import org.drools.eclipse.DroolsEclipsePlugin;
 import org.drools.eclipse.flow.common.editor.editpart.ElementEditPart;
-import org.drools.eclipse.flow.common.editor.editpart.figure.ElementFigure;
+import org.drools.eclipse.flow.common.editor.editpart.figure.AbstractElementFigure;
 import org.eclipse.draw2d.IFigure;
 import org.eclipse.draw2d.LineBorder;
 import org.eclipse.jface.resource.ImageDescriptor;
@@ -34,7 +34,7 @@
         return new StartNodeFigure();
     }
 
-    public static class StartNodeFigure extends ElementFigure {
+    public static class StartNodeFigure extends AbstractElementFigure {
         
         private static final Image icon = ImageDescriptor.createFromURL(
     		DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/process_start.gif")).createImage();

Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/SubFlowEditPart.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/SubFlowEditPart.java	2008-04-06 23:49:40 UTC (rev 19433)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/SubFlowEditPart.java	2008-04-06 23:51:00 UTC (rev 19434)
@@ -17,7 +17,7 @@
 
 import org.drools.eclipse.DroolsEclipsePlugin;
 import org.drools.eclipse.flow.common.editor.editpart.ElementEditPart;
-import org.drools.eclipse.flow.common.editor.editpart.figure.ElementFigure;
+import org.drools.eclipse.flow.common.editor.editpart.figure.AbstractElementFigure;
 import org.eclipse.draw2d.IFigure;
 import org.eclipse.draw2d.RoundedRectangle;
 import org.eclipse.draw2d.geometry.Dimension;
@@ -40,7 +40,7 @@
         return new SubFlowNodeFigure();
     }
     
-    public static class SubFlowNodeFigure extends ElementFigure {
+    public static class SubFlowNodeFigure extends AbstractElementFigure {
         
         private static final Image ICON = ImageDescriptor.createFromURL(
         		DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/process.gif")).createImage();

Added: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/TimerEditPart.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/TimerEditPart.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/TimerEditPart.java	2008-04-06 23:51:00 UTC (rev 19434)
@@ -0,0 +1,71 @@
+package org.drools.eclipse.flow.ruleflow.editor.editpart;
+/*
+ * 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.eclipse.DroolsEclipsePlugin;
+import org.drools.eclipse.flow.common.editor.editpart.ElementEditPart;
+import org.drools.eclipse.flow.common.editor.editpart.figure.AbstractElementFigure;
+import org.eclipse.draw2d.IFigure;
+import org.eclipse.draw2d.RoundedRectangle;
+import org.eclipse.draw2d.geometry.Dimension;
+import org.eclipse.draw2d.geometry.Rectangle;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.widgets.Display;
+
+/**
+ * EditPart for a timer node.
+ * 
+ * @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
+ */
+public class TimerEditPart extends ElementEditPart {
+
+    private static final Color color = new Color(Display.getCurrent(), 255, 250, 205);
+    
+    protected IFigure createFigure() {
+        return new TimerNodeFigure();
+    }
+    
+    public static class TimerNodeFigure extends AbstractElementFigure {
+        
+        private static final Image ICON = ImageDescriptor.createFromURL(
+    		DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/timer.gif")).createImage();
+            
+        private RoundedRectangle rectangle;
+        
+        protected void customizeFigure() {
+            rectangle = new RoundedRectangle();
+            rectangle.setCornerDimensions(new Dimension(25, 25));
+            add(rectangle, 0);
+            rectangle.setBackgroundColor(color);
+            rectangle.setBounds(getBounds());
+            setSelected(false);
+            setIcon(ICON);
+        }
+        
+        public void setBounds(Rectangle rectangle) {
+            super.setBounds(rectangle);
+            this.rectangle.setBounds(rectangle);
+        }
+        
+        public void setSelected(boolean b) {
+            super.setSelected(b);
+            rectangle.setLineWidth(b ? 3 : 1);
+            repaint();
+        }
+    }
+}

Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/WorkItemEditPart.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/WorkItemEditPart.java	2008-04-06 23:49:40 UTC (rev 19433)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/WorkItemEditPart.java	2008-04-06 23:51:00 UTC (rev 19434)
@@ -18,20 +18,26 @@
 import java.lang.reflect.Constructor;
 
 import org.drools.eclipse.DroolsEclipsePlugin;
-import org.drools.eclipse.WorkItemDefinitions;
+import org.drools.eclipse.DroolsPluginImages;
+import org.drools.eclipse.builder.DroolsBuilder;
 import org.drools.eclipse.flow.common.editor.editpart.ElementEditPart;
-import org.drools.eclipse.flow.common.editor.editpart.figure.ElementFigure;
-import org.drools.eclipse.flow.common.editor.editpart.work.WorkEditor;
+import org.drools.eclipse.flow.common.editor.editpart.figure.AbstractElementFigure;
 import org.drools.eclipse.flow.ruleflow.core.WorkItemWrapper;
+import org.drools.eclipse.util.ProjectClassLoader;
 import org.drools.process.core.WorkDefinition;
 import org.drools.process.core.WorkDefinitionExtension;
+import org.drools.process.core.WorkEditor;
 import org.drools.workflow.core.node.WorkItemNode;
+import org.eclipse.core.resources.IProject;
 import org.eclipse.draw2d.IFigure;
 import org.eclipse.draw2d.RoundedRectangle;
 import org.eclipse.draw2d.geometry.Dimension;
 import org.eclipse.draw2d.geometry.Rectangle;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.JavaCore;
 import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Image;
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Shell;
 
@@ -44,8 +50,6 @@
 
     private static final Color color = new Color(Display.getCurrent(), 255, 250, 205);
 
-    private transient WorkDefinition workDefinition;
-    
     protected IFigure createFigure() {
         String icon = null;
         WorkDefinition workDefinition = getWorkDefinition();
@@ -55,15 +59,41 @@
         if (icon == null) {
             icon = "icons/action.gif";
         }
-        return new TaskNodeFigure(icon);
+        Image image = DroolsPluginImages.getImage(icon);
+        WorkItemFigure figure = new WorkItemFigure();
+        if (image == null) {
+            IProject project = getEditor().getFile().getProject();
+            if (project != null) {
+                ClassLoader oldLoader = Thread.currentThread().getContextClassLoader();
+                ClassLoader newLoader = DroolsBuilder.class.getClassLoader();
+                try {
+                    if (project.getNature("org.eclipse.jdt.core.javanature") != null) {
+                        IJavaProject javaProject = JavaCore.create(project);
+                        newLoader = ProjectClassLoader.getProjectClassLoader(javaProject);
+                    }
+                    try {
+                        Thread.currentThread().setContextClassLoader(newLoader);
+                        image = ImageDescriptor.createFromURL(
+                            newLoader.getResource(icon)).createImage();
+                        DroolsPluginImages.putImage(icon, image);
+                    } finally {
+                        Thread.currentThread().setContextClassLoader(oldLoader);
+                    }
+                } catch (Exception e) {
+                    DroolsEclipsePlugin.log(e);
+                }
+            }
+        }
+        figure.setIcon(image);
+        return figure;
     }
     
+    protected WorkItemWrapper getWorkItemWrapper() {
+        return (WorkItemWrapper) getElementWrapper();
+    }
+    
     private WorkDefinition getWorkDefinition() {
-        if (this.workDefinition == null) {
-            String taskName = ((WorkItemWrapper) getElementWrapper()).getWorkItemNode().getWork().getName();
-            this.workDefinition = WorkItemDefinitions.getWorkDefinition(taskName);
-        }
-        return workDefinition;
+        return getWorkItemWrapper().getWorkDefinition();
     }
     
     protected void doubleClicked() {
@@ -79,28 +109,36 @@
     }
     
     private void openEditor(String editorClassName, WorkDefinition workDefinition) {
-        try {
-            Class<WorkEditor> editorClass = 
-                (Class<WorkEditor>) Class.forName(editorClassName);
-            Constructor<WorkEditor> constructor = editorClass.getConstructor(Shell.class);
-            WorkEditor editor = constructor.newInstance(getViewer().getControl().getShell());
-            editor.setWorkDefinition(workDefinition);
-            WorkItemNode workItemNode = ((WorkItemWrapper) getElementWrapper()).getWorkItemNode();
-            editor.setWork(workItemNode.getWork());
-            editor.show();
-            workItemNode.setWork(editor.getWork());
-        } catch (Throwable t) {
-            DroolsEclipsePlugin.log(t);
+        IProject project = getEditor().getFile().getProject();
+        if (project != null) {
+            ClassLoader oldLoader = Thread.currentThread().getContextClassLoader();
+            ClassLoader newLoader = DroolsBuilder.class.getClassLoader();
+            try {
+                if (project.getNature("org.eclipse.jdt.core.javanature") != null) {
+                    IJavaProject javaProject = JavaCore.create(project);
+                    newLoader = ProjectClassLoader.getProjectClassLoader(javaProject);
+                }
+                try {
+                    Thread.currentThread().setContextClassLoader(newLoader);
+                    Class<WorkEditor> editorClass = (Class<WorkEditor>) newLoader.loadClass(editorClassName);
+                    Constructor<WorkEditor> constructor = editorClass.getConstructor(Shell.class);
+                    WorkEditor editor = constructor.newInstance(getViewer().getControl().getShell());
+                    editor.setWorkDefinition(workDefinition);
+                    WorkItemNode workItemNode = getWorkItemWrapper().getWorkItemNode();
+                    editor.setWork(workItemNode.getWork());
+                    editor.show();
+                    workItemNode.setWork(editor.getWork());
+                } finally {
+                    Thread.currentThread().setContextClassLoader(oldLoader);
+                }
+            } catch (Exception e) {
+                DroolsEclipsePlugin.log(e);
+            }
         }
     }
     
-    public static class TaskNodeFigure extends ElementFigure {
+    public static class WorkItemFigure extends AbstractElementFigure {
         
-        public TaskNodeFigure(String icon) {
-            setIcon(ImageDescriptor.createFromURL(
-                DroolsEclipsePlugin.getDefault().getBundle().getEntry(icon)).createImage());
-        }
-        
         private RoundedRectangle rectangle;
         
         protected void customizeFigure() {

Added: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/figure/DefaultNodeFigure.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/figure/DefaultNodeFigure.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/figure/DefaultNodeFigure.java	2008-04-06 23:51:00 UTC (rev 19434)
@@ -0,0 +1,52 @@
+package org.drools.eclipse.flow.ruleflow.editor.editpart.figure;
+
+import org.drools.eclipse.DroolsEclipsePlugin;
+import org.drools.eclipse.flow.common.editor.editpart.figure.AbstractElementFigure;
+import org.eclipse.draw2d.RoundedRectangle;
+import org.eclipse.draw2d.geometry.Dimension;
+import org.eclipse.draw2d.geometry.Rectangle;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.RGB;
+import org.eclipse.swt.widgets.Display;
+
+public class DefaultNodeFigure extends AbstractElementFigure {
+        
+    private Image icon;
+    private Color color;
+        
+    private RoundedRectangle rectangle;
+    
+    public void setIcon(String iconName) {
+        icon = ImageDescriptor.createFromURL(
+            DroolsEclipsePlugin.getDefault().getBundle()
+                .getEntry(iconName)).createImage();
+    }
+    
+    public void setColor(RGB rgb) {
+        color = new Color(Display.getCurrent(), rgb);
+    }
+    
+    protected void customizeFigure() {
+        rectangle = new RoundedRectangle();
+        rectangle.setCornerDimensions(new Dimension(25, 25));
+        add(rectangle, 0);
+        rectangle.setBackgroundColor(color);
+        rectangle.setBounds(getBounds());
+        setSelected(false);
+        setIcon(icon);
+    }
+    
+    public void setBounds(Rectangle rectangle) {
+        super.setBounds(rectangle);
+        this.rectangle.setBounds(rectangle);
+    }
+    
+    public void setSelected(boolean b) {
+        super.setSelected(b);
+        rectangle.setLineWidth(b ? 3 : 1);
+        repaint();
+    }
+    
+}

Added: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/ElementNameSection.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/ElementNameSection.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/ElementNameSection.java	2008-04-06 23:51:00 UTC (rev 19434)
@@ -0,0 +1,73 @@
+package org.drools.eclipse.flow.ruleflow.view.property;
+
+import org.drools.eclipse.flow.common.editor.core.ElementWrapper;
+import org.drools.eclipse.flow.common.editor.editpart.ElementEditPart;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.CLabel;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.layout.FormAttachment;
+import org.eclipse.swt.layout.FormData;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.views.properties.tabbed.AbstractPropertySection;
+import org.eclipse.ui.views.properties.tabbed.ITabbedPropertyConstants;
+import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage;
+
+public class ElementNameSection extends AbstractPropertySection implements ModifyListener {
+
+    private Text nameText;
+    private ElementWrapper elementWrapper;
+
+    public void createControls(Composite parent, TabbedPropertySheetPage aTabbedPropertySheetPage) {
+        super.createControls(parent, aTabbedPropertySheetPage);
+        Composite composite = getWidgetFactory().createFlatFormComposite(parent);
+
+        nameText = getWidgetFactory().createText(composite, "");
+        FormData data = new FormData();
+        data.left = new FormAttachment(0, STANDARD_LABEL_WIDTH);
+        data.right = new FormAttachment(100, 0);
+        data.top = new FormAttachment(0, ITabbedPropertyConstants.VSPACE);
+        nameText.setLayoutData(data);
+        nameText.addModifyListener(this);
+
+        CLabel labelLabel = getWidgetFactory().createCLabel(composite, "Name:");
+        data = new FormData();
+        data.left = new FormAttachment(0, 0);
+        data.right = new FormAttachment(nameText, -ITabbedPropertyConstants.HSPACE);
+        data.top = new FormAttachment(nameText, 0, SWT.CENTER);
+        labelLabel.setLayoutData(data);
+    }
+    
+    public void setInput(IWorkbenchPart part, ISelection selection) {
+        super.setInput(part, selection);
+        if (selection instanceof IStructuredSelection) {
+            Object input = ((IStructuredSelection) selection).getFirstElement();
+            if (input instanceof ElementEditPart) {
+                input = ((ElementEditPart) input).getModel();
+            }
+            if (input instanceof ElementWrapper) {
+                this.elementWrapper = (ElementWrapper) input;
+            }
+        }
+    }
+    
+    public void refresh() {
+        if (elementWrapper != null) {
+            nameText.removeModifyListener(this);
+            nameText.setText(elementWrapper.getName());
+            nameText.addModifyListener(this);
+        }
+    }
+
+
+    public void modifyText(ModifyEvent arg0) {
+        if (elementWrapper != null) {
+            elementWrapper.setName(nameText.getText());
+        }
+    }
+
+}

Added: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/NodeSection.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/NodeSection.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/NodeSection.java	2008-04-06 23:51:00 UTC (rev 19434)
@@ -0,0 +1,7 @@
+package org.drools.eclipse.flow.ruleflow.view.property;
+
+import org.eclipse.ui.views.properties.tabbed.AbstractPropertySection;
+
+public class NodeSection extends AbstractPropertySection {
+
+}

Added: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/ProcessNameSection.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/ProcessNameSection.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/ProcessNameSection.java	2008-04-06 23:51:00 UTC (rev 19434)
@@ -0,0 +1,74 @@
+package org.drools.eclipse.flow.ruleflow.view.property;
+
+import org.drools.eclipse.flow.common.editor.core.ProcessWrapper;
+import org.drools.eclipse.flow.common.editor.editpart.ProcessEditPart;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.CLabel;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.layout.FormAttachment;
+import org.eclipse.swt.layout.FormData;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.views.properties.tabbed.AbstractPropertySection;
+import org.eclipse.ui.views.properties.tabbed.ITabbedPropertyConstants;
+import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage;
+
+public class ProcessNameSection extends AbstractPropertySection implements ModifyListener {
+
+    private Text nameText;
+    private ProcessWrapper processWrapper;
+
+    public void createControls(Composite parent, TabbedPropertySheetPage aTabbedPropertySheetPage) {
+        super.createControls(parent, aTabbedPropertySheetPage);
+        Composite composite = getWidgetFactory().createFlatFormComposite(parent);
+
+        nameText = getWidgetFactory().createText(composite, "");
+        FormData data = new FormData();
+        data.left = new FormAttachment(0, STANDARD_LABEL_WIDTH);
+        data.right = new FormAttachment(100, 0);
+        data.top = new FormAttachment(0, ITabbedPropertyConstants.VSPACE);
+        nameText.setLayoutData(data);
+        nameText.addModifyListener(this);
+
+        CLabel labelLabel = getWidgetFactory().createCLabel(composite, "Name:");
+        data = new FormData();
+        data.left = new FormAttachment(0, 0);
+        data.right = new FormAttachment(nameText, -ITabbedPropertyConstants.HSPACE);
+        data.top = new FormAttachment(nameText, 0, SWT.CENTER);
+        labelLabel.setLayoutData(data);
+
+    }
+    
+    public void setInput(IWorkbenchPart part, ISelection selection) {
+        super.setInput(part, selection);
+        if (selection instanceof IStructuredSelection) {
+            Object input = ((IStructuredSelection) selection).getFirstElement();
+            if (input instanceof ProcessEditPart) {
+                input = ((ProcessEditPart) input).getModel();
+            }
+            if (input instanceof ProcessWrapper) {
+                this.processWrapper = (ProcessWrapper) input;
+            }
+        }
+    }
+    
+    public void refresh() {
+        if (processWrapper != null) {
+            nameText.removeModifyListener(this);
+            nameText.setText(processWrapper.getName());
+            nameText.addModifyListener(this);
+        }
+    }
+
+
+    public void modifyText(ModifyEvent arg0) {
+        if (processWrapper != null) {
+            processWrapper.setName(nameText.getText());
+        }
+    }
+
+}

Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/constraint/ConstraintListDialog.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/constraint/ConstraintListDialog.java	2008-04-06 23:49:40 UTC (rev 19433)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/constraint/ConstraintListDialog.java	2008-04-06 23:51:00 UTC (rev 19434)
@@ -16,7 +16,6 @@
  */
 
 import java.util.HashMap;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
@@ -46,8 +45,8 @@
 
 	private WorkflowProcess process;
 	private Split split;
-	private Map newMap;
-	private Map labels = new HashMap();
+	private Map<Split.ConnectionRef, Constraint> newMap;
+	private Map<Connection, Label> labels = new HashMap<Connection, Label>();
 
 	protected ConstraintListDialog(Shell parentShell, WorkflowProcess process,
 			Split split) {
@@ -62,25 +61,23 @@
 		gridLayout.numColumns = 3;
 		composite.setLayout(gridLayout);
 
-		List outgoingConnections = split.getDefaultOutgoingConnections();
+		List<Connection> outgoingConnections = split.getDefaultOutgoingConnections();
 		labels.clear();
-		for (Iterator it = outgoingConnections.iterator(); it.hasNext(); ) {
-			Connection outgoingConnection = (Connection) it.next();
+		for (Connection outgoingConnection: outgoingConnections) {
 			Label label1 = new Label(composite, SWT.NONE);
-			label1.setText("To node " + outgoingConnection.getTo().getName()
-					+ ": ");
-
+			label1.setText("To node "
+		        + outgoingConnection.getTo().getName() + ": ");
 			Label label2 = new Label(composite, SWT.NONE);
 			labels.put(outgoingConnection, label2);
 			GridData gridData = new GridData();
 			gridData.grabExcessHorizontalSpace = true;
 			gridData.horizontalAlignment = GridData.FILL;
 			label2.setLayoutData(gridData);
-			Constraint constraint = (Constraint) newMap.get(outgoingConnection);
+			Constraint constraint = newMap.get(
+		        new Split.ConnectionRef(outgoingConnection.getTo().getId(), outgoingConnection.getToType()));
 			if (constraint != null) {
 				label2.setText(constraint.getName());
 			}
-
 			Button editButton = new Button(composite, SWT.NONE);
 			editButton.setText("Edit");
 			editButton.addSelectionListener(new EditButtonListener(
@@ -92,7 +89,7 @@
 
 	public void setValue(Object value) {
 		super.setValue(value);
-		this.newMap = new HashMap((Map) value);
+		this.newMap = new HashMap<Split.ConnectionRef, Constraint>((Map<Split.ConnectionRef, Constraint>) value);
 	}
 
 	protected Object updateValue(Object value) {
@@ -106,14 +103,17 @@
 				RuleFlowConstraintDialog dialog = new RuleFlowConstraintDialog(
 						getShell(), process);
 				dialog.create();
-				Constraint constraint = (Constraint) newMap.get(connection);
+				Split.ConnectionRef connectionRef = new Split.ConnectionRef(connection.getTo().getId(), connection.getToType());
+				Constraint constraint = newMap.get(connectionRef);
 				dialog.setConstraint(constraint);
 				int code = dialog.open();
 				if (code != CANCEL) {
 					constraint = dialog.getConstraint();
-					newMap.put(connection, constraint);
-					setConnectionText((Label) labels.get(connection), constraint
-							.getName());
+					newMap.put(
+				        connectionRef,
+				        constraint);
+					setConnectionText(
+				        (Label) labels.get(connection), constraint.getName());
 				}
 			}
 

Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/variable/VariableDialog.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/variable/VariableDialog.java	2008-04-06 23:49:40 UTC (rev 19433)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/variable/VariableDialog.java	2008-04-06 23:51:00 UTC (rev 19434)
@@ -22,7 +22,7 @@
 import org.drools.eclipse.flow.common.view.datatype.editor.impl.DataTypeEditorComposite;
 import org.drools.eclipse.flow.common.view.datatype.editor.impl.EditorComposite;
 import org.drools.eclipse.flow.common.view.property.EditBeanDialog;
-import org.drools.process.core.Variable;
+import org.drools.process.core.context.variable.Variable;
 import org.drools.process.core.datatype.DataType;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;

Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/variable/VariableListDialog.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/variable/VariableListDialog.java	2008-04-06 23:49:40 UTC (rev 19433)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/variable/VariableListDialog.java	2008-04-06 23:51:00 UTC (rev 19434)
@@ -16,7 +16,7 @@
  */
 
 import org.drools.eclipse.flow.common.view.property.EditListDialog;
-import org.drools.process.core.impl.VariableImpl;
+import org.drools.process.core.context.variable.Variable;
 import org.eclipse.swt.widgets.Shell;
 
 /**
@@ -31,6 +31,6 @@
     }
 
     protected Object createItem() {
-        return new VariableImpl();
+        return new Variable();
     }
 }

Added: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/workitem/WorkItemParameterMappingCellEditor.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/workitem/WorkItemParameterMappingCellEditor.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/workitem/WorkItemParameterMappingCellEditor.java	2008-04-06 23:51:00 UTC (rev 19434)
@@ -0,0 +1,45 @@
+package org.drools.eclipse.flow.ruleflow.view.property.workitem;
+/*
+ * 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.eclipse.flow.common.view.property.BeanDialogCellEditor;
+import org.drools.eclipse.flow.common.view.property.EditBeanDialog;
+import org.drools.workflow.core.node.WorkItemNode;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Shell;
+
+/**
+ * Cell editor for work item result mappings.
+ * 
+ * @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
+ */
+public class WorkItemParameterMappingCellEditor extends BeanDialogCellEditor {
+
+    private WorkItemNode workItemNode;
+    
+    public WorkItemParameterMappingCellEditor(Composite parent, WorkItemNode workItemNode) {
+        super(parent);
+        this.workItemNode = workItemNode;
+    }
+
+    protected EditBeanDialog createDialog(Shell shell) {
+        return new WorkItemParameterMappingDialog(shell, workItemNode);
+    }
+    
+    protected String getLabelText(Object value) {
+		return "";
+    }
+}
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/workitem/WorkItemParameterMappingDialog.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/workitem/WorkItemParameterMappingDialog.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/workitem/WorkItemParameterMappingDialog.java	2008-04-06 23:51:00 UTC (rev 19434)
@@ -0,0 +1,238 @@
+package org.drools.eclipse.flow.ruleflow.view.property.workitem;
+/*
+ * 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 java.util.HashMap;
+import java.util.Map;
+
+import org.drools.eclipse.flow.common.view.property.EditBeanDialog;
+import org.drools.workflow.core.node.WorkItemNode;
+import org.eclipse.jface.resource.JFaceResources;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.TableEditor;
+import org.eclipse.swt.events.FocusEvent;
+import org.eclipse.swt.events.FocusListener;
+import org.eclipse.swt.events.MouseEvent;
+import org.eclipse.swt.events.MouseListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableColumn;
+import org.eclipse.swt.widgets.TableItem;
+import org.eclipse.swt.widgets.Text;
+
+/**
+ * Dialog for editing work item parameter mappings.
+ * 
+ * @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
+ */
+public class WorkItemParameterMappingDialog extends EditBeanDialog implements FocusListener, MouseListener {
+
+    private Table table;
+    private Button removeButton;
+    private Text text;
+    private TableEditor editor;
+    private int selectedColumn = -1;
+    
+	public WorkItemParameterMappingDialog(Shell parentShell, WorkItemNode workItemNode) {
+		super(parentShell, "Parameter Mapping");
+		setValue(workItemNode.getInMappings());
+	}
+
+	protected Object updateValue(Object value) {
+	    Map<String, String> mapping = new HashMap<String, String>();
+	    for (TableItem item: table.getItems()) {
+	        mapping.put(item.getText(0), item.getText(1));
+	    }
+		return mapping;
+	}
+
+	protected Point getInitialSize() {
+		return new Point(450, 300);
+	}
+
+	public Control createDialogArea(Composite parent) {
+	    Composite composite = (Composite) super.createDialogArea(parent);
+		GridLayout layout = new GridLayout();
+        layout.numColumns = 2;
+        composite.setLayout(layout);
+
+        table = new Table(composite, SWT.SINGLE);
+        GridData gd = new GridData();
+        gd.verticalSpan = 3;
+        gd.grabExcessHorizontalSpace = true;
+        gd.grabExcessVerticalSpace = true;
+        gd.verticalAlignment = GridData.FILL;
+        gd.horizontalAlignment = GridData.FILL;
+        table.setLayoutData(gd);
+        table.addSelectionListener(new SelectionListener() {
+            public void widgetDefaultSelected(SelectionEvent e) {
+                removeButton.setEnabled(table.getSelectionIndex() != -1);
+            }
+            public void widgetSelected(SelectionEvent e) {
+                removeButton.setEnabled(table.getSelectionIndex() != -1);
+            }
+        });
+        table.addMouseListener(this);
+        table.setHeaderVisible(true);
+        table.setLinesVisible(true);
+        TableColumn variableNameColumn = new TableColumn(table, SWT.LEFT);
+        variableNameColumn.setText("Parameter");
+        variableNameColumn.setWidth(150);
+        TableColumn parameterNameColumn = new TableColumn(table, SWT.LEFT);
+        parameterNameColumn.setText("Variable");
+        parameterNameColumn.setWidth(225);
+        
+        editor = new TableEditor(table);
+        text = new Text(table, SWT.NORMAL);
+        text.setVisible(false);
+        text.setText("");
+        editor.minimumWidth = text.getSize().x;
+        editor.horizontalAlignment = SWT.LEFT;
+        editor.grabHorizontal = true;
+
+		Button addButton = new Button(composite, SWT.PUSH);
+		addButton.setText("Add");
+		addButton.setFont(JFaceResources.getDialogFont());
+		addButton.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent event) {
+				addButtonPressed();
+			}
+		});
+		gd = new GridData();
+		gd.horizontalAlignment = SWT.FILL;
+		addButton.setLayoutData(gd);
+
+		removeButton = new Button(composite, SWT.PUSH);
+		removeButton.setText("Remove");
+		removeButton.setFont(JFaceResources.getDialogFont());
+		removeButton.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent event) {
+				removeButtonPressed();
+			}
+		});
+		gd = new GridData();
+		removeButton.setLayoutData(gd);
+		removeButton.setEnabled(false);
+
+        updateTable();
+        
+		return composite;
+	}
+	
+	private void updateTable() {
+        Map<String, String> mapping = (Map<String, String>) getValue();
+	    for (Map.Entry<String, String> entry: mapping.entrySet()) {
+            TableItem item = new TableItem(table, SWT.NONE);
+            item.setText(new String[] { entry.getKey(), entry.getValue()} );
+        }
+	}
+	
+	private void addButtonPressed() {
+	    TableItem item = new TableItem(table, SWT.NONE);
+        item.setText(0, "parameter");
+        item.setText(1, "variable");
+        table.setSelection(item);
+	}
+	
+	private void removeButtonPressed() {
+        int i = table.getSelectionIndex();
+        if (i == -1) {
+            return;
+        }
+        table.remove(i);
+        removeButton.setEnabled(table.getItemCount() == 0);
+	}
+	
+	private void doEdit() {
+        if (text.isVisible()) {
+            endEdit();
+        }
+        if (table.getSelectionIndex() == -1 || selectedColumn == -1) return;
+        TableItem selection = table.getItem(table.getSelectionIndex());
+        String value = selection.getText(selectedColumn);
+        text.setText(value == null ? "" : value);
+        editor.setEditor(text, selection, selectedColumn);
+        text.setVisible(true);
+        text.selectAll();
+        text.setFocus();
+        text.addFocusListener(this);
+    }
+    
+    private void endEdit() {
+        text.setVisible(false);
+        text.setText("");
+        text.removeFocusListener(this);
+    }
+    
+    public void focusGained(FocusEvent e) {
+    }
+
+    public void focusLost(FocusEvent e) {
+        if (e.widget == text) {
+            applyValue();
+            endEdit();
+        }
+    }
+    
+    public void mouseDoubleClick(MouseEvent e) {
+    }
+
+    public void mouseDown(MouseEvent e) {
+        selectedColumn = getSelectedColumn(e.x, e.y);
+        if (selectedColumn == -1) return;
+        doEdit();
+    }
+    
+    public void mouseUp(MouseEvent e) {
+    }
+    
+    private int getSelectedColumn(int x, int y) {
+        int columnToEdit = -1;
+        int columns = table.getColumnCount();
+        if (table.getSelection().length == 0) {
+            return -1;
+        }
+        for (int i = 0; i < columns; i++) {
+            Rectangle bounds = table.getSelection()[0].getBounds(i);
+            if (bounds.contains(x, y)) {
+                columnToEdit = i;
+                break;
+            }
+        }   
+        return columnToEdit;
+    }
+
+
+    private void applyValue() {
+        int i = table.getSelectionIndex();
+        if (i == -1) {
+            return;
+        }
+        TableItem item = table.getItem(i);
+        item.setText(selectedColumn, text.getText());
+    }
+
+}

Added: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/workitem/WorkItemParameterMappingPropertyDescriptor.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/workitem/WorkItemParameterMappingPropertyDescriptor.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/workitem/WorkItemParameterMappingPropertyDescriptor.java	2008-04-06 23:51:00 UTC (rev 19434)
@@ -0,0 +1,25 @@
+package org.drools.eclipse.flow.ruleflow.view.property.workitem;
+
+import org.drools.workflow.core.node.WorkItemNode;
+import org.eclipse.jface.viewers.CellEditor;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.views.properties.PropertyDescriptor;
+
+public class WorkItemParameterMappingPropertyDescriptor extends PropertyDescriptor {
+
+    private WorkItemNode workItemNode;
+    
+    public WorkItemParameterMappingPropertyDescriptor(Object id, String displayName, WorkItemNode workItemNode) {
+        super(id, displayName);
+        this.workItemNode = workItemNode;
+    }
+    
+    public CellEditor createPropertyEditor(Composite parent) {
+        WorkItemParameterMappingCellEditor editor = new WorkItemParameterMappingCellEditor(parent, workItemNode);
+        if (getValidator() != null) {
+            editor.setValidator(getValidator());
+        }
+        return editor;
+    }
+    
+}

Added: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/workitem/WorkItemResultMappingCellEditor.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/workitem/WorkItemResultMappingCellEditor.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/workitem/WorkItemResultMappingCellEditor.java	2008-04-06 23:51:00 UTC (rev 19434)
@@ -0,0 +1,45 @@
+package org.drools.eclipse.flow.ruleflow.view.property.workitem;
+/*
+ * 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.eclipse.flow.common.view.property.BeanDialogCellEditor;
+import org.drools.eclipse.flow.common.view.property.EditBeanDialog;
+import org.drools.workflow.core.node.WorkItemNode;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Shell;
+
+/**
+ * Cell editor for work item result mappings.
+ * 
+ * @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
+ */
+public class WorkItemResultMappingCellEditor extends BeanDialogCellEditor {
+
+    private WorkItemNode workItemNode;
+    
+    public WorkItemResultMappingCellEditor(Composite parent, WorkItemNode workItemNode) {
+        super(parent);
+        this.workItemNode = workItemNode;
+    }
+
+    protected EditBeanDialog createDialog(Shell shell) {
+        return new WorkItemResultMappingDialog(shell, workItemNode);
+    }
+    
+    protected String getLabelText(Object value) {
+		return "";
+    }
+}
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/workitem/WorkItemResultMappingDialog.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/workitem/WorkItemResultMappingDialog.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/workitem/WorkItemResultMappingDialog.java	2008-04-06 23:51:00 UTC (rev 19434)
@@ -0,0 +1,238 @@
+package org.drools.eclipse.flow.ruleflow.view.property.workitem;
+/*
+ * 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 java.util.HashMap;
+import java.util.Map;
+
+import org.drools.eclipse.flow.common.view.property.EditBeanDialog;
+import org.drools.workflow.core.node.WorkItemNode;
+import org.eclipse.jface.resource.JFaceResources;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.TableEditor;
+import org.eclipse.swt.events.FocusEvent;
+import org.eclipse.swt.events.FocusListener;
+import org.eclipse.swt.events.MouseEvent;
+import org.eclipse.swt.events.MouseListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableColumn;
+import org.eclipse.swt.widgets.TableItem;
+import org.eclipse.swt.widgets.Text;
+
+/**
+ * Dialog for editing work item result mappings.
+ * 
+ * @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
+ */
+public class WorkItemResultMappingDialog extends EditBeanDialog implements FocusListener, MouseListener {
+
+    private Table table;
+    private Button removeButton;
+    private Text text;
+    private TableEditor editor;
+    private int selectedColumn = -1;
+    
+	public WorkItemResultMappingDialog(Shell parentShell, WorkItemNode workItemNode) {
+		super(parentShell, "Result Mapping");
+		setValue(workItemNode.getOutMappings());
+	}
+
+	protected Object updateValue(Object value) {
+	    Map<String, String> mapping = new HashMap<String, String>();
+	    for (TableItem item: table.getItems()) {
+	        mapping.put(item.getText(1), item.getText(0));
+	    }
+		return mapping;
+	}
+
+	protected Point getInitialSize() {
+		return new Point(450, 300);
+	}
+
+	public Control createDialogArea(Composite parent) {
+	    Composite composite = (Composite) super.createDialogArea(parent);
+		GridLayout layout = new GridLayout();
+        layout.numColumns = 2;
+        composite.setLayout(layout);
+
+        table = new Table(composite, SWT.SINGLE);
+        GridData gd = new GridData();
+        gd.verticalSpan = 3;
+        gd.grabExcessHorizontalSpace = true;
+        gd.grabExcessVerticalSpace = true;
+        gd.verticalAlignment = GridData.FILL;
+        gd.horizontalAlignment = GridData.FILL;
+        table.setLayoutData(gd);
+        table.addSelectionListener(new SelectionListener() {
+            public void widgetDefaultSelected(SelectionEvent e) {
+                removeButton.setEnabled(table.getSelectionIndex() != -1);
+            }
+            public void widgetSelected(SelectionEvent e) {
+                removeButton.setEnabled(table.getSelectionIndex() != -1);
+            }
+        });
+        table.addMouseListener(this);
+        table.setHeaderVisible(true);
+        table.setLinesVisible(true);
+        TableColumn variableNameColumn = new TableColumn(table, SWT.LEFT);
+        variableNameColumn.setText("Variable");
+        variableNameColumn.setWidth(150);
+        TableColumn parameterNameColumn = new TableColumn(table, SWT.LEFT);
+        parameterNameColumn.setText("Result Parameter");
+        parameterNameColumn.setWidth(225);
+        
+        editor = new TableEditor(table);
+        text = new Text(table, SWT.NORMAL);
+        text.setVisible(false);
+        text.setText("");
+        editor.minimumWidth = text.getSize().x;
+        editor.horizontalAlignment = SWT.LEFT;
+        editor.grabHorizontal = true;
+
+		Button addButton = new Button(composite, SWT.PUSH);
+		addButton.setText("Add");
+		addButton.setFont(JFaceResources.getDialogFont());
+		addButton.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent event) {
+				addButtonPressed();
+			}
+		});
+		gd = new GridData();
+		gd.horizontalAlignment = SWT.FILL;
+		addButton.setLayoutData(gd);
+
+		removeButton = new Button(composite, SWT.PUSH);
+		removeButton.setText("Remove");
+		removeButton.setFont(JFaceResources.getDialogFont());
+		removeButton.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent event) {
+				removeButtonPressed();
+			}
+		});
+		gd = new GridData();
+		removeButton.setLayoutData(gd);
+		removeButton.setEnabled(false);
+
+        updateTable();
+        
+		return composite;
+	}
+	
+	private void updateTable() {
+        Map<String, String> mapping = (Map<String, String>) getValue();
+	    for (Map.Entry<String, String> entry: mapping.entrySet()) {
+            TableItem item = new TableItem(table, SWT.NONE);
+            item.setText(new String[] { entry.getValue(), entry.getKey()} );
+        }
+	}
+	
+	private void addButtonPressed() {
+	    TableItem item = new TableItem(table, SWT.NONE);
+        item.setText(0, "variable");
+        item.setText(1, "result parameter");
+        table.setSelection(item);
+	}
+	
+	private void removeButtonPressed() {
+        int i = table.getSelectionIndex();
+        if (i == -1) {
+            return;
+        }
+        table.remove(i);
+        removeButton.setEnabled(table.getItemCount() == 0);
+	}
+	
+	private void doEdit() {
+        if (text.isVisible()) {
+            endEdit();
+        }
+        if (table.getSelectionIndex() == -1 || selectedColumn == -1) return;
+        TableItem selection = table.getItem(table.getSelectionIndex());
+        String value = selection.getText(selectedColumn);
+        text.setText(value == null ? "" : value);
+        editor.setEditor(text, selection, selectedColumn);
+        text.setVisible(true);
+        text.selectAll();
+        text.setFocus();
+        text.addFocusListener(this);
+    }
+    
+    private void endEdit() {
+        text.setVisible(false);
+        text.setText("");
+        text.removeFocusListener(this);
+    }
+    
+    public void focusGained(FocusEvent e) {
+    }
+
+    public void focusLost(FocusEvent e) {
+        if (e.widget == text) {
+            applyValue();
+            endEdit();
+        }
+    }
+    
+    public void mouseDoubleClick(MouseEvent e) {
+    }
+
+    public void mouseDown(MouseEvent e) {
+        selectedColumn = getSelectedColumn(e.x, e.y);
+        if (selectedColumn == -1) return;
+        doEdit();
+    }
+    
+    public void mouseUp(MouseEvent e) {
+    }
+    
+    private int getSelectedColumn(int x, int y) {
+        int columnToEdit = -1;
+        int columns = table.getColumnCount();
+        if (table.getSelection().length == 0) {
+            return -1;
+        }
+        for (int i = 0; i < columns; i++) {
+            Rectangle bounds = table.getSelection()[0].getBounds(i);
+            if (bounds.contains(x, y)) {
+                columnToEdit = i;
+                break;
+            }
+        }   
+        return columnToEdit;
+    }
+
+
+    private void applyValue() {
+        int i = table.getSelectionIndex();
+        if (i == -1) {
+            return;
+        }
+        TableItem item = table.getItem(i);
+        item.setText(selectedColumn, text.getText());
+    }
+
+}

Added: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/workitem/WorkItemResultMappingPropertyDescriptor.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/workitem/WorkItemResultMappingPropertyDescriptor.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/workitem/WorkItemResultMappingPropertyDescriptor.java	2008-04-06 23:51:00 UTC (rev 19434)
@@ -0,0 +1,25 @@
+package org.drools.eclipse.flow.ruleflow.view.property.workitem;
+
+import org.drools.workflow.core.node.WorkItemNode;
+import org.eclipse.jface.viewers.CellEditor;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.views.properties.PropertyDescriptor;
+
+public class WorkItemResultMappingPropertyDescriptor extends PropertyDescriptor {
+
+    private WorkItemNode workItemNode;
+    
+    public WorkItemResultMappingPropertyDescriptor(Object id, String displayName, WorkItemNode workItemNode) {
+        super(id, displayName);
+        this.workItemNode = workItemNode;
+    }
+    
+    public CellEditor createPropertyEditor(Composite parent) {
+        WorkItemParameterMappingCellEditor editor = new WorkItemParameterMappingCellEditor(parent, workItemNode);
+        if (getValidator() != null) {
+            editor.setValidator(getValidator());
+        }
+        return editor;
+    }
+    
+}

Added: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/preferences/DroolsBuildPathPropertyPage.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/preferences/DroolsBuildPathPropertyPage.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/preferences/DroolsBuildPathPropertyPage.java	2008-04-06 23:51:00 UTC (rev 19434)
@@ -0,0 +1,5 @@
+package org.drools.eclipse.preferences;
+
+public class DroolsBuildPathPropertyPage {
+
+}

Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/view/rules/RulesView.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/view/rules/RulesView.java	2008-04-06 23:49:40 UTC (rev 19433)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/view/rules/RulesView.java	2008-04-06 23:51:00 UTC (rev 19434)
@@ -10,17 +10,16 @@
 import java.util.List;
 import java.util.Map;
 
-import org.drools.compiler.PackageBuilder;
-import org.drools.compiler.ProcessBuilder;
 import org.drools.eclipse.DRLInfo;
 import org.drools.eclipse.DroolsEclipsePlugin;
+import org.drools.eclipse.ProcessInfo;
 import org.drools.eclipse.core.DroolsElement;
 import org.drools.eclipse.core.DroolsModelBuilder;
 import org.drools.eclipse.core.Function;
 import org.drools.eclipse.core.Global;
 import org.drools.eclipse.core.Package;
-import org.drools.eclipse.core.Query;
 import org.drools.eclipse.core.Process;
+import org.drools.eclipse.core.Query;
 import org.drools.eclipse.core.Rule;
 import org.drools.eclipse.core.RuleSet;
 import org.drools.eclipse.core.Template;
@@ -28,8 +27,6 @@
 import org.drools.eclipse.core.ui.DroolsLabelProvider;
 import org.drools.eclipse.core.ui.DroolsTreeSorter;
 import org.drools.eclipse.core.ui.FilterActionGroup;
-import org.drools.eclipse.flow.common.editor.core.ProcessWrapper;
-import org.drools.eclipse.flow.ruleflow.core.RuleFlowProcessWrapper;
 import org.drools.lang.descr.FactTemplateDescr;
 import org.drools.lang.descr.FunctionDescr;
 import org.drools.lang.descr.GlobalDescr;
@@ -64,8 +61,6 @@
 import org.eclipse.ui.part.ViewPart;
 import org.eclipse.ui.texteditor.ITextEditor;
 
-import com.thoughtworks.xstream.XStream;
-
 public class RulesView extends ViewPart implements IDoubleClickListener, IResourceVisitor, IResourceChangeListener {
 
 	private final RuleSet ruleSet = DroolsModelBuilder.createRuleSet();
@@ -210,31 +205,21 @@
     		    } else if ("rf".equals(resource.getFileExtension())) {
     		        try {
         	            String processString = convertToString(file.getContents());
-        	            XStream stream = new XStream();
-        	            stream.setMode(XStream.ID_REFERENCES);
-        	            
-        	            ClassLoader oldLoader = Thread.currentThread().getContextClassLoader();
-        	            ClassLoader newLoader = this.getClass().getClassLoader();
-        	            try {
-        	                Thread.currentThread().setContextClassLoader(newLoader);
-        	                Object o = stream.fromXML(processString);
-        	                if (o instanceof ProcessWrapper) {
-        	                    String packageName = ((ProcessWrapper) o).getProcess().getPackageName();
-                                Package pkg = ruleSet.getPackage(packageName);
-                                if (pkg == null) {
-                                    pkg = DroolsModelBuilder.addPackage(ruleSet, packageName, 0, 0);
-                                }
-                                Process process = DroolsModelBuilder.addProcess(pkg, ((ProcessWrapper) o).getProcess().getId(), file);
-                                List droolsElements = (List) resourcesMap.get(file);
-                                if (droolsElements == null) {
-                                    droolsElements = new ArrayList();
-                                    resourcesMap.put(file, droolsElements);
-                                }
-                                droolsElements.add(process);
-        	                }
-        	            } finally {
-        	                Thread.currentThread().setContextClassLoader(oldLoader);
-        	            }           
+                        ProcessInfo processInfo = DroolsEclipsePlugin.getDefault().parseProcess(processString, resource);
+                        if (processInfo != null && processInfo.getProcess() != null) {
+    	                    String packageName = processInfo.getProcess().getPackageName();
+                            Package pkg = ruleSet.getPackage(packageName);
+                            if (pkg == null) {
+                                pkg = DroolsModelBuilder.addPackage(ruleSet, packageName, 0, 0);
+                            }
+                            Process process = DroolsModelBuilder.addProcess(pkg, processInfo.getProcess().getId(), file);
+                            List droolsElements = (List) resourcesMap.get(file);
+                            if (droolsElements == null) {
+                                droolsElements = new ArrayList();
+                                resourcesMap.put(file, droolsElements);
+                            }
+                            droolsElements.add(process);
+    	                }
         		    } catch (Throwable t) {
                         DroolsEclipsePlugin.log(t);
                     }     
@@ -261,7 +246,9 @@
 							treeViewer.getControl().getDisplay().asyncExec(
 						        new Runnable() {
 									public void run() {
-										treeViewer.refresh();
+									    if (!treeViewer.getControl().isDisposed()) {
+									        treeViewer.refresh();
+									    }
 									}
 								}
 					        );

Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/resources/org/drools/eclipse/flow/ruleflow/SampleRuleFlow.rf.template
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/resources/org/drools/eclipse/flow/ruleflow/SampleRuleFlow.rf.template	2008-04-06 23:49:40 UTC (rev 19433)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/resources/org/drools/eclipse/flow/ruleflow/SampleRuleFlow.rf.template	2008-04-06 23:51:00 UTC (rev 19434)
@@ -1,44 +1,17 @@
-<org.drools.eclipse.flow.ruleflow.core.WorkflowProcessWrapper id="1" serialization="custom">
-  <org.drools.eclipse.flow.common.editor.core.ProcessWrapper>
-    <default>
-      <elements id="2">
-        <entry>
-          <string>1-Wrapper</string>
-          <org.drools.eclipse.flow.ruleflow.core.StartNodeWrapper id="3" serialization="custom">
-            <org.drools.eclipse.flow.common.editor.core.DefaultElementWrapper>
-              <default>
-                <constraint id="4">
-                  <x>100</x>
-                  <y>100</y>
-                  <width>80</width>
-                  <height>40</height>
-                </constraint>
-                <element class="org.drools.ruleflow.core.impl.StartNode" id="5">
-                  <id>1</id>
-                  <name>Start</name>
-                  <incomingConnections id="6"/>
-                  <outgoingConnections id="7"/>
-                </element>
-                <incomingConnections id="8"/>
-                <outgoingConnections id="9"/>
-              </default>
-            </org.drools.eclipse.flow.common.editor.core.DefaultElementWrapper>
-          </org.drools.eclipse.flow.ruleflow.core.StartNodeWrapper>
-        </entry>
-      </elements>
-      <process class="org.drools.ruleflow.core.impl.RuleFlowProcess" id="10">
-        <nodes id="11">
-          <entry>
-            <long>1</long>
-            <org.drools.ruleflow.core.impl.StartNode reference="5"/>
-          </entry>
-        </nodes>
-        <variables id="12"/>
-        <lastNodeId>1</lastNodeId>
-        <id>0</id>
-        <name>flow</name>
-        <type>Workflow</type>
-      </process>
-    </default>
-  </org.drools.eclipse.flow.common.editor.core.ProcessWrapper>
-</org.drools.eclipse.flow.ruleflow.core.WorkflowProcessWrapper>
\ No newline at end of file
+<?xml version="1.0" encoding="UTF-8"?> 
+<process xmlns="http://drools.org/drools-4.0/process"
+         xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
+         xs:schemaLocation="http://drools.org/drools-4.0/process drools-processes-4.0.xsd"
+         type="RuleFlow" name="flow" >
+
+  <header>
+  </header>
+
+  <nodes>
+    <start id="1" name="Start" x="100" y="100" />
+  </nodes>
+
+  <connections>
+  </connections>
+
+</process>
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/resources/org/drools/eclipse/wizard/project/Sample.xls.template
===================================================================
(Binary files differ)

Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/resources/org/drools/eclipse/wizard/project/ruleflow.rf.template
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/resources/org/drools/eclipse/wizard/project/ruleflow.rf.template	2008-04-06 23:49:40 UTC (rev 19433)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/resources/org/drools/eclipse/wizard/project/ruleflow.rf.template	2008-04-06 23:51:00 UTC (rev 19434)
@@ -1,250 +1,23 @@
-<org.drools.eclipse.flow.ruleflow.core.RuleFlowProcessWrapper id="1" serialization="custom">
-  <org.drools.eclipse.flow.common.editor.core.ProcessWrapper>
-    <default>
-      <elements id="2">
-        <entry>
-          <string>3-Wrapper</string>
-          <org.drools.eclipse.flow.ruleflow.core.RuleSetNodeWrapper id="3" serialization="custom">
-            <org.drools.eclipse.flow.common.editor.core.DefaultElementWrapper>
-              <default>
-                <constraint id="4">
-                  <x>280</x>
-                  <y>103</y>
-                  <width>80</width>
-                  <height>40</height>
-                </constraint>
-                <element class="org.drools.workflow.core.node.RuleSetNode" id="5">
-                  <ruleFlowGroup>goodbye</ruleFlowGroup>
-                  <id>3</id>
-                  <name>Goodbye</name>
-                  <incomingConnections id="6">
-                    <entry>
-                      <string>DROOLS_DEFAULT</string>
-                      <list id="7">
-                        <org.drools.workflow.core.impl.ConnectionImpl id="8">
-                          <from class="org.drools.workflow.core.node.RuleSetNode" id="9">
-                            <ruleFlowGroup>hello</ruleFlowGroup>
-                            <id>2</id>
-                            <name>Hello</name>
-                            <incomingConnections id="10">
-                              <entry>
-                                <string>DROOLS_DEFAULT</string>
-                                <list id="11">
-                                  <org.drools.workflow.core.impl.ConnectionImpl id="12">
-                                    <from class="org.drools.workflow.core.node.StartNode" id="13">
-                                      <id>1</id>
-                                      <name>Start</name>
-                                      <incomingConnections id="14"/>
-                                      <outgoingConnections id="15">
-                                        <entry>
-                                          <string>DROOLS_DEFAULT</string>
-                                          <list id="16">
-                                            <org.drools.workflow.core.impl.ConnectionImpl reference="12"/>
-                                          </list>
-                                        </entry>
-                                      </outgoingConnections>
-                                      <nodeContainer class="org.drools.ruleflow.core.RuleFlowProcess" id="17">
-                                        <nodeContainer class="org.drools.ruleflow.core.RuleFlowProcess$WorkflowProcessNodeContainer" id="18">
-                                          <outer-class class="org.drools.ruleflow.core.RuleFlowProcess" reference="17"/>
-                                          <nodes id="19">
-                                            <entry>
-                                              <long>1</long>
-                                              <org.drools.workflow.core.node.StartNode reference="13"/>
-                                            </entry>
-                                            <entry>
-                                              <long>2</long>
-                                              <org.drools.workflow.core.node.RuleSetNode reference="9"/>
-                                            </entry>
-                                            <entry>
-                                              <long>3</long>
-                                              <org.drools.workflow.core.node.RuleSetNode reference="5"/>
-                                            </entry>
-                                            <entry>
-                                              <long>4</long>
-                                              <org.drools.workflow.core.node.EndNode id="20">
-                                                <id>4</id>
-                                                <name>End</name>
-                                                <incomingConnections id="21">
-                                                  <entry>
-                                                    <string>DROOLS_DEFAULT</string>
-                                                    <list id="22">
-                                                      <org.drools.workflow.core.impl.ConnectionImpl id="23">
-                                                        <from class="org.drools.workflow.core.node.RuleSetNode" reference="5"/>
-                                                        <to class="org.drools.workflow.core.node.EndNode" reference="20"/>
-                                                        <fromType>DROOLS_DEFAULT</fromType>
-                                                        <toType>DROOLS_DEFAULT</toType>
-                                                      </org.drools.workflow.core.impl.ConnectionImpl>
-                                                    </list>
-                                                  </entry>
-                                                </incomingConnections>
-                                                <outgoingConnections id="24"/>
-                                                <nodeContainer class="org.drools.ruleflow.core.RuleFlowProcess" reference="17"/>
-                                              </org.drools.workflow.core.node.EndNode>
-                                            </entry>
-                                          </nodes>
-                                          <lastNodeId>4</lastNodeId>
-                                        </nodeContainer>
-                                        <id>com.sample.ruleflow</id>
-                                        <name>ruleflow</name>
-                                        <version>1</version>
-                                        <type>RuleFlow</type>
-                                        <packageName>com.sample</packageName>
-                                        <variableScope class="org.drools.process.core.impl.VariableScopeImpl" id="25">
-                                          <variables id="26"/>
-                                        </variableScope>
-                                      </nodeContainer>
-                                    </from>
-                                    <to class="org.drools.workflow.core.node.RuleSetNode" reference="9"/>
-                                    <fromType>DROOLS_DEFAULT</fromType>
-                                    <toType>DROOLS_DEFAULT</toType>
-                                  </org.drools.workflow.core.impl.ConnectionImpl>
-                                </list>
-                              </entry>
-                            </incomingConnections>
-                            <outgoingConnections id="27">
-                              <entry>
-                                <string>DROOLS_DEFAULT</string>
-                                <list id="28">
-                                  <org.drools.workflow.core.impl.ConnectionImpl reference="8"/>
-                                </list>
-                              </entry>
-                            </outgoingConnections>
-                            <nodeContainer class="org.drools.ruleflow.core.RuleFlowProcess" reference="17"/>
-                          </from>
-                          <to class="org.drools.workflow.core.node.RuleSetNode" reference="5"/>
-                          <fromType>DROOLS_DEFAULT</fromType>
-                          <toType>DROOLS_DEFAULT</toType>
-                        </org.drools.workflow.core.impl.ConnectionImpl>
-                      </list>
-                    </entry>
-                  </incomingConnections>
-                  <outgoingConnections id="29">
-                    <entry>
-                      <string>DROOLS_DEFAULT</string>
-                      <list id="30">
-                        <org.drools.workflow.core.impl.ConnectionImpl reference="23"/>
-                      </list>
-                    </entry>
-                  </outgoingConnections>
-                  <nodeContainer class="org.drools.ruleflow.core.RuleFlowProcess" reference="17"/>
-                </element>
-                <incomingConnections id="31">
-                  <org.drools.eclipse.flow.ruleflow.core.ConnectionWrapper id="32" serialization="custom">
-                    <org.drools.eclipse.flow.common.editor.core.ElementConnection>
-                      <default>
-                        <bendpoints id="33"/>
-                        <source class="org.drools.eclipse.flow.ruleflow.core.RuleSetNodeWrapper" id="34" serialization="custom">
-                          <org.drools.eclipse.flow.common.editor.core.DefaultElementWrapper>
-                            <default>
-                              <constraint id="35">
-                                <x>147</x>
-                                <y>104</y>
-                                <width>80</width>
-                                <height>40</height>
-                              </constraint>
-                              <element class="org.drools.workflow.core.node.RuleSetNode" reference="9"/>
-                              <incomingConnections id="36">
-                                <org.drools.eclipse.flow.ruleflow.core.ConnectionWrapper id="37" serialization="custom">
-                                  <org.drools.eclipse.flow.common.editor.core.ElementConnection>
-                                    <default>
-                                      <bendpoints id="38"/>
-                                      <source class="org.drools.eclipse.flow.ruleflow.core.StartNodeWrapper" id="39" serialization="custom">
-                                        <org.drools.eclipse.flow.common.editor.core.DefaultElementWrapper>
-                                          <default>
-                                            <constraint id="40">
-                                              <x>22</x>
-                                              <y>104</y>
-                                              <width>80</width>
-                                              <height>40</height>
-                                            </constraint>
-                                            <element class="org.drools.workflow.core.node.StartNode" reference="13"/>
-                                            <incomingConnections id="41"/>
-                                            <outgoingConnections id="42">
-                                              <org.drools.eclipse.flow.ruleflow.core.ConnectionWrapper reference="37"/>
-                                            </outgoingConnections>
-                                          </default>
-                                        </org.drools.eclipse.flow.common.editor.core.DefaultElementWrapper>
-                                      </source>
-                                      <target class="org.drools.eclipse.flow.ruleflow.core.RuleSetNodeWrapper" reference="34"/>
-                                    </default>
-                                  </org.drools.eclipse.flow.common.editor.core.ElementConnection>
-                                  <org.drools.eclipse.flow.ruleflow.core.ConnectionWrapper>
-                                    <default>
-                                      <connection reference="12"/>
-                                    </default>
-                                  </org.drools.eclipse.flow.ruleflow.core.ConnectionWrapper>
-                                </org.drools.eclipse.flow.ruleflow.core.ConnectionWrapper>
-                              </incomingConnections>
-                              <outgoingConnections id="43">
-                                <org.drools.eclipse.flow.ruleflow.core.ConnectionWrapper reference="32"/>
-                              </outgoingConnections>
-                              <parent class="org.drools.eclipse.flow.ruleflow.core.RuleFlowProcessWrapper" reference="1"/>
-                            </default>
-                          </org.drools.eclipse.flow.common.editor.core.DefaultElementWrapper>
-                        </source>
-                        <target class="org.drools.eclipse.flow.ruleflow.core.RuleSetNodeWrapper" reference="3"/>
-                      </default>
-                    </org.drools.eclipse.flow.common.editor.core.ElementConnection>
-                    <org.drools.eclipse.flow.ruleflow.core.ConnectionWrapper>
-                      <default>
-                        <connection reference="8"/>
-                      </default>
-                    </org.drools.eclipse.flow.ruleflow.core.ConnectionWrapper>
-                  </org.drools.eclipse.flow.ruleflow.core.ConnectionWrapper>
-                </incomingConnections>
-                <outgoingConnections id="44">
-                  <org.drools.eclipse.flow.ruleflow.core.ConnectionWrapper id="45" serialization="custom">
-                    <org.drools.eclipse.flow.common.editor.core.ElementConnection>
-                      <default>
-                        <bendpoints id="46"/>
-                        <source class="org.drools.eclipse.flow.ruleflow.core.RuleSetNodeWrapper" reference="3"/>
-                        <target class="org.drools.eclipse.flow.ruleflow.core.EndNodeWrapper" id="47" serialization="custom">
-                          <org.drools.eclipse.flow.common.editor.core.DefaultElementWrapper>
-                            <default>
-                              <constraint id="48">
-                                <x>404</x>
-                                <y>103</y>
-                                <width>80</width>
-                                <height>40</height>
-                              </constraint>
-                              <element class="org.drools.workflow.core.node.EndNode" reference="20"/>
-                              <incomingConnections id="49">
-                                <org.drools.eclipse.flow.ruleflow.core.ConnectionWrapper reference="45"/>
-                              </incomingConnections>
-                              <outgoingConnections id="50"/>
-                              <parent class="org.drools.eclipse.flow.ruleflow.core.RuleFlowProcessWrapper" reference="1"/>
-                            </default>
-                          </org.drools.eclipse.flow.common.editor.core.DefaultElementWrapper>
-                        </target>
-                      </default>
-                    </org.drools.eclipse.flow.common.editor.core.ElementConnection>
-                    <org.drools.eclipse.flow.ruleflow.core.ConnectionWrapper>
-                      <default>
-                        <connection reference="23"/>
-                      </default>
-                    </org.drools.eclipse.flow.ruleflow.core.ConnectionWrapper>
-                  </org.drools.eclipse.flow.ruleflow.core.ConnectionWrapper>
-                </outgoingConnections>
-                <parent class="org.drools.eclipse.flow.ruleflow.core.RuleFlowProcessWrapper" reference="1"/>
-              </default>
-            </org.drools.eclipse.flow.common.editor.core.DefaultElementWrapper>
-          </org.drools.eclipse.flow.ruleflow.core.RuleSetNodeWrapper>
-        </entry>
-        <entry>
-          <string>4-Wrapper</string>
-          <org.drools.eclipse.flow.ruleflow.core.EndNodeWrapper reference="47"/>
-        </entry>
-        <entry>
-          <string>2-Wrapper</string>
-          <org.drools.eclipse.flow.ruleflow.core.RuleSetNodeWrapper reference="34"/>
-        </entry>
-        <entry>
-          <string>1-Wrapper</string>
-          <org.drools.eclipse.flow.ruleflow.core.StartNodeWrapper reference="39"/>
-        </entry>
-      </elements>
-      <process class="org.drools.ruleflow.core.RuleFlowProcess" reference="17"/>
-      <routerLayout>2</routerLayout>
-    </default>
-  </org.drools.eclipse.flow.common.editor.core.ProcessWrapper>
-</org.drools.eclipse.flow.ruleflow.core.RuleFlowProcessWrapper>
\ No newline at end of file
+<?xml version="1.0" encoding="UTF-8"?> 
+<process xmlns="http://drools.org/drools-4.0/process"
+         xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
+         xs:schemaLocation="http://drools.org/drools-4.0/process drools-processes-4.0.xsd"
+         type="RuleFlow" name="ruleflow" id="com.sample.ruleflow" package-name="com.sample" >
+
+  <header>
+  </header>
+
+  <nodes>
+    <start id="1" name="Start" x="61" y="95" width="80" height="40" />
+    <ruleSet id="2" name="Hello" x="200" y="94" width="80" height="40" ruleFlowGroup="hello" />
+    <ruleSet id="3" name="Goodbye" x="328" y="95" ruleFlowGroup="goodbye" />
+    <end id="4" name="End" x="466" y="95" width="80" height="40" />
+  </nodes>
+
+  <connections>
+    <connection from="1" to="2"/>
+    <connection from="2" to="3"/>
+    <connection from="3" to="4"/>
+  </connections>
+
+</process>
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/resources/org/drools/eclipse/wizard/project/ruleflow.rfm.template
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/resources/org/drools/eclipse/wizard/project/ruleflow.rfm.template	2008-04-06 23:49:40 UTC (rev 19433)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/resources/org/drools/eclipse/wizard/project/ruleflow.rfm.template	2008-04-06 23:51:00 UTC (rev 19434)
@@ -1,115 +1,23 @@
-<org.drools.ruleflow.core.RuleFlowProcess id="1">
-  <nodeContainer class="org.drools.ruleflow.core.RuleFlowProcess$WorkflowProcessNodeContainer" id="2">
-    <outer-class class="org.drools.ruleflow.core.RuleFlowProcess" reference="1"/>
-    <nodes id="3">
-      <entry>
-        <long>1</long>
-        <org.drools.workflow.core.node.StartNode id="4">
-          <id>1</id>
-          <name>Start</name>
-          <incomingConnections id="5"/>
-          <outgoingConnections id="6">
-            <entry>
-              <string>DROOLS_DEFAULT</string>
-              <list id="7">
-                <org.drools.workflow.core.impl.ConnectionImpl id="8">
-                  <from class="org.drools.workflow.core.node.StartNode" reference="4"/>
-                  <to class="org.drools.workflow.core.node.RuleSetNode" id="9">
-                    <ruleFlowGroup>hello</ruleFlowGroup>
-                    <id>2</id>
-                    <name>Hello</name>
-                    <incomingConnections id="10">
-                      <entry>
-                        <string>DROOLS_DEFAULT</string>
-                        <list id="11">
-                          <org.drools.workflow.core.impl.ConnectionImpl reference="8"/>
-                        </list>
-                      </entry>
-                    </incomingConnections>
-                    <outgoingConnections id="12">
-                      <entry>
-                        <string>DROOLS_DEFAULT</string>
-                        <list id="13">
-                          <org.drools.workflow.core.impl.ConnectionImpl id="14">
-                            <from class="org.drools.workflow.core.node.RuleSetNode" reference="9"/>
-                            <to class="org.drools.workflow.core.node.RuleSetNode" id="15">
-                              <ruleFlowGroup>goodbye</ruleFlowGroup>
-                              <id>3</id>
-                              <name>Goodbye</name>
-                              <incomingConnections id="16">
-                                <entry>
-                                  <string>DROOLS_DEFAULT</string>
-                                  <list id="17">
-                                    <org.drools.workflow.core.impl.ConnectionImpl reference="14"/>
-                                  </list>
-                                </entry>
-                              </incomingConnections>
-                              <outgoingConnections id="18">
-                                <entry>
-                                  <string>DROOLS_DEFAULT</string>
-                                  <list id="19">
-                                    <org.drools.workflow.core.impl.ConnectionImpl id="20">
-                                      <from class="org.drools.workflow.core.node.RuleSetNode" reference="15"/>
-                                      <to class="org.drools.workflow.core.node.EndNode" id="21">
-                                        <id>4</id>
-                                        <name>End</name>
-                                        <incomingConnections id="22">
-                                          <entry>
-                                            <string>DROOLS_DEFAULT</string>
-                                            <list id="23">
-                                              <org.drools.workflow.core.impl.ConnectionImpl reference="20"/>
-                                            </list>
-                                          </entry>
-                                        </incomingConnections>
-                                        <outgoingConnections id="24"/>
-                                        <nodeContainer class="org.drools.ruleflow.core.RuleFlowProcess" reference="1"/>
-                                      </to>
-                                      <fromType>DROOLS_DEFAULT</fromType>
-                                      <toType>DROOLS_DEFAULT</toType>
-                                    </org.drools.workflow.core.impl.ConnectionImpl>
-                                  </list>
-                                </entry>
-                              </outgoingConnections>
-                              <nodeContainer class="org.drools.ruleflow.core.RuleFlowProcess" reference="1"/>
-                            </to>
-                            <fromType>DROOLS_DEFAULT</fromType>
-                            <toType>DROOLS_DEFAULT</toType>
-                          </org.drools.workflow.core.impl.ConnectionImpl>
-                        </list>
-                      </entry>
-                    </outgoingConnections>
-                    <nodeContainer class="org.drools.ruleflow.core.RuleFlowProcess" reference="1"/>
-                  </to>
-                  <fromType>DROOLS_DEFAULT</fromType>
-                  <toType>DROOLS_DEFAULT</toType>
-                </org.drools.workflow.core.impl.ConnectionImpl>
-              </list>
-            </entry>
-          </outgoingConnections>
-          <nodeContainer class="org.drools.ruleflow.core.RuleFlowProcess" reference="1"/>
-        </org.drools.workflow.core.node.StartNode>
-      </entry>
-      <entry>
-        <long>2</long>
-        <org.drools.workflow.core.node.RuleSetNode reference="9"/>
-      </entry>
-      <entry>
-        <long>3</long>
-        <org.drools.workflow.core.node.RuleSetNode reference="15"/>
-      </entry>
-      <entry>
-        <long>4</long>
-        <org.drools.workflow.core.node.EndNode reference="21"/>
-      </entry>
-    </nodes>
-    <lastNodeId>4</lastNodeId>
-  </nodeContainer>
-  <id>com.sample.ruleflow</id>
-  <name>ruleflow</name>
-  <version>1</version>
-  <type>RuleFlow</type>
-  <packageName>com.sample</packageName>
-  <variableScope class="org.drools.process.core.impl.VariableScopeImpl" id="25">
-    <variables id="26"/>
-  </variableScope>
-</org.drools.ruleflow.core.RuleFlowProcess>
\ No newline at end of file
+<?xml version="1.0" encoding="UTF-8"?> 
+<process xmlns="http://drools.org/drools-4.0/process"
+         xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
+         xs:schemaLocation="http://drools.org/drools-4.0/process drools-processes-4.0.xsd"
+         type="RuleFlow" name="ruleflow" id="com.sample.ruleflow" package-name="com.sample" >
+
+  <header>
+  </header>
+
+  <nodes>
+    <start id="1" name="Start" />
+    <ruleSet id="2" name="Hello" ruleFlowGroup="hello" />
+    <ruleSet id="3" name="Goodbye" ruleFlowGroup="goodbye" />
+    <end id="4" name="End" />
+  </nodes>
+
+  <connections>
+    <connection from="1" to="2"/>
+    <connection from="2" to="3"/>
+    <connection from="3" to="4"/>
+  </connections>
+
+</process>
\ No newline at end of file




More information about the jboss-svn-commits mailing list