[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