[jboss-svn-commits] JBL Code SVN: r30357 - in labs/jbossrules/trunk/drools-pipeline: drools-camel and 15 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu Nov 26 15:53:22 EST 2009


Author: salaboy21
Date: 2009-11-26 15:53:22 -0500 (Thu, 26 Nov 2009)
New Revision: 30357

Added:
   labs/jbossrules/trunk/drools-pipeline/drools-camel/
   labs/jbossrules/trunk/drools-pipeline/drools-camel/pom.xml
   labs/jbossrules/trunk/drools-pipeline/drools-camel/src/
   labs/jbossrules/trunk/drools-pipeline/drools-camel/src/main/
   labs/jbossrules/trunk/drools-pipeline/drools-camel/src/main/java/
   labs/jbossrules/trunk/drools-pipeline/drools-camel/src/main/java/org/
   labs/jbossrules/trunk/drools-pipeline/drools-camel/src/main/java/org/drools/
   labs/jbossrules/trunk/drools-pipeline/drools-camel/src/main/java/org/drools/pipeline/
   labs/jbossrules/trunk/drools-pipeline/drools-camel/src/main/java/org/drools/pipeline/camel/
   labs/jbossrules/trunk/drools-pipeline/drools-camel/src/main/java/org/drools/pipeline/camel/AssignResultProcessor.java
   labs/jbossrules/trunk/drools-pipeline/drools-camel/src/main/java/org/drools/pipeline/camel/BatchExecutorProcessor.java
   labs/jbossrules/trunk/drools-pipeline/drools-camel/src/main/java/org/drools/pipeline/camel/CamelServiceManagerPipelineImpl.java
   labs/jbossrules/trunk/drools-pipeline/drools-camel/src/main/java/org/drools/pipeline/camel/CamelXStreamFromXmlVsmTransformer.java
   labs/jbossrules/trunk/drools-pipeline/drools-camel/src/main/java/org/drools/pipeline/camel/CamelXStreamToXmlVsmTransformer.java
   labs/jbossrules/trunk/drools-pipeline/drools-camel/src/main/java/org/drools/pipeline/camel/ExecuteResultProcessor.java
   labs/jbossrules/trunk/drools-pipeline/drools-camel/src/main/java/org/drools/pipeline/camel/ToXmlNodeTransformer.java
   labs/jbossrules/trunk/drools-pipeline/drools-camel/src/main/java/org/drools/pipeline/camel/helper/
   labs/jbossrules/trunk/drools-pipeline/drools-camel/src/main/java/org/drools/pipeline/camel/helper/MyXstreamLookupStrategy.java
   labs/jbossrules/trunk/drools-pipeline/drools-camel/src/main/resources/
   labs/jbossrules/trunk/drools-pipeline/drools-camel/src/test/
   labs/jbossrules/trunk/drools-pipeline/drools-camel/src/test/java/
   labs/jbossrules/trunk/drools-pipeline/drools-camel/src/test/java/org/
   labs/jbossrules/trunk/drools-pipeline/drools-camel/src/test/java/org/drools/
   labs/jbossrules/trunk/drools-pipeline/drools-camel/src/test/java/org/drools/pipeline/
   labs/jbossrules/trunk/drools-pipeline/drools-camel/src/test/java/org/drools/pipeline/camel/
   labs/jbossrules/trunk/drools-pipeline/drools-camel/src/test/java/org/drools/pipeline/camel/CamelPipelineTest.java
   labs/jbossrules/trunk/drools-pipeline/drools-camel/src/test/java/org/drools/pipeline/camel/Person.java
   labs/jbossrules/trunk/drools-pipeline/drools-camel/src/test/resources/
   labs/jbossrules/trunk/drools-pipeline/drools-camel/src/test/resources/applicationContext.xml
Log:
JBRULES-2347 Drools Pipeline integration with Camel
	- Initial commit of Camel integration


Property changes on: labs/jbossrules/trunk/drools-pipeline/drools-camel
___________________________________________________________________
Name: svn:ignore
   + target


Added: labs/jbossrules/trunk/drools-pipeline/drools-camel/pom.xml
===================================================================
--- labs/jbossrules/trunk/drools-pipeline/drools-camel/pom.xml	                        (rev 0)
+++ labs/jbossrules/trunk/drools-pipeline/drools-camel/pom.xml	2009-11-26 20:53:22 UTC (rev 30357)
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project>
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <artifactId>drools-pipeline</artifactId>
+        <groupId>org.drools</groupId>
+        <version>5.1.0.SNAPSHOT</version>
+    </parent>
+  
+    <artifactId>drools-camel</artifactId>
+    <name>Drools :: Pipeline :: Camel </name>
+  
+    <dependencies>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <version>3.8.1</version>
+            <scope>test</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.drools</groupId>
+            <artifactId>drools-core</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.drools</groupId>
+            <artifactId>drools-compiler</artifactId>
+            <version>${project.version}</version>
+            <scope>test</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.drools</groupId>
+            <artifactId>drools-vsm</artifactId>
+            <version>${project.version}</version>
+            <scope>test</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.drools</groupId>
+            <artifactId>drools-transformer-xstream</artifactId>
+            <version>5.1.0.SNAPSHOT</version>
+        </dependency>
+
+         <dependency>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-core</artifactId>
+            <version>2.0.0</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-spring</artifactId>
+            <version>2.0.0</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring</artifactId>
+            <version>2.5.5</version>
+        </dependency>
+        <dependency>
+            <groupId>xmlunit</groupId>
+            <artifactId>xmlunit</artifactId>
+            <version>1.2</version>
+
+        </dependency>
+
+    </dependencies>
+</project>

Added: labs/jbossrules/trunk/drools-pipeline/drools-camel/src/main/java/org/drools/pipeline/camel/AssignResultProcessor.java
===================================================================
--- labs/jbossrules/trunk/drools-pipeline/drools-camel/src/main/java/org/drools/pipeline/camel/AssignResultProcessor.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-pipeline/drools-camel/src/main/java/org/drools/pipeline/camel/AssignResultProcessor.java	2009-11-26 20:53:22 UTC (rev 30357)
@@ -0,0 +1,36 @@
+/*
+ *  Copyright 2009 salaboy.
+ * 
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ * 
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *  under the License.
+ */
+package org.drools.pipeline.camel;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
+import org.drools.runtime.pipeline.PipelineContext;
+import org.drools.runtime.pipeline.PipelineFactory;
+import org.drools.runtime.pipeline.impl.AssignObjectAsResult;
+
+/**
+ *
+ * @author salaboy
+ */
+public class AssignResultProcessor implements Processor {
+
+    public void process(Exchange exchange) throws Exception {
+        AssignObjectAsResult assignResult = (AssignObjectAsResult) PipelineFactory.newAssignObjectAsResult();
+        assignResult.assignResult((PipelineContext) exchange.getProperty("drools-context"), exchange.getIn().getBody());
+
+    }
+}

Added: labs/jbossrules/trunk/drools-pipeline/drools-camel/src/main/java/org/drools/pipeline/camel/BatchExecutorProcessor.java
===================================================================
--- labs/jbossrules/trunk/drools-pipeline/drools-camel/src/main/java/org/drools/pipeline/camel/BatchExecutorProcessor.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-pipeline/drools-camel/src/main/java/org/drools/pipeline/camel/BatchExecutorProcessor.java	2009-11-26 20:53:22 UTC (rev 30357)
@@ -0,0 +1,41 @@
+/*
+ *  Copyright 2009 salaboy.
+ * 
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ * 
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *  under the License.
+ */
+package org.drools.pipeline.camel;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
+import org.drools.runtime.ExecutionResults;
+import org.drools.runtime.pipeline.PipelineContext;
+import org.drools.runtime.pipeline.PipelineFactory;
+import org.drools.runtime.pipeline.impl.ExecutorStage;
+
+/**
+ *
+ * @author salaboy
+ */
+public class BatchExecutorProcessor implements Processor{
+
+    public BatchExecutorProcessor() {
+    }
+
+    
+    public void process(Exchange exchange) {
+        ExecutorStage batchExecution = (ExecutorStage) PipelineFactory.newCommandExecutor();
+        ExecutionResults results = batchExecution.execute(exchange.getIn().getBody(), (PipelineContext) exchange.getProperty("drools-context"));
+        exchange.getIn().setBody(results);
+    }
+}

Added: labs/jbossrules/trunk/drools-pipeline/drools-camel/src/main/java/org/drools/pipeline/camel/CamelServiceManagerPipelineImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-pipeline/drools-camel/src/main/java/org/drools/pipeline/camel/CamelServiceManagerPipelineImpl.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-pipeline/drools-camel/src/main/java/org/drools/pipeline/camel/CamelServiceManagerPipelineImpl.java	2009-11-26 20:53:22 UTC (rev 30357)
@@ -0,0 +1,77 @@
+/*
+ *  Copyright 2009 salaboy.
+ * 
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ * 
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *  under the License.
+ */
+
+package org.drools.pipeline.camel;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.impl.DefaultCamelContext;
+import org.drools.runtime.pipeline.Pipeline;
+import org.drools.runtime.pipeline.Receiver;
+import org.drools.runtime.pipeline.ResultHandler;
+import org.drools.runtime.pipeline.StageExceptionHandler;
+import org.drools.runtime.pipeline.impl.ServiceManagerPipelineContextImpl;
+import org.drools.runtime.pipeline.impl.XStreamResolverStrategy;
+import org.drools.vsm.ServiceManager;
+
+/**
+ *
+ * @author salaboy
+ */
+public class CamelServiceManagerPipelineImpl implements Pipeline {
+
+    private ServiceManager sm;
+    private CamelContext camelContext;
+    private ProducerTemplate template;
+    
+
+    public CamelServiceManagerPipelineImpl(ServiceManager sm, CamelContext context) {
+        this.sm = sm;
+        this.camelContext = context;
+        this.template = camelContext.createProducerTemplate();
+
+    }
+
+
+    public void startCamel() throws Exception{
+        this.camelContext.start();
+        this.template.start();
+    }
+
+    public void insert(Object object, ResultHandler resultHandler) {
+
+        template.sendBodyAndProperty("direct:start", (String)object,"drools-context",new ServiceManagerPipelineContextImpl(sm,null,resultHandler));
+    }
+
+    public void setStageExceptionHandler(StageExceptionHandler exceptionHandler) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public void setReceiver(Receiver receiver) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public Receiver getReceiver() {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    public CamelContext getCamelContext() {
+        return camelContext;
+    }
+    
+}

Added: labs/jbossrules/trunk/drools-pipeline/drools-camel/src/main/java/org/drools/pipeline/camel/CamelXStreamFromXmlVsmTransformer.java
===================================================================
--- labs/jbossrules/trunk/drools-pipeline/drools-camel/src/main/java/org/drools/pipeline/camel/CamelXStreamFromXmlVsmTransformer.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-pipeline/drools-camel/src/main/java/org/drools/pipeline/camel/CamelXStreamFromXmlVsmTransformer.java	2009-11-26 20:53:22 UTC (rev 30357)
@@ -0,0 +1,44 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package org.drools.pipeline.camel;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
+import org.drools.runtime.pipeline.PipelineContext;
+import org.drools.runtime.pipeline.ResultHandler;
+import org.drools.runtime.pipeline.impl.XStreamFromXmlVsmTransformer;
+import org.drools.runtime.pipeline.impl.XStreamResolverStrategy;
+import org.drools.vsm.ServiceManager;
+
+/**
+ *
+ * @author salaboy
+ */
+public class CamelXStreamFromXmlVsmTransformer implements Processor{
+    
+    private XStreamFromXmlVsmTransformer transformer;
+
+
+
+    public CamelXStreamFromXmlVsmTransformer(XStreamResolverStrategy xstreamStrategy) {
+
+        
+        this.transformer = new XStreamFromXmlVsmTransformer(xstreamStrategy);
+    }
+
+    public void process(Exchange exchange) throws Exception {
+        this.transformer.processPayload(exchange.getIn().getBody(), (PipelineContext)exchange.getProperty("drools-context"));
+        exchange.getIn().setBody(this.transformer.getPayload());
+        exchange.setProperty("drools-context",this.transformer.getContext() );
+    }
+
+   
+
+    
+
+    
+
+}

Added: labs/jbossrules/trunk/drools-pipeline/drools-camel/src/main/java/org/drools/pipeline/camel/CamelXStreamToXmlVsmTransformer.java
===================================================================
--- labs/jbossrules/trunk/drools-pipeline/drools-camel/src/main/java/org/drools/pipeline/camel/CamelXStreamToXmlVsmTransformer.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-pipeline/drools-camel/src/main/java/org/drools/pipeline/camel/CamelXStreamToXmlVsmTransformer.java	2009-11-26 20:53:22 UTC (rev 30357)
@@ -0,0 +1,31 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package org.drools.pipeline.camel;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
+import org.drools.runtime.pipeline.PipelineContext;
+import org.drools.runtime.pipeline.impl.XStreamToXmlVsmTransformer;
+
+/**
+ *
+ * @author salaboy
+ */
+class CamelXStreamToXmlVsmTransformer implements Processor {
+    private XStreamToXmlVsmTransformer transformer;
+    
+    public CamelXStreamToXmlVsmTransformer() {
+        
+        this.transformer = new XStreamToXmlVsmTransformer();
+    }
+
+    public void process(Exchange exchange) throws Exception {
+        Object result = this.transformer.transform((PipelineContext)exchange.getProperty("drools-context"), exchange.getIn().getBody());
+        exchange.getIn().setBody(result);
+
+    }
+
+}

Added: labs/jbossrules/trunk/drools-pipeline/drools-camel/src/main/java/org/drools/pipeline/camel/ExecuteResultProcessor.java
===================================================================
--- labs/jbossrules/trunk/drools-pipeline/drools-camel/src/main/java/org/drools/pipeline/camel/ExecuteResultProcessor.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-pipeline/drools-camel/src/main/java/org/drools/pipeline/camel/ExecuteResultProcessor.java	2009-11-26 20:53:22 UTC (rev 30357)
@@ -0,0 +1,36 @@
+/*
+ *  Copyright 2009 salaboy.
+ * 
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ * 
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *  under the License.
+ */
+package org.drools.pipeline.camel;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
+import org.drools.runtime.pipeline.PipelineContext;
+import org.drools.runtime.pipeline.PipelineFactory;
+import org.drools.runtime.pipeline.impl.ExecuteResultHandler;
+
+/**
+ *
+ * @author salaboy
+ */
+public class ExecuteResultProcessor implements Processor {
+
+    public void process(Exchange exchange) throws Exception {
+        ExecuteResultHandler executeResult = (ExecuteResultHandler) PipelineFactory.newExecuteResultHandler();
+        executeResult.handleResult((PipelineContext) exchange.getProperty("drools-context"), exchange.getIn().getBody());
+
+    }
+}

Added: labs/jbossrules/trunk/drools-pipeline/drools-camel/src/main/java/org/drools/pipeline/camel/ToXmlNodeTransformer.java
===================================================================
--- labs/jbossrules/trunk/drools-pipeline/drools-camel/src/main/java/org/drools/pipeline/camel/ToXmlNodeTransformer.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-pipeline/drools-camel/src/main/java/org/drools/pipeline/camel/ToXmlNodeTransformer.java	2009-11-26 20:53:22 UTC (rev 30357)
@@ -0,0 +1,62 @@
+package org.drools.pipeline.camel;
+
+import java.io.InputStream;
+import java.io.Reader;
+import java.io.StringReader;
+
+import javax.xml.parsers.DocumentBuilderFactory;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
+import org.drools.io.Resource;
+import org.drools.runtime.pipeline.PipelineContext;
+import org.drools.runtime.pipeline.Transformer;
+import org.drools.runtime.pipeline.impl.BaseEmitter;
+import org.w3c.dom.Document;
+import org.xml.sax.InputSource;
+
+public class ToXmlNodeTransformer extends BaseEmitter
+    implements
+    Transformer, Processor {
+
+    public void receive(Object object,
+                        PipelineContext context) {
+        Document d = processTranslate(object);
+
+        emit( d,
+              context );
+
+    }
+
+    public void process(Exchange exchange) throws Exception {
+        Document d = processTranslate(exchange.getIn().getBody());
+        exchange.getIn().setBody(d);
+    }
+
+    private Document processTranslate(Object object) {
+        // Create a DOM builder and parse the fragment
+        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+        Document d = null;
+        try {
+            d = factory.newDocumentBuilder().parse((InputSource) null);
+        } catch (Exception e) {
+        }
+        try {
+            if (object instanceof String) {
+                d = factory.newDocumentBuilder().parse(new InputSource(new StringReader((String) object)));
+            } else if (object instanceof Reader) {
+                d = factory.newDocumentBuilder().parse(new InputSource((Reader) object));
+            } else if (object instanceof InputStream) {
+                d = factory.newDocumentBuilder().parse((InputStream) object);
+            } else if (object instanceof Resource) {
+                d = factory.newDocumentBuilder().parse(new InputSource(((Resource) object).getReader()));
+            } else {
+                throw new IllegalArgumentException("signal object must be instance of InputStream or Resource");
+            }
+        } catch (Exception e) {
+            handleException(this, object, e);
+        }
+        return d;
+    }
+
+}

Added: labs/jbossrules/trunk/drools-pipeline/drools-camel/src/main/java/org/drools/pipeline/camel/helper/MyXstreamLookupStrategy.java
===================================================================
--- labs/jbossrules/trunk/drools-pipeline/drools-camel/src/main/java/org/drools/pipeline/camel/helper/MyXstreamLookupStrategy.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-pipeline/drools-camel/src/main/java/org/drools/pipeline/camel/helper/MyXstreamLookupStrategy.java	2009-11-26 20:53:22 UTC (rev 30357)
@@ -0,0 +1,35 @@
+/*
+ *  Copyright 2009 salaboy.
+ * 
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ * 
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *  under the License.
+ */
+package org.drools.pipeline.camel.helper;
+
+import com.thoughtworks.xstream.XStream;
+import org.drools.runtime.help.BatchExecutionHelper;
+import org.drools.runtime.pipeline.impl.XStreamResolverStrategy;
+
+/**
+ *
+ * @author salaboy
+ */
+public class MyXstreamLookupStrategy implements XStreamResolverStrategy {
+
+    public MyXstreamLookupStrategy() {
+    }
+
+    public XStream lookup(String name) {
+        return BatchExecutionHelper.newXStreamMarshaller();
+    }
+}

Added: labs/jbossrules/trunk/drools-pipeline/drools-camel/src/test/java/org/drools/pipeline/camel/CamelPipelineTest.java
===================================================================
--- labs/jbossrules/trunk/drools-pipeline/drools-camel/src/test/java/org/drools/pipeline/camel/CamelPipelineTest.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-pipeline/drools-camel/src/test/java/org/drools/pipeline/camel/CamelPipelineTest.java	2009-11-26 20:53:22 UTC (rev 30357)
@@ -0,0 +1,310 @@
+/*
+ *  Copyright 2009 salaboy.
+ * 
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ * 
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *  under the License.
+ */
+package org.drools.pipeline.camel;
+
+import com.thoughtworks.xstream.XStream;
+import java.util.Collection;
+import junit.framework.TestCase;
+import org.apache.camel.CamelContext;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.impl.DefaultCamelContext;
+import org.apache.camel.spring.SpringCamelContext;
+import org.custommonkey.xmlunit.Diff;
+import org.custommonkey.xmlunit.XMLAssert;
+import org.custommonkey.xmlunit.XMLUnit;
+import org.custommonkey.xmlunit.examples.RecursiveElementNameAndTextQualifier;
+import org.drools.FactHandle;
+import org.drools.KnowledgeBase;
+import org.drools.builder.KnowledgeBuilder;
+import org.drools.builder.ResourceType;
+import org.drools.common.InternalFactHandle;
+import org.drools.definition.KnowledgePackage;
+import org.drools.io.ResourceFactory;
+import org.drools.runtime.ExecutionResults;
+import org.drools.runtime.StatefulKnowledgeSession;
+import org.drools.runtime.help.BatchExecutionHelper;
+import org.drools.runtime.pipeline.Pipeline;
+import org.drools.runtime.pipeline.ResultHandler;
+import org.drools.runtime.pipeline.impl.XStreamResolverStrategy;
+import org.drools.vsm.ServiceManager;
+import org.drools.vsm.local.ServiceManagerLocalClient;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+
+/**
+ *
+ * @author salaboy
+ * @author lucaz
+ */
+public class CamelPipelineTest extends TestCase {
+
+    CamelContext camel = null;
+    private ClassPathXmlApplicationContext springCtx;
+
+    public CamelPipelineTest(String testName) {
+        super(testName);
+    }
+
+    @Override
+    protected void tearDown() throws Exception {
+        super.tearDown();
+    }
+
+    protected void setUp() throws Exception {
+        XMLUnit.setIgnoreComments(true);
+        XMLUnit.setIgnoreWhitespace(true);
+        XMLUnit.setIgnoreAttributeOrder(true);
+        XMLUnit.setNormalizeWhitespace(true);
+        XMLUnit.setNormalize(true);
+        springCtx = new ClassPathXmlApplicationContext("applicationContext.xml");
+    }
+
+    public void testCamelPipelineWithVSM() throws Exception {
+
+        String inXml = "";
+        inXml += "<batch-execution lookup=\"ksession1\" >";
+        inXml += "  <insert out-identifier='salaboy'>";
+        inXml += "    <org.drools.pipeline.camel.Person>";
+        inXml += "      <name>salaboy</name>";
+        inXml += "    </org.drools.pipeline.camel.Person>";
+        inXml += "  </insert>";
+        inXml += "  <fire-all-rules />";
+        inXml += "</batch-execution>";
+
+        String rule = "";
+        rule += "package org.drools.pipeline.camel;\n" +
+                "import org.drools.pipeline.camel.Person;\n" +
+                "rule 'Check for Person'\n" +
+                " when\n" +
+                "   $p: Person()\n" +
+                " then\n" +
+                "   System.out.println(\"Person Name: \" + $p.getName());\n" +
+                "end\n";
+
+
+        ServiceManager sm = new ServiceManagerLocalClient();
+
+        StatefulKnowledgeSession ksession = getVmsSessionStateful(sm, rule);
+
+        sm.register("ksession1",
+                ksession);
+
+        XStreamResolverStrategy xstreamStrategy = new XStreamResolverStrategy() {
+
+            public XStream lookup(String name) {
+                return BatchExecutionHelper.newXStreamMarshaller();
+            }
+        };
+
+        ResultHandlerImpl resultHandler = new ResultHandlerImpl();
+        getCamelPipelineVms(sm,
+                xstreamStrategy).insert(inXml,
+                resultHandler);
+
+
+
+        String outXml = (String) resultHandler.getObject();
+
+        ExecutionResults result = (ExecutionResults) BatchExecutionHelper.newXStreamMarshaller().fromXML(outXml);
+        Person person = (Person) result.getValue("salaboy");
+        assertEquals("salaboy",
+                person.getName());
+
+        FactHandle factHandle = (FactHandle) result.getFactHandle("salaboy");
+        person = (Person) ksession.getObject(factHandle);
+        assertEquals("salaboy",
+                person.getName());
+
+        String expectedXml = "";
+        expectedXml += "<execution-results>\n";
+        expectedXml += "  <result identifier=\"salaboy\">\n";
+        expectedXml += "    <org.drools.pipeline.camel.Person>\n";
+        expectedXml += "      <name>salaboy</name>\n";
+        expectedXml += "    </org.drools.pipeline.camel.Person>\n";
+        expectedXml += "  </result>\n";
+        expectedXml += "  <fact-handle identifier=\"salaboy\" externalForm=\"" + ((InternalFactHandle) result.getFactHandle("salaboy")).toExternalForm() + "\" /> \n";
+        expectedXml += "</execution-results>\n";
+
+        assertXMLEqual(expectedXml,
+                outXml);
+
+
+
+
+    }
+
+    public void testCamelPipelineWithVSMAndSpring() throws Exception {
+
+        String inXml = "";
+        inXml += "<batch-execution lookup=\"ksession1\" >";
+        inXml += "  <insert out-identifier='salaboy'>";
+        inXml += "    <org.drools.pipeline.camel.Person>";
+        inXml += "      <name>salaboy</name>";
+        inXml += "    </org.drools.pipeline.camel.Person>";
+        inXml += "  </insert>";
+        inXml += "  <fire-all-rules />";
+        inXml += "</batch-execution>";
+
+        String rule = "";
+        rule += "package org.drools.pipeline.camel;\n" +
+                "import org.drools.pipeline.camel.Person;\n" +
+                "rule 'Check for Person'\n" +
+                " when\n" +
+                "   $p: Person()\n" +
+                " then\n" +
+                "   System.out.println(\"Person Name: \" + $p.getName());\n" +
+                "end\n";
+
+        ServiceManager sm = new ServiceManagerLocalClient();
+
+        StatefulKnowledgeSession ksession = getVmsSessionStateful(sm, rule);
+
+        sm.register("ksession1",
+                ksession);
+
+
+        ResultHandlerImpl resultHandler = new ResultHandlerImpl();
+
+        getCamelPipelineVmsSpring(sm).insert(inXml, resultHandler);
+        String outXml = (String) resultHandler.getObject();
+
+        ExecutionResults result = (ExecutionResults) BatchExecutionHelper.newXStreamMarshaller().fromXML(outXml);
+        Person person = (Person) result.getValue("salaboy");
+        assertEquals("salaboy",
+                person.getName());
+
+        FactHandle factHandle = (FactHandle) result.getFactHandle("salaboy");
+        person = (Person) ksession.getObject(factHandle);
+        assertEquals("salaboy",
+                person.getName());
+
+        String expectedXml = "";
+        expectedXml += "<execution-results>\n";
+        expectedXml += "  <result identifier=\"salaboy\">\n";
+        expectedXml += "    <org.drools.pipeline.camel.Person>\n";
+        expectedXml += "      <name>salaboy</name>\n";
+        expectedXml += "    </org.drools.pipeline.camel.Person>\n";
+        expectedXml += "  </result>\n";
+        expectedXml += "  <fact-handle identifier=\"salaboy\" externalForm=\"" + ((InternalFactHandle) result.getFactHandle("salaboy")).toExternalForm() + "\" /> \n";
+        expectedXml += "</execution-results>\n";
+
+        assertXMLEqual(expectedXml,
+                outXml);
+
+
+    }
+
+    private StatefulKnowledgeSession getVmsSessionStateful(ServiceManager sm,
+            String rule) throws Exception {
+        KnowledgeBuilder kbuilder = sm.getKnowledgeBuilderFactory().newKnowledgeBuilder();
+        kbuilder.add(ResourceFactory.newByteArrayResource(rule.getBytes()),
+                ResourceType.DRL);
+
+        if (kbuilder.hasErrors()) {
+            System.out.println(kbuilder.getErrors());
+        }
+
+        assertFalse(kbuilder.hasErrors());
+        Collection<KnowledgePackage> pkgs = kbuilder.getKnowledgePackages();
+
+        KnowledgeBase kbase = sm.getKnowledgeBaseFactory().newKnowledgeBase();
+
+        kbase.addKnowledgePackages(pkgs);
+        StatefulKnowledgeSession session = kbase.newStatefulKnowledgeSession();
+
+        return session;
+    }
+
+    private Pipeline getCamelPipelineVms(ServiceManager vsm, XStreamResolverStrategy xstreamStrategy) throws Exception {
+
+        Pipeline pipeline = new CamelServiceManagerPipelineImpl(vsm, new DefaultCamelContext());
+
+        ((CamelServiceManagerPipelineImpl) pipeline).getCamelContext().addRoutes(new PipelineRouteBuilder(vsm, xstreamStrategy));
+
+        ((CamelServiceManagerPipelineImpl) pipeline).startCamel();
+
+
+
+        return pipeline;
+    }
+
+    private Pipeline getCamelPipelineVmsSpring(ServiceManager vsm) throws Exception {
+
+        Pipeline pipeline = new CamelServiceManagerPipelineImpl(vsm, (SpringCamelContext) springCtx.getBean("camelContext"));
+
+        ((CamelServiceManagerPipelineImpl) pipeline).startCamel();
+
+
+
+        return pipeline;
+    }
+
+    public static class ResultHandlerImpl
+            implements
+            ResultHandler {
+
+        Object object;
+
+        public void handleResult(Object object) {
+            this.object = object;
+        }
+
+        public Object getObject() {
+            return this.object;
+        }
+    }
+
+    private void assertXMLEqual(String expectedXml,
+            String resultXml) {
+        try {
+            Diff diff = new Diff(expectedXml,
+                    resultXml);
+            diff.overrideElementQualifier(new RecursiveElementNameAndTextQualifier());
+            XMLAssert.assertXMLEqual(diff,
+                    true);
+        } catch (Exception e) {
+            throw new RuntimeException("XML Assertion failure",
+                    e);
+        }
+    }
+}
+
+class PipelineRouteBuilder extends RouteBuilder {
+
+    private XStreamResolverStrategy xstreamStrategy;
+
+    public PipelineRouteBuilder(ServiceManager vsm, XStreamResolverStrategy xstreamStrategy) {
+
+        this.xstreamStrategy = xstreamStrategy;
+
+
+    }
+
+    public void configure() {
+        // START SNIPPET: example
+        from("direct:start").process(new ToXmlNodeTransformer()).to("direct:xstreamTransformer");
+
+        from("direct:xstreamTransformer").process(new CamelXStreamFromXmlVsmTransformer(xstreamStrategy)).to("direct:executor");
+        from("direct:executor").process(new BatchExecutorProcessor()).to("direct:xstreamTransformerResult");
+
+        from("direct:xstreamTransformerResult").process(new CamelXStreamToXmlVsmTransformer()).to("direct:finalResult");
+
+        from("direct:finalResult").process(new AssignResultProcessor()).to("direct:executeResult");
+
+        from("direct:executeResult").process(new ExecuteResultProcessor());
+
+    }
+}

Added: labs/jbossrules/trunk/drools-pipeline/drools-camel/src/test/java/org/drools/pipeline/camel/Person.java
===================================================================
--- labs/jbossrules/trunk/drools-pipeline/drools-camel/src/test/java/org/drools/pipeline/camel/Person.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-pipeline/drools-camel/src/test/java/org/drools/pipeline/camel/Person.java	2009-11-26 20:53:22 UTC (rev 30357)
@@ -0,0 +1,29 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package org.drools.pipeline.camel;
+
+/**
+ *
+ * @author salaboy
+ */
+public class Person {
+    private String name;
+    //private Address address;
+
+    public Person() {
+    }
+
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+
+}

Added: labs/jbossrules/trunk/drools-pipeline/drools-camel/src/test/resources/applicationContext.xml
===================================================================
--- labs/jbossrules/trunk/drools-pipeline/drools-camel/src/test/resources/applicationContext.xml	                        (rev 0)
+++ labs/jbossrules/trunk/drools-pipeline/drools-camel/src/test/resources/applicationContext.xml	2009-11-26 20:53:22 UTC (rev 30357)
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<beans xmlns="http://www.springframework.org/schema/beans"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xmlns:camel="http://camel.apache.org/schema/spring"
+	xsi:schemaLocation="
+       http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
+       http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">
+
+	<bean id="xmlNodeTransformer" class="org.drools.pipeline.camel.ToXmlNodeTransformer" />
+	
+        <bean id="xstreamStrategy" class="org.drools.pipeline.camel.helper.MyXstreamLookupStrategy" />
+        <bean id="camelXStreamFromXmlVsmTransformer" class="org.drools.pipeline.camel.CamelXStreamFromXmlVsmTransformer" >
+           <constructor-arg ref="xstreamStrategy" />
+	</bean>
+	
+	<bean id="batchExecutorProcessor" class="org.drools.pipeline.camel.BatchExecutorProcessor" />
+
+	<bean id="camelXStreamToXmlVsmTransformer" class="org.drools.pipeline.camel.CamelXStreamToXmlVsmTransformer" />
+	
+	<bean id="assignResultProcessor" class="org.drools.pipeline.camel.AssignResultProcessor" />
+        
+        <bean id="executeResultProcessor" class="org.drools.pipeline.camel.ExecuteResultProcessor" />
+
+	<camel:camelContext id="camelContext">
+		<camel:route>
+			<camel:from uri="direct:start" />
+			<camel:process ref="xmlNodeTransformer" />
+			<camel:to uri="direct:xstreamTransformer" />
+		</camel:route>
+		<camel:route>
+			<camel:from uri="direct:xstreamTransformer" />
+			<camel:process ref="camelXStreamFromXmlVsmTransformer" />
+			<camel:to uri="direct:executor" />
+		</camel:route>
+		<camel:route>
+			<camel:from uri="direct:executor" />
+                        <camel:process ref="batchExecutorProcessor" />
+			<camel:to uri="direct:xstreamTransformerResult" />
+		</camel:route>
+		<camel:route>
+			<camel:from uri="direct:xstreamTransformerResult" />
+			<camel:process ref="camelXStreamToXmlVsmTransformer" />
+			<camel:to uri="direct:finalResult" />
+		</camel:route>
+		<camel:route>
+			<camel:from uri="direct:finalResult" />
+                        <camel:process ref="assignResultProcessor" />
+			<camel:to uri="direct:executeResult" />
+		</camel:route>
+		<camel:route>
+			<camel:from uri="direct:executeResult" />
+                        <camel:process ref="executeResultProcessor" />
+		</camel:route>
+	</camel:camelContext>
+	
+
+
+</beans>


Property changes on: labs/jbossrules/trunk/drools-pipeline/drools-camel/src/test/resources/applicationContext.xml
___________________________________________________________________
Name: svn:executable
   + *



More information about the jboss-svn-commits mailing list