[jboss-svn-commits] JBL Code SVN: r14388 - in labs/jbossrules/trunk: drools-compiler/src/main/resources/org/drools/rule/builder/dialect/java and 11 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Mon Aug 20 10:38:32 EDT 2007


Author: tirelli
Date: 2007-08-20 10:38:31 -0400 (Mon, 20 Aug 2007)
New Revision: 14388

Added:
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/OuterClass.java
   labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_AccumulateInnerClass.drl
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/util/ClassUtilsTest.java
Modified:
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/DeclarationTypeFixer.java
   labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/rule/builder/dialect/java/javaRule.mvel
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/AccumulateTest.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/BaseClassFieldExtractor.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ClassFieldExtractor.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/extractors/ArrayExtractor.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/facttemplates/FactTemplateFieldExtractor.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/Extractor.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/GlobalExtractor.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/PatternExtractor.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/ClassUtils.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/EvaluatorFactoryTest.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/CompositeObjectSinkAdapterTest.java
Log:
JBRULES-1092: fixing transformation of class name into string

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/DeclarationTypeFixer.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/DeclarationTypeFixer.java	2007-08-20 12:45:28 UTC (rev 14387)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/DeclarationTypeFixer.java	2007-08-20 14:38:31 UTC (rev 14388)
@@ -4,6 +4,7 @@
 package org.drools.rule.builder.dialect.java;
 
 import org.drools.rule.Declaration;
+import org.drools.util.ClassUtils;
 
 /**
  * @author fburlet
@@ -14,11 +15,6 @@
 
     public String fix(final Declaration declaration) {
         final Class classType = declaration.getExtractor().getExtractToClass();
-        if ( classType.isArray() ) {
-            return classType.getComponentType().getName().concat( "[]" );
-        };
-        // Does this replacement usefull in the declaration type ??
-        return classType.getName().replace( '$',
-                                            '.' );
+        return ClassUtils.canonicalName( classType );
     }
 }

Modified: labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/rule/builder/dialect/java/javaRule.mvel
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/rule/builder/dialect/java/javaRule.mvel	2007-08-20 12:45:28 UTC (rev 14387)
+++ labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/rule/builder/dialect/java/javaRule.mvel	2007-08-20 14:38:31 UTC (rev 14388)
@@ -42,7 +42,7 @@
                            @foreach{declarationTypes, declarations as type, declr} @{type} @{declr.identifier}@end{","}@if{globals != empty}, at end{} 
                            @foreach{globalTypes, globals as type, identifier} @{type} @{identifier} @end{","}
                            ) throws Exception {
-        @foreach{innerDeclarations as declr} @{declr.extractor.extractToClass.getName()} @{declr.identifier} = (@{declr.extractor.extractToClass.getName()}) innerDeclarations[@{i0}].@{declr.extractor.nativeReadMethod.name}( (org.drools.common.InternalWorkingMemory) workingMemory, object );
+        @foreach{innerDeclarations as declr} @{declr.extractor.extractToClassName} @{declr.identifier} = (@{declr.extractor.extractToClassName}) innerDeclarations[@{i0}].@{declr.extractor.nativeReadMethod.name}( (org.drools.common.InternalWorkingMemory) workingMemory, object );
         @end{}
         @{actionCode}
     }
@@ -53,7 +53,7 @@
                            @foreach{declarationTypes, declarations as type, declr} @{type} @{declr.identifier}@end{","}@if{globals != empty}, at end{} 
                            @foreach{globalTypes, globals as type, identifier} @{type} @{identifier} @end{","}
                            ) throws Exception {
-        @foreach{innerDeclarations as declr} @{declr.extractor.extractToClass.getName()} @{declr.identifier} = (@{declr.extractor.extractToClass.getName()}) innerDeclarations[@{i0}].@{declr.extractor.nativeReadMethod.name}( (org.drools.common.InternalWorkingMemory) workingMemory, object );
+        @foreach{innerDeclarations as declr} @{declr.extractor.extractToClassName} @{declr.identifier} = (@{declr.extractor.extractToClassName}) innerDeclarations[@{i0}].@{declr.extractor.nativeReadMethod.name}( (org.drools.common.InternalWorkingMemory) workingMemory, object );
         @end{}
         @{reverseCode}
     }

Added: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/OuterClass.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/OuterClass.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/OuterClass.java	2007-08-20 14:38:31 UTC (rev 14388)
@@ -0,0 +1,30 @@
+package org.drools;
+
+public class OuterClass {
+    private String attr1;
+
+    public String getAttr1() {
+        return attr1;
+    }
+
+    public void setAttr1(String attr1) {
+        this.attr1 = attr1;
+    }
+
+    public static class InnerClass {
+        private int intAttr;
+
+        public InnerClass(int intAttr) {
+            super();
+            this.intAttr = intAttr;
+        }
+
+        public int getIntAttr() {
+            return intAttr;
+        }
+
+        public void setIntAttr(int intAttr) {
+            this.intAttr = intAttr;
+        }
+    }
+}

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/AccumulateTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/AccumulateTest.java	2007-08-20 12:45:28 UTC (rev 14387)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/AccumulateTest.java	2007-08-20 14:38:31 UTC (rev 14388)
@@ -12,6 +12,7 @@
 import org.drools.Cheese;
 import org.drools.Cheesery;
 import org.drools.FactHandle;
+import org.drools.OuterClass;
 import org.drools.Person;
 import org.drools.RuleBase;
 import org.drools.RuleBaseConfiguration;
@@ -826,4 +827,26 @@
                              results2.get( 4 ) );
     }
 
+    public void testAccumulateInnerClass() throws Exception {
+
+        // read in the source
+        final Reader reader = new InputStreamReader( getClass().getResourceAsStream( "test_AccumulateInnerClass.drl" ) );
+        final RuleBase ruleBase = loadRuleBase( reader );
+
+        final WorkingMemory wm = ruleBase.newStatefulSession();
+        final List results = new ArrayList();
+
+        wm.setGlobal( "results",
+                      results );
+
+        wm.insert( new OuterClass.InnerClass( 10 ) );
+        wm.insert( new OuterClass.InnerClass( 5 ) );
+
+        wm.fireAllRules();
+
+        Assert.assertEquals( new Integer( 15 ),
+                             results.get( 0 ) );
+    }
+    
+    
 }

Added: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_AccumulateInnerClass.drl
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_AccumulateInnerClass.drl	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_AccumulateInnerClass.drl	2007-08-20 14:38:31 UTC (rev 14388)
@@ -0,0 +1,17 @@
+package org.drools;
+
+import org.drools.OuterClass.InnerClass;
+
+global java.util.List results;
+
+rule "Accumulate Inner Class" 
+    when
+    	$totalAmount : Number() from accumulate( $inner : InnerClass( $val : intAttr ),
+                                                  init( int total = 0; ),
+    	                                          action( total += $val; ),
+                                                  result( new Integer( total ) ) );
+    then
+        //System.out.println("Total amount = US$ "+$totalAmount );
+        results.add($totalAmount);
+end  
+


Property changes on: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_AccumulateInnerClass.drl
___________________________________________________________________
Name: svn:executable
   + *

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/BaseClassFieldExtractor.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/BaseClassFieldExtractor.java	2007-08-20 12:45:28 UTC (rev 14387)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/BaseClassFieldExtractor.java	2007-08-20 14:38:31 UTC (rev 14388)
@@ -18,6 +18,7 @@
 
 import org.drools.RuntimeDroolsException;
 import org.drools.spi.FieldExtractor;
+import org.drools.util.ClassUtils;
 import org.drools.util.asm.ClassFieldInspector;
 
 /**
@@ -74,6 +75,10 @@
         return this.fieldType;
     }
 
+    public String getExtractToClassName() {
+        return ClassUtils.canonicalName( this.fieldType );
+    }
+
     public ValueType getValueType() {
         return this.valueType;
     }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ClassFieldExtractor.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ClassFieldExtractor.java	2007-08-20 12:45:28 UTC (rev 14387)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ClassFieldExtractor.java	2007-08-20 14:38:31 UTC (rev 14388)
@@ -23,6 +23,7 @@
 import org.drools.RuntimeDroolsException;
 import org.drools.common.InternalWorkingMemory;
 import org.drools.spi.FieldExtractor;
+import org.drools.util.ClassUtils;
 
 /**
  * This provides access to fields, and what their numerical index/object type is.
@@ -102,6 +103,10 @@
         return this.extractor.getExtractToClass();
     }
 
+    public String getExtractToClassName() {
+        return ClassUtils.canonicalName( this.extractor.getExtractToClass() );
+    }
+
     public String toString() {
         return "[ClassFieldExtractor class=" + this.clazz + " field=" + this.fieldName + "]";
     }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/extractors/ArrayExtractor.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/extractors/ArrayExtractor.java	2007-08-20 12:45:28 UTC (rev 14387)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/extractors/ArrayExtractor.java	2007-08-20 14:38:31 UTC (rev 14388)
@@ -5,6 +5,7 @@
 import org.drools.base.ValueType;
 import org.drools.common.InternalWorkingMemory;
 import org.drools.spi.Extractor;
+import org.drools.util.ClassUtils;
 
 public class ArrayExtractor implements Extractor {
     private final Extractor arrayExtractor;    
@@ -21,6 +22,10 @@
         return type;        
     }
     
+    public String getExtractToClassName() {
+        return ClassUtils.canonicalName( type );        
+    }
+    
     public boolean getBooleanValue(InternalWorkingMemory workingMemory, Object object) {
         Object[] array = ( Object[] ) this.arrayExtractor.getValue( workingMemory, object );
         return ( (Boolean)array[ this.index ]).booleanValue();

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/facttemplates/FactTemplateFieldExtractor.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/facttemplates/FactTemplateFieldExtractor.java	2007-08-20 12:45:28 UTC (rev 14387)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/facttemplates/FactTemplateFieldExtractor.java	2007-08-20 14:38:31 UTC (rev 14388)
@@ -6,6 +6,7 @@
 import org.drools.base.ValueType;
 import org.drools.common.InternalWorkingMemory;
 import org.drools.spi.FieldExtractor;
+import org.drools.util.ClassUtils;
 
 public class FactTemplateFieldExtractor
     implements
@@ -37,6 +38,10 @@
         return Fact.class;//this.factTemplate.getFieldTemplate( fieldIndex ).getValueType().getClass();
     }
 
+    public String getExtractToClassName() {
+        return ClassUtils.canonicalName( Fact.class );//this.factTemplate.getFieldTemplate( fieldIndex ).getValueType().getClass();
+    }
+
     public boolean getBooleanValue(InternalWorkingMemory workingMemory, final Object object) {
         return ((Boolean) ((Fact) object).getFieldValue( this.fieldIndex )).booleanValue();
     }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/Extractor.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/Extractor.java	2007-08-20 12:45:28 UTC (rev 14387)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/Extractor.java	2007-08-20 14:38:31 UTC (rev 14388)
@@ -52,6 +52,8 @@
 
     public Class getExtractToClass();
 
+    public String getExtractToClassName();
+
     public Method getNativeReadMethod();
 
     public int getHashCode(InternalWorkingMemory workingMemory, Object object);

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/GlobalExtractor.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/GlobalExtractor.java	2007-08-20 12:45:28 UTC (rev 14387)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/GlobalExtractor.java	2007-08-20 14:38:31 UTC (rev 14388)
@@ -23,6 +23,7 @@
 import org.drools.base.ClassObjectType;
 import org.drools.base.ValueType;
 import org.drools.common.InternalWorkingMemory;
+import org.drools.util.ClassUtils;
 
 /**
  * This is a global variable extractor used to get a global variable value
@@ -55,6 +56,10 @@
         return this.objectType.getValueType().getClassType();
     }
 
+    public String getExtractToClassName() {
+        return ClassUtils.canonicalName( this.objectType.getValueType().getClassType() );
+    }
+
     public ValueType getValueType() {
         return this.objectType.getValueType();
     }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/PatternExtractor.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/PatternExtractor.java	2007-08-20 12:45:28 UTC (rev 14387)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/PatternExtractor.java	2007-08-20 14:38:31 UTC (rev 14388)
@@ -8,6 +8,7 @@
 import org.drools.base.ValueType;
 import org.drools.common.InternalWorkingMemory;
 import org.drools.facttemplates.Fact;
+import org.drools.util.ClassUtils;
 
 /*
  * Copyright 2005 JBoss Inc
@@ -58,6 +59,17 @@
         }
     }
 
+    public String getExtractToClassName() {
+        Class clazz = null;
+        // @todo : this is a bit nasty, but does the trick
+        if ( this.objectType instanceof ClassObjectType ) {
+            clazz = ((ClassObjectType) this.objectType).getClassType();
+        } else {
+            clazz = Fact.class;
+        }
+        return ClassUtils.canonicalName( clazz );
+    }
+
     public ValueType getValueType() {
         return this.objectType.getValueType();
     }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/ClassUtils.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/ClassUtils.java	2007-08-20 12:45:28 UTC (rev 14387)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/ClassUtils.java	2007-08-20 14:38:31 UTC (rev 14388)
@@ -58,5 +58,22 @@
         final String relFileName = absFileName.substring( rootLength + 1 );
         return relFileName;
     }
+    
+    public static String canonicalName( Class clazz ) {
+        StringBuffer name = new StringBuffer();
+        
+        if( clazz.isArray() ) {
+            name.append( canonicalName( clazz.getComponentType() ) );
+            name.append( "[]" );
+        } else if( clazz.getDeclaringClass() == null ) {
+            name.append( clazz.getName() );
+        } else {
+            name.append( canonicalName( clazz.getDeclaringClass() ) );
+            name.append( "." );
+            name.append( clazz.getName().substring( clazz.getDeclaringClass().getName().length() + 1 ) );
+        }
+        
+        return name.toString();
+    }
 
 }

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/EvaluatorFactoryTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/EvaluatorFactoryTest.java	2007-08-20 12:45:28 UTC (rev 14387)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/EvaluatorFactoryTest.java	2007-08-20 14:38:31 UTC (rev 14388)
@@ -848,6 +848,10 @@
             return null;
         }
 
+        public String getExtractToClassName() {
+            return null;
+        }
+
         public float getFloatValue(InternalWorkingMemory workingMemory, final Object object) {
             return object != null ? ((Number) object).floatValue() : (float) 0.0;
         }

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/CompositeObjectSinkAdapterTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/CompositeObjectSinkAdapterTest.java	2007-08-20 12:45:28 UTC (rev 14387)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/CompositeObjectSinkAdapterTest.java	2007-08-20 14:38:31 UTC (rev 14388)
@@ -305,6 +305,11 @@
             return null;
         }
 
+        public String getExtractToClassName() {
+            //  Auto-generated method stub
+            return null;
+        }
+
         public float getFloatValue(InternalWorkingMemory workingMemory,
                                    final Object object) {
             //  Auto-generated method stub

Added: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/util/ClassUtilsTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/util/ClassUtilsTest.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/util/ClassUtilsTest.java	2007-08-20 14:38:31 UTC (rev 14388)
@@ -0,0 +1,61 @@
+package org.drools.util;
+
+import junit.framework.TestCase;
+
+public class ClassUtilsTest extends TestCase {
+
+    protected void setUp() throws Exception {
+        super.setUp();
+    }
+
+    protected void tearDown() throws Exception {
+        super.tearDown();
+    }
+
+    public void testCanonicalNameSimpleClass() {
+        String name = ClassUtils.canonicalName( ClassUtilsTest.class );
+        assertEquals( "org.drools.util.ClassUtilsTest",
+                      name );
+    }
+
+    public void testCanonicalNameInnerClass() {
+        String name = ClassUtils.canonicalName( A.class );
+        assertEquals( "org.drools.util.ClassUtilsTest.A",
+                      name );
+    }
+    
+    public void testCanonicalNameInnerInnerClass() {
+        String name = ClassUtils.canonicalName( A.B.class );
+        assertEquals( "org.drools.util.ClassUtilsTest.A.B",
+                      name );
+    }
+    
+    public void testCanonicalNameArray() {
+        String name = ClassUtils.canonicalName( Object[].class );
+        assertEquals( "java.lang.Object[]",
+                      name );
+    }
+    
+    public void testCanonicalNameMultiIndexArray() {
+        String name = ClassUtils.canonicalName( Object[][][].class );
+        assertEquals( "java.lang.Object[][][]",
+                      name );
+    }
+    
+    public void testCanonicalNameMultiIndexArrayInnerClass() {
+        String name = ClassUtils.canonicalName( A.B[][][].class );
+        assertEquals( "org.drools.util.ClassUtilsTest.A.B[][][]",
+                      name );
+    }
+    
+    public void testCanonicalNameMultiIndexArrayPrimitives() {
+        String name = ClassUtils.canonicalName( long[][][].class );
+        assertEquals( "long[][][]",
+                      name );
+    }
+    
+    public static class A {
+        public static class B {
+        }
+    }
+}




More information about the jboss-svn-commits mailing list