[jboss-svn-commits] JBL Code SVN: r5973 - in labs/jbossrules/trunk/drools-core/src: main/java/org/drools/base main/java/org/drools/base/resolvers test/java/org/drools/base test/java/org/drools/base/resolvers

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu Aug 24 13:56:12 EDT 2006


Author: mark.proctor at jboss.com
Date: 2006-08-24 13:56:05 -0400 (Thu, 24 Aug 2006)
New Revision: 5973

Added:
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/resolvers/
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/resolvers/DeclarationVariable.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/resolvers/GlobalVariable.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/resolvers/ListValue.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/resolvers/LiteralValue.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/resolvers/MapValue.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/resolvers/ValueHandler.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/resolvers/
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/resolvers/DeclarationVariableTest.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/resolvers/GlobalVariableTest.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/resolvers/ListValueTest.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/resolvers/LiteralValueTest.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/resolvers/MapValueTest.java
Log:
JBRULES-448 Refactor ValueHandler resolvers to be standalone
-Added Map and List ValueHandlers, which are also nestable.
-Added comprehensive unit tests.

Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/resolvers/DeclarationVariable.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/resolvers/DeclarationVariable.java	2006-08-23 22:08:43 UTC (rev 5972)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/resolvers/DeclarationVariable.java	2006-08-24 17:56:05 UTC (rev 5973)
@@ -0,0 +1,25 @@
+/**
+ * 
+ */
+package org.drools.base.resolvers;
+
+import org.drools.WorkingMemory;
+import org.drools.rule.Declaration;
+import org.drools.spi.Tuple;
+
+public class DeclarationVariable
+    implements
+    ValueHandler {
+
+    private Declaration declaration;
+
+    public DeclarationVariable(final Declaration dec) {
+        this.declaration = dec;
+    }
+
+    public Object getValue(final Tuple tuple,
+                           final WorkingMemory wm) {
+        return tuple.get( this.declaration ).getObject();
+    }
+
+}
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/resolvers/GlobalVariable.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/resolvers/GlobalVariable.java	2006-08-23 22:08:43 UTC (rev 5972)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/resolvers/GlobalVariable.java	2006-08-24 17:56:05 UTC (rev 5973)
@@ -0,0 +1,23 @@
+/**
+ * 
+ */
+package org.drools.base.resolvers;
+
+import org.drools.WorkingMemory;
+import org.drools.spi.Tuple;
+
+public class GlobalVariable
+    implements
+    ValueHandler {
+    public String globalName;
+
+    public GlobalVariable(final String name) {
+        this.globalName = name;
+    }
+
+    public Object getValue(final Tuple tuple,
+                           final WorkingMemory wm) {
+        return wm.getGlobal( this.globalName );
+
+    }
+}
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/resolvers/ListValue.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/resolvers/ListValue.java	2006-08-23 22:08:43 UTC (rev 5972)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/resolvers/ListValue.java	2006-08-24 17:56:05 UTC (rev 5973)
@@ -0,0 +1,34 @@
+/**
+ * 
+ */
+package org.drools.base.resolvers;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.drools.WorkingMemory;
+import org.drools.spi.Tuple;
+
+public class ListValue
+    implements
+    ValueHandler {
+
+    private final List list;
+
+    public ListValue(final List list) {
+        this.list = list;
+    }
+
+    public Object getValue(final Tuple tuple,
+                           final WorkingMemory wm) {
+        final List resolvedList = new ArrayList( this.list.size() );
+
+        for ( final Iterator it = this.list.iterator(); it.hasNext(); ) {
+            resolvedList.add( ((ValueHandler) it.next()).getValue( tuple,
+                                                                   wm ) );
+        }
+
+        return resolvedList;
+    }
+}
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/resolvers/LiteralValue.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/resolvers/LiteralValue.java	2006-08-23 22:08:43 UTC (rev 5972)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/resolvers/LiteralValue.java	2006-08-24 17:56:05 UTC (rev 5973)
@@ -0,0 +1,24 @@
+/**
+ * 
+ */
+package org.drools.base.resolvers;
+
+import org.drools.WorkingMemory;
+import org.drools.spi.Tuple;
+
+public class LiteralValue
+    implements
+    ValueHandler {
+
+    private String value;
+
+    public LiteralValue(final String value) {
+        this.value = value;
+    }
+
+    public Object getValue(final Tuple tuple,
+                           final WorkingMemory wm) {
+        return this.value;
+    }
+
+}
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/resolvers/MapValue.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/resolvers/MapValue.java	2006-08-23 22:08:43 UTC (rev 5972)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/resolvers/MapValue.java	2006-08-24 17:56:05 UTC (rev 5973)
@@ -0,0 +1,65 @@
+/**
+ * 
+ */
+package org.drools.base.resolvers;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.drools.WorkingMemory;
+import org.drools.spi.Tuple;
+
+public class MapValue
+    implements
+    ValueHandler {
+
+    private final KeyValuePair[] pairs;
+
+    public MapValue(final KeyValuePair[] pairs) {
+        this.pairs = pairs;
+    }
+
+    public Object getValue(final Tuple tuple,
+                           final WorkingMemory wm) {
+        final Map map = new HashMap();
+
+        for ( int i = 0, length = this.pairs.length; i < length; i++ ) {
+            final ValueHandler key = this.pairs[i].getKey();
+            final ValueHandler value = this.pairs[i].getValue();
+            map.put( key.getValue( tuple,
+                                   wm ),
+                     value.getValue( tuple,
+                                     wm ) );
+        }
+
+        return map;
+    }
+
+    static class KeyValuePair {
+        private ValueHandler key;
+        private ValueHandler value;
+
+        public KeyValuePair(final ValueHandler key,
+                            final ValueHandler value) {
+            this.key = key;
+            this.value = value;
+        }
+
+        /**
+         * 
+         * @return The ValueHandler for the key
+         */
+        public ValueHandler getKey() {
+            return this.key;
+        }
+
+        /**
+         * 
+         * @return The ValueHandler for the value
+         */
+        public ValueHandler getValue() {
+            return this.value;
+        }
+
+    }
+}
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/resolvers/ValueHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/resolvers/ValueHandler.java	2006-08-23 22:08:43 UTC (rev 5972)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/resolvers/ValueHandler.java	2006-08-24 17:56:05 UTC (rev 5973)
@@ -0,0 +1,13 @@
+/**
+ * 
+ */
+package org.drools.base.resolvers;
+
+import org.drools.WorkingMemory;
+import org.drools.spi.Tuple;
+
+public interface ValueHandler {
+
+    Object getValue(Tuple tuple,
+                    WorkingMemory wm);
+}
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/resolvers/DeclarationVariableTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/resolvers/DeclarationVariableTest.java	2006-08-23 22:08:43 UTC (rev 5972)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/resolvers/DeclarationVariableTest.java	2006-08-24 17:56:05 UTC (rev 5973)
@@ -0,0 +1,37 @@
+package org.drools.base.resolvers;
+
+import junit.framework.TestCase;
+
+import org.drools.Cheese;
+import org.drools.FactHandle;
+import org.drools.RuleBase;
+import org.drools.RuleBaseFactory;
+import org.drools.WorkingMemory;
+import org.drools.base.ClassObjectType;
+import org.drools.common.DefaultFactHandle;
+import org.drools.reteoo.ReteTuple;
+import org.drools.rule.Column;
+import org.drools.rule.Package;
+
+public class DeclarationVariableTest extends TestCase {
+    public void testDeclaration() throws Exception {
+        RuleBase rb = RuleBaseFactory.newRuleBase();
+        Package pkg = new Package( "org.test" );
+        rb.addPackage( pkg );
+        WorkingMemory wm = rb.newWorkingMemory();
+
+        Column column = new Column( 0,
+                                    new ClassObjectType( Cheese.class ),
+                                    "stilton" );
+        DeclarationVariable declaration = new DeclarationVariable( column.getDeclaration() );
+
+        Cheese stilton = new Cheese( "stilton",
+                                     20 );
+        FactHandle stiltonHandle = wm.assertObject( stilton );
+
+        ReteTuple tuple = new ReteTuple( (DefaultFactHandle) stiltonHandle );
+        assertEquals( stilton,
+                      declaration.getValue( tuple,
+                                            wm ) );
+    }
+}

Added: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/resolvers/GlobalVariableTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/resolvers/GlobalVariableTest.java	2006-08-23 22:08:43 UTC (rev 5972)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/resolvers/GlobalVariableTest.java	2006-08-24 17:56:05 UTC (rev 5973)
@@ -0,0 +1,42 @@
+package org.drools.base.resolvers;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import junit.framework.TestCase;
+
+import org.drools.Cheese;
+import org.drools.FactHandle;
+import org.drools.RuleBase;
+import org.drools.RuleBaseFactory;
+import org.drools.WorkingMemory;
+import org.drools.common.DefaultFactHandle;
+import org.drools.reteoo.ReteTuple;
+import org.drools.rule.Package;
+
+public class GlobalVariableTest extends TestCase {
+    public void testGlobal() throws Exception {
+        RuleBase rb = RuleBaseFactory.newRuleBase();
+        Package pkg = new Package( "org.test" );
+        pkg.addGlobal( "list",
+                       List.class );
+        rb.addPackage( pkg );
+        WorkingMemory wm = rb.newWorkingMemory();
+
+        GlobalVariable global = new GlobalVariable( "list" );
+
+        Cheese stilton = new Cheese( "stilton",
+                                     20 );
+        FactHandle stiltonHandle = wm.assertObject( stilton );
+
+        ReteTuple tuple = new ReteTuple( (DefaultFactHandle) stiltonHandle );
+
+        List list = new ArrayList();
+        wm.setGlobal( "list",
+                      list );
+
+        assertEquals( list,
+                      global.getValue( tuple,
+                                       wm ) );
+    }
+}

Added: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/resolvers/ListValueTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/resolvers/ListValueTest.java	2006-08-23 22:08:43 UTC (rev 5972)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/resolvers/ListValueTest.java	2006-08-24 17:56:05 UTC (rev 5973)
@@ -0,0 +1,102 @@
+package org.drools.base.resolvers;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import org.drools.Cheese;
+import org.drools.FactHandle;
+import org.drools.RuleBase;
+import org.drools.RuleBaseFactory;
+import org.drools.WorkingMemory;
+import org.drools.base.ClassObjectType;
+import org.drools.common.DefaultFactHandle;
+import org.drools.reteoo.ReteTuple;
+import org.drools.rule.Column;
+import org.drools.rule.Package;
+
+import junit.framework.TestCase;
+
+public class ListValueTest extends TestCase {
+
+    public void testList() throws Exception {
+        RuleBase rb = RuleBaseFactory.newRuleBase();
+        Package pkg = new Package( "org.test" );
+        pkg.addGlobal( "list",
+                       List.class );
+        rb.addPackage( pkg );
+        WorkingMemory wm = rb.newWorkingMemory();
+        
+        List list = new ArrayList();
+        wm.setGlobal( "list",
+                      list );        
+        
+        LiteralValue literal = new LiteralValue( "literal" );
+        
+        Column column = new Column( 0,
+                                    new ClassObjectType( Cheese.class ),
+                                    "stilton" );
+        DeclarationVariable declaration = new DeclarationVariable( column.getDeclaration() );
+        
+        GlobalVariable global = new GlobalVariable( "list" );
+        
+        LiteralValue literalKey = new LiteralValue( "literalKey" );
+        LiteralValue literalValue = new LiteralValue( "literalValue" );
+        MapValue.KeyValuePair literalPair = new MapValue.KeyValuePair( literalKey,
+                                                                       literalValue );
+        MapValue mapValue = new MapValue( new MapValue.KeyValuePair[]{literalPair} );
+        
+        List listValueHandlers = new ArrayList();
+        listValueHandlers.add( literal );
+        listValueHandlers.add( declaration );
+        listValueHandlers.add( mapValue );
+        listValueHandlers.add( global );
+        
+        ListValue listValue = new ListValue( listValueHandlers );
+        
+        Cheese stilton = new Cheese( "stilton",
+                                     20 );
+        FactHandle stiltonHandle = wm.assertObject( stilton );
+
+        ReteTuple tuple = new ReteTuple( (DefaultFactHandle) stiltonHandle );
+        
+        List values = ( List ) listValue.getValue( tuple, wm );
+        assertEquals( "literal", values.get( 0 ) );
+        assertEquals( stilton, values.get( 1 ) );
+
+        Map map = ( Map ) values.get( 2 );
+        assertEquals( "literalValue", map.get( "literalKey" ) );
+        
+        assertEquals( list, values.get( 3 ) );                
+    }
+    
+    public void testNestedList() {
+        RuleBase rb = RuleBaseFactory.newRuleBase();
+        WorkingMemory wm = rb.newWorkingMemory();
+        
+        LiteralValue literal = new LiteralValue( "literal" );
+        List nestedListValueHandlers = new ArrayList();
+        nestedListValueHandlers.add(  literal );
+        ListValue nestedListValue = new ListValue( nestedListValueHandlers );
+        
+        List listValueHandlers = new ArrayList();
+        listValueHandlers.add(  nestedListValue );
+        ListValue listValue = new ListValue( listValueHandlers );
+        
+        Cheese stilton = new Cheese( "stilton",
+                                     20 );
+        FactHandle stiltonHandle = wm.assertObject( stilton );
+
+        ReteTuple tuple = new ReteTuple( (DefaultFactHandle) stiltonHandle );
+        
+        List list = ( List ) listValue.getValue( tuple, wm );
+        assertEquals( 1, list.size() );
+        
+        List nestedList = ( List ) list.get( 0 );
+        
+        assertEquals( 1, nestedList.size() );
+        
+        assertEquals( "literal", nestedList.get( 0 ) );
+        
+    }
+}

Added: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/resolvers/LiteralValueTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/resolvers/LiteralValueTest.java	2006-08-23 22:08:43 UTC (rev 5972)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/resolvers/LiteralValueTest.java	2006-08-24 17:56:05 UTC (rev 5973)
@@ -0,0 +1,32 @@
+package org.drools.base.resolvers;
+
+import junit.framework.TestCase;
+
+import org.drools.Cheese;
+import org.drools.FactHandle;
+import org.drools.RuleBase;
+import org.drools.RuleBaseFactory;
+import org.drools.WorkingMemory;
+import org.drools.common.DefaultFactHandle;
+import org.drools.reteoo.ReteTuple;
+import org.drools.rule.Package;
+
+public class LiteralValueTest extends TestCase {
+    public void testLiteral() throws Exception {
+        RuleBase rb = RuleBaseFactory.newRuleBase();
+        Package pkg = new Package( "org.test" );
+        rb.addPackage( pkg );
+        WorkingMemory wm = rb.newWorkingMemory();
+
+        LiteralValue literal = new LiteralValue( "literal" );
+
+        Cheese stilton = new Cheese( "stilton",
+                                     20 );
+        FactHandle stiltonHandle = wm.assertObject( stilton );
+
+        ReteTuple tuple = new ReteTuple( (DefaultFactHandle) stiltonHandle );
+        assertEquals( "literal",
+                      literal.getValue( tuple,
+                                        wm ) );
+    }
+}

Added: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/resolvers/MapValueTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/resolvers/MapValueTest.java	2006-08-23 22:08:43 UTC (rev 5972)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/resolvers/MapValueTest.java	2006-08-24 17:56:05 UTC (rev 5973)
@@ -0,0 +1,116 @@
+package org.drools.base.resolvers;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import junit.framework.TestCase;
+
+import org.drools.Cheese;
+import org.drools.FactHandle;
+import org.drools.RuleBase;
+import org.drools.RuleBaseFactory;
+import org.drools.WorkingMemory;
+import org.drools.base.ClassObjectType;
+import org.drools.common.DefaultFactHandle;
+import org.drools.reteoo.ReteTuple;
+import org.drools.rule.Column;
+import org.drools.rule.Package;
+
+public class MapValueTest extends TestCase {
+    public void testFlatMap() throws Exception {
+        RuleBase rb = RuleBaseFactory.newRuleBase();
+        Package pkg = new Package( "org.test" );
+        pkg.addGlobal( "list",
+                       List.class );
+        rb.addPackage( pkg );
+        WorkingMemory wm = rb.newWorkingMemory();
+
+        // Make a literal key/value pair
+        LiteralValue literalKey = new LiteralValue( "literalKey1" );
+        LiteralValue literalValue = new LiteralValue( "literalValue" );
+        MapValue.KeyValuePair literalPair = new MapValue.KeyValuePair( literalKey,
+                                                                       literalValue );
+
+        // Make a declaration/literal key/value pair
+        Column column = new Column( 0,
+                                    new ClassObjectType( Cheese.class ),
+                                    "stilton" );
+        DeclarationVariable declaration = new DeclarationVariable( column.getDeclaration() );
+        MapValue.KeyValuePair declarationLiteralPair = new MapValue.KeyValuePair( declaration,
+                                                                                  literalValue );
+
+        // Make a literal/declaration key/value pair
+        LiteralValue literalKey2 = new LiteralValue( "literalKey2" );
+        MapValue.KeyValuePair literalDeclarationPair = new MapValue.KeyValuePair( literalKey2,
+                                                                                  declaration );
+
+        // Make a global/declaration key/value pair
+        GlobalVariable global = new GlobalVariable( "list" );
+        MapValue.KeyValuePair globalDeclarationPair = new MapValue.KeyValuePair( global,
+                                                                                 declaration );
+
+        // Make a literal/global key/value pair
+        LiteralValue literalKey3 = new LiteralValue( "literalKey3" );
+        MapValue.KeyValuePair LiteralGlobalPair = new MapValue.KeyValuePair( literalKey3,
+                                                                             global );
+
+        MapValue mapValue = new MapValue( new MapValue.KeyValuePair[]{literalPair, globalDeclarationPair, LiteralGlobalPair, declarationLiteralPair, literalDeclarationPair} );
+
+        Cheese stilton = new Cheese( "stilton",
+                                     20 );
+        FactHandle stiltonHandle = wm.assertObject( stilton );
+
+        ReteTuple tuple = new ReteTuple( (DefaultFactHandle) stiltonHandle );
+
+        List list = new ArrayList();
+        wm.setGlobal( "list",
+                      list );
+
+        Map map = (Map) mapValue.getValue( tuple,
+                                           wm );
+        assertEquals( "literalValue",
+                      map.get( "literalKey1" ) );
+        assertEquals( "literalValue",
+                      map.get( stilton ) );
+        assertEquals( stilton,
+                      map.get( "literalKey2" ) );
+        assertEquals( stilton,
+                      map.get( "literalKey2" ) );
+        assertEquals( stilton,
+                      map.get( list ) );
+        assertEquals( list,
+                      map.get( "literalKey3" ) );
+    }
+
+    public void testNestedMap() {
+        RuleBase rb = RuleBaseFactory.newRuleBase();
+        WorkingMemory wm = rb.newWorkingMemory();
+
+        // Make a literal key/value pair
+        LiteralValue literalKey1 = new LiteralValue( "literalKey1" );
+        LiteralValue literalValue1 = new LiteralValue( "literalValue1" );
+        MapValue.KeyValuePair literalPair = new MapValue.KeyValuePair( literalKey1,
+                                                                       literalValue1 );
+        MapValue nestedMapValue = new MapValue( new MapValue.KeyValuePair[]{literalPair} );
+
+        LiteralValue literalKey2 = new LiteralValue( "literalKey2" );
+        MapValue.KeyValuePair nestedMapPair = new MapValue.KeyValuePair( literalKey2,
+                                                                         nestedMapValue );
+
+        MapValue mapValue = new MapValue( new MapValue.KeyValuePair[]{nestedMapPair} );
+
+        Cheese stilton = new Cheese( "stilton",
+                                     20 );
+        FactHandle stiltonHandle = wm.assertObject( stilton );
+
+        ReteTuple tuple = new ReteTuple( (DefaultFactHandle) stiltonHandle );
+
+        Map map = (Map) mapValue.getValue( tuple,
+                                           wm );
+
+        Map nestedMap = (Map) map.get( "literalKey2" );
+        assertEquals( "literalValue1",
+                      nestedMap.get( "literalKey1" ) );
+    }
+}




More information about the jboss-svn-commits mailing list