[jboss-svn-commits] JBL Code SVN: r6035 - in labs/jbossrules/trunk/drools-compiler/src: main/java/org/drools/semantics/java test/java/org/drools test/java/org/drools/integrationtests test/resources/org/drools/integrationtests
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Wed Aug 30 20:43:31 EDT 2006
Author: /services/svn/bin/commit-email.pl: `/opt/subversion/bin/svnlook info /services/jbf-svn/code -r 6035' failed with this output:
Date: svnlook: Inconsistent line ending style
New Revision: 6035
Modified:
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/RuleBuilder.java
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/FromTestClass.java
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/IntegrationCases.java
labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_FromWithParams.drl
Log:
2006-08-30 20:43:27 -0400 (Wed, 30 Aug 2006)
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/RuleBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/RuleBuilder.java 2006-08-30 22:22:57 UTC (rev 6034)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/RuleBuilder.java 2006-08-31 00:43:27 UTC (rev 6035)
@@ -41,6 +41,7 @@
import org.drools.base.resolvers.DeclarationVariable;
import org.drools.base.resolvers.GlobalVariable;
import org.drools.base.resolvers.LiteralValue;
+import org.drools.base.resolvers.MapValue;
import org.drools.base.resolvers.ValueHandler;
import org.drools.compiler.RuleError;
import org.drools.facttemplates.FactTemplate;
@@ -113,7 +114,7 @@
private RuleDescr ruleDescr;
public String ruleClass;
- public List s;
+ public List methods;
public Map invokers;
private Map invokerLookups;
@@ -188,7 +189,7 @@
public synchronized Rule build(final Package pkg,
final RuleDescr ruleDescr) {
this.pkg = pkg;
- this.s = new ArrayList();
+ this.methods = new ArrayList();
this.invokers = new HashMap();
this.invokerLookups = new HashMap();
this.declarations = new HashMap();
@@ -310,9 +311,9 @@
this.rule.addPattern( eval );
}
} else if ( object.getClass() == FromDescr.class ) {
- final From from = build( (FromDescr) object);
+ final From from = build( (FromDescr) object );
this.rule.addPattern( from );
- }
+ }
} else if ( object.getClass() == ColumnDescr.class ) {
final Column column = build( (ColumnDescr) object );
if ( column != null ) {
@@ -380,8 +381,8 @@
ce.addChild( eval );
}
} else if ( object.getClass() == FromDescr.class ) {
- final From from = build( (FromDescr) object);
- this.rule.addPattern( from );
+ final From from = build( (FromDescr) object );
+ this.rule.addPattern( from );
}
} else if ( object.getClass() == ColumnDescr.class ) {
if ( decrementOffset && decrementFirst ) {
@@ -767,7 +768,7 @@
st.setAttribute( "text",
returnValueText );
- this.s.add( st.toString() );
+ this.methods.add( st.toString() );
st = RuleBuilder.invokerGroup.getInstanceOf( "returnValueInvoker" );
@@ -859,7 +860,7 @@
st.setAttribute( "text",
predicateText );
- this.s.add( st.toString() );
+ this.methods.add( st.toString() );
st = RuleBuilder.invokerGroup.getInstanceOf( "predicateInvoker" );
@@ -897,63 +898,96 @@
private From build(FromDescr fromDescr) {
Column column = build( fromDescr.getReturnedColumn() );
-
+
DeclarativeInvokerDescr invokerDescr = fromDescr.getDataSource();
-
+
DataProvider dataProvider = null;
-
+
if ( invokerDescr.getClass() == MethodAccessDescr.class ) {
- MethodAccessDescr methodAccessor = ( MethodAccessDescr ) invokerDescr;
-
+ MethodAccessDescr methodAccessor = (MethodAccessDescr) invokerDescr;
+
ValueHandler instanceValueHandler = null;
String variableName = methodAccessor.getVariableName();
if ( declarations.containsKey( variableName ) ) {
instanceValueHandler = new DeclarationVariable( (Declaration) declarations.get( variableName ) );
} else if ( this.pkg.getGlobals().containsKey( variableName ) ) {
- instanceValueHandler = new GlobalVariable( variableName, ( Class ) this.pkg.getGlobals().get( variableName ) );
+ instanceValueHandler = new GlobalVariable( variableName,
+ (Class) this.pkg.getGlobals().get( variableName ) );
} else {
throw new IllegalArgumentException( "The variable name [" + variableName + "] was not a global or declaration." );
}
-
- List arguments = ( ( MethodAccessDescr ) invokerDescr ).getArguments();
+
+ List arguments = ((MethodAccessDescr) invokerDescr).getArguments();
List valueHandlers = new ArrayList();
for ( Iterator iter = arguments.iterator(); iter.hasNext(); ) {
- ArgumentValueDescr desc = (ArgumentValueDescr) iter.next();
- if ( desc.getType() == ArgumentValueDescr.VARIABLE ) {
- if ( this.declarations.containsKey( desc.getValue() ) ) {
- valueHandlers.add( new DeclarationVariable( (Declaration) declarations.get( desc.getValue() ) ) );
- } else if ( this.pkg.getGlobals().containsKey( desc.getValue() ) ) {
- valueHandlers.add( new GlobalVariable( (String) desc.getValue(), ( Class ) this.pkg.getGlobals().get( variableName ) ) );
- } else {
- throw new IllegalArgumentException( "Uknown variable: " + desc.getValue() );
- }
- } else {
- // handling a literal
- valueHandlers.add( new LiteralValue( (String) desc.getValue(), Object.class ) );
- }
- }
-
- MethodInvoker invoker = new MethodInvoker( methodAccessor.getMethodName(), instanceValueHandler, ( ValueHandler[] ) valueHandlers.toArray( new ValueHandler[ valueHandlers.size() ] ) );
+ valueHandlers.add( buildValueHandler( (ArgumentValueDescr) iter.next() ) );
+ // if ( desc.getType() == ArgumentValueDescr.VARIABLE ) {
+ // if ( this.declarations.containsKey( desc.getValue() ) ) {
+ // valueHandlers.add( new DeclarationVariable( (Declaration) declarations.get( desc.getValue() ) ) );
+ // } else if ( this.pkg.getGlobals().containsKey( desc.getValue() ) ) {
+ // valueHandlers.add( new GlobalVariable( (String) desc.getValue(), ( Class ) this.pkg.getGlobals().get( desc.getValue() ) ) );
+ // } else {
+ // throw new IllegalArgumentException( "Uknown variable: " + desc.getValue() );
+ // }
+ // //} else if ( desc.getType() == ArgumentValueDescr.MAP ) {
+ // //valueHandlers.add( o )
+ // } else {
+ // // handling a literal
+ // valueHandlers.add( new LiteralValue( (String) desc.getValue(), Object.class ) );
+ // }
+ }
+
+ MethodInvoker invoker = new MethodInvoker( methodAccessor.getMethodName(),
+ instanceValueHandler,
+ (ValueHandler[]) valueHandlers.toArray( new ValueHandler[valueHandlers.size()] ) );
dataProvider = new MethodDataProvider( invoker );
}
-// if ( invokerDescr.getClass() == FieldAccessDescr.class ) {
-// //FieldAccessDescr fieldAccessDescr = ( FieldAccessDescr ) invokerDescr;
-// } else if ( invokerDescr.getClass() == FunctionCallDescr.class ) {
-// //FunctionCallDescr functionCallDescr = ( FunctionCallDescr) invokerDescr;
-// } else if ( invokerDescr.getClass() == AccessDescr.class ) {
-// AccessDescr AccessDescr = (AccessDescr) invokerDescr;
-// dataProvider = new DataProvider( AccessDescr.getVariableName(),
-// AccessDescr.getName(),
-// AccessDescr.getArguments(),
-// this.declarations,
-// this.pkg.getGlobals() );
-// }
+ // if ( invokerDescr.getClass() == FieldAccessDescr.class ) {
+ // //FieldAccessDescr fieldAccessDescr = ( FieldAccessDescr ) invokerDescr;
+ // } else if ( invokerDescr.getClass() == FunctionCallDescr.class ) {
+ // //FunctionCallDescr functionCallDescr = ( FunctionCallDescr) invokerDescr;
+ // } else if ( invokerDescr.getClass() == AccessDescr.class ) {
+ // AccessDescr AccessDescr = (AccessDescr) invokerDescr;
+ // dataProvider = new DataProvider( AccessDescr.getVariableName(),
+ // AccessDescr.getName(),
+ // AccessDescr.getArguments(),
+ // this.declarations,
+ // this.pkg.getGlobals() );
+ // }
return new From( column,
dataProvider );
}
-
+
+ private ValueHandler buildValueHandler(ArgumentValueDescr descr) {
+ ValueHandler valueHandler = null;
+ if ( descr.getType() == ArgumentValueDescr.VARIABLE ) {
+ if ( this.declarations.containsKey( descr.getValue() ) ) {
+ valueHandler = new DeclarationVariable( (Declaration) declarations.get( descr.getValue() ) );
+ } else if ( this.pkg.getGlobals().containsKey( descr.getValue() ) ) {
+ valueHandler = new GlobalVariable( (String) descr.getValue(),
+ (Class) this.pkg.getGlobals().get( descr.getValue() ) );
+ } else {
+ throw new IllegalArgumentException( "Uknown variable: " + descr.getValue() );
+ }
+ } else if ( descr.getType() == ArgumentValueDescr.MAP ) {
+ ArgumentValueDescr.KeyValuePairDescr[] pairs = (ArgumentValueDescr.KeyValuePairDescr[]) descr.getValue();
+ List list = new ArrayList( pairs.length );
+ for ( int i = 0, length = pairs.length; i < length; i++ ) {
+ list.add( new MapValue.KeyValuePair( buildValueHandler( pairs[i].getKey() ),
+ buildValueHandler( pairs[i].getValue() ) ) );
+ }
+
+ valueHandler = new MapValue( (MapValue.KeyValuePair[]) list.toArray( new MapValue.KeyValuePair[pairs.length] ) );
+ } else {
+ // handling a literal
+ valueHandler = new LiteralValue( (String) descr.getValue(),
+ Object.class );
+ }
+ return valueHandler;
+ }
+
private EvalCondition build(final EvalDescr evalDescr) {
final String className = "eval" + this.counter++;
@@ -983,7 +1017,7 @@
st.setAttribute( "text",
evalText );
- this.s.add( st.toString() );
+ this.methods.add( st.toString() );
st = RuleBuilder.invokerGroup.getInstanceOf( "evalInvoker" );
@@ -1039,7 +1073,7 @@
st.setAttribute( "text",
RuleBuilder.functionFixer.fix( RuleBuilder.knowledgeHelperFixer.fix( ruleDescr.getConsequence() ) ) );
- this.s.add( st.toString() );
+ this.methods.add( st.toString() );
st = RuleBuilder.invokerGroup.getInstanceOf( "consequenceInvoker" );
@@ -1065,7 +1099,7 @@
indexes[i] = list.indexOf( declarations[i] );
if ( indexes[i] == -1 ) {
// some defensive code, this should never happen
- throw new RuntimeDroolsException( "Unable to find declaration in list while generating the consequence invoker" );
+ throw new RuntimeDroolsException( "Unable to find declaration in list while generating the consequence invoker" );
}
}
@@ -1086,7 +1120,7 @@
private void buildRule(final RuleDescr ruleDescr) {
// If there is no compiled code, return
- if ( this.s.isEmpty() ) {
+ if ( this.methods.isEmpty() ) {
this.ruleClass = null;
return;
}
@@ -1102,8 +1136,8 @@
buffer.append( "public class " + ucFirst( this.ruleDescr.getClassName() ) + " {" + lineSeparator );
buffer.append( " private static final long serialVersionUID = 7952983928232702826L;" + lineSeparator );
- for ( int i = 0, size = this.s.size() - 1; i < size; i++ ) {
- buffer.append( this.s.get( i ) + lineSeparator );
+ for ( int i = 0, size = this.methods.size() - 1; i < size; i++ ) {
+ buffer.append( this.methods.get( i ) + lineSeparator );
}
final String[] lines = buffer.toString().split( lineSeparator );
@@ -1112,7 +1146,7 @@
//To get the error position in the DRL
//error.getLine() - this.ruleDescr.getConsequenceOffset() + this.ruleDescr.getConsequenceLine()
- buffer.append( this.s.get( this.s.size() - 1 ) + lineSeparator );
+ buffer.append( this.methods.get( this.methods.size() - 1 ) + lineSeparator );
buffer.append( "}" );
this.ruleClass = buffer.toString();
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/FromTestClass.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/FromTestClass.java 2006-08-30 22:22:57 UTC (rev 6034)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/FromTestClass.java 2006-08-31 00:43:27 UTC (rev 6035)
@@ -2,14 +2,16 @@
import java.util.ArrayList;
import java.util.List;
+import java.util.Map;
public class FromTestClass {
- public List toList(Object object1, Object object2, String object3, int integer) {
+ public List toList(Object object1, Object object2, String object3, int integer, Map map) {
List list = new ArrayList();
list.add( object1 );
list.add( object2 );
list.add( object3 );
list.add( new Integer( integer ) );
+ list.add( map );
return list;
}
}
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/IntegrationCases.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/IntegrationCases.java 2006-08-30 22:22:57 UTC (rev 6034)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/IntegrationCases.java 2006-08-31 00:43:27 UTC (rev 6035)
@@ -28,8 +28,10 @@
import java.io.StringReader;
import java.math.BigDecimal;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
+import java.util.Map;
import junit.framework.Assert;
import junit.framework.TestCase;
@@ -837,7 +839,7 @@
assertEquals( stilton, list3.get( 0 ) );
}
- public void testFromWithParams() throws Exception {
+ public void testFromWithParams() throws Exception {
final PackageBuilder builder = new PackageBuilder();
builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_FromWithParams.drl" ) ) );
final Package pkg = builder.getPackage();
@@ -847,20 +849,34 @@
WorkingMemory workingMemory = ruleBase.newWorkingMemory();
List list = new ArrayList();
+ Object globalObject = new Object();
workingMemory.setGlobal( "list", list );
workingMemory.setGlobal( "testObject", new FromTestClass() );
+ workingMemory.setGlobal( "globalObject", globalObject );
Person bob = new Person( "bob" );
workingMemory.assertObject( bob );
workingMemory.fireAllRules();
+
+ assertEquals( 5, list.size() );
- assertEquals( new Integer( 42 ), list.get( 0 ) );
- assertEquals( "literal", list.get( 1 ) );
- assertSame( bob, list.get( 2 ) );
- assertSame( list, list.get( 3 ) );
-
-
+ Map map = ( Map ) list.get( 0 );
+ assertEquals( 2, map.keySet().size() );
+
+ assertTrue( map.keySet().contains( bob ) );
+ assertSame( globalObject, map.get( bob ) );
+
+ assertTrue( map.keySet().contains( "key1" ) );
+ Map nestedMap = ( Map ) map.get( "key1" );
+ assertEquals( 1, nestedMap.keySet().size() );
+ assertTrue( nestedMap.keySet().contains( "key2" ) );
+ assertEquals( "value2", nestedMap.get( "key2" ) );
+
+ assertEquals( new Integer( 42 ), list.get( 1 ) );
+ assertEquals( "literal", list.get( 2 ) );
+ assertSame( bob, list.get( 3 ) );
+ assertSame( globalObject, list.get( 4 ) );
}
public void testWithInvalidRule() throws Exception {
Modified: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_FromWithParams.drl
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_FromWithParams.drl 2006-08-30 22:22:57 UTC (rev 6034)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_FromWithParams.drl 2006-08-31 00:43:27 UTC (rev 6035)
@@ -5,11 +5,12 @@
global FromTestClass testObject;
global java.util.List list;
+global java.lang.Object globalObject;
rule "test from"
when
$person : Person()
- $object : Object() from testObject.toList(list, $person, "literal", 42)
+ $object : Object() from testObject.toList(globalObject, $person, "literal", 42, { $person => globalObject, "key1" => { "key2" => "value2" } } )
then
list.add( $object );
end
More information about the jboss-svn-commits
mailing list