[jboss-svn-commits] JBL Code SVN: r35991 - labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Tue Nov 16 06:19:45 EST 2010
Author: KrisVerlaenen
Date: 2010-11-16 06:19:44 -0500 (Tue, 16 Nov 2010)
New Revision: 35991
Modified:
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/GuvnorAPIServlet.java
Log:
JBRULES-2798: Allow extraction / injection of constraints in processes
- adding inject / extract methods to servlet
Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/GuvnorAPIServlet.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/GuvnorAPIServlet.java 2010-11-16 10:47:46 UTC (rev 35990)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/GuvnorAPIServlet.java 2010-11-16 11:19:44 UTC (rev 35991)
@@ -20,18 +20,35 @@
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
+import java.io.Reader;
+import java.io.StringReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
+import java.util.HashMap;
+import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
+import org.drools.bpmn2.legacy.beta1.XmlBPMNProcessDumper;
+import org.drools.bpmn2.xml.BPMNDISemanticModule;
+import org.drools.bpmn2.xml.BPMNSemanticModule;
+import org.drools.compiler.xml.XmlProcessReader;
+import org.drools.definition.process.Connection;
+import org.drools.definition.process.Node;
import org.drools.guvnor.client.rpc.RuleAsset;
import org.drools.guvnor.client.rpc.RuleFlowContentModel;
+import org.drools.guvnor.server.contenthandler.BPMN2ProcessHandler;
import org.drools.guvnor.server.util.LoggingHelper;
+import org.drools.ruleflow.core.RuleFlowProcess;
+import org.drools.workflow.core.Constraint;
+import org.drools.workflow.core.impl.ConstraintImpl;
+import org.drools.workflow.core.node.Split;
+import org.drools.workflow.core.node.StartNode;
+import org.drools.xml.SemanticModules;
import com.google.gwt.user.client.rpc.SerializationException;
@@ -84,8 +101,54 @@
throw new ServletException(e.getMessage(), e);
}
+ } else if ("extract".equals(action)) {
+ String json = request.getParameter("json");
+ try {
+ Map<String, String[]> result = extract(json);
+ response.setContentType("application/json");
+ log.debug("extracting");
+ String s = "";
+ int i = 0;
+ for (Map.Entry<String, String[]> entry: result.entrySet()) {
+ log.debug(entry.getKey() + " " + entry.getValue()[0] + " " + entry.getValue()[1]);
+ s += entry.getKey() + "#" + entry.getValue()[0] + "#" + entry.getValue()[1];
+ if (i++ != result.size() - 1) {
+ s += "###";
+ }
+ }
+ log.debug("End of extracting");
+ response.setContentLength(s.length());
+ response.getOutputStream().write(s.getBytes());
+ response.getOutputStream().close();
+ } catch (Throwable t) {
+ throw new ServletException(t);
+ }
+ } else if ("inject".equals(action)) {
+ String json = request.getParameter("json");
+ try {
+ Map<String, String> constraints = new HashMap<String, String>();
+ String[] s = request.getParameterValues("constraint");
+ for (String c: s) {
+ String nodeId = c.substring(0, c.indexOf(":"));
+ String rule = c.substring(c.indexOf(":") + 1);
+ constraints.put(nodeId, rule);
+ }
+ String result = inject(json, constraints);
+ response.setContentType("application/json");
+ log.debug("injecting");
+ for (Map.Entry<String, String> entry: constraints.entrySet()) {
+ log.debug(entry.getKey() + " " + entry.getValue());
+ }
+ log.debug(result);
+ log.debug("End of injecting");
+ response.setContentLength(result.length());
+ response.getOutputStream().write(result.getBytes());
+ response.getOutputStream().close();
+ } catch (Throwable t) {
+ throw new ServletException(t);
+ }
} else {
- throw new ServletException(new IllegalArgumentException("The servlet requires a parameter named action"));
+ throw new ServletException(new IllegalArgumentException("The servlet requires a parameter named action"));
}
}
@@ -134,5 +197,82 @@
}
}
}
+
+ public static Map<String, String[]> extract(String json) throws Exception {
+ Map<String, String[]> result = null;
+ String xml = BPMN2ProcessHandler.serialize(
+ "http://localhost:8080/designer/bpmn2_0serialization", json);
+ Reader isr = new StringReader(xml);
+ SemanticModules semanticModules = new SemanticModules();
+ semanticModules.addSemanticModule(new BPMNSemanticModule());
+ semanticModules.addSemanticModule(new BPMNDISemanticModule());
+ semanticModules.addSemanticModule(new org.drools.bpmn2.legacy.beta1.BPMNSemanticModule());
+ semanticModules.addSemanticModule(new org.drools.bpmn2.legacy.beta1.BPMN2SemanticModule());
+ semanticModules.addSemanticModule(new org.drools.bpmn2.legacy.beta1.BPMNDISemanticModule());
+ XmlProcessReader xmlReader = new XmlProcessReader(semanticModules);
+ RuleFlowProcess process = (RuleFlowProcess) xmlReader.read(isr);
+ if (process == null) {
+ throw new IllegalArgumentException("Could not read process");
+ } else {
+ log.debug("Processing " + process.getId());
+ result = new HashMap<String, String[]>();
+ StartNode start = process.getStart();
+ Node target = start.getTo().getTo();
+ if (target instanceof Split) {
+ Split split = (Split) target;
+ for (Connection connection: split.getDefaultOutgoingConnections()) {
+ Constraint constraint = split.getConstraint(connection);
+ if (constraint != null) {
+ System.out.println("Found constraint to node " + connection.getTo().getName() + " [" + connection.getTo().getId() + "]: " + constraint.getConstraint());
+ result.put(XmlBPMNProcessDumper.getUniqueNodeId(connection.getTo()), new String[] { connection.getTo().getName(), constraint.getConstraint() });
+ }
+ }
+ }
+ }
+ if (isr != null) {
+ isr.close();
+ }
+ return result;
+ }
+
+ public static String inject(String json, Map<String, String> constraints) throws Exception {
+ String xml = BPMN2ProcessHandler.serialize(
+ "http://localhost:8080/designer/bpmn2_0serialization", json);
+ Reader isr = new StringReader(xml);
+ SemanticModules semanticModules = new SemanticModules();
+ semanticModules.addSemanticModule(new BPMNSemanticModule());
+ semanticModules.addSemanticModule(new BPMNDISemanticModule());
+ semanticModules.addSemanticModule(new org.drools.bpmn2.legacy.beta1.BPMNSemanticModule());
+ semanticModules.addSemanticModule(new org.drools.bpmn2.legacy.beta1.BPMN2SemanticModule());
+ semanticModules.addSemanticModule(new org.drools.bpmn2.legacy.beta1.BPMNDISemanticModule());
+ XmlProcessReader xmlReader = new XmlProcessReader(semanticModules);
+ RuleFlowProcess process = (RuleFlowProcess) xmlReader.read(isr);
+ isr.close();
+ if (process == null) {
+ throw new IllegalArgumentException("Could not read process");
+ } else {
+ log.debug("Processing " + process.getId());
+ StartNode start = process.getStart();
+ Node target = start.getTo().getTo();
+ if (target instanceof Split) {
+ Split split = (Split) target;
+ for (Connection connection: split.getDefaultOutgoingConnections()) {
+ String s = constraints.get(XmlBPMNProcessDumper.getUniqueNodeId(connection.getTo()));
+ if (s != null) {
+ System.out.println("Found constraint to node " + connection.getTo().getName() + ": " + s);
+ Constraint constraint = split.getConstraint(connection);
+ if (constraint == null) {
+ constraint = new ConstraintImpl();
+ split.setConstraint(connection, constraint);
+ }
+ constraint.setConstraint(s);
+ }
+ }
+ }
+ String newXml = XmlBPMNProcessDumper.INSTANCE.dump(process);
+ System.out.println(newXml);
+ return deserialize("http://localhost:8080/designer/bpmn2_0deserialization", newXml);
+ }
+ }
}
More information about the jboss-svn-commits
mailing list