[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