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

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Tue Aug 12 19:28:14 EDT 2008


Author: KrisVerlaenen
Date: 2008-08-12 19:28:14 -0400 (Tue, 12 Aug 2008)
New Revision: 21496

Added:
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/TypeObject.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/ValueObject.java
Removed:
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/datatype/impl/type/DateDataType.java
Modified:
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/BaseAbstractHandler.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/Handler.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/XmlWorkflowProcessDumper.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/ParameterHandler.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/TypeHandler.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/ValueHandler.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/VariableHandler.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/WorkItemNodeHandler.java
   labs/jbossrules/trunk/drools-compiler/src/main/resources/META-INF/drools-processes-4.0.xsd
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/xml/processes/XMLPersistenceTest.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/ParameterDefinition.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/context/variable/Variable.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/datatype/DataType.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/datatype/impl/type/BooleanDataType.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/datatype/impl/type/FloatDataType.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/datatype/impl/type/IntegerDataType.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/datatype/impl/type/ListDataType.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/datatype/impl/type/ObjectDataType.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/datatype/impl/type/StringDataType.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/datatype/impl/type/UndefinedDataType.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/impl/ParameterDefinitionImpl.java
   labs/jbossrules/trunk/drools-core/src/main/resources/META-INF/WorkDefinitions.conf
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/process/ForEachTest.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/action/VerticalAutoLayoutAction.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/view/datatype/editor/Editor.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/view/datatype/editor/impl/BooleanEditor.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/view/datatype/editor/impl/EditorComposite.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/view/datatype/editor/impl/EmptyEditor.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/view/datatype/editor/impl/FloatEditor.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/view/datatype/editor/impl/IntegerEditor.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/view/datatype/editor/impl/StringEditor.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/WorkItemWrapper.java
Log:
JBRULES-1730: Add support for other data types when writing processes to XML
 - pluggable data types support

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/BaseAbstractHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/BaseAbstractHandler.java	2008-08-12 23:02:17 UTC (rev 21495)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/BaseAbstractHandler.java	2008-08-12 23:28:14 UTC (rev 21496)
@@ -26,15 +26,15 @@
  * 
  */
 public abstract class BaseAbstractHandler {
-    protected Set     validPeers;
-    protected Set     validParents;
+    protected Set<Class<?>>     validPeers;
+    protected Set<Class<?>>     validParents;
     protected boolean allowNesting;
 
-    public Set getValidParents() {
+    public Set<Class<?>> getValidParents() {
         return this.validParents;
     }
 
-    public Set getValidPeers() {
+    public Set<Class<?>> getValidPeers() {
         return this.validPeers;
     }
 

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/Handler.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/Handler.java	2008-08-12 23:02:17 UTC (rev 21495)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/Handler.java	2008-08-12 23:28:14 UTC (rev 21496)
@@ -36,11 +36,11 @@
                String localName,
                ExtensibleXmlParser xmlPackageReader) throws SAXException;
 
-    Set getValidParents();
+    Set<Class<?>> getValidParents();
 
-    Set getValidPeers();
+    Set<Class<?>> getValidPeers();
 
     boolean allowNesting();
 
-    Class generateNodeFor();
+    Class<?> generateNodeFor();
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/XmlWorkflowProcessDumper.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/XmlWorkflowProcessDumper.java	2008-08-12 23:02:17 UTC (rev 21495)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/XmlWorkflowProcessDumper.java	2008-08-12 23:28:14 UTC (rev 21496)
@@ -10,6 +10,7 @@
 import org.drools.process.core.context.variable.Variable;
 import org.drools.process.core.context.variable.VariableScope;
 import org.drools.process.core.datatype.DataType;
+import org.drools.process.core.datatype.impl.type.ObjectDataType;
 import org.drools.workflow.core.Connection;
 import org.drools.workflow.core.Node;
 import org.drools.workflow.core.WorkflowProcess;
@@ -116,7 +117,7 @@
                 visitDataType(variable.getType(), xmlDump);
                 Object value = variable.getValue();
                 if (value != null) {
-                    visitValue(variable.getValue(), xmlDump);
+                    visitValue(variable.getValue(), variable.getType(), xmlDump);
                 }
                 xmlDump.append("      </variable>" + EOL);
             }
@@ -134,16 +135,17 @@
         }
     }
     
-    private void visitDataType(DataType dataType, StringBuffer xmlDump) {
-        xmlDump.append("        <type name=\"" + dataType.getClass().getName() + "\" />" + EOL);
+    public static void visitDataType(DataType dataType, StringBuffer xmlDump) {
+        xmlDump.append("        <type name=\"" + dataType.getClass().getName() + "\" ");
+        // TODO make this pluggable so datatypes can write out other properties as well
+        if (dataType instanceof ObjectDataType) {
+        	xmlDump.append("className=\"" + ((ObjectDataType) dataType).getClassName() + "\" ");
+        }
+        xmlDump.append("/>" + EOL);
     }
     
-    private void visitValue(Object value, StringBuffer xmlDump) {
-    	if (value instanceof String) {
-    		xmlDump.append("        <value>" + XmlDumper.replaceIllegalChars((String) value) + "</value>" + EOL);
-    	} else {
-    		throw new IllegalArgumentException("Unsupported value type: " + value);
-    	}
+    public static void visitValue(Object value, DataType dataType, StringBuffer xmlDump) {
+		xmlDump.append("        <value>" + XmlDumper.replaceIllegalChars(dataType.writeValue(value)) + "</value>" + EOL);
     }
     
     private void visitNodes(WorkflowProcess process, StringBuffer xmlDump, boolean includeMeta) {

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/ParameterHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/ParameterHandler.java	2008-08-12 23:02:17 UTC (rev 21495)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/ParameterHandler.java	2008-08-12 23:28:14 UTC (rev 21496)
@@ -1,111 +1,75 @@
 package org.drools.xml.processes;
 
-import java.io.Serializable;
 import java.util.HashSet;
 
 import org.drools.process.core.ParameterDefinition;
+import org.drools.process.core.TypeObject;
+import org.drools.process.core.ValueObject;
 import org.drools.process.core.Work;
 import org.drools.process.core.datatype.DataType;
-import org.drools.process.core.datatype.impl.type.BooleanDataType;
-import org.drools.process.core.datatype.impl.type.FloatDataType;
-import org.drools.process.core.datatype.impl.type.IntegerDataType;
-import org.drools.process.core.datatype.impl.type.StringDataType;
 import org.drools.process.core.impl.ParameterDefinitionImpl;
 import org.drools.xml.BaseAbstractHandler;
 import org.drools.xml.ExtensibleXmlParser;
 import org.drools.xml.Handler;
-import org.w3c.dom.Element;
-import org.w3c.dom.Text;
 import org.xml.sax.Attributes;
 import org.xml.sax.SAXException;
-import org.xml.sax.SAXParseException;
 
-public class ParameterHandler extends BaseAbstractHandler
-    implements
-    Handler {
+public class ParameterHandler extends BaseAbstractHandler implements Handler {
+	
     public ParameterHandler() {
-        if ( (this.validParents == null) && (this.validPeers == null) ) {
-            this.validParents = new HashSet();
-            this.validParents.add( Work.class );
-
-            this.validPeers = new HashSet();         
-            this.validPeers.add( null );            
-
+        if ((this.validParents == null) && (this.validPeers == null)) {
+            this.validParents = new HashSet<Class<?>>();
+            this.validParents.add(Work.class);
+            this.validPeers = new HashSet<Class<?>>();         
+            this.validPeers.add(null);            
             this.allowNesting = false;
         }
     }
     
-
-    
     public Object start(final String uri,
                         final String localName,
                         final Attributes attrs,
                         final ExtensibleXmlParser parser) throws SAXException {
-        parser.startElementBuilder( localName,
-                                    attrs );
-        return null;
+        parser.startElementBuilder(localName, attrs);
+        final String name = attrs.getValue("name");
+        emptyAttributeCheck(localName, "name", name, parser);
+        Work work = (Work) parser.getParent();
+        ParameterDefinition parameterDefinition = new ParameterDefinitionImpl();
+        parameterDefinition.setName(name);
+        work.addParameterDefinition(parameterDefinition);
+        return new ParameterWrapper(parameterDefinition, work);
     }    
     
     public Object end(final String uri,
                       final String localName,
                       final ExtensibleXmlParser parser) throws SAXException {
-        final Element element = parser.endElementBuilder();
-        Work work = (Work) parser.getParent();
-        final String name = element.getAttribute("name");
-        emptyAttributeCheck(localName, "name", name, parser);
-        final String type = element.getAttribute("type");
-        emptyAttributeCheck(localName, "type", type, parser);
-        DataType dataType = null;
-        try {
-            dataType = (DataType) Class.forName(type).newInstance();
-        } catch (ClassNotFoundException e) {
-            throw new SAXParseException(
-                "Could not find datatype " + name, parser.getLocator());
-        } catch (InstantiationException e) {
-            throw new SAXParseException(
-                "Could not instantiate datatype " + name, parser.getLocator());
-        } catch (IllegalAccessException e) {
-            throw new SAXParseException(
-                "Could not access datatype " + name, parser.getLocator());
-        }
-        String text = ((Text)element.getChildNodes().item( 0 )).getWholeText();
-        if (text != null) {
-            text = text.trim();
-            if ("".equals(text)) {
-                text = null;
-            }
-        }
-        Object value = restoreValue(text, dataType, parser);
-        ParameterDefinition parameterDefinition = new ParameterDefinitionImpl(name, dataType);
-        work.addParameterDefinition(parameterDefinition);
-        work.setParameter(name, value);
+        parser.endElementBuilder();
         return null;
     }
     
-    private Serializable restoreValue(String text, DataType dataType, ExtensibleXmlParser parser) throws SAXException {
-        if (text == null || "".equals(text)) {
-            return null;
-        }
-        if (dataType == null) {
-            throw new SAXParseException(
-                "Null datatype", parser.getLocator());
-        }
-        if (dataType instanceof StringDataType) {
-            return text;
-        } else if (dataType instanceof IntegerDataType) {
-            return new Integer(text);
-        } else if (dataType instanceof FloatDataType) {
-            return new Float(text);
-        } else if (dataType instanceof BooleanDataType) {
-            return new Boolean(text);
-        } else {
-            throw new SAXParseException(
-                "Unknown datatype " + dataType, parser.getLocator());
-        }
+    public Class<?> generateNodeFor() {
+        return ParameterWrapper.class;
     }
-
-    public Class generateNodeFor() {
-        return null;
+    
+    public class ParameterWrapper implements TypeObject, ValueObject {
+    	private Work work;
+    	private ParameterDefinition parameterDefinition;
+    	public ParameterWrapper(ParameterDefinition parameterDefinition, Work work) {
+    		this.work = work;
+    		this.parameterDefinition = parameterDefinition;
+    	}
+		public DataType getType() {
+			return parameterDefinition.getType();
+		}
+		public void setType(DataType type) {
+			parameterDefinition.setType(type);
+		}
+		public Object getValue() {
+			return work.getParameter(parameterDefinition.getName());
+		}
+		public void setValue(Object value) {
+			work.setParameter(parameterDefinition.getName(), value);
+		}
     }
 
 }

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/TypeHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/TypeHandler.java	2008-08-12 23:02:17 UTC (rev 21495)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/TypeHandler.java	2008-08-12 23:28:14 UTC (rev 21496)
@@ -2,8 +2,9 @@
 
 import java.util.HashSet;
 
-import org.drools.process.core.context.variable.Variable;
+import org.drools.process.core.TypeObject;
 import org.drools.process.core.datatype.DataType;
+import org.drools.process.core.datatype.impl.type.ObjectDataType;
 import org.drools.xml.BaseAbstractHandler;
 import org.drools.xml.ExtensibleXmlParser;
 import org.drools.xml.Handler;
@@ -16,10 +17,10 @@
     Handler {
     public TypeHandler() {
         if ( (this.validParents == null) && (this.validPeers == null) ) {
-            this.validParents = new HashSet();
-            this.validParents.add( Variable.class );
+            this.validParents = new HashSet<Class<?>>();
+            this.validParents.add( TypeObject.class );
 
-            this.validPeers = new HashSet();         
+            this.validPeers = new HashSet<Class<?>>();         
             this.validPeers.add( null );            
 
             this.allowNesting = false;
@@ -34,12 +35,18 @@
                         final ExtensibleXmlParser parser) throws SAXException {
         parser.startElementBuilder( localName,
                                     attrs );
-        Variable variable = (Variable) parser.getParent();
+        TypeObject typeable = (TypeObject) parser.getParent();
         final String name = attrs.getValue("name");
         emptyAttributeCheck(localName, "name", name, parser);
         DataType dataType = null;
         try {
             dataType = (DataType) Class.forName(name).newInstance();
+            // TODO make this pluggable so datatypes can read in other properties as well
+            if (dataType instanceof ObjectDataType) {
+                final String className = attrs.getValue("className");
+                emptyAttributeCheck(localName, "className", className, parser);
+                ((ObjectDataType) dataType).setClassName(className);
+            }
         } catch (ClassNotFoundException e) {
             throw new SAXParseException(
                 "Could not find datatype " + name, parser.getLocator());
@@ -51,7 +58,7 @@
                 "Could not access datatype " + name, parser.getLocator());
         }
         
-        variable.setType(dataType);
+        typeable.setType(dataType);
         return dataType;
     }    
     
@@ -62,7 +69,7 @@
         return null;
     }
 
-    public Class generateNodeFor() {
+    public Class<?> generateNodeFor() {
         return DataType.class;
     }    
 

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/ValueHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/ValueHandler.java	2008-08-12 23:02:17 UTC (rev 21495)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/ValueHandler.java	2008-08-12 23:28:14 UTC (rev 21496)
@@ -1,14 +1,9 @@
 package org.drools.xml.processes;
 
-import java.io.Serializable;
 import java.util.HashSet;
 
-import org.drools.process.core.context.variable.Variable;
+import org.drools.process.core.ValueObject;
 import org.drools.process.core.datatype.DataType;
-import org.drools.process.core.datatype.impl.type.BooleanDataType;
-import org.drools.process.core.datatype.impl.type.FloatDataType;
-import org.drools.process.core.datatype.impl.type.IntegerDataType;
-import org.drools.process.core.datatype.impl.type.StringDataType;
 import org.drools.xml.BaseAbstractHandler;
 import org.drools.xml.ExtensibleXmlParser;
 import org.drools.xml.Handler;
@@ -18,15 +13,14 @@
 import org.xml.sax.SAXException;
 import org.xml.sax.SAXParseException;
 
-public class ValueHandler extends BaseAbstractHandler
-    implements
-    Handler {
+public class ValueHandler extends BaseAbstractHandler implements Handler {
+	
     public ValueHandler() {
         if ( (this.validParents == null) && (this.validPeers == null) ) {
-            this.validParents = new HashSet();
-            this.validParents.add( Variable.class );
+            this.validParents = new HashSet<Class<?>>();
+            this.validParents.add( ValueObject.class );
 
-            this.validPeers = new HashSet();         
+            this.validPeers = new HashSet<Class<?>>();         
             this.validPeers.add( null );            
 
             this.allowNesting = false;
@@ -48,7 +42,7 @@
                       final String localName,
                       final ExtensibleXmlParser parser) throws SAXException {
         final Element element = parser.endElementBuilder();
-        Variable variable = (Variable) parser.getParent();
+        ValueObject valueObject = (ValueObject) parser.getParent();
         String text = ((Text)element.getChildNodes().item( 0 )).getWholeText();
         if (text != null) {
             text.trim();
@@ -56,12 +50,12 @@
                 text = null;
             }
         }
-        Serializable value = restoreValue(text, variable.getType(), parser);
-        variable.setValue(value);
+        Object value = restoreValue(text, valueObject.getType(), parser);
+        valueObject.setValue(value);
         return null;
     }
     
-    private Serializable restoreValue(String text, DataType dataType, ExtensibleXmlParser parser) throws SAXException {
+    private Object restoreValue(String text, DataType dataType, ExtensibleXmlParser parser) throws SAXException {
         if (text == null || "".equals(text)) {
             return null;
         }
@@ -69,21 +63,10 @@
             throw new SAXParseException(
                 "Null datatype", parser.getLocator());
         }
-        if (dataType instanceof StringDataType) {
-            return text;
-        } else if (dataType instanceof IntegerDataType) {
-            return new Integer(text);
-        } else if (dataType instanceof FloatDataType) {
-            return new Float(text);
-        } else if (dataType instanceof BooleanDataType) {
-            return new Boolean(text);
-        } else {
-            throw new SAXParseException(
-                "Unknown datatype " + dataType, parser.getLocator());
-        }
+        return dataType.readValue(text);
     }
 
-    public Class generateNodeFor() {
+    public Class<?> generateNodeFor() {
         return null;
     }
 

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/VariableHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/VariableHandler.java	2008-08-12 23:02:17 UTC (rev 21495)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/VariableHandler.java	2008-08-12 23:28:14 UTC (rev 21496)
@@ -20,10 +20,10 @@
     Handler {
     public VariableHandler() {
         if ( (this.validParents == null) && (this.validPeers == null) ) {
-            this.validParents = new HashSet();
+            this.validParents = new HashSet<Class<?>>();
             this.validParents.add( Process.class );
 
-            this.validPeers = new HashSet();         
+            this.validPeers = new HashSet<Class<?>>();         
             this.validPeers.add( null );            
 
             this.allowNesting = false;
@@ -68,7 +68,7 @@
         return null;
     }
 
-    public Class generateNodeFor() {
+    public Class<?> generateNodeFor() {
         return Variable.class;
     }    
 

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/WorkItemNodeHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/WorkItemNodeHandler.java	2008-08-12 23:02:17 UTC (rev 21495)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/WorkItemNodeHandler.java	2008-08-12 23:28:14 UTC (rev 21496)
@@ -4,10 +4,11 @@
 
 import org.drools.process.core.ParameterDefinition;
 import org.drools.process.core.Work;
+import org.drools.process.core.datatype.DataType;
 import org.drools.workflow.core.Node;
 import org.drools.workflow.core.node.WorkItemNode;
 import org.drools.xml.ExtensibleXmlParser;
-import org.drools.xml.XmlDumper;
+import org.drools.xml.XmlWorkflowProcessDumper;
 import org.w3c.dom.Element;
 import org.xml.sax.SAXException;
 
@@ -29,7 +30,7 @@
         return new WorkItemNode();
     }
 
-    public Class generateNodeFor() {
+    public Class<?> generateNodeFor() {
         return WorkItemNode.class;
     }
 
@@ -76,18 +77,15 @@
         if (work != null) {
             xmlDump.append("      <work name=\"" + work.getName() + "\" >" + EOL);
             for (ParameterDefinition paramDefinition: work.getParameterDefinitions()) {
-                xmlDump.append("        <parameter name=\"" + paramDefinition.getName() + "\" " + 
-                                                  "type=\"" + paramDefinition.getType().getClass().getName() + "\" ");
+            	DataType dataType = paramDefinition.getType();
+                xmlDump.append("        <parameter name=\"" + paramDefinition.getName() + "\" >" + EOL + "  ");
+                XmlWorkflowProcessDumper.visitDataType(dataType, xmlDump);
                 Object value = work.getParameter(paramDefinition.getName());
-                if (value == null) {
-                    xmlDump.append("/>" + EOL);
-                } else {
-                	if (value instanceof String) {
-                		xmlDump.append(">" + XmlDumper.replaceIllegalChars((String) value) + "</parameter>" + EOL);
-                	} else {
-                		throw new IllegalArgumentException("Unsupported value type: " + value);
-                	}
+                if (value != null) {
+                	xmlDump.append("  ");
+                	XmlWorkflowProcessDumper.visitValue(value, dataType, xmlDump);
                 }
+                xmlDump.append("        </parameter>" + EOL); 
             }
             xmlDump.append("      </work>" + EOL);
         }

Modified: labs/jbossrules/trunk/drools-compiler/src/main/resources/META-INF/drools-processes-4.0.xsd
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/resources/META-INF/drools-processes-4.0.xsd	2008-08-12 23:02:17 UTC (rev 21495)
+++ labs/jbossrules/trunk/drools-compiler/src/main/resources/META-INF/drools-processes-4.0.xsd	2008-08-12 23:28:14 UTC (rev 21496)
@@ -69,6 +69,7 @@
 	<xs:element name="type">
 		<xs:complexType>
 			<xs:attribute name="name" type="xs:string" use="required"/>
+			<xs:attribute name="className" type="xs:string" />
 		</xs:complexType>
 	</xs:element>
 	<xs:element name="value">
@@ -269,12 +270,11 @@
 	</xs:element>
 	<xs:element name="parameter">
 		<xs:complexType>
-			<xs:simpleContent>
-				<xs:extension base="xs:string">
-					<xs:attribute name="name" type="xs:string" use="required"/>
-					<xs:attribute name="type" type="xs:string" use="required"/>
-				</xs:extension>
-			</xs:simpleContent>
+			<xs:choice minOccurs="0" maxOccurs="unbounded">
+				<xs:element ref="drools:type"/>
+				<xs:element ref="drools:value"/>
+			</xs:choice>
+			<xs:attribute name="name" type="xs:string"/>
 		</xs:complexType>
 	</xs:element>
 	<xs:element name="mapping">

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/xml/processes/XMLPersistenceTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/xml/processes/XMLPersistenceTest.java	2008-08-12 23:02:17 UTC (rev 21495)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/xml/processes/XMLPersistenceTest.java	2008-08-12 23:28:14 UTC (rev 21496)
@@ -10,12 +10,14 @@
 
 import junit.framework.TestCase;
 
+import org.drools.Person;
 import org.drools.compiler.PackageBuilderConfiguration;
 import org.drools.process.core.ParameterDefinition;
 import org.drools.process.core.Work;
 import org.drools.process.core.context.swimlane.Swimlane;
 import org.drools.process.core.context.variable.Variable;
 import org.drools.process.core.datatype.impl.type.IntegerDataType;
+import org.drools.process.core.datatype.impl.type.ListDataType;
 import org.drools.process.core.datatype.impl.type.ObjectDataType;
 import org.drools.process.core.datatype.impl.type.StringDataType;
 import org.drools.process.core.event.EventTypeFilter;
@@ -131,6 +133,23 @@
         variable.setType(new IntegerDataType());
         variable.setValue(2);
         variables.add(variable);
+        variable = new Variable();
+        variable.setName("variable3");
+        variable.setType(new ObjectDataType("org.drools.Person"));
+        Person person = new Person();
+        person.setName("John");
+        variable.setValue(person);
+        variables.add(variable);        
+        variable = new Variable();
+        variable.setName("variable3");
+        ListDataType listDataType = new ListDataType();
+        listDataType.setType(new ObjectDataType("java.lang.Integer"));
+        variable.setType(listDataType);
+        List<Integer> list = new ArrayList<Integer>();
+        list.add(10);
+        list.add(20);
+        variable.setValue(list);
+        variables.add(variable);
         process.getVariableScope().setVariables(variables);
         
         Swimlane swimlane = new Swimlane();

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/ParameterDefinition.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/ParameterDefinition.java	2008-08-12 23:02:17 UTC (rev 21495)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/ParameterDefinition.java	2008-08-12 23:28:14 UTC (rev 21496)
@@ -1,17 +1,13 @@
 package org.drools.process.core;
 
-import org.drools.process.core.datatype.DataType;
 
 /**
  * 
  * @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
  */
-public interface ParameterDefinition {
+public interface ParameterDefinition extends TypeObject {
     
     String getName();
     void setName(String name);
     
-    DataType getType();
-    void setType(DataType type);
-    
 }

Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/TypeObject.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/TypeObject.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/TypeObject.java	2008-08-12 23:28:14 UTC (rev 21496)
@@ -0,0 +1,10 @@
+package org.drools.process.core;
+
+import org.drools.process.core.datatype.DataType;
+
+public interface TypeObject {
+
+    DataType getType();
+    void setType(DataType type);
+    
+}

Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/ValueObject.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/ValueObject.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/ValueObject.java	2008-08-12 23:28:14 UTC (rev 21496)
@@ -0,0 +1,8 @@
+package org.drools.process.core;
+
+public interface ValueObject extends TypeObject {
+	
+	Object getValue();
+
+    void setValue(Object value);
+}

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/context/variable/Variable.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/context/variable/Variable.java	2008-08-12 23:02:17 UTC (rev 21495)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/context/variable/Variable.java	2008-08-12 23:28:14 UTC (rev 21496)
@@ -18,7 +18,8 @@
 
 import java.io.Serializable;
 
-import org.drools.process.core.context.variable.Variable;
+import org.drools.process.core.TypeObject;
+import org.drools.process.core.ValueObject;
 import org.drools.process.core.datatype.DataType;
 import org.drools.process.core.datatype.impl.type.UndefinedDataType;
 
@@ -27,13 +28,13 @@
  * 
  * @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
  */
-public class Variable implements Serializable {
+public class Variable implements TypeObject, ValueObject, Serializable {
 
     private static final long serialVersionUID = 400L;
 
-    private String            name;
-    private DataType         type;
-    private Serializable      value;
+    private String name;
+    private DataType type;
+    private Object value;
 
     public Variable() {
         this.type = UndefinedDataType.getInstance();
@@ -58,11 +59,11 @@
         this.type = type;
     }
 
-    public Serializable getValue() {
+    public Object getValue() {
         return this.value;
     }
 
-    public void setValue(final Serializable value) {
+    public void setValue(final Object value) {
         if ( this.type.verifyDataType( value ) ) {
             this.value = value;
         } else {

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/datatype/DataType.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/datatype/DataType.java	2008-08-12 23:02:17 UTC (rev 21495)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/datatype/DataType.java	2008-08-12 23:28:14 UTC (rev 21496)
@@ -29,5 +29,9 @@
      * Returns true if the given value is a valid value of this data type.
      */
     boolean verifyDataType(Object value);
+    
+    String writeValue(Object value);
+    
+    Object readValue(String value);
 
 }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/datatype/impl/type/BooleanDataType.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/datatype/impl/type/BooleanDataType.java	2008-08-12 23:02:17 UTC (rev 21495)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/datatype/impl/type/BooleanDataType.java	2008-08-12 23:28:14 UTC (rev 21496)
@@ -45,4 +45,12 @@
         }
         return false;
     }
+
+	public Object readValue(String value) {
+		return new Boolean(value);
+	}
+
+	public String writeValue(Object value) {
+		return (Boolean) value ? "true" : "false";
+	}
 }

Deleted: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/datatype/impl/type/DateDataType.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/datatype/impl/type/DateDataType.java	2008-08-12 23:02:17 UTC (rev 21495)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/datatype/impl/type/DateDataType.java	2008-08-12 23:28:14 UTC (rev 21496)
@@ -1,47 +0,0 @@
-package org.drools.process.core.datatype.impl.type;
-
-/*
- * 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.io.IOException;
-import java.io.ObjectInput;
-import java.io.ObjectOutput;
-import java.util.Date;
-
-import org.drools.process.core.datatype.DataType;
-
-/**
- * Representation of a date datatype.
- * 
- * @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
- */
-public final class DateDataType implements DataType {
-
-    private static final long serialVersionUID = 400L;
-
-    public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
-    }
-
-    public void writeExternal(ObjectOutput out) throws IOException {
-    }
-
-    public boolean verifyDataType(final Object value) {
-        if ( value instanceof Date ) {
-            return true;
-        }
-        return false;
-    }
-}

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/datatype/impl/type/FloatDataType.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/datatype/impl/type/FloatDataType.java	2008-08-12 23:02:17 UTC (rev 21495)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/datatype/impl/type/FloatDataType.java	2008-08-12 23:28:14 UTC (rev 21496)
@@ -48,4 +48,13 @@
             return false;
         }
     }
+
+	public Object readValue(String value) {
+		return new Float(value);
+	}
+
+	public String writeValue(Object value) {
+		Float f = (Float) value;
+		return f == null ? "" : f.toString();
+	}
 }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/datatype/impl/type/IntegerDataType.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/datatype/impl/type/IntegerDataType.java	2008-08-12 23:02:17 UTC (rev 21495)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/datatype/impl/type/IntegerDataType.java	2008-08-12 23:28:14 UTC (rev 21496)
@@ -48,4 +48,14 @@
             return false;
         }
     }
+
+	public Object readValue(String value) {
+		return new Integer(value);
+	}
+
+	public String writeValue(Object value) {
+		Integer i = (Integer) value;
+		return i == null ? "" : i.toString();
+	}
+
 }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/datatype/impl/type/ListDataType.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/datatype/impl/type/ListDataType.java	2008-08-12 23:02:17 UTC (rev 21495)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/datatype/impl/type/ListDataType.java	2008-08-12 23:28:14 UTC (rev 21496)
@@ -16,25 +16,30 @@
  * limitations under the License.
  */
 
-import org.drools.process.core.datatype.DataType;
-
 import java.io.IOException;
 import java.io.ObjectInput;
 import java.io.ObjectOutput;
 import java.util.Iterator;
 import java.util.List;
 
+import org.drools.process.core.TypeObject;
+import org.drools.process.core.datatype.DataType;
+
 /**
  * Representation of a list datatype.
  * All elements in the list must have the same datatype.
  * 
  * @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
  */
-public class ListDataType implements DataType {
+public class ListDataType extends ObjectDataType implements TypeObject {
 
     private static final long serialVersionUID = 400L;
 
     private DataType dataType;
+    
+    public ListDataType() {
+    	setClassName("java.util.List");
+    }
 
     public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
         dataType    = (DataType)in.readObject();
@@ -44,18 +49,15 @@
         out.writeObject(dataType);
     }
     
-    public ListDataType() {
-    }
-
     public ListDataType(DataType dataType) {
-    	setDataType(dataType);
+    	setType(dataType);
     }
 
-    public void setDataType(final DataType dataType) {
+    public void setType(final DataType dataType) {
         this.dataType = dataType;
     }
 
-    public DataType getDataType() {
+    public DataType getType() {
         return this.dataType;
     }
 
@@ -64,8 +66,8 @@
             return true;
         }
         if (value instanceof List) {
-            for (final Iterator<?> it = ((List<?>) value).iterator(); it.hasNext();) {
-                if (!this.dataType.verifyDataType(it.next())) {
+            for (Object o: (List<?>) value) {
+                if (dataType != null && !dataType.verifyDataType(o)) {
                     return false;
                 }
             }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/datatype/impl/type/ObjectDataType.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/datatype/impl/type/ObjectDataType.java	2008-08-12 23:02:17 UTC (rev 21495)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/datatype/impl/type/ObjectDataType.java	2008-08-12 23:28:14 UTC (rev 21496)
@@ -22,12 +22,14 @@
 
 import org.drools.process.core.datatype.DataType;
 
+import com.thoughtworks.xstream.XStream;
+
 /**
  * Representation of an object datatype.
  * 
  * @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
  */
-public final class ObjectDataType implements DataType {
+public class ObjectDataType implements DataType {
 
     private static final long serialVersionUID = 4L;
 
@@ -49,9 +51,11 @@
     }
 
     public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+    	className = in.readUTF();
     }
 
     public void writeExternal(ObjectOutput out) throws IOException {
+    	out.writeUTF(className);
     }
 
     public boolean verifyDataType(final Object value) {
@@ -66,4 +70,14 @@
         }
         return false;
     }
+
+	public Object readValue(String value) {
+		XStream xstream = new XStream();
+		return xstream.fromXML(value);
+	}
+
+	public String writeValue(Object value) {
+		XStream xstream = new XStream();
+		return xstream.toXML(value);
+	}
 }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/datatype/impl/type/StringDataType.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/datatype/impl/type/StringDataType.java	2008-08-12 23:02:17 UTC (rev 21495)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/datatype/impl/type/StringDataType.java	2008-08-12 23:28:14 UTC (rev 21496)
@@ -27,9 +27,7 @@
  * 
  * @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
  */
-public class StringDataType
-    implements
-    DataType {
+public class StringDataType implements DataType {
 
     private static final long serialVersionUID = 400L;
 
@@ -48,4 +46,13 @@
             return false;
         }
     }
+
+	public Object readValue(String value) {
+		return value;
+	}
+
+	public String writeValue(Object value) {
+		return (String) value;
+	}
+	
 }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/datatype/impl/type/UndefinedDataType.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/datatype/impl/type/UndefinedDataType.java	2008-08-12 23:02:17 UTC (rev 21495)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/datatype/impl/type/UndefinedDataType.java	2008-08-12 23:28:14 UTC (rev 21496)
@@ -51,4 +51,13 @@
         }
         return false;
     }
+
+	public Object readValue(String value) {
+		throw new IllegalArgumentException("Undefined datatype");
+	}
+
+	public String writeValue(Object value) {
+		throw new IllegalArgumentException("Undefined datatype");
+	}
+
 }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/impl/ParameterDefinitionImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/impl/ParameterDefinitionImpl.java	2008-08-12 23:02:17 UTC (rev 21495)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/impl/ParameterDefinitionImpl.java	2008-08-12 23:28:14 UTC (rev 21496)
@@ -14,8 +14,11 @@
     private static final long serialVersionUID = 400L;
    
     private String name;
-    private DataType type;
-    
+    private DataType type;
+    
+    public ParameterDefinitionImpl() {
+    }
+    
     public ParameterDefinitionImpl(String name, DataType type) {
         setName(name);
         setType(type);
Modified: labs/jbossrules/trunk/drools-core/src/main/resources/META-INF/WorkDefinitions.conf
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/resources/META-INF/WorkDefinitions.conf	2008-08-12 23:02:17 UTC (rev 21495)
+++ labs/jbossrules/trunk/drools-core/src/main/resources/META-INF/WorkDefinitions.conf	2008-08-12 23:28:14 UTC (rev 21496)
@@ -3,7 +3,6 @@
 // The allowed properties are name, parameters, displayName, icon and customEditor
 // The returned result should thus be of type List<Map<String, Object>>
 import org.drools.process.core.datatype.impl.type.StringDataType;
-import org.drools.process.core.datatype.impl.type.DateDataType;
 
 [
 

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/process/ForEachTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/process/ForEachTest.java	2008-08-12 23:02:17 UTC (rev 21495)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/process/ForEachTest.java	2008-08-12 23:28:14 UTC (rev 21496)
@@ -42,7 +42,7 @@
         ListDataType listDataType = new ListDataType();
         ObjectDataType personDataType = new ObjectDataType();
         personDataType.setClassName("org.drools.Person");
-        listDataType.setDataType(personDataType);
+        listDataType.setType(personDataType);
         variable.setType(listDataType);
         variables.add(variable);
         process.getVariableScope().setVariables(variables);

Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/action/VerticalAutoLayoutAction.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/action/VerticalAutoLayoutAction.java	2008-08-12 23:02:17 UTC (rev 21495)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/action/VerticalAutoLayoutAction.java	2008-08-12 23:28:14 UTC (rev 21496)
@@ -20,8 +20,8 @@
 import java.util.Map;
 
 import org.drools.eclipse.flow.common.editor.GenericModelEditor;
+import org.drools.eclipse.flow.common.editor.core.DefaultElementWrapper;
 import org.drools.eclipse.flow.common.editor.core.ProcessWrapper;
-import org.drools.eclipse.flow.ruleflow.core.AbstractNodeWrapper;
 import org.drools.workflow.core.Connection;
 import org.drools.workflow.core.WorkflowProcess;
 import org.eclipse.draw2d.geometry.Dimension;
@@ -60,9 +60,9 @@
         layout.visit(graph);
         for (Map.Entry<Long, Node> entry: mapping.entrySet()) {
             Node node = entry.getValue();
-            AbstractNodeWrapper nodeWrapper = (AbstractNodeWrapper)
+            DefaultElementWrapper elementWrapper = (DefaultElementWrapper)
                 ((ProcessWrapper) ((GenericModelEditor) editor).getModel()).getElement(entry.getKey() + "");
-            nodeWrapper.setConstraint(new Rectangle(node.x, node.y, node.width, node.height));
+            elementWrapper.setConstraint(new Rectangle(node.x, node.y, node.width, node.height));
         }
         // TODO: implement changes as a command, so we can support undo
         editor.doSave(null);

Modified: 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	2008-08-12 23:02:17 UTC (rev 21495)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/editpart/figure/ElementContainerFigure.java	2008-08-12 23:28:14 UTC (rev 21496)
@@ -1,11 +1,13 @@
 package org.drools.eclipse.flow.common.editor.editpart.figure;
 
 import org.eclipse.draw2d.Figure;
+import org.eclipse.draw2d.FlowLayout;
 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.Layer;
 import org.eclipse.draw2d.LineBorder;
 import org.eclipse.draw2d.ScrollPane;
 import org.eclipse.draw2d.StackLayout;
@@ -15,6 +17,7 @@
     
     private IFigure pane;
     private boolean selected = false;
+    private Label label = new Label();
     
     public ElementContainerFigure() {
         setSize(200, 150);
@@ -23,13 +26,19 @@
         pane.setLayoutManager(new FreeformLayout());
         setLayoutManager(new StackLayout());
         add(scrollpane);
+        IFigure panel = new Layer();
+        FlowLayout flowLayout = new FlowLayout();
+        flowLayout.setMajorAlignment(FlowLayout.ALIGN_CENTER);
+        panel.setLayoutManager(flowLayout);
+        panel.add(label);
+    	add(panel);
         scrollpane.setViewport(new FreeformViewport());
         scrollpane.setContents(pane);
         setBorder(new LineBorder(1));
     }
 
     public Label getLabel() {
-        return null;
+        return label;
     }
 
     public boolean isSelected() {
@@ -46,7 +55,7 @@
     }
 
     public void setText(String text) {
-        // Do nothing
+        label.setText(text);
     }
     
     public IFigure getPane() {

Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/view/datatype/editor/Editor.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/view/datatype/editor/Editor.java	2008-08-12 23:02:17 UTC (rev 21495)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/view/datatype/editor/Editor.java	2008-08-12 23:28:14 UTC (rev 21496)
@@ -15,8 +15,6 @@
  * limitations under the License.
  */
 
-import java.io.Serializable;
-
 import org.drools.process.core.datatype.DataType;
 
 
@@ -29,9 +27,9 @@
 
     void setDataType(DataType dataType);
     
-	Serializable getValue();
+	Object getValue();
     
-    void setValue(Serializable value);
+    void setValue(Object value);
     
     void reset();
     

Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/view/datatype/editor/impl/BooleanEditor.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/view/datatype/editor/impl/BooleanEditor.java	2008-08-12 23:02:17 UTC (rev 21495)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/view/datatype/editor/impl/BooleanEditor.java	2008-08-12 23:28:14 UTC (rev 21496)
@@ -15,8 +15,6 @@
  * limitations under the License.
  */
 
-import java.io.Serializable;
-
 import org.drools.eclipse.flow.common.view.datatype.editor.Editor;
 import org.drools.process.core.datatype.DataType;
 import org.drools.process.core.datatype.impl.type.BooleanDataType;
@@ -50,11 +48,11 @@
         }
     }
 
-    public Serializable getValue() {
+    public Object getValue() {
         return Boolean.valueOf(combo.getSelectionIndex() == 0);
     }
     
-    public void setValue(Serializable value) {
+    public void setValue(Object value) {
         if (value == null) {
             combo.select(1);
         } else if (value instanceof Boolean) {

Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/view/datatype/editor/impl/EditorComposite.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/view/datatype/editor/impl/EditorComposite.java	2008-08-12 23:02:17 UTC (rev 21495)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/view/datatype/editor/impl/EditorComposite.java	2008-08-12 23:28:14 UTC (rev 21496)
@@ -15,7 +15,6 @@
  * limitations under the License.
  */
 
-import java.io.Serializable;
 import java.lang.reflect.InvocationTargetException;
 
 import org.drools.eclipse.DroolsEclipsePlugin;
@@ -78,11 +77,11 @@
         }
     }
     
-    public void setValue(Serializable value) {
+    public void setValue(Object value) {
         editor.setValue(value);
     }
     
-    public Serializable getValue() {
+    public Object getValue() {
         return editor.getValue();
     }
 

Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/view/datatype/editor/impl/EmptyEditor.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/view/datatype/editor/impl/EmptyEditor.java	2008-08-12 23:02:17 UTC (rev 21495)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/view/datatype/editor/impl/EmptyEditor.java	2008-08-12 23:28:14 UTC (rev 21496)
@@ -15,8 +15,6 @@
  * limitations under the License.
  */
 
-import java.io.Serializable;
-
 import org.drools.eclipse.flow.common.view.datatype.editor.DataTypeEditor;
 import org.drools.eclipse.flow.common.view.datatype.editor.Editor;
 import org.drools.process.core.datatype.DataType;
@@ -34,7 +32,7 @@
 public class EmptyEditor extends Composite implements Editor, DataTypeEditor {
 
     private DataType dataType;
-    private Serializable value;
+    private Object value;
     private Label label;
     
     public EmptyEditor(Composite parent) {
@@ -52,11 +50,11 @@
         this.dataType = dataType;
     }
 
-    public Serializable getValue() {
+    public Object getValue() {
         return value;
     }
 
-    public void setValue(Serializable value) {
+    public void setValue(Object value) {
         this.value = value;
     }
 

Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/view/datatype/editor/impl/FloatEditor.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/view/datatype/editor/impl/FloatEditor.java	2008-08-12 23:02:17 UTC (rev 21495)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/view/datatype/editor/impl/FloatEditor.java	2008-08-12 23:28:14 UTC (rev 21496)
@@ -15,8 +15,6 @@
  * limitations under the License.
  */
 
-import java.io.Serializable;
-
 import org.drools.eclipse.flow.common.view.datatype.editor.Editor;
 import org.drools.process.core.datatype.DataType;
 import org.drools.process.core.datatype.impl.type.FloatDataType;
@@ -46,7 +44,7 @@
         }
     }
 
-    public Serializable getValue() throws IllegalArgumentException {
+    public Object getValue() throws IllegalArgumentException {
         String valueString = text.getText();
         if ("".equals(valueString)) {
             return null;
@@ -59,7 +57,7 @@
         }
     }
     
-    public void setValue(Serializable value) {
+    public void setValue(Object value) {
         if (value == null) {
             text.setText("");
         } else if (value instanceof Float) {

Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/view/datatype/editor/impl/IntegerEditor.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/view/datatype/editor/impl/IntegerEditor.java	2008-08-12 23:02:17 UTC (rev 21495)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/view/datatype/editor/impl/IntegerEditor.java	2008-08-12 23:28:14 UTC (rev 21496)
@@ -15,8 +15,6 @@
  * limitations under the License.
  */
 
-import java.io.Serializable;
-
 import org.drools.eclipse.flow.common.view.datatype.editor.Editor;
 import org.drools.process.core.datatype.DataType;
 import org.drools.process.core.datatype.impl.type.IntegerDataType;
@@ -46,7 +44,7 @@
         }
     }
 
-    public Serializable getValue() {
+    public Object getValue() {
         String valueString = text.getText();
         if ("".equals(valueString)) {
             return null;
@@ -59,7 +57,7 @@
         }
     }
 
-    public void setValue(Serializable value) {
+    public void setValue(Object value) {
         if (value == null) {
             text.setText("");
         } else if (value instanceof Integer) {

Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/view/datatype/editor/impl/StringEditor.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/view/datatype/editor/impl/StringEditor.java	2008-08-12 23:02:17 UTC (rev 21495)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/view/datatype/editor/impl/StringEditor.java	2008-08-12 23:28:14 UTC (rev 21496)
@@ -15,8 +15,6 @@
  * limitations under the License.
  */
 
-import java.io.Serializable;
-
 import org.drools.eclipse.flow.common.view.datatype.editor.Editor;
 import org.drools.process.core.datatype.DataType;
 import org.drools.process.core.datatype.impl.type.StringDataType;
@@ -46,11 +44,11 @@
         }
     }
 
-    public Serializable getValue() {
+    public Object getValue() {
         return text.getText();
     }
 
-    public void setValue(Serializable value) {
+    public void setValue(Object value) {
         if (value == null) {
             text.setText("");
         } else if (value instanceof String) {

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-08-12 23:02:17 UTC (rev 21495)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/WorkItemWrapper.java	2008-08-12 23:28:14 UTC (rev 21496)
@@ -27,6 +27,7 @@
 import org.drools.process.core.ParameterDefinition;
 import org.drools.process.core.Work;
 import org.drools.process.core.WorkDefinition;
+import org.drools.process.core.datatype.DataType;
 import org.drools.process.core.impl.WorkImpl;
 import org.drools.workflow.core.Node;
 import org.drools.workflow.core.node.WorkItemNode;
@@ -149,11 +150,12 @@
         } else if (id instanceof String) {
             String name = (String) id;
             if (workParameterExists(name)) {
+            	DataType type = getWorkItemNode().getWork().getParameterDefinition(name).getType();
             	Object value = getWorkItemNode().getWork().getParameter(name);
-            	if (value instanceof String) {
-            	    return value;
+            	if (value == null) {
+                	return "";
             	}
-            	return "";
+        	    return type.writeValue(value);
             }
         }
         return super.getPropertyValue(id);
@@ -181,7 +183,8 @@
         } 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);
+        	DataType type = getWorkItemNode().getWork().getParameterDefinition((String) id).getType();
+        	getWorkItemNode().getWork().setParameter((String) id, type.readValue((String) value));
         } else {
             super.setPropertyValue(id, value);
         }




More information about the jboss-svn-commits mailing list