[jboss-svn-commits] JBL Code SVN: r20113 - in labs/jbossrules/trunk/drools-compiler/src: main/java/org/drools/xml/processes and 1 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Thu May 22 07:56:56 EDT 2008
Author: KrisVerlaenen
Date: 2008-05-22 07:56:56 -0400 (Thu, 22 May 2008)
New Revision: 20113
Modified:
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/DefaultSemanticModule.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/SemanticModule.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/XmlRuleFlowProcessDumper.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/AbstractNodeHandler.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/ActionNodeHandler.java
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/EndNodeHandler.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/JoinNodeHandler.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/MilestoneNodeHandler.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/RuleSetNodeHandler.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/SplitNodeHandler.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/StartNodeHandler.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/SubProcessNodeHandler.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/TimerNodeHandler.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/WorkItemNodeHandler.java
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/xml/processes/XMLPersistenceTest.java
Log:
JBRULES-1616: Composite Node
- improved xml serialization
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/DefaultSemanticModule.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/DefaultSemanticModule.java 2008-05-22 11:56:48 UTC (rev 20112)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/DefaultSemanticModule.java 2008-05-22 11:56:56 UTC (rev 20113)
@@ -6,10 +6,12 @@
public class DefaultSemanticModule implements SemanticModule {
public String uri;
public Map<String, Handler> handlers;
+ public Map<Class<?>, Handler> handlersByClass;
public DefaultSemanticModule(String uri) {
this.uri = uri;
this.handlers = new HashMap<String, Handler>();
+ this.handlersByClass = new HashMap<Class<?>, Handler>();
}
public String getUri() {
@@ -18,10 +20,24 @@
public void addHandler(String name, Handler handler) {
this.handlers.put( name, handler );
+ if (handler != null && handler.generateNodeFor() != null) {
+ this.handlersByClass.put( handler.generateNodeFor(), handler );
+ }
}
public Handler getHandler(String name) {
return this.handlers.get( name );
}
+
+ public Handler getHandlerByClass(Class<?> clazz) {
+ while (clazz != null) {
+ Handler handler = this.handlersByClass.get( clazz );
+ if (handler != null) {
+ return handler;
+ }
+ clazz = clazz.getSuperclass();
+ }
+ return null;
+ }
}
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/SemanticModule.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/SemanticModule.java 2008-05-22 11:56:48 UTC (rev 20112)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/SemanticModule.java 2008-05-22 11:56:56 UTC (rev 20113)
@@ -6,4 +6,6 @@
public void addHandler(String name, Handler handler);
public Handler getHandler(String name);
+
+ public Handler getHandlerByClass(Class<?> clazz);
}
Modified: 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-05-22 11:56:48 UTC (rev 20112)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/XmlRuleFlowProcessDumper.java 2008-05-22 11:56:56 UTC (rev 20113)
@@ -4,48 +4,31 @@
import java.util.List;
import java.util.Map;
-import org.drools.process.core.ParameterDefinition;
-import org.drools.process.core.Work;
import org.drools.process.core.context.variable.Variable;
import org.drools.process.core.datatype.DataType;
-import org.drools.process.core.timer.Timer;
import org.drools.ruleflow.core.RuleFlowProcess;
import org.drools.workflow.core.Connection;
-import org.drools.workflow.core.Constraint;
import org.drools.workflow.core.Node;
-import org.drools.workflow.core.impl.DroolsConsequenceAction;
import org.drools.workflow.core.impl.NodeImpl;
-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.drools.xml.processes.AbstractNodeHandler;
public class XmlRuleFlowProcessDumper {
- // TODO writing out should also be part of the NodeHandler ?
-
private final static String EOL = System.getProperty( "line.separator" );
- private StringBuffer xmlDump;
+ private static final SemanticModule semanticModule = new ProcessSemanticModule();
- public String dump(RuleFlowProcess process) {
+ public static String dump(RuleFlowProcess process) {
return dump(process, true);
}
- public synchronized String dump(RuleFlowProcess process, boolean includeMeta) {
- this.xmlDump = new StringBuffer();
- visitProcess(process, includeMeta);
- return this.xmlDump.toString();
+ public static String dump(RuleFlowProcess process, boolean includeMeta) {
+ StringBuffer xmlDump = new StringBuffer();
+ visitProcess(process, xmlDump, includeMeta);
+ return xmlDump.toString();
}
- private void visitProcess(RuleFlowProcess process, boolean includeMeta) {
+ 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
@@ -70,21 +53,21 @@
}
}
xmlDump.append(">" + EOL + EOL);
- visitHeader(process, includeMeta);
- visitNodes(process, includeMeta);
- visitConnections(process.getNodes(), includeMeta);
+ visitHeader(process, xmlDump, includeMeta);
+ visitNodes(process, xmlDump, includeMeta);
+ visitConnections(process.getNodes(), xmlDump, includeMeta);
xmlDump.append("</process>");
}
- private void visitHeader(RuleFlowProcess process, boolean includeMeta) {
+ private static void visitHeader(RuleFlowProcess process, StringBuffer xmlDump, boolean includeMeta) {
xmlDump.append(" <header>" + EOL);
- visitImports(process.getImports());
- visitGlobals(process.getGlobals());
- visitVariables(process.getVariableScope().getVariables());
+ visitImports(process.getImports(), xmlDump);
+ visitGlobals(process.getGlobals(), xmlDump);
+ visitVariables(process.getVariableScope().getVariables(), xmlDump);
xmlDump.append(" </header>" + EOL + EOL);
}
- private void visitImports(List<String> imports) {
+ private static void visitImports(List<String> imports, StringBuffer xmlDump) {
if (imports != null && imports.size() > 0) {
xmlDump.append(" <imports>" + EOL);
for (String importString: imports) {
@@ -94,7 +77,7 @@
}
}
- private void visitGlobals(Map<String, String> globals) {
+ 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()) {
@@ -104,15 +87,15 @@
}
}
- private void visitVariables(List<Variable> variables) {
+ 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());
+ visitDataType(variable.getType(), xmlDump);
Object value = variable.getValue();
if (value != null) {
- visitValue(variable.getValue());
+ visitValue(variable.getValue(), xmlDump);
}
xmlDump.append(" </variable>" + EOL);
}
@@ -120,325 +103,45 @@
}
}
- private void visitDataType(DataType dataType) {
+ private static void visitDataType(DataType dataType, StringBuffer xmlDump) {
xmlDump.append(" <type name=\"" + dataType.getClass().getName() + "\" />" + EOL);
}
- private void visitValue(Object value) {
+ private static void visitValue(Object value, StringBuffer xmlDump) {
xmlDump.append(" <value>" + value + "</value>" + EOL);
}
- private void visitNodes(RuleFlowProcess process, boolean includeMeta) {
+ private static void visitNodes(RuleFlowProcess process, StringBuffer xmlDump, boolean includeMeta) {
xmlDump.append(" <nodes>" + EOL);
- StartNode startNode = process.getStart();
- if (startNode != null) {
- visitStartNode(startNode, includeMeta);
- }
for (Node node: process.getNodes()) {
- visitNode(node, includeMeta);
+ visitNode(node, xmlDump, includeMeta);
}
xmlDump.append(" </nodes>" + EOL + EOL);
}
- private void visitNode(Node node, boolean includeMeta) {
- if (node instanceof StartNode) {
- // Do nothing, start node already added
- } else if (node instanceof EndNode) {
- visitEndNode((EndNode) node, includeMeta);
- } else if (node instanceof ActionNode) {
- visitActionNode((ActionNode) node, includeMeta);
- } else if (node instanceof RuleSetNode) {
- visitRuleSetNode((RuleSetNode) node, includeMeta);
- } else if (node instanceof SubProcessNode) {
- visitSubProcessNode((SubProcessNode) node, includeMeta);
- } else if (node instanceof WorkItemNode) {
- visitWorkItemNode((WorkItemNode) node, includeMeta);
- } else if (node instanceof Join) {
- visitJoinNode((Join) node, includeMeta);
- } else if (node instanceof Split) {
- visitSplitNode((Split) node, includeMeta);
- } else if (node instanceof MilestoneNode) {
- visitMileStoneNode((MilestoneNode) node, includeMeta);
- } else if (node instanceof TimerNode) {
- visitTimerNode((TimerNode) node, includeMeta);
- } else if (node instanceof CompositeNode) {
- visitCompositeNode((CompositeNode) node, includeMeta);
- } else if (node instanceof CompositeNode.CompositeNodeStart) {
- // do nothing, can be recreated
- } else if (node instanceof CompositeNode.CompositeNodeEnd) {
- // do nothing, can be recreated
- } else if (node instanceof CompositeNode) {
- visitCompositeNode((CompositeNode) node, includeMeta);
+ 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(
+ throw new IllegalArgumentException(
"Unknown node type: " + node);
}
}
- private void visitNode(String name, Node node, boolean includeMeta) {
- xmlDump.append(" <" + name + " id=\"" + node.getId() + "\" ");
- if (node.getName() != null) {
- xmlDump.append("name=\"" + node.getName() + "\" ");
- }
- if (includeMeta) {
- Integer x = (Integer) node.getMetaData("x");
- Integer y = (Integer) node.getMetaData("y");
- Integer width = (Integer) node.getMetaData("width");
- Integer height = (Integer) node.getMetaData("height");
- if (x != null && x != 0) {
- xmlDump.append("x=\"" + x + "\" ");
- }
- if (y != null && y != 0) {
- xmlDump.append("y=\"" + y + "\" ");
- }
- if (width != null && width != -1) {
- xmlDump.append("width=\"" + width + "\" ");
- }
- if (height != null && height != -1) {
- xmlDump.append("height=\"" + height + "\" ");
- }
- }
- }
-
- private void endElement() {
- xmlDump.append("/>" + EOL);
- }
-
- private void endElement(String name) {
- xmlDump.append(" </" + name + ">" + EOL);
- }
-
- private void visitStartNode(StartNode startNode, boolean includeMeta) {
- visitNode("start", startNode, includeMeta);
- endElement();
- }
-
- private void visitEndNode(EndNode endNode, boolean includeMeta) {
- visitNode("end", endNode, includeMeta);
- endElement();
- }
-
- private void visitActionNode(ActionNode actionNode, boolean includeMeta) {
- visitNode("action", actionNode, includeMeta);
- DroolsConsequenceAction action = (DroolsConsequenceAction) actionNode.getAction();
- if (action != null) {
- String dialect = action.getDialect();
- if (dialect != null) {
- xmlDump.append("dialect=\"" + action.getDialect() + "\" ");
- }
- String consequence = action.getConsequence();
- if (consequence == null) {
- endElement();
- } else {
- xmlDump.append(">" + XmlDumper.replaceIllegalChars(consequence.trim()) + "</action>" + EOL);
- }
- } else {
- endElement();
- }
- }
-
- private void visitRuleSetNode(RuleSetNode ruleSetNode, boolean includeMeta) {
- visitNode("ruleSet", ruleSetNode, includeMeta);
- String ruleFlowGroup = ruleSetNode.getRuleFlowGroup();
- if (ruleFlowGroup != null) {
- xmlDump.append("ruleFlowGroup=\"" + ruleFlowGroup + "\" ");
- }
- endElement();
- }
-
- private void visitSubProcessNode(SubProcessNode subProcessNode, boolean includeMeta) {
- visitNode("subProcess", subProcessNode, includeMeta);
- String processId = subProcessNode.getProcessId();
- if (processId != null) {
- xmlDump.append("processId=\"" + processId + "\" ");
- }
- if (!subProcessNode.isWaitForCompletion()) {
- xmlDump.append("waitForCompletion=\"false\" ");
- }
- endElement();
- }
-
- private void visitJoinNode(Join joinNode, boolean includeMeta) {
- visitNode("join", joinNode, includeMeta);
- int type = joinNode.getType();
- if (type != 0) {
- xmlDump.append("type=\"" + type + "\" ");
- }
- endElement();
- }
-
- private void visitSplitNode(Split splitNode, boolean includeMeta) {
- visitNode("split", splitNode, includeMeta);
- int type = splitNode.getType();
- if (type != 0) {
- xmlDump.append("type=\"" + type + "\" ");
- }
- if (splitNode.getConstraints().isEmpty()) {
- endElement();
- } else {
- xmlDump.append(">" + EOL);
- xmlDump.append(" <constraints>" + EOL);
- for (Map.Entry<Split.ConnectionRef, Constraint> entry: splitNode.getConstraints().entrySet()) {
- Split.ConnectionRef connection = entry.getKey();
- Constraint constraint = entry.getValue();
- xmlDump.append(" <constraint "
- + "toNodeId=\"" + connection.getNodeId() + "\" "
- + "toType=\"" + connection.getToType() + "\" ");
- String name = constraint.getName();
- if (name != null && !"".equals(name)) {
- xmlDump.append("name=\"" + constraint.getName() + "\" ");
- }
- int priority = constraint.getPriority();
- if (priority != 0) {
- xmlDump.append("priority=\"" + constraint.getPriority() + "\" ");
- }
- xmlDump.append("type=\"" + constraint.getType() + "\" ");
- String dialect = constraint.getDialect();
- if (dialect != null && !"".equals(dialect)) {
- xmlDump.append("dialect=\"" + dialect + "\" ");
- }
- String constraintString = constraint.getConstraint();
- if (constraintString != null) {
- xmlDump.append(">" + XmlDumper.replaceIllegalChars(constraintString) + "</constraint>" + EOL);
- } else {
- xmlDump.append("/>" + EOL);
- }
- }
- xmlDump.append(" </constraints>" + EOL);
- endElement("split");
- }
- }
-
- private void visitMileStoneNode(MilestoneNode milestoneNode, boolean includeMeta) {
- visitNode("milestone", milestoneNode, includeMeta);
- String constraint = milestoneNode.getConstraint();
- if (constraint != null) {
- xmlDump.append(">" + XmlDumper.replaceIllegalChars(constraint.trim()) + "</milestone>" + EOL);
- } else {
- endElement();
- }
- }
-
- private void visitWorkItemNode(WorkItemNode workItemNode, boolean includeMeta) {
- visitNode("workItem", workItemNode, includeMeta);
- if (!workItemNode.isWaitForCompletion()) {
- xmlDump.append("waitForCompletion=\"false\" ");
- }
- xmlDump.append(">" + EOL);
- Work work = workItemNode.getWork();
- if (work != null) {
- visitWork(work, includeMeta);
- }
- Map<String, String> inMappings = workItemNode.getInMappings();
- for (Map.Entry<String, String> inMapping: inMappings.entrySet()) {
- xmlDump.append(
- " <mapping type=\"in\" "
- + "parameterName=\"" + inMapping.getKey() + "\" "
- + "variableName=\"" + inMapping.getValue() + "\" />" + EOL);
- }
- Map<String, String> outMappings = workItemNode.getOutMappings();
- for (Map.Entry<String, String> outMapping: outMappings.entrySet()) {
- xmlDump.append(
- " <mapping type=\"out\" "
- + "parameterName=\"" + outMapping.getKey() + "\" "
- + "variableName=\"" + outMapping.getValue() + "\" />" + EOL);
- }
- endElement("workItem");
- }
-
- private void visitWork(Work work, boolean includeMeta) {
- xmlDump.append(" <work name=\"" + work.getName() + "\" >" + EOL);
- for (ParameterDefinition paramDefinition: work.getParameterDefinitions()) {
- if (paramDefinition == null) {
- throw new IllegalArgumentException(
- "Could not find parameter definition " + paramDefinition.getName()
- + " for work " + work.getName());
- }
- xmlDump.append(" <parameter name=\"" + paramDefinition.getName() + "\" " +
- "type=\"" + paramDefinition.getType().getClass().getName() + "\" ");
- Object value = work.getParameter(paramDefinition.getName());
- if (value == null) {
- xmlDump.append("/>" + EOL);
- } else {
- xmlDump.append(">" + value + "</parameter>" + EOL);
- }
- }
- xmlDump.append(" </work>" + EOL);
- }
-
- private void visitTimerNode(TimerNode timerNode, boolean includeMeta) {
- visitNode("timer", timerNode, includeMeta);
- Timer timer = timerNode.getTimer();
- if (timer != null) {
- xmlDump.append("delay=\"" + timer.getDelay() + "\" ");
- if (timer.getPeriod() > 0) {
- xmlDump.append(" period=\"" + timer.getPeriod() + "\" ");
- }
- }
- endElement();
- }
-
- private void visitCompositeNode(CompositeNode compositeNode, boolean includeMeta) {
- visitNode("composite", compositeNode, includeMeta);
- xmlDump.append(">" + EOL);
- xmlDump.append(" <nodes>" + EOL);
- for (Node subNode: compositeNode.getNodes()) {
- visitNode(subNode, includeMeta);
- }
- xmlDump.append(" </nodes>" + EOL);
+ private static void visitConnections(Node[] nodes, StringBuffer xmlDump, boolean includeMeta) {
List<Connection> connections = new ArrayList<Connection>();
- for (Node node: compositeNode.getNodes()) {
- if (!(node instanceof CompositeNode.CompositeNodeEnd)) {
- for (Connection connection: node.getIncomingConnections(Node.CONNECTION_DEFAULT_TYPE)) {
- if (!(connection.getFrom() instanceof CompositeNode.CompositeNodeStart)) {
- connections.add(connection);
- }
- }
- }
- }
- xmlDump.append(" <connections>" + EOL);
- for (Connection connection: connections) {
- visitConnection(connection, includeMeta);
- }
- xmlDump.append(" </connections>" + EOL);
- xmlDump.append(" <in-ports>" + EOL);
- for (Map.Entry<String, CompositeNode.NodeAndType> entry: compositeNode.getLinkedIncomingNodes().entrySet()) {
- xmlDump.append(" <in-port type=\"" + entry.getKey() + "\" nodeId=\"" + entry.getValue().getNodeId() + "\" nodeInType=\"" + entry.getValue().getType() + "\" />" + EOL);
- }
- xmlDump.append(" </in-ports>" + EOL);
- xmlDump.append(" <out-ports>" + EOL);
- for (Map.Entry<String, CompositeNode.NodeAndType> entry: compositeNode.getLinkedOutgoingNodes().entrySet()) {
- xmlDump.append(" <out-port type=\"" + entry.getKey() + "\" nodeId=\"" + entry.getValue().getNodeId() + "\" nodeOutType=\"" + entry.getValue().getType() + "\" />" + EOL);
- }
- xmlDump.append(" </out-ports>" + EOL);
- endElement("composite");
- }
-
-// private void visitCompositeNodeStart(CompositeNode.CompositeNodeStart compositeNodeStart, boolean includeMeta) {
-// visitNode("composite-start", compositeNodeStart, includeMeta);
-// xmlDump.append("in-nodeId=\"" + compositeNodeStart.getInNodeId() + "\" in-type=\"" + compositeNodeStart.getInType() + "\" />" + EOL);
-// endElement();
-// }
-//
-// private void visitCompositeNodeEnd(CompositeNode.CompositeNodeEnd compositeNodeEnd, boolean includeMeta) {
-// visitNode("composite-end", compositeNodeEnd, includeMeta);
-// xmlDump.append("out-nodeId=\"" + compositeNodeEnd.getOutNodeId() + "\" in-type=\"" + compositeNodeEnd.getOutType() + "\" />" + EOL);
-// endElement();
-// }
-
- private void visitConnections(Node[] nodes, 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, includeMeta);
+ visitConnection(connection, xmlDump, includeMeta);
}
xmlDump.append(" </connections>" + EOL + EOL);
}
- private void visitConnection(Connection connection, boolean includeMeta) {
+ 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() + "\" ");
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/AbstractNodeHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/AbstractNodeHandler.java 2008-05-22 11:56:48 UTC (rev 20112)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/AbstractNodeHandler.java 2008-05-22 11:56:56 UTC (rev 20113)
@@ -16,6 +16,8 @@
public abstract class AbstractNodeHandler extends BaseAbstractHandler implements
Handler {
+ protected final static String EOL = System.getProperty( "line.separator" );
+
public AbstractNodeHandler() {
initValidParents();
initValidPeers();
@@ -48,7 +50,6 @@
node.setName(name);
nodeContainer.addNode(node);
- ((ProcessBuildData) parser.getData()).addNode(node);
return node;
}
@@ -98,5 +99,40 @@
}
}
}
+
+ public abstract void writeNode(final Node node, final StringBuffer xmlDump, final boolean includeMeta);
+
+ protected void writeNode(final String name, final Node node, final StringBuffer xmlDump, final boolean includeMeta) {
+ xmlDump.append(" <" + name + " id=\"" + node.getId() + "\" ");
+ if (node.getName() != null) {
+ xmlDump.append("name=\"" + node.getName() + "\" ");
+ }
+ if (includeMeta) {
+ Integer x = (Integer) node.getMetaData("x");
+ Integer y = (Integer) node.getMetaData("y");
+ Integer width = (Integer) node.getMetaData("width");
+ Integer height = (Integer) node.getMetaData("height");
+ if (x != null && x != 0) {
+ xmlDump.append("x=\"" + x + "\" ");
+ }
+ if (y != null && y != 0) {
+ xmlDump.append("y=\"" + y + "\" ");
+ }
+ if (width != null && width != -1) {
+ xmlDump.append("width=\"" + width + "\" ");
+ }
+ if (height != null && height != -1) {
+ xmlDump.append("height=\"" + height + "\" ");
+ }
+ }
+ }
+
+ protected void endNode(final StringBuffer xmlDump) {
+ xmlDump.append("/>" + EOL);
+ }
+ protected void endNode(final String name, final StringBuffer xmlDump) {
+ xmlDump.append(" </" + name + ">" + EOL);
+ }
+
}
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/ActionNodeHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/ActionNodeHandler.java 2008-05-22 11:56:48 UTC (rev 20112)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/ActionNodeHandler.java 2008-05-22 11:56:56 UTC (rev 20113)
@@ -5,6 +5,7 @@
import org.drools.workflow.core.node.ActionNode;
import org.drools.xml.Configuration;
import org.drools.xml.ExtensibleXmlParser;
+import org.drools.xml.XmlDumper;
import org.xml.sax.SAXException;
public class ActionNodeHandler extends AbstractNodeHandler {
@@ -34,4 +35,24 @@
return ActionNode.class;
}
+ public void writeNode(Node node, StringBuffer xmlDump, boolean includeMeta) {
+ ActionNode actionNode = (ActionNode) node;
+ writeNode("action", actionNode, xmlDump, includeMeta);
+ DroolsConsequenceAction action = (DroolsConsequenceAction) actionNode.getAction();
+ if (action != null) {
+ String dialect = action.getDialect();
+ if (dialect != null) {
+ xmlDump.append("dialect=\"" + action.getDialect() + "\" ");
+ }
+ String consequence = action.getConsequence();
+ if (consequence == null) {
+ endNode(xmlDump);
+ } else {
+ xmlDump.append(">" + XmlDumper.replaceIllegalChars(consequence.trim()) + "</action>" + EOL);
+ }
+ } else {
+ endNode(xmlDump);
+ }
+ }
+
}
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-05-22 11:56:48 UTC (rev 20112)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/CompositeNodeHandler.java 2008-05-22 11:56:56 UTC (rev 20113)
@@ -1,7 +1,13 @@
package org.drools.xml.processes;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import org.drools.workflow.core.Connection;
import org.drools.workflow.core.Node;
import org.drools.workflow.core.node.CompositeNode;
+import org.drools.xml.XmlRuleFlowProcessDumper;
public class CompositeNodeHandler extends AbstractNodeHandler {
@@ -13,4 +19,45 @@
return CompositeNode.class;
}
+ public void writeNode(Node node, StringBuffer xmlDump, boolean includeMeta) {
+ CompositeNode compositeNode = (CompositeNode) node;
+ writeNode("composite", compositeNode, xmlDump, includeMeta);
+ xmlDump.append(">" + EOL);
+ xmlDump.append(" <nodes>" + EOL);
+ for (Node subNode: compositeNode.getNodes()) {
+ // 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);
+ }
+ }
+ xmlDump.append(" </nodes>" + EOL);
+ List<Connection> connections = new ArrayList<Connection>();
+ for (Node subNode: compositeNode.getNodes()) {
+ // filter out composite start and end nodes as they can be regenerated
+ if (!(subNode instanceof CompositeNode.CompositeNodeEnd)) {
+ for (Connection connection: subNode.getIncomingConnections(Node.CONNECTION_DEFAULT_TYPE)) {
+ if (!(connection.getFrom() instanceof CompositeNode.CompositeNodeStart)) {
+ connections.add(connection);
+ }
+ }
+ }
+ }
+ xmlDump.append(" <connections>" + EOL);
+ for (Connection connection: connections) {
+ XmlRuleFlowProcessDumper.visitConnection(connection, xmlDump, includeMeta);
+ }
+ xmlDump.append(" </connections>" + EOL);
+ xmlDump.append(" <in-ports>" + EOL);
+ for (Map.Entry<String, CompositeNode.NodeAndType> entry: compositeNode.getLinkedIncomingNodes().entrySet()) {
+ xmlDump.append(" <in-port type=\"" + entry.getKey() + "\" nodeId=\"" + entry.getValue().getNodeId() + "\" nodeInType=\"" + entry.getValue().getType() + "\" />" + EOL);
+ }
+ xmlDump.append(" </in-ports>" + EOL);
+ xmlDump.append(" <out-ports>" + EOL);
+ for (Map.Entry<String, CompositeNode.NodeAndType> entry: compositeNode.getLinkedOutgoingNodes().entrySet()) {
+ xmlDump.append(" <out-port type=\"" + entry.getKey() + "\" nodeId=\"" + entry.getValue().getNodeId() + "\" nodeOutType=\"" + entry.getValue().getType() + "\" />" + EOL);
+ }
+ xmlDump.append(" </out-ports>" + EOL);
+ endNode("composite", xmlDump);
+ }
}
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/EndNodeHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/EndNodeHandler.java 2008-05-22 11:56:48 UTC (rev 20112)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/EndNodeHandler.java 2008-05-22 11:56:56 UTC (rev 20113)
@@ -2,6 +2,7 @@
import org.drools.workflow.core.Node;
import org.drools.workflow.core.node.EndNode;
+import org.drools.workflow.core.node.StartNode;
public class EndNodeHandler extends AbstractNodeHandler {
@@ -13,4 +14,10 @@
return EndNode.class;
}
+ public void writeNode(Node node, StringBuffer xmlDump, boolean includeMeta) {
+ EndNode endNode = (EndNode) node;
+ writeNode("end", endNode, xmlDump, includeMeta);
+ endNode(xmlDump);
+ }
+
}
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/JoinNodeHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/JoinNodeHandler.java 2008-05-22 11:56:48 UTC (rev 20112)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/JoinNodeHandler.java 2008-05-22 11:56:56 UTC (rev 20113)
@@ -27,4 +27,14 @@
return Join.class;
}
+ public void writeNode(Node node, StringBuffer xmlDump, boolean includeMeta) {
+ Join joinNode = (Join) node;
+ writeNode("join", joinNode, xmlDump, includeMeta);
+ int type = joinNode.getType();
+ if (type != 0) {
+ xmlDump.append("type=\"" + type + "\" ");
+ }
+ endNode(xmlDump);
+ }
+
}
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/MilestoneNodeHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/MilestoneNodeHandler.java 2008-05-22 11:56:48 UTC (rev 20112)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/MilestoneNodeHandler.java 2008-05-22 11:56:56 UTC (rev 20113)
@@ -4,6 +4,7 @@
import org.drools.workflow.core.node.MilestoneNode;
import org.drools.xml.Configuration;
import org.drools.xml.ExtensibleXmlParser;
+import org.drools.xml.XmlDumper;
import org.xml.sax.SAXException;
public class MilestoneNodeHandler extends AbstractNodeHandler {
@@ -31,4 +32,15 @@
return MilestoneNode.class;
}
+ public void writeNode(Node node, StringBuffer xmlDump, boolean includeMeta) {
+ MilestoneNode milestoneNode = (MilestoneNode) node;
+ writeNode("milestone", milestoneNode, xmlDump, includeMeta);
+ String constraint = milestoneNode.getConstraint();
+ if (constraint != null) {
+ xmlDump.append(">" + XmlDumper.replaceIllegalChars(constraint.trim()) + "</milestone>" + EOL);
+ } else {
+ endNode(xmlDump);
+ }
+ }
+
}
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/RuleSetNodeHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/RuleSetNodeHandler.java 2008-05-22 11:56:48 UTC (rev 20112)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/RuleSetNodeHandler.java 2008-05-22 11:56:56 UTC (rev 20113)
@@ -25,4 +25,14 @@
return RuleSetNode.class;
}
+ public void writeNode(Node node, StringBuffer xmlDump, boolean includeMeta) {
+ RuleSetNode ruleSetNode = (RuleSetNode) node;
+ writeNode("ruleSet", ruleSetNode, xmlDump, includeMeta);
+ String ruleFlowGroup = ruleSetNode.getRuleFlowGroup();
+ if (ruleFlowGroup != null) {
+ xmlDump.append("ruleFlowGroup=\"" + ruleFlowGroup + "\" ");
+ }
+ endNode(xmlDump);
+ }
+
}
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/SplitNodeHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/SplitNodeHandler.java 2008-05-22 11:56:48 UTC (rev 20112)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/SplitNodeHandler.java 2008-05-22 11:56:56 UTC (rev 20113)
@@ -1,9 +1,13 @@
package org.drools.xml.processes;
+import java.util.Map;
+
+import org.drools.workflow.core.Constraint;
import org.drools.workflow.core.Node;
import org.drools.workflow.core.node.Split;
import org.drools.xml.Configuration;
import org.drools.xml.ExtensibleXmlParser;
+import org.drools.xml.XmlDumper;
import org.xml.sax.SAXException;
public class SplitNodeHandler extends AbstractNodeHandler {
@@ -27,4 +31,47 @@
return Split.class;
}
+ public void writeNode(Node node, StringBuffer xmlDump, boolean includeMeta) {
+ Split splitNode = (Split) node;
+ writeNode("split", splitNode, xmlDump, includeMeta);
+ int type = splitNode.getType();
+ if (type != 0) {
+ xmlDump.append("type=\"" + type + "\" ");
+ }
+ if (splitNode.getConstraints().isEmpty()) {
+ endNode(xmlDump);
+ } else {
+ xmlDump.append(">" + EOL);
+ xmlDump.append(" <constraints>" + EOL);
+ for (Map.Entry<Split.ConnectionRef, Constraint> entry: splitNode.getConstraints().entrySet()) {
+ Split.ConnectionRef connection = entry.getKey();
+ Constraint constraint = entry.getValue();
+ xmlDump.append(" <constraint "
+ + "toNodeId=\"" + connection.getNodeId() + "\" "
+ + "toType=\"" + connection.getToType() + "\" ");
+ String name = constraint.getName();
+ if (name != null && !"".equals(name)) {
+ xmlDump.append("name=\"" + constraint.getName() + "\" ");
+ }
+ int priority = constraint.getPriority();
+ if (priority != 0) {
+ xmlDump.append("priority=\"" + constraint.getPriority() + "\" ");
+ }
+ xmlDump.append("type=\"" + constraint.getType() + "\" ");
+ String dialect = constraint.getDialect();
+ if (dialect != null && !"".equals(dialect)) {
+ xmlDump.append("dialect=\"" + dialect + "\" ");
+ }
+ String constraintString = constraint.getConstraint();
+ if (constraintString != null) {
+ xmlDump.append(">" + XmlDumper.replaceIllegalChars(constraintString) + "</constraint>" + EOL);
+ } else {
+ xmlDump.append("/>" + EOL);
+ }
+ }
+ xmlDump.append(" </constraints>" + EOL);
+ endNode("split", xmlDump);
+ }
+ }
+
}
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/StartNodeHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/StartNodeHandler.java 2008-05-22 11:56:48 UTC (rev 20112)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/StartNodeHandler.java 2008-05-22 11:56:56 UTC (rev 20113)
@@ -11,13 +11,14 @@
return new StartNode();
}
- protected void initValidPeers() {
- this.validPeers = new HashSet();
- this.validPeers.add(null);
- }
-
public Class generateNodeFor() {
return StartNode.class;
}
+ public void writeNode(Node node, StringBuffer xmlDump, boolean includeMeta) {
+ StartNode startNode = (StartNode) node;
+ writeNode("start", startNode, xmlDump, includeMeta);
+ endNode(xmlDump);
+ }
+
}
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/SubProcessNodeHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/SubProcessNodeHandler.java 2008-05-22 11:56:48 UTC (rev 20112)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/SubProcessNodeHandler.java 2008-05-22 11:56:56 UTC (rev 20113)
@@ -27,4 +27,17 @@
return SubProcessNode.class;
}
+ public void writeNode(Node node, StringBuffer xmlDump, boolean includeMeta) {
+ SubProcessNode subProcessNode = (SubProcessNode) node;
+ writeNode("subProcess", subProcessNode, xmlDump, includeMeta);
+ String processId = subProcessNode.getProcessId();
+ if (processId != null) {
+ xmlDump.append("processId=\"" + processId + "\" ");
+ }
+ if (!subProcessNode.isWaitForCompletion()) {
+ xmlDump.append("waitForCompletion=\"false\" ");
+ }
+ endNode(xmlDump);
+ }
+
}
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/TimerNodeHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/TimerNodeHandler.java 2008-05-22 11:56:48 UTC (rev 20112)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/TimerNodeHandler.java 2008-05-22 11:56:56 UTC (rev 20113)
@@ -39,4 +39,17 @@
return TimerNode.class;
}
+ public void writeNode(Node node, StringBuffer xmlDump, boolean includeMeta) {
+ TimerNode timerNode = (TimerNode) node;
+ writeNode("timer", timerNode, xmlDump, includeMeta);
+ Timer timer = timerNode.getTimer();
+ if (timer != null) {
+ xmlDump.append("delay=\"" + timer.getDelay() + "\" ");
+ if (timer.getPeriod() > 0) {
+ xmlDump.append(" period=\"" + timer.getPeriod() + "\" ");
+ }
+ }
+ endNode(xmlDump);
+ }
+
}
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-05-22 11:56:48 UTC (rev 20112)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/WorkItemNodeHandler.java 2008-05-22 11:56:56 UTC (rev 20113)
@@ -1,5 +1,9 @@
package org.drools.xml.processes;
+import java.util.Map;
+
+import org.drools.process.core.ParameterDefinition;
+import org.drools.process.core.Work;
import org.drools.workflow.core.Node;
import org.drools.workflow.core.node.WorkItemNode;
import org.drools.xml.Configuration;
@@ -25,4 +29,51 @@
return WorkItemNode.class;
}
+ public void writeNode(Node node, StringBuffer xmlDump, boolean includeMeta) {
+ WorkItemNode workItemNode = (WorkItemNode) node;
+ writeNode("workItem", workItemNode, xmlDump, includeMeta);
+ if (!workItemNode.isWaitForCompletion()) {
+ xmlDump.append("waitForCompletion=\"false\" ");
+ }
+ xmlDump.append(">" + EOL);
+ Work work = workItemNode.getWork();
+ if (work != null) {
+ visitWork(work, xmlDump, includeMeta);
+ }
+ Map<String, String> inMappings = workItemNode.getInMappings();
+ for (Map.Entry<String, String> inMapping: inMappings.entrySet()) {
+ xmlDump.append(
+ " <mapping type=\"in\" "
+ + "parameterName=\"" + inMapping.getKey() + "\" "
+ + "variableName=\"" + inMapping.getValue() + "\" />" + EOL);
+ }
+ Map<String, String> outMappings = workItemNode.getOutMappings();
+ for (Map.Entry<String, String> outMapping: outMappings.entrySet()) {
+ xmlDump.append(
+ " <mapping type=\"out\" "
+ + "parameterName=\"" + outMapping.getKey() + "\" "
+ + "variableName=\"" + outMapping.getValue() + "\" />" + EOL);
+ }
+ endNode("workItem", xmlDump);
+ }
+
+ private void visitWork(Work work, StringBuffer xmlDump, boolean includeMeta) {
+ xmlDump.append(" <work name=\"" + work.getName() + "\" >" + EOL);
+ for (ParameterDefinition paramDefinition: work.getParameterDefinitions()) {
+ if (paramDefinition == null) {
+ throw new IllegalArgumentException(
+ "Could not find parameter definition " + paramDefinition.getName()
+ + " for work " + work.getName());
+ }
+ xmlDump.append(" <parameter name=\"" + paramDefinition.getName() + "\" " +
+ "type=\"" + paramDefinition.getType().getClass().getName() + "\" ");
+ Object value = work.getParameter(paramDefinition.getName());
+ if (value == null) {
+ xmlDump.append("/>" + EOL);
+ } else {
+ xmlDump.append(">" + value + "</parameter>" + EOL);
+ }
+ }
+ xmlDump.append(" </work>" + EOL);
+ }
}
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-05-22 11:56:48 UTC (rev 20112)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/xml/processes/XMLPersistenceTest.java 2008-05-22 11:56:56 UTC (rev 20113)
@@ -65,7 +65,7 @@
throw new IllegalArgumentException("Failed to persist empty nodes!");
}
-// System.out.println(xml);
+ System.out.println(xml);
XmlProcessReader reader = new XmlProcessReader(
new PackageBuilderConfiguration().getSemanticModules());
@@ -245,7 +245,7 @@
throw new IllegalArgumentException("Failed to persist empty nodes!");
}
-// System.out.println(xml);
+ System.out.println(xml);
XmlProcessReader reader = new XmlProcessReader(
new PackageBuilderConfiguration().getSemanticModules());
More information about the jboss-svn-commits
mailing list