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

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Mon Jun 9 07:23:15 EDT 2008


Author: KrisVerlaenen
Date: 2008-06-09 07:23:14 -0400 (Mon, 09 Jun 2008)
New Revision: 20367

Added:
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/XmlRuleFlowProcessDumper.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/XmlWorkflowProcessDumper.java
Removed:
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/XmlRuleFlowProcessDumper.java
Modified:
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/CompositeNodeHandler.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/xml/TestXml.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/xml/processes/XMLPersistenceTest.java
Log:
 - improved pluggability of workflow processes

Deleted: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/XmlRuleFlowProcessDumper.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/XmlRuleFlowProcessDumper.java	2008-06-09 11:06:49 UTC (rev 20366)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/XmlRuleFlowProcessDumper.java	2008-06-09 11:23:14 UTC (rev 20367)
@@ -1,162 +0,0 @@
-package org.drools.xml;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-import org.drools.process.core.context.variable.Variable;
-import org.drools.process.core.datatype.DataType;
-import org.drools.ruleflow.core.RuleFlowProcess;
-import org.drools.workflow.core.Connection;
-import org.drools.workflow.core.Node;
-import org.drools.workflow.core.impl.NodeImpl;
-import org.drools.xml.processes.AbstractNodeHandler;
-
-public class XmlRuleFlowProcessDumper {
-    
-    private final static String EOL = System.getProperty( "line.separator" );
-    
-    private static final SemanticModule semanticModule = new ProcessSemanticModule();
-    
-    public static String dump(RuleFlowProcess process) {
-        return dump(process, true);
-    }
-    
-    public static String dump(RuleFlowProcess process, boolean includeMeta) {
-        StringBuffer xmlDump = new StringBuffer();
-        visitProcess(process, xmlDump, includeMeta);
-        return xmlDump.toString();
-    }
-    
-    private static void visitProcess(RuleFlowProcess process, StringBuffer xmlDump, boolean includeMeta) {
-        xmlDump.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?> " + EOL
-            + "<process xmlns=\"http://drools.org/drools-4.0/process\"" + EOL
-            + "         xmlns:xs=\"http://www.w3.org/2001/XMLSchema-instance\"" + EOL
-            + "         xs:schemaLocation=\"http://drools.org/drools-4.0/process drools-processes-4.0.xsd\"" + EOL
-            + "         type=\"RuleFlow\" ");
-        if (process.getName() != null) {
-            xmlDump.append("name=\"" + process.getName() + "\" ");
-        }
-        if (process.getId() != null) {
-            xmlDump.append("id=\"" + process.getId() + "\" ");
-        }
-        if (process.getPackageName() != null) {
-            xmlDump.append("package-name=\"" + process.getPackageName() + "\" ");
-        }
-        if (process.getVersion() != null) {
-            xmlDump.append("version=\"" + process.getVersion() + "\" ");
-        }
-        if (includeMeta) {
-            Integer routerLayout = (Integer) process.getMetaData("routerLayout");
-            if (routerLayout != null && routerLayout != 0) {
-                xmlDump.append("routerLayout=\"" + routerLayout + "\" ");
-            }
-        }
-        xmlDump.append(">" + EOL + EOL);
-        visitHeader(process, xmlDump, includeMeta);
-        visitNodes(process, xmlDump, includeMeta);
-        visitConnections(process.getNodes(), xmlDump, includeMeta);
-        xmlDump.append("</process>");
-    }
-    
-    private static void visitHeader(RuleFlowProcess process, StringBuffer xmlDump, boolean includeMeta) {
-        xmlDump.append("  <header>" + EOL);
-        visitImports(process.getImports(), xmlDump);
-        visitGlobals(process.getGlobals(), xmlDump);
-        visitVariables(process.getVariableScope().getVariables(), xmlDump);
-        xmlDump.append("  </header>" + EOL + EOL);
-    }
-    
-    private static void visitImports(List<String> imports, StringBuffer xmlDump) {
-        if (imports != null && imports.size() > 0) {
-            xmlDump.append("    <imports>" + EOL);
-            for (String importString: imports) {
-                xmlDump.append("      <import name=\"" + importString + "\" />" + EOL);
-            }
-            xmlDump.append("    </imports>" + EOL);
-        }
-    }
-    
-    private static void visitGlobals(Map<String, String> globals, StringBuffer xmlDump) {
-        if (globals != null && globals.size() > 0) {
-            xmlDump.append("    <globals>" + EOL);
-            for (Map.Entry<String, String> global: globals.entrySet()) {
-                xmlDump.append("      <global identifier=\"" + global.getKey() + "\" type=\"" + global.getValue() + "\" />" + EOL);
-            }
-            xmlDump.append("    </globals>" + EOL);
-        }
-    }
-    
-    private static void visitVariables(List<Variable> variables, StringBuffer xmlDump) {
-        if (variables != null && variables.size() > 0) {
-            xmlDump.append("    <variables>" + EOL);
-            for (Variable variable: variables) {
-                xmlDump.append("      <variable name=\"" + variable.getName() + "\" >" + EOL);
-                visitDataType(variable.getType(), xmlDump);
-                Object value = variable.getValue();
-                if (value != null) {
-                    visitValue(variable.getValue(), xmlDump);
-                }
-                xmlDump.append("      </variable>" + EOL);
-            }
-            xmlDump.append("    </variables>" + EOL);
-        }
-    }
-    
-    private static void visitDataType(DataType dataType, StringBuffer xmlDump) {
-        xmlDump.append("        <type name=\"" + dataType.getClass().getName() + "\" />" + EOL);
-    }
-    
-    private static void visitValue(Object value, StringBuffer xmlDump) {
-        xmlDump.append("        <value>" + value + "</value>" + EOL);
-    }
-    
-    private static void visitNodes(RuleFlowProcess process, StringBuffer xmlDump, boolean includeMeta) {
-        xmlDump.append("  <nodes>" + EOL);
-        for (Node node: process.getNodes()) {
-            visitNode(node, xmlDump, includeMeta);
-        }
-        xmlDump.append("  </nodes>" + EOL + EOL);
-    }
-    
-    public static void visitNode(Node node, StringBuffer xmlDump, boolean includeMeta) {
-     	Handler handler = semanticModule.getHandlerByClass(node.getClass());
-        if (handler != null) {
-        	((AbstractNodeHandler) handler).writeNode(node, xmlDump, includeMeta);
-        } else {
-        	throw new IllegalArgumentException(
-                "Unknown node type: " + node);
-        }
-    }
-    
-    private static void visitConnections(Node[] nodes, StringBuffer xmlDump, boolean includeMeta) {
-        List<Connection> connections = new ArrayList<Connection>();
-        for (Node node: nodes) {
-            connections.addAll(node.getIncomingConnections(Node.CONNECTION_DEFAULT_TYPE));
-        }
-        xmlDump.append("  <connections>" + EOL);
-        for (Connection connection: connections) {
-            visitConnection(connection, xmlDump, includeMeta);
-        }
-        xmlDump.append("  </connections>" + EOL + EOL);
-    }
-    
-    public static void visitConnection(Connection connection, StringBuffer xmlDump, boolean includeMeta) {
-        xmlDump.append("    <connection from=\"" + connection.getFrom().getId() + "\" ");
-        if (!NodeImpl.CONNECTION_DEFAULT_TYPE.equals(connection.getFromType())) {
-            xmlDump.append("fromType=\"" + connection.getFromType() + "\" ");
-        }
-        xmlDump.append("to=\"" + connection.getTo().getId() + "\" ");
-        if (!NodeImpl.CONNECTION_DEFAULT_TYPE.equals(connection.getToType())) {
-            xmlDump.append("toType=\"" + connection.getToType() + "\" ");
-        }
-        if (includeMeta) {
-            String bendpoints = (String) connection.getMetaData("bendpoints");
-            if (bendpoints != null) {
-                xmlDump.append("bendpoints=\"" + bendpoints + "\" ");
-            }
-        }
-        xmlDump.append("/>" + EOL);
-    }
-    
-}

Added: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/XmlRuleFlowProcessDumper.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/XmlRuleFlowProcessDumper.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/XmlRuleFlowProcessDumper.java	2008-06-09 11:23:14 UTC (rev 20367)
@@ -0,0 +1,16 @@
+package org.drools.xml;
+
+public class XmlRuleFlowProcessDumper extends XmlWorkflowProcessDumper {
+    
+    public static final XmlRuleFlowProcessDumper INSTANCE = new XmlRuleFlowProcessDumper();
+    
+    private XmlRuleFlowProcessDumper() {
+        super(
+            "RuleFlow", 
+            "http://drools.org/drools-4.0/process",
+            "drools-processes-4.0.xsd", 
+            new ProcessSemanticModule()
+        );
+    }
+    
+}

Added: 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	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/XmlWorkflowProcessDumper.java	2008-06-09 11:23:14 UTC (rev 20367)
@@ -0,0 +1,178 @@
+package org.drools.xml;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+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.workflow.core.Connection;
+import org.drools.workflow.core.Node;
+import org.drools.workflow.core.WorkflowProcess;
+import org.drools.workflow.core.impl.NodeImpl;
+import org.drools.xml.processes.AbstractNodeHandler;
+
+public class XmlWorkflowProcessDumper {
+    
+    private final static String EOL = System.getProperty( "line.separator" );
+    
+    private String type;
+    private String namespace;
+    private String schemaLocation;
+    private SemanticModule semanticModule;
+    
+    public XmlWorkflowProcessDumper(String type, String namespace, String schemaLocation, SemanticModule semanticModule) {
+        this.type = type;
+        this.namespace = namespace;
+        this.schemaLocation = schemaLocation;
+        this.semanticModule = semanticModule;
+    }
+    
+    public String dump(WorkflowProcess process) {
+        return dump(process, true);
+    }
+    
+    public String dump(WorkflowProcess process, boolean includeMeta) {
+        StringBuffer xmlDump = new StringBuffer();
+        visitProcess(process, xmlDump, includeMeta);
+        return xmlDump.toString();
+    }
+    
+    protected void visitProcess(WorkflowProcess process, StringBuffer xmlDump, boolean includeMeta) {
+        xmlDump.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?> " + EOL
+            + "<process xmlns=\"" + namespace + "\"" + EOL
+            + "         xmlns:xs=\"http://www.w3.org/2001/XMLSchema-instance\"" + EOL
+            + "         xs:schemaLocation=\"" + namespace + " " + schemaLocation + "\"" + EOL
+            + "         type=\"" + type + "\" ");
+        if (process.getName() != null) {
+            xmlDump.append("name=\"" + process.getName() + "\" ");
+        }
+        if (process.getId() != null) {
+            xmlDump.append("id=\"" + process.getId() + "\" ");
+        }
+        if (process.getPackageName() != null) {
+            xmlDump.append("package-name=\"" + process.getPackageName() + "\" ");
+        }
+        if (process.getVersion() != null) {
+            xmlDump.append("version=\"" + process.getVersion() + "\" ");
+        }
+        if (includeMeta) {
+            Integer routerLayout = (Integer) process.getMetaData("routerLayout");
+            if (routerLayout != null && routerLayout != 0) {
+                xmlDump.append("routerLayout=\"" + routerLayout + "\" ");
+            }
+        }
+        xmlDump.append(">" + EOL + EOL);
+        visitHeader(process, xmlDump, includeMeta);
+        visitNodes(process, xmlDump, includeMeta);
+        visitConnections(process.getNodes(), xmlDump, includeMeta);
+        xmlDump.append("</process>");
+    }
+    
+    private void visitHeader(WorkflowProcess process, StringBuffer xmlDump, boolean includeMeta) {
+        xmlDump.append("  <header>" + EOL);
+        visitImports(process.getImports(), xmlDump);
+        visitGlobals(process.getGlobals(), xmlDump);
+        VariableScope variableScope = (VariableScope) process.getDefaultContext(VariableScope.VARIABLE_SCOPE);
+        if (variableScope != null) {
+            visitVariables(variableScope.getVariables(), xmlDump);
+        }
+        xmlDump.append("  </header>" + EOL + EOL);
+    }
+    
+    private void visitImports(List<String> imports, StringBuffer xmlDump) {
+        if (imports != null && imports.size() > 0) {
+            xmlDump.append("    <imports>" + EOL);
+            for (String importString: imports) {
+                xmlDump.append("      <import name=\"" + importString + "\" />" + EOL);
+            }
+            xmlDump.append("    </imports>" + EOL);
+        }
+    }
+    
+    private void visitGlobals(Map<String, String> globals, StringBuffer xmlDump) {
+        if (globals != null && globals.size() > 0) {
+            xmlDump.append("    <globals>" + EOL);
+            for (Map.Entry<String, String> global: globals.entrySet()) {
+                xmlDump.append("      <global identifier=\"" + global.getKey() + "\" type=\"" + global.getValue() + "\" />" + EOL);
+            }
+            xmlDump.append("    </globals>" + EOL);
+        }
+    }
+    
+    private void visitVariables(List<Variable> variables, StringBuffer xmlDump) {
+        if (variables != null && variables.size() > 0) {
+            xmlDump.append("    <variables>" + EOL);
+            for (Variable variable: variables) {
+                xmlDump.append("      <variable name=\"" + variable.getName() + "\" >" + EOL);
+                visitDataType(variable.getType(), xmlDump);
+                Object value = variable.getValue();
+                if (value != null) {
+                    visitValue(variable.getValue(), xmlDump);
+                }
+                xmlDump.append("      </variable>" + EOL);
+            }
+            xmlDump.append("    </variables>" + EOL);
+        }
+    }
+    
+    private void visitDataType(DataType dataType, StringBuffer xmlDump) {
+        xmlDump.append("        <type name=\"" + dataType.getClass().getName() + "\" />" + EOL);
+    }
+    
+    private void visitValue(Object value, StringBuffer xmlDump) {
+        xmlDump.append("        <value>" + value + "</value>" + EOL);
+    }
+    
+    private void visitNodes(WorkflowProcess process, StringBuffer xmlDump, boolean includeMeta) {
+        xmlDump.append("  <nodes>" + EOL);
+        for (Node node: process.getNodes()) {
+            visitNode(node, xmlDump, includeMeta);
+        }
+        xmlDump.append("  </nodes>" + EOL + EOL);
+    }
+    
+    public void visitNode(Node node, StringBuffer xmlDump, boolean includeMeta) {
+     	Handler handler = semanticModule.getHandlerByClass(node.getClass());
+        if (handler != null) {
+        	((AbstractNodeHandler) handler).writeNode(node, xmlDump, includeMeta);
+        } else {
+        	throw new IllegalArgumentException(
+                "Unknown node type: " + node);
+        }
+    }
+    
+    private void visitConnections(Node[] nodes, StringBuffer xmlDump, boolean includeMeta) {
+        List<Connection> connections = new ArrayList<Connection>();
+        for (Node node: nodes) {
+            for (List<Connection> connectionList: node.getIncomingConnections().values()) {
+                connections.addAll(connectionList);
+            }
+        }
+        xmlDump.append("  <connections>" + EOL);
+        for (Connection connection: connections) {
+            visitConnection(connection, xmlDump, includeMeta);
+        }
+        xmlDump.append("  </connections>" + EOL + EOL);
+    }
+    
+    public void visitConnection(Connection connection, StringBuffer xmlDump, boolean includeMeta) {
+        xmlDump.append("    <connection from=\"" + connection.getFrom().getId() + "\" ");
+        if (!NodeImpl.CONNECTION_DEFAULT_TYPE.equals(connection.getFromType())) {
+            xmlDump.append("fromType=\"" + connection.getFromType() + "\" ");
+        }
+        xmlDump.append("to=\"" + connection.getTo().getId() + "\" ");
+        if (!NodeImpl.CONNECTION_DEFAULT_TYPE.equals(connection.getToType())) {
+            xmlDump.append("toType=\"" + connection.getToType() + "\" ");
+        }
+        if (includeMeta) {
+            String bendpoints = (String) connection.getMetaData("bendpoints");
+            if (bendpoints != null) {
+                xmlDump.append("bendpoints=\"" + bendpoints + "\" ");
+            }
+        }
+        xmlDump.append("/>" + EOL);
+    }
+    
+}

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/CompositeNodeHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/CompositeNodeHandler.java	2008-06-09 11:06:49 UTC (rev 20366)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/CompositeNodeHandler.java	2008-06-09 11:23:14 UTC (rev 20367)
@@ -28,7 +28,7 @@
         	// filter out composite start and end nodes as they can be regenerated
         	if ((!(subNode instanceof CompositeNode.CompositeNodeStart)) &&
     			(!(subNode instanceof CompositeNode.CompositeNodeEnd))) {
-        		XmlRuleFlowProcessDumper.visitNode(subNode, xmlDump, includeMeta);
+        		XmlRuleFlowProcessDumper.INSTANCE.visitNode(subNode, xmlDump, includeMeta);
         	}
         }
         xmlDump.append("      </nodes>" + EOL);
@@ -45,7 +45,7 @@
         }
         xmlDump.append("      <connections>" + EOL);
         for (Connection connection: connections) {
-        	XmlRuleFlowProcessDumper.visitConnection(connection, xmlDump, includeMeta);
+        	XmlRuleFlowProcessDumper.INSTANCE.visitConnection(connection, xmlDump, includeMeta);
         }
         xmlDump.append("      </connections>" + EOL);
         xmlDump.append("      <in-ports>" + EOL);

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/xml/TestXml.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/xml/TestXml.java	2008-06-09 11:06:49 UTC (rev 20366)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/xml/TestXml.java	2008-06-09 11:23:14 UTC (rev 20367)
@@ -17,8 +17,7 @@
         RuleFlowProcess process = (RuleFlowProcess) reader.getProcess();
         assertNotNull(process);
 
-        XmlRuleFlowProcessDumper dumper = new XmlRuleFlowProcessDumper();
-        String output = dumper.dump(process);
+        String output = XmlRuleFlowProcessDumper.INSTANCE.dump(process);
         System.out.println(output);
         reader = new XmlProcessReader(new SemanticModules());
         reader.read(new StringReader(output));

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-06-09 11:06:49 UTC (rev 20366)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/xml/processes/XMLPersistenceTest.java	2008-06-09 11:23:14 UTC (rev 20367)
@@ -61,9 +61,7 @@
         process.addNode(new WorkItemNode());
         process.addNode(new TimerNode());
         
-        XmlRuleFlowProcessDumper dumper = new XmlRuleFlowProcessDumper();
-        
-        String xml = dumper.dump(process, false);
+        String xml = XmlRuleFlowProcessDumper.INSTANCE.dump(process, false);
         if (xml == null) {
             throw new IllegalArgumentException("Failed to persist empty nodes!");
         }
@@ -82,7 +80,7 @@
         
 //        System.out.println("************************************");
         
-        String xml2 = dumper.dump(process, false);
+        String xml2 = XmlRuleFlowProcessDumper.INSTANCE.dump(process, false);
         if (xml2 == null) {
             throw new IllegalArgumentException("Failed to persist empty nodes!");
         }
@@ -258,9 +256,7 @@
         process.addNode(endNode);
         new ConnectionImpl(timerNode, Node.CONNECTION_DEFAULT_TYPE, endNode, Node.CONNECTION_DEFAULT_TYPE);
         
-        XmlRuleFlowProcessDumper dumper = new XmlRuleFlowProcessDumper();
-        
-        String xml = dumper.dump(process, true);
+        String xml = XmlRuleFlowProcessDumper.INSTANCE.dump(process, true);
         if (xml == null) {
             throw new IllegalArgumentException("Failed to persist empty nodes!");
         }
@@ -278,7 +274,7 @@
         
 //        System.out.println("************************************");
         
-        String xml2 = dumper.dump(process, true);
+        String xml2 = XmlRuleFlowProcessDumper.INSTANCE.dump(process, true);
         if (xml2 == null) {
             throw new IllegalArgumentException("Failed to persist empty nodes!");
         }




More information about the jboss-svn-commits mailing list