[jboss-svn-commits] JBL Code SVN: r20924 - in labs/jbossrules/trunk: drools-dataloaders and 19 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Sat Jul 5 21:49:10 EDT 2008


Author: mark.proctor at jboss.com
Date: 2008-07-05 21:49:10 -0400 (Sat, 05 Jul 2008)
New Revision: 20924

Added:
   labs/jbossrules/trunk/drools-dataloaders/
   labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-smooks/
   labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-smooks/.classpath
   labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-smooks/.project
   labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-smooks/pom.xml
   labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-smooks/src/
   labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-smooks/src/main/
   labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-smooks/src/main/java/
   labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-smooks/src/main/java/org/
   labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-smooks/src/main/java/org/drools/
   labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-smooks/src/main/java/org/drools/dataloaders/
   labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-smooks/src/main/java/org/drools/dataloaders/smooks/
   labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-smooks/src/main/java/org/drools/dataloaders/smooks/DroolsSmooksConfiguration.java
   labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-smooks/src/main/java/org/drools/dataloaders/smooks/DroolsSmooksStatefulSession.java
   labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-smooks/src/main/java/org/drools/dataloaders/smooks/DroolsSmooksStatelessSession.java
   labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-smooks/src/main/java/org/drools/dataloaders/smooks/Root.java
   labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-smooks/src/main/resources/
   labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-smooks/src/test/
   labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-smooks/src/test/java/
   labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-smooks/src/test/java/org/
   labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-smooks/src/test/java/org/drools/
   labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-smooks/src/test/java/org/drools/dataloaders/
   labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-smooks/src/test/java/org/drools/dataloaders/smooks/
   labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-smooks/src/test/java/org/drools/dataloaders/smooks/DroolsSmookStatefulSessionTest.java
   labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-smooks/src/test/java/org/drools/dataloaders/smooks/DroolsSmookStatelessSessionTest.java
   labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-smooks/src/test/java/org/drools/dataloaders/smooks/test_SmooksDirectRoot.drl
   labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-smooks/src/test/java/org/drools/dataloaders/smooks/test_SmooksNestedIterable.drl
   labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-smooks/src/test/resources/
   labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-smooks/src/test/resources/org/
   labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-smooks/src/test/resources/org/drools/
   labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-smooks/src/test/resources/org/drools/dataloaders/
   labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-smooks/src/test/resources/org/drools/dataloaders/smooks/
   labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-smooks/src/test/resources/org/drools/dataloaders/smooks/SmooksDirectRoot.xml
   labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-smooks/src/test/resources/org/drools/dataloaders/smooks/SmooksNestedIterable.xml
   labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-smooks/src/test/resources/org/drools/dataloaders/smooks/smooks-config.xml
   labs/jbossrules/trunk/drools-dataloaders/pom.xml
Log:
JBRULES-1668 Smooks Data Loader
-First commit for a working Smooks Data Loader

Added: labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-smooks/.classpath
===================================================================
--- labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-smooks/.classpath	                        (rev 0)
+++ labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-smooks/.classpath	2008-07-06 01:49:10 UTC (rev 20924)
@@ -0,0 +1,25 @@
+<classpath>
+  <classpathentry kind="src" path="src/main/java"/>
+  <classpathentry kind="src" path="src/main/resources" excluding="**/*.java"/>
+  <classpathentry kind="src" path="src/test/java" output="target/test-classes"/>
+  <classpathentry kind="src" path="src/test/resources" output="target/test-classes" excluding="**/*.java"/>
+  <classpathentry kind="output" path="target/classes"/>
+  <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+  <classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/milyn/milyn-smooks-javabean/1.0.1/milyn-smooks-javabean-1.0.1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/commons-lang/commons-lang/2.3/commons-lang-2.3.jar"/>
+  <classpathentry kind="var" path="M2_REPO/commons-logging/commons-logging/1.1/commons-logging-1.1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/log4j/log4j/1.2.13/log4j-1.2.13.jar"/>
+  <classpathentry kind="var" path="M2_REPO/milyn/milyn-smooks-core/1.0.1/milyn-smooks-core-1.0.1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/milyn/milyn-commons/1.0/milyn-commons-1.0.jar"/>
+  <classpathentry kind="var" path="M2_REPO/hsqldb/hsqldb/1.8.0.2/hsqldb-1.8.0.2.jar"/>
+  <classpathentry kind="var" path="M2_REPO/com/thoughtworks/xstream/xstream/1.2.2/xstream-1.2.2.jar"/>
+  <classpathentry kind="var" path="M2_REPO/xpp3/xpp3_min/1.1.3.4.O/xpp3_min-1.1.3.4.O.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/mvel/mvel/2.0-dp4/mvel-2.0-dp4.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/freemarker/freemarker/2.3.9/freemarker-2.3.9.jar"/>
+  <classpathentry kind="src" path="/drools-compiler"/>
+  <classpathentry kind="src" path="/drools-core"/>
+  <classpathentry kind="var" path="M2_REPO/org/antlr/antlr-runtime/3.0/antlr-runtime-3.0.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/eclipse/jdt/core/3.2.3.v_686_R32x/core-3.2.3.v_686_R32x.jar"/>
+  <classpathentry kind="var" path="M2_REPO/janino/janino/2.5.10/janino-2.5.10.jar"/>
+</classpath>
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-smooks/.project
===================================================================
--- labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-smooks/.project	                        (rev 0)
+++ labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-smooks/.project	2008-07-06 01:49:10 UTC (rev 20924)
@@ -0,0 +1,16 @@
+<projectDescription>
+  <name>drools-dataloaders-smooks</name>
+  <comment>A rule production system</comment>
+  <projects>
+    <project>drools-compiler</project>
+    <project>drools-core</project>
+  </projects>
+  <buildSpec>
+    <buildCommand>
+      <name>org.eclipse.jdt.core.javabuilder</name>
+    </buildCommand>
+  </buildSpec>
+  <natures>
+    <nature>org.eclipse.jdt.core.javanature</nature>
+  </natures>
+</projectDescription>
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-smooks/pom.xml
===================================================================
--- labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-smooks/pom.xml	                        (rev 0)
+++ labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-smooks/pom.xml	2008-07-06 01:49:10 UTC (rev 20924)
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <artifactId>drools</artifactId>
+    <groupId>org.drools</groupId>
+    <version>5.0.0.SNAPSHOT</version>
+  </parent>
+
+  <artifactId>drools-dataloaders-smooks</artifactId>
+  <packaging>jar</packaging>
+  <name>Drools :: DataLoaders :: Smooks</name>
+  
+      <dependencies>
+         <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>milyn</groupId>
+          <artifactId>milyn-smooks-javabean</artifactId>
+          <version>1.0.1</version>
+        </dependency>         
+      </dependencies>     
+
+    <repositories>
+        <repository>
+            <id>dist.codehaus.org</id>
+            <url>http://dist.codehaus.org</url>
+            <snapshots>
+                <enabled>false</enabled>
+            </snapshots>
+            <releases>
+               <enabled>true</enabled>
+            </releases>
+        </repository>
+    </repositories>    
+</project>

Added: labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-smooks/src/main/java/org/drools/dataloaders/smooks/DroolsSmooksConfiguration.java
===================================================================
--- labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-smooks/src/main/java/org/drools/dataloaders/smooks/DroolsSmooksConfiguration.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-smooks/src/main/java/org/drools/dataloaders/smooks/DroolsSmooksConfiguration.java	2008-07-06 01:49:10 UTC (rev 20924)
@@ -0,0 +1,40 @@
+package org.drools.dataloaders.smooks;
+
+public class DroolsSmooksConfiguration {
+	private String rootId;
+	
+	private String iterableGetter;
+	//private String 		
+	
+	public DroolsSmooksConfiguration() {
+		this.rootId = "root";
+		this.iterableGetter = null;
+	}		
+	
+	public DroolsSmooksConfiguration(String rootId, String iterableGetter) {
+		this.iterableGetter = iterableGetter;
+		this.rootId = rootId;
+	}
+
+	public void setRootId(String roodId) {
+		this.rootId = rootId;
+	}
+	
+	public String getRoodId() {
+		return this.rootId;
+	}
+
+	public String getIterableGetter() {
+		return iterableGetter;
+	}
+
+	public void setIterableGetter(String iterableGetter) {
+		this.iterableGetter = iterableGetter;
+	}
+
+	public String getRootId() {
+		return rootId;
+	}
+	
+	
+}

Added: labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-smooks/src/main/java/org/drools/dataloaders/smooks/DroolsSmooksStatefulSession.java
===================================================================
--- labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-smooks/src/main/java/org/drools/dataloaders/smooks/DroolsSmooksStatefulSession.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-smooks/src/main/java/org/drools/dataloaders/smooks/DroolsSmooksStatefulSession.java	2008-07-06 01:49:10 UTC (rev 20924)
@@ -0,0 +1,92 @@
+package org.drools.dataloaders.smooks;
+
+import java.io.Serializable;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.xml.transform.Source;
+
+import org.drools.FactHandle;
+import org.drools.StatefulSession;
+import org.drools.common.InternalRuleBase;
+import org.milyn.Smooks;
+import org.milyn.container.ExecutionContext;
+import org.milyn.payload.JavaResult;
+import org.mvel.MVEL;
+import org.mvel.ParserContext;
+import org.mvel.compiler.ExpressionCompiler;
+
+public class DroolsSmooksStatefulSession {
+    private Smooks                    smooks;
+    private StatefulSession           session;
+    private DroolsSmooksConfiguration configuration;
+    private Serializable              getterExpr;
+
+    public DroolsSmooksStatefulSession(StatefulSession session,
+                                       Smooks smooks) {
+        this( session,
+              smooks,
+              new DroolsSmooksConfiguration() );
+
+    }
+
+    public DroolsSmooksStatefulSession(StatefulSession session,
+                                       Smooks smooks,
+                                       DroolsSmooksConfiguration configuration) {
+        this.smooks = smooks;
+        this.configuration = configuration;
+        this.session = session;
+
+        if ( this.configuration.getIterableGetter() != null ) {
+            final ParserContext parserContext = new ParserContext();
+            parserContext.setStrictTypeEnforcement( false );
+
+            ExpressionCompiler compiler = new ExpressionCompiler( this.configuration.getIterableGetter() );
+            this.getterExpr = compiler.compile( parserContext );
+        }
+
+    }
+
+    public Map insertFilter(Source source) {
+        JavaResult result = new JavaResult();
+
+        // preserve the previous classloader, While we make Smooks aware of the Drools classloader
+        ClassLoader previousClassLoader = Thread.currentThread().getContextClassLoader();
+        Thread.currentThread().setContextClassLoader( ((InternalRuleBase) this.session.getRuleBase()).getCompositePackageClassLoader() );
+
+        ExecutionContext executionContext = this.smooks.createExecutionContext();
+
+        // Filter the input message to extract, using the execution context...
+        smooks.filter( source,
+                       result,
+                       executionContext );
+
+        Thread.currentThread().setContextClassLoader( previousClassLoader );
+
+        Map handles = new HashMap<FactHandle, Object>();
+
+        Object object = result.getBean( this.configuration.getRoodId() );
+        if ( object == null ) {
+            return handles;
+        }
+
+        if ( this.getterExpr != null ) {
+            Iterable it = (Iterable) MVEL.executeExpression( this.getterExpr,
+                                                             object );
+            if ( it != null ) {
+                for ( Object item : it ) {
+                    FactHandle handle = this.session.insert( item );
+                    handles.put( handle,
+                                 object );
+                }
+            }
+        } else {
+            FactHandle handle = this.session.insert( object );
+            handles.put( handle,
+                         object );
+
+        }
+
+        return handles;
+    }
+}

Added: labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-smooks/src/main/java/org/drools/dataloaders/smooks/DroolsSmooksStatelessSession.java
===================================================================
--- labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-smooks/src/main/java/org/drools/dataloaders/smooks/DroolsSmooksStatelessSession.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-smooks/src/main/java/org/drools/dataloaders/smooks/DroolsSmooksStatelessSession.java	2008-07-06 01:49:10 UTC (rev 20924)
@@ -0,0 +1,97 @@
+package org.drools.dataloaders.smooks;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.xml.transform.Source;
+
+import org.drools.FactHandle;
+import org.drools.StatefulSession;
+import org.drools.StatelessSession;
+import org.drools.common.InternalRuleBase;
+import org.drools.common.InternalStatelessSession;
+import org.milyn.Smooks;
+import org.milyn.container.ExecutionContext;
+import org.milyn.payload.JavaResult;
+import org.mvel.MVEL;
+import org.mvel.ParserContext;
+import org.mvel.compiler.ExpressionCompiler;
+
+public class DroolsSmooksStatelessSession {
+    private Smooks                    smooks;
+    private InternalStatelessSession          session;
+    private DroolsSmooksConfiguration configuration;
+    private Serializable              getterExpr;
+
+    public DroolsSmooksStatelessSession(StatelessSession session,
+                                        Smooks smooks) {
+        this( session,
+              smooks,
+              new DroolsSmooksConfiguration() );
+
+    }
+
+    public DroolsSmooksStatelessSession(StatelessSession session,
+                                        Smooks smooks,
+                                        DroolsSmooksConfiguration configuration) {
+        this.smooks = smooks;
+        this.configuration = configuration;
+        this.session = ( InternalStatelessSession ) session;
+
+        if ( this.configuration.getIterableGetter() != null ) {
+            final ParserContext parserContext = new ParserContext();
+            parserContext.setStrictTypeEnforcement( false );
+
+            ExpressionCompiler compiler = new ExpressionCompiler( this.configuration.getIterableGetter() );
+            this.getterExpr = compiler.compile( parserContext );
+        }
+
+    }
+
+    public void executeFilter(Source source) {
+        JavaResult result = new JavaResult();
+
+        // preserve the previous classloader, While we make Smooks aware of the Drools classloader
+        ClassLoader previousClassLoader = Thread.currentThread().getContextClassLoader();
+        Thread.currentThread().setContextClassLoader( ((InternalRuleBase) this.session.getRuleBase()).getCompositePackageClassLoader() );
+
+        ExecutionContext executionContext = this.smooks.createExecutionContext();
+
+        // Filter the input message to extract, using the execution context...
+        smooks.filter( source,
+                       result,
+                       executionContext );
+
+        Thread.currentThread().setContextClassLoader( previousClassLoader );
+
+
+        Object object = result.getBean( this.configuration.getRoodId() );
+        if ( object == null ) {
+            return;
+        }
+
+        if ( this.getterExpr != null ) {
+            Iterable it = (Iterable) MVEL.executeExpression( this.getterExpr,
+                                                             object );
+            
+            if ( it != null ) {
+                this.session.execute( toList( it ) );
+            }
+        } else {
+            this.session.execute( object );
+
+        }
+    }
+    
+    private List toList( Iterable it) {
+        List list = new ArrayList();
+        for ( Object o : it ) {
+            list.add( o );
+        }
+        
+        return list;
+    }
+}

Added: labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-smooks/src/main/java/org/drools/dataloaders/smooks/Root.java
===================================================================
--- labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-smooks/src/main/java/org/drools/dataloaders/smooks/Root.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-smooks/src/main/java/org/drools/dataloaders/smooks/Root.java	2008-07-06 01:49:10 UTC (rev 20924)
@@ -0,0 +1,21 @@
+package org.drools.dataloaders.smooks;
+
+import java.util.List;
+
+public class Root {
+	private List children;
+	
+	public Root() {
+		
+	}
+
+	public List getChildren() {
+		return children;
+	}
+
+	public void setChildren(List children) {
+		this.children = children;
+	}
+	
+	
+}

Added: labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-smooks/src/test/java/org/drools/dataloaders/smooks/DroolsSmookStatefulSessionTest.java
===================================================================
--- labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-smooks/src/test/java/org/drools/dataloaders/smooks/DroolsSmookStatefulSessionTest.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-smooks/src/test/java/org/drools/dataloaders/smooks/DroolsSmookStatefulSessionTest.java	2008-07-06 01:49:10 UTC (rev 20924)
@@ -0,0 +1,103 @@
+package org.drools.dataloaders.smooks;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import javax.xml.transform.stream.StreamSource;
+
+import junit.framework.TestCase;
+
+import org.drools.FactHandle;
+import org.drools.RuleBase;
+import org.drools.RuleBaseFactory;
+import org.drools.StatefulSession;
+import org.drools.compiler.PackageBuilder;
+import org.milyn.Smooks;
+import org.milyn.io.StreamUtils;
+
+public class DroolsSmookStatefulSessionTest extends TestCase {
+    public void testSmooksNestedIterable() throws Exception {
+        PackageBuilder pkgBuilder = new PackageBuilder();       
+        
+        pkgBuilder.addPackageFromDrl( new InputStreamReader( DroolsSmookStatefulSessionTest.class.getResourceAsStream( "test_SmooksNestedIterable.drl" ) ) );
+
+        assertFalse( pkgBuilder.hasErrors() );
+
+        RuleBase ruleBase = RuleBaseFactory.newRuleBase();
+        ruleBase.addPackage( pkgBuilder.getPackage() );
+
+        StatefulSession session = ruleBase.newStatefulSession();
+        List list = new ArrayList();
+        session.setGlobal( "list", list );
+
+        // Instantiate Smooks with the config...
+        Smooks smooks = new Smooks( getClass().getResourceAsStream( "smooks-config.xml" ) );
+
+        DroolsSmooksConfiguration conf = new DroolsSmooksConfiguration( "root",
+                                                                        "children" );
+        //
+        DroolsSmooksStatefulSession dataLoader = new DroolsSmooksStatefulSession( session,
+                                           smooks,
+                                           conf );
+        Map<FactHandle, Object> handles = dataLoader.insertFilter( new StreamSource( getClass().getResourceAsStream( "SmooksNestedIterable.xml") ) );
+        //
+        session.fireAllRules();
+        
+        assertEquals(2, handles.size() );
+        assertEquals(2, list.size());
+        
+        assertEquals( "example.OrderItem", list.get( 0 ).getClass().getName() );
+        assertEquals( "example.OrderItem", list.get( 1 ).getClass().getName() );
+        
+        assertNotSame( list.get( 0 ), list.get( 1 ) );
+    }    
+    
+    public void testSmooksDirectRoot() throws Exception {
+        PackageBuilder pkgBuilder = new PackageBuilder();       
+        
+        pkgBuilder.addPackageFromDrl( new InputStreamReader( DroolsSmookStatefulSessionTest.class.getResourceAsStream( "test_SmooksDirectRoot.drl" ) ) );
+
+        assertFalse( pkgBuilder.hasErrors() );
+
+        RuleBase ruleBase = RuleBaseFactory.newRuleBase();
+        ruleBase.addPackage( pkgBuilder.getPackage() );
+
+        StatefulSession session = ruleBase.newStatefulSession();
+        List list = new ArrayList();
+        session.setGlobal( "list", list );        
+
+        // Instantiate Smooks with the config...
+        Smooks smooks = new Smooks( getClass().getResourceAsStream( "smooks-config.xml" ) );
+
+
+        DroolsSmooksConfiguration conf = new DroolsSmooksConfiguration( "orderItem", null );
+        //
+        DroolsSmooksStatefulSession dataLoader = new DroolsSmooksStatefulSession( session,
+                                           smooks,
+                                           conf );
+        Map<FactHandle, Object> handles = dataLoader.insertFilter( new StreamSource( getClass().getResourceAsStream( "SmooksDirectRoot.xml") ) );
+        //
+        session.fireAllRules();
+        
+        assertEquals(1, handles.size() );
+        assertEquals(1, list.size());
+        
+        assertEquals( "example.OrderItem", list.get( 0 ).getClass().getName() );
+    }
+    
+    
+    
+
+    private static byte[] readInputMessage(InputStream stream) {
+        try {
+            return StreamUtils.readStream( stream );
+        } catch ( IOException e ) {
+            e.printStackTrace();
+            return "<no-message/>".getBytes();
+        }
+    }
+}

Added: labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-smooks/src/test/java/org/drools/dataloaders/smooks/DroolsSmookStatelessSessionTest.java
===================================================================
--- labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-smooks/src/test/java/org/drools/dataloaders/smooks/DroolsSmookStatelessSessionTest.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-smooks/src/test/java/org/drools/dataloaders/smooks/DroolsSmookStatelessSessionTest.java	2008-07-06 01:49:10 UTC (rev 20924)
@@ -0,0 +1,99 @@
+package org.drools.dataloaders.smooks;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import javax.xml.transform.stream.StreamSource;
+
+import junit.framework.TestCase;
+
+import org.drools.FactHandle;
+import org.drools.RuleBase;
+import org.drools.RuleBaseFactory;
+import org.drools.StatefulSession;
+import org.drools.StatelessSession;
+import org.drools.compiler.PackageBuilder;
+import org.milyn.Smooks;
+import org.milyn.io.StreamUtils;
+
+public class DroolsSmookStatelessSessionTest extends TestCase {
+    public void testSmooksNestedIterable() throws Exception {
+        PackageBuilder pkgBuilder = new PackageBuilder();       
+        
+        pkgBuilder.addPackageFromDrl( new InputStreamReader( DroolsSmookStatelessSessionTest.class.getResourceAsStream( "test_SmooksNestedIterable.drl" ) ) );
+
+        assertFalse( pkgBuilder.hasErrors() );
+
+        RuleBase ruleBase = RuleBaseFactory.newRuleBase();
+        ruleBase.addPackage( pkgBuilder.getPackage() );
+
+        StatelessSession session = ruleBase.newStatelessSession();
+        List list = new ArrayList();
+        session.setGlobal( "list", list );
+
+        // Instantiate Smooks with the config...
+        Smooks smooks = new Smooks( getClass().getResourceAsStream( "smooks-config.xml" ) );
+
+        DroolsSmooksConfiguration conf = new DroolsSmooksConfiguration( "root",
+                                                                        "children" );
+        //
+        DroolsSmooksStatelessSession dataLoader = new DroolsSmooksStatelessSession( session,
+                                           smooks,
+                                           conf );
+        dataLoader.executeFilter( new StreamSource( getClass().getResourceAsStream( "SmooksNestedIterable.xml") ) );
+        //
+        
+        assertEquals(2, list.size());
+        
+        assertEquals( "example.OrderItem", list.get( 0 ).getClass().getName() );
+        assertEquals( "example.OrderItem", list.get( 1 ).getClass().getName() );
+        
+        assertNotSame( list.get( 0 ), list.get( 1 ) );
+    }    
+    
+    public void testSmooksDirectRoot() throws Exception {
+        PackageBuilder pkgBuilder = new PackageBuilder();       
+        
+        pkgBuilder.addPackageFromDrl( new InputStreamReader( DroolsSmookStatelessSessionTest.class.getResourceAsStream( "test_SmooksDirectRoot.drl" ) ) );
+
+        assertFalse( pkgBuilder.hasErrors() );
+
+        RuleBase ruleBase = RuleBaseFactory.newRuleBase();
+        ruleBase.addPackage( pkgBuilder.getPackage() );
+
+        StatelessSession session = ruleBase.newStatelessSession();
+        List list = new ArrayList();
+        session.setGlobal( "list", list );        
+
+        // Instantiate Smooks with the config...
+        Smooks smooks = new Smooks( getClass().getResourceAsStream( "smooks-config.xml" ) );
+
+
+        DroolsSmooksConfiguration conf = new DroolsSmooksConfiguration( "orderItem", null );
+        //
+        DroolsSmooksStatelessSession dataLoader = new DroolsSmooksStatelessSession( session,
+                                           smooks,
+                                           conf );
+        dataLoader.executeFilter( new StreamSource( getClass().getResourceAsStream( "SmooksDirectRoot.xml") ) );
+        
+        assertEquals(1, list.size());
+        
+        assertEquals( "example.OrderItem", list.get( 0 ).getClass().getName() );
+    }
+    
+    
+    
+
+    private static byte[] readInputMessage(InputStream stream) {
+        try {
+            return StreamUtils.readStream( stream );
+        } catch ( IOException e ) {
+            e.printStackTrace();
+            return "<no-message/>".getBytes();
+        }
+    }
+}

Added: labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-smooks/src/test/java/org/drools/dataloaders/smooks/test_SmooksDirectRoot.drl
===================================================================
--- labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-smooks/src/test/java/org/drools/dataloaders/smooks/test_SmooksDirectRoot.drl	                        (rev 0)
+++ labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-smooks/src/test/java/org/drools/dataloaders/smooks/test_SmooksDirectRoot.drl	2008-07-06 01:49:10 UTC (rev 20924)
@@ -0,0 +1,16 @@
+package example
+
+global java.util.List list;
+
+declare OrderItem
+    productId : long
+    quantity : Integer
+    price : double
+end
+
+rule someRule
+when
+    $i : OrderItem()
+then
+    list.add( $i );
+end
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-smooks/src/test/java/org/drools/dataloaders/smooks/test_SmooksNestedIterable.drl
===================================================================
--- labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-smooks/src/test/java/org/drools/dataloaders/smooks/test_SmooksNestedIterable.drl	                        (rev 0)
+++ labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-smooks/src/test/java/org/drools/dataloaders/smooks/test_SmooksNestedIterable.drl	2008-07-06 01:49:10 UTC (rev 20924)
@@ -0,0 +1,16 @@
+package example
+
+global java.util.List list;
+
+declare OrderItem
+    productId : long
+    quantity : Integer
+    price : double
+end
+
+rule someRule
+when
+    $i : OrderItem()
+then
+    list.add( $i ); 
+end
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-smooks/src/test/resources/org/drools/dataloaders/smooks/SmooksDirectRoot.xml
===================================================================
--- labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-smooks/src/test/resources/org/drools/dataloaders/smooks/SmooksDirectRoot.xml	                        (rev 0)
+++ labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-smooks/src/test/resources/org/drools/dataloaders/smooks/SmooksDirectRoot.xml	2008-07-06 01:49:10 UTC (rev 20924)
@@ -0,0 +1,5 @@
+<order-item>
+    <product>222</product>
+    <quantity>7</quantity>
+    <price>5.20</price>
+</order-item>
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-smooks/src/test/resources/org/drools/dataloaders/smooks/SmooksNestedIterable.xml
===================================================================
--- labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-smooks/src/test/resources/org/drools/dataloaders/smooks/SmooksNestedIterable.xml	                        (rev 0)
+++ labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-smooks/src/test/resources/org/drools/dataloaders/smooks/SmooksNestedIterable.xml	2008-07-06 01:49:10 UTC (rev 20924)
@@ -0,0 +1,12 @@
+<root>
+    <order-item>
+        <product>111</product>
+        <quantity>2</quantity>
+        <price>8.90</price>
+    </order-item>
+    <order-item>
+        <product>222</product>
+        <quantity>7</quantity>
+        <price>5.20</price>
+    </order-item>
+</root>
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-smooks/src/test/resources/org/drools/dataloaders/smooks/smooks-config.xml
===================================================================
--- labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-smooks/src/test/resources/org/drools/dataloaders/smooks/smooks-config.xml	                        (rev 0)
+++ labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-smooks/src/test/resources/org/drools/dataloaders/smooks/smooks-config.xml	2008-07-06 01:49:10 UTC (rev 20924)
@@ -0,0 +1,46 @@
+<?xml version="1.0"?>
+<smooks-resource-list xmlns="http://www.milyn.org/xsd/smooks-1.0.xsd">
+
+    <!--
+    Create an "example.beans.Order" bean instance when we visit the start of the <order> element.
+    Assign the new bean instance to the beanId of "order".
+    -->
+    <resource-config selector="root">
+        <resource>org.milyn.javabean.BeanPopulator</resource>
+        <param name="beanId">root</param>
+        <param name="beanClass">org.drools.dataloaders.smooks.Root</param>
+        <param name="bindings">
+            <binding property="children" selector="${children}" />
+        </param>
+    </resource-config>
+
+    <!--
+    Create an ArrayList bean instance when we visit the start of the <order> element.
+    Call it "orderItems" and seet it on the "order".
+    -->
+    <resource-config selector="root">
+        <resource>org.milyn.javabean.BeanPopulator</resource>
+        <param name="beanId">children</param>
+        <param name="beanClass">java.util.ArrayList</param>
+        <param name="bindings">
+			<binding selector="${orderItem}" />
+		</param>
+    </resource-config>
+
+    <!--
+    Create an "example.beans.OrderItem" bean instance when we visit the start of the <order-item> element.
+    Set the OrderItem instances on the "orderItem".
+    -->
+    <resource-config selector="order-item">
+        <resource>org.milyn.javabean.BeanPopulator</resource>
+        <param name="beanClass">example.OrderItem</param>
+        <param name="bindings">
+            <!-- OrderItem bindings... -->
+            <binding property="productId" type="Long" selector="order-item product" />
+            <binding property="quantity" type="Integer" selector="order-item quantity" />
+            <binding property="price" type="Double" selector="order-item price" />
+        </param>
+    </resource-config>
+
+
+</smooks-resource-list>
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-dataloaders/pom.xml
===================================================================
--- labs/jbossrules/trunk/drools-dataloaders/pom.xml	                        (rev 0)
+++ labs/jbossrules/trunk/drools-dataloaders/pom.xml	2008-07-06 01:49:10 UTC (rev 20924)
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <artifactId>drools</artifactId>
+    <groupId>org.drools</groupId>
+    <version>5.0.0.SNAPSHOT</version>
+  </parent>
+
+  <artifactId>drools-dataloaders</artifactId>
+  <packaging>pom</packaging>
+  <name>Drools :: DataLoaders</name>
+  
+  <modules>
+      <module>drools-dataloaders-smooks</module>
+  </modules>
+  
+</project>




More information about the jboss-svn-commits mailing list