[jboss-svn-commits] JBL Code SVN: r23587 - in labs/jbossrules/trunk/drools-server/src: test/java/org/drools/server and 2 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Sun Oct 26 03:58:20 EDT 2008
Author: michael.neale at jboss.com
Date: 2008-10-26 03:58:18 -0400 (Sun, 26 Oct 2008)
New Revision: 23587
Added:
labs/jbossrules/trunk/drools-server/src/main/java/org/drools/server/QueryType.java
labs/jbossrules/trunk/drools-server/src/test/java/org/drools/server/InsertedFact.java
labs/jbossrules/trunk/drools-server/src/test/java/org/drools/server/QueryKnowledgeServiceServletTest.java
labs/jbossrules/trunk/drools-server/src/test/java/org/drools/server/QueryTypeToXmlTest.java
labs/jbossrules/trunk/drools-server/src/test/resources/org/drools/server/sample_query_request.xml
labs/jbossrules/trunk/drools-server/src/test/resources/org/drools/server/test_query_rules1.drl
labs/jbossrules/trunk/drools-server/src/test/resources/testservice2.properties
Modified:
labs/jbossrules/trunk/drools-server/src/main/java/org/drools/server/KnowledgeStatelessServlet.java
labs/jbossrules/trunk/drools-server/src/main/java/org/drools/server/ServiceRequestMessage.java
labs/jbossrules/trunk/drools-server/src/main/java/org/drools/server/ServiceResponseMessage.java
Log:
added Ross' query goodness to the stateless service
Modified: labs/jbossrules/trunk/drools-server/src/main/java/org/drools/server/KnowledgeStatelessServlet.java
===================================================================
--- labs/jbossrules/trunk/drools-server/src/main/java/org/drools/server/KnowledgeStatelessServlet.java 2008-10-26 07:18:50 UTC (rev 23586)
+++ labs/jbossrules/trunk/drools-server/src/main/java/org/drools/server/KnowledgeStatelessServlet.java 2008-10-26 07:58:18 UTC (rev 23587)
@@ -5,6 +5,7 @@
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.HashMap;
+import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
@@ -18,8 +19,11 @@
import javax.servlet.http.HttpServletResponse;
import org.drools.Person;
+import org.drools.QueryResult;
+import org.drools.QueryResults;
import org.drools.RuleBase;
import org.drools.StatelessSession;
+import org.drools.StatelessSessionResult;
import org.drools.agent.RuleAgent;
import org.drools.common.InternalRuleBase;
@@ -80,6 +84,9 @@
} catch (ConversionException e) {
e.printStackTrace();
resp.sendError(HttpServletResponse.SC_NOT_ACCEPTABLE, "Unable to convert. Error: " + e.getMessage() );
+ } catch (IllegalArgumentException e) {
+ e.printStackTrace();
+ resp.sendError(HttpServletResponse.SC_NOT_ACCEPTABLE, "Unable to process request. Error: " + e.getMessage() );
}
}
@@ -143,6 +150,7 @@
}
session.execute(facts);
+ StatelessSessionResult ssr = session.executeWithResults(facts);
ServiceResponseMessage res = new ServiceResponseMessage();
if (req.globals != null) {
@@ -151,6 +159,9 @@
if (req.inOutFacts != null) {
res.inOutFacts = req.inOutFacts;
}
+ if (req.queries != null) {
+ res.outFacts = processQueries(req.queries, ssr);
+ }
xs.toXML(res, outputStream);
@@ -161,6 +172,27 @@
}
}
+ private NamedFact[] processQueries(QueryType[] queries, StatelessSessionResult ssr)
+ throws IllegalArgumentException
+ {
+ List<NamedFact> queryFacts = new ArrayList<NamedFact>();
+
+ for (QueryType qt : queries) {
+ QueryResults qResults = ssr.getQueryResults(qt.queryName, qt.args);
+ Iterator<QueryResult> qIter = qResults.iterator();
+ while (qIter.hasNext()) {
+ QueryResult qResult = qIter.next();
+ for (String factName : qt.factNames) {
+ queryFacts.add(new NamedFact(factName, qResult.get(factName)));
+ }
+ }
+ }
+
+ if (queryFacts.size() == 0)
+ return null;
+ else
+ return (NamedFact[]) queryFacts.toArray(new NamedFact[queryFacts.size()]);
+ }
static XStream configureXStream(boolean json) {
if (json) {
@@ -180,6 +212,7 @@
xs.alias("knowledgebase-response", ServiceResponseMessage.class);
xs.alias("named-fact", NamedFact.class);
xs.alias("anon-fact", AnonFact.class);
+ xs.alias("query-type", QueryType.class);
}
Added: labs/jbossrules/trunk/drools-server/src/main/java/org/drools/server/QueryType.java
===================================================================
--- labs/jbossrules/trunk/drools-server/src/main/java/org/drools/server/QueryType.java (rev 0)
+++ labs/jbossrules/trunk/drools-server/src/main/java/org/drools/server/QueryType.java 2008-10-26 07:58:18 UTC (rev 23587)
@@ -0,0 +1,16 @@
+package org.drools.server;
+
+public class QueryType {
+
+ public String queryName;
+ public String[] factNames;
+ public Object[] args;
+
+ public QueryType(String queryName, String[] factNames, Object[] args) {
+ super();
+ this.queryName = queryName;
+ this.factNames = factNames;
+ this.args = args;
+ }
+
+}
Property changes on: labs/jbossrules/trunk/drools-server/src/main/java/org/drools/server/QueryType.java
___________________________________________________________________
Name: svn:eol-style
+ native
Modified: labs/jbossrules/trunk/drools-server/src/main/java/org/drools/server/ServiceRequestMessage.java
===================================================================
--- labs/jbossrules/trunk/drools-server/src/main/java/org/drools/server/ServiceRequestMessage.java 2008-10-26 07:18:50 UTC (rev 23586)
+++ labs/jbossrules/trunk/drools-server/src/main/java/org/drools/server/ServiceRequestMessage.java 2008-10-26 07:58:18 UTC (rev 23587)
@@ -2,6 +2,7 @@
public class ServiceRequestMessage {
+ public QueryType[] queries;
public NamedFact[] globals;
public NamedFact[] inOutFacts;
public AnonFact[] inFacts;
Modified: labs/jbossrules/trunk/drools-server/src/main/java/org/drools/server/ServiceResponseMessage.java
===================================================================
--- labs/jbossrules/trunk/drools-server/src/main/java/org/drools/server/ServiceResponseMessage.java 2008-10-26 07:18:50 UTC (rev 23586)
+++ labs/jbossrules/trunk/drools-server/src/main/java/org/drools/server/ServiceResponseMessage.java 2008-10-26 07:58:18 UTC (rev 23587)
@@ -5,4 +5,5 @@
public class ServiceResponseMessage {
public NamedFact[] globals;
public NamedFact[] inOutFacts;
+ public NamedFact[] outFacts;
}
Added: labs/jbossrules/trunk/drools-server/src/test/java/org/drools/server/InsertedFact.java
===================================================================
--- labs/jbossrules/trunk/drools-server/src/test/java/org/drools/server/InsertedFact.java (rev 0)
+++ labs/jbossrules/trunk/drools-server/src/test/java/org/drools/server/InsertedFact.java 2008-10-26 07:58:18 UTC (rev 23587)
@@ -0,0 +1,20 @@
+package org.drools.server;
+
+public class InsertedFact {
+
+ String name;
+
+ public InsertedFact(String name) {
+ super();
+ this.name = name;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+}
Property changes on: labs/jbossrules/trunk/drools-server/src/test/java/org/drools/server/InsertedFact.java
___________________________________________________________________
Name: svn:eol-style
+ native
Added: labs/jbossrules/trunk/drools-server/src/test/java/org/drools/server/QueryKnowledgeServiceServletTest.java
===================================================================
--- labs/jbossrules/trunk/drools-server/src/test/java/org/drools/server/QueryKnowledgeServiceServletTest.java (rev 0)
+++ labs/jbossrules/trunk/drools-server/src/test/java/org/drools/server/QueryKnowledgeServiceServletTest.java 2008-10-26 07:58:18 UTC (rev 23587)
@@ -0,0 +1,70 @@
+package org.drools.server;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.OutputStream;
+import java.util.regex.Matcher;
+
+import javax.servlet.http.HttpServletResponse;
+
+import junit.framework.TestCase;
+
+import org.drools.RuleBase;
+import org.drools.RuleBaseFactory;
+import org.drools.common.InternalRuleBase;
+import org.drools.compiler.PackageBuilder;
+
+import com.thoughtworks.xstream.XStream;
+
+
+public class QueryKnowledgeServiceServletTest extends TestCase {
+
+ public void testEndToEndIntegration() throws Exception {
+ File source = new File("TestService2.drl");
+ if (source.exists()) {
+ System.err.println("Deleting !");
+ source.delete();
+ }
+ try {
+ InputStream original = getClass().getResourceAsStream("test_query_rules1.drl");
+ copy(original, source);
+ Thread.sleep(120);
+ StubbedServlet serv = new StubbedServlet();
+ final InputStream inXML = getClass().getResourceAsStream("sample_query_request.xml");
+ ByteArrayOutputStream outStream = new ByteArrayOutputStream();
+ serv.inputStream = inXML;
+ serv.outputStream = outStream;
+
+ MockHTTPResponse resp = new MockHTTPResponse();
+ serv.doPost(new MockHttpRequest("something/knowledgebase/testservice2", "application/xml"), resp);
+
+ String resultXML = new String(outStream.toByteArray());
+ System.out.println("\nResult:\n" + resultXML);
+
+ assertTrue(resultXML.indexOf("<value>42</value>") > -1);
+ assertEquals("application/xml", resp.contentType);
+
+ } finally {
+ source.delete();
+ }
+ }
+
+ void copy(InputStream in, File dst) throws IOException {
+ OutputStream out = new FileOutputStream(dst);
+
+ // Transfer bytes from in to out
+ byte[] buf = new byte[1024];
+ int len;
+ while ((len = in.read(buf)) > 0) {
+ out.write(buf, 0, len);
+ }
+ in.close();
+ out.close();
+ }
+
+}
Property changes on: labs/jbossrules/trunk/drools-server/src/test/java/org/drools/server/QueryKnowledgeServiceServletTest.java
___________________________________________________________________
Name: svn:eol-style
+ native
Added: labs/jbossrules/trunk/drools-server/src/test/java/org/drools/server/QueryTypeToXmlTest.java
===================================================================
--- labs/jbossrules/trunk/drools-server/src/test/java/org/drools/server/QueryTypeToXmlTest.java (rev 0)
+++ labs/jbossrules/trunk/drools-server/src/test/java/org/drools/server/QueryTypeToXmlTest.java 2008-10-26 07:58:18 UTC (rev 23587)
@@ -0,0 +1,33 @@
+package org.drools.server;
+
+import junit.framework.TestCase;
+
+import com.thoughtworks.xstream.XStream;
+
+public class QueryTypeToXmlTest extends TestCase {
+
+ public void testSimpleQueryType() throws Exception {
+
+ String[] factNames = {"fact1", "fact2" };
+ Object[] args = { new Integer(1), new Integer(2) };
+
+ QueryType qt = new QueryType("MyQuery", factNames, args);
+
+ XStream xstream = new XStream();
+ xstream.alias("query-type", QueryType.class);
+
+ System.out.println(xstream.toXML(qt));
+ }
+
+ public void testEmptyQueryType() throws Exception {
+
+ QueryType qt = new QueryType("MyEmptyQuery", null, null);
+
+ XStream xstream = new XStream();
+ xstream.alias("query-type", QueryType.class);
+
+ System.out.println(xstream.toXML(qt));
+
+ }
+
+}
Property changes on: labs/jbossrules/trunk/drools-server/src/test/java/org/drools/server/QueryTypeToXmlTest.java
___________________________________________________________________
Name: svn:eol-style
+ native
Added: labs/jbossrules/trunk/drools-server/src/test/resources/org/drools/server/sample_query_request.xml
===================================================================
--- labs/jbossrules/trunk/drools-server/src/test/resources/org/drools/server/sample_query_request.xml (rev 0)
+++ labs/jbossrules/trunk/drools-server/src/test/resources/org/drools/server/sample_query_request.xml 2008-10-26 07:58:18 UTC (rev 23587)
@@ -0,0 +1,41 @@
+<knowledgebase-request>
+ <queries>
+ <query-type>
+ <queryName>Get all inserted facts</queryName>
+ <factNames>
+ <string>insf</string>
+ </factNames>
+ </query-type>
+ <query-type>
+ <queryName>Get named inserted fact</queryName>
+ <factNames>
+ <string>ninsf</string>
+ </factNames>
+ <args>
+ <string>three</string>
+ </args>
+ </query-type>
+ </queries>
+ <globals>
+ <named-fact>
+ <id>prs</id>
+ <fact class="org.drools.Person">
+ <name>Jo</name>
+ </fact>
+ </named-fact>
+ </globals>
+ <inOutFacts>
+ <named-fact>
+ <id>result</id>
+ <fact class="something.Result"/>
+ </named-fact>
+ </inOutFacts>
+ <inFacts>
+ <anon-fact>
+ <fact class="something.Car">
+ <name>saab</name>
+ <type>wagon</type>
+ </fact>
+ </anon-fact>
+ </inFacts>
+</knowledgebase-request>
\ No newline at end of file
Property changes on: labs/jbossrules/trunk/drools-server/src/test/resources/org/drools/server/sample_query_request.xml
___________________________________________________________________
Name: svn:eol-style
+ native
Added: labs/jbossrules/trunk/drools-server/src/test/resources/org/drools/server/test_query_rules1.drl
===================================================================
--- labs/jbossrules/trunk/drools-server/src/test/resources/org/drools/server/test_query_rules1.drl (rev 0)
+++ labs/jbossrules/trunk/drools-server/src/test/resources/org/drools/server/test_query_rules1.drl 2008-10-26 07:58:18 UTC (rev 23587)
@@ -0,0 +1,67 @@
+package something
+
+import org.drools.server.InsertedFact;
+
+global org.drools.Person prs
+
+declare Car
+ name: String
+ type: String
+end
+
+declare Result
+ value: Integer
+ explanation: String
+end
+
+query "Get all inserted facts"
+ insf : InsertedFact ()
+end
+
+query "Get named inserted fact" (String a)
+ ninsf : InsertedFact ( name == a )
+end
+
+rule "wagons"
+ dialect "mvel"
+ when
+ Car(name == "saab", type == "wagon")
+ r: Result()
+ then
+ r.value = 42
+ r.explanation = "just cause it is"
+end
+
+rule "cars"
+ dialect "mvel"
+ when
+ Car(type=="car")
+ r: Result()
+ then
+ r.value = 40
+ r.explanation = "not as useful"
+end
+
+rule "another"
+ when
+ Car()
+ then
+ System.out.println("Firing Car rule");
+ prs.setStatus("crazy");
+end
+
+rule "insert a single fact"
+ when
+
+ then
+ insert (new InsertedFact("one"));
+end
+
+rule "insert several new facts"
+ when
+
+ then
+ insert (new InsertedFact("two"));
+ insert (new InsertedFact("three"));
+end
+
Property changes on: labs/jbossrules/trunk/drools-server/src/test/resources/org/drools/server/test_query_rules1.drl
___________________________________________________________________
Name: svn:eol-style
+ native
Added: labs/jbossrules/trunk/drools-server/src/test/resources/testservice2.properties
===================================================================
--- labs/jbossrules/trunk/drools-server/src/test/resources/testservice2.properties (rev 0)
+++ labs/jbossrules/trunk/drools-server/src/test/resources/testservice2.properties 2008-10-26 07:58:18 UTC (rev 23587)
@@ -0,0 +1,2 @@
+newInstance=true
+file=TestService2.drl
\ No newline at end of file
Property changes on: labs/jbossrules/trunk/drools-server/src/test/resources/testservice2.properties
___________________________________________________________________
Name: svn:eol-style
+ native
More information about the jboss-svn-commits
mailing list