[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