[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