[jboss-svn-commits] JBL Code SVN: r19956 - in labs/jbossrules/trunk/drools-compiler/src: test/java/org/drools/integrationtests and 1 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu May 15 01:58:51 EDT 2008


Author: michael.neale at jboss.com
Date: 2008-05-15 01:58:51 -0400 (Thu, 15 May 2008)
New Revision: 19956

Added:
   labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_GeneratedBeans.drl
Modified:
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/PackageBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java
Log:
integrating class generator

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/PackageBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/PackageBuilder.java	2008-05-14 19:36:50 UTC (rev 19955)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/PackageBuilder.java	2008-05-15 05:58:51 UTC (rev 19956)
@@ -493,10 +493,12 @@
     	String fullName = this.pkg.getName() + "." + typeDescr.getTypeName();
     	ClassDefinition def = new ClassDefinition(fullName);
     	Map<String, TypeFieldDescr> flds = typeDescr.getFields();
-    	for (TypeFieldDescr field : flds.values()) {
-			def.addField(new FieldDefinition(field.getFieldName(), field.getPattern().getObjectType()));
-		}
     	try {
+        	for (TypeFieldDescr field : flds.values()) {
+        		String fullFieldType = typeResolver.resolveType(field.getPattern().getObjectType()).getName();
+    			def.addField(new FieldDefinition(field.getFieldName(), fullFieldType));
+    		}
+
 	    	byte[] d = cb.buildClass(def);
 	    	if (this.generatedBeanClassLoader == null) {
 	    		this.generatedBeanClassLoader = new MapBackedClassLoader(this.configuration.getClassLoader());

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java	2008-05-14 19:36:50 UTC (rev 19955)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java	2008-05-15 05:58:51 UTC (rev 19956)
@@ -17,12 +17,16 @@
  */
 
 import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.InputStreamReader;
 import java.io.ObjectInput;
+import java.io.ObjectInputStream;
 import java.io.ObjectOutput;
+import java.io.ObjectOutputStream;
 import java.io.Reader;
 import java.io.StringReader;
+import java.lang.reflect.Method;
 import java.math.BigDecimal;
 import java.math.BigInteger;
 import java.util.ArrayList;
@@ -106,6 +110,9 @@
 import org.drools.event.ObjectRetractedEvent;
 import org.drools.event.ObjectUpdatedEvent;
 import org.drools.event.WorkingMemoryEventListener;
+import org.drools.factmodel.ClassBuilder;
+import org.drools.factmodel.ClassDefinition;
+import org.drools.factmodel.FieldDefinition;
 import org.drools.facttemplates.Fact;
 import org.drools.facttemplates.FactTemplate;
 import org.drools.lang.DrlDumper;
@@ -114,6 +121,7 @@
 import org.drools.lang.descr.RuleDescr;
 import org.drools.reteoo.ReteooRuleBase;
 import org.drools.rule.InvalidRulePackage;
+import org.drools.rule.MapBackedClassLoader;
 import org.drools.rule.Package;
 import org.drools.rule.builder.dialect.java.JavaDialectConfiguration;
 import org.drools.spi.Activation;
@@ -351,29 +359,29 @@
         // from JBRULES-1512
         String rule1 = "package com.sample\n" +
         "rule \"rule 1\"\n" +
-        "    salience 10\n"+        
-        "    when\n" +       
+        "    salience 10\n"+
+        "    when\n" +
         "    l : java.util.List()\n" +
         "    then\n" +
-        "        l.add( \"rule 1 executed\" );\n" + 
+        "        l.add( \"rule 1 executed\" );\n" +
         "end\n";
-        
+
         String rule2 = "package com.sample\n" +
         "global String str;\n" +
         "rule \"rule 2\"\n" +
         "    when\n" +
-        "    l : java.util.List()\n" +        
+        "    l : java.util.List()\n" +
         "    then\n" +
-        "        l.add( \"rule 2 executed \" + str);\n" + 
-        "end\n";        
-        
+        "        l.add( \"rule 2 executed \" + str);\n" +
+        "end\n";
+
         PackageBuilder builder1 = new PackageBuilder();
         builder1.addPackageFromDrl( new StringReader( rule1 ));
         Package pkg1 = builder1.getPackage();
         // build second package
         PackageBuilder builder2 = new PackageBuilder();
         builder2.addPackageFromDrl( new StringReader( rule2 ) );
-        Package pkg2 = builder2.getPackage();       
+        Package pkg2 = builder2.getPackage();
         // create rule base and add both packages
         RuleBase ruleBase = RuleBaseFactory.newRuleBase();
         ruleBase.addPackage(pkg1);
@@ -387,7 +395,7 @@
         assertEquals( "rule 1 executed", list.get(  0 ) );
         assertEquals( "rule 2 executed boo", list.get(  1 ));
     }
-    
+
     public void testCustomGlobalResolver() throws Exception {
         final PackageBuilder builder = new PackageBuilder();
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_globalCustomResolver.drl" ) ) );
@@ -528,6 +536,58 @@
         assertEquals( 1, ((List)wm.getGlobal("list")).size() );
     }
 
+    public void testGeneratedBeans() throws Exception {
+        final PackageBuilder builder = new PackageBuilder();
+        builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_GeneratedBeans.drl" ) ) );
+        assertFalse("" + builder.getErrors(), builder.hasErrors());
+
+        Package p = builder.getPackage();
+        assertEquals(2, p.getRules().length);
+
+
+
+        //to test it we will generate another class that looks just like it
+        ClassBuilder cb = new ClassBuilder();
+        ClassDefinition def = new ClassDefinition("org.drools.generatedbeans.Cheese");
+        def.addField(new FieldDefinition("type", "java.lang.String"));
+        byte[] classdata = cb.buildClass(def);
+        MapBackedClassLoader cl = new MapBackedClassLoader(this.getClass().getClassLoader());
+        cl.addClass("org.drools.generatedbeans.Cheese", classdata);
+
+
+        //this one doesn't work
+        RuleBase ruleBase = RuleBaseFactory.newRuleBase(new RuleBaseConfiguration(cl));
+
+
+        //this one does work...
+        ruleBase = RuleBaseFactory.newRuleBase(new RuleBaseConfiguration(p.getDialectDatas().getClassLoader()));
+
+        ruleBase.addPackage( p );
+
+        //this one just won't work
+        //Class cc = cl.loadClass("org.drools.generatedbeans.Cheese");
+
+        //this one has an error with shadow proxies unless I use the same classloader as the package...
+        Class cc = p.getDialectDatas().getClassLoader().loadClass("org.drools.generatedbeans.Cheese");
+
+        Object cheese = cc.newInstance();
+
+        WorkingMemory wm = ruleBase.newStatefulSession();
+        List result = new ArrayList();
+        wm.setGlobal("list", result);
+
+        wm.insert(cheese);
+        wm.fireAllRules();
+        assertEquals(1, result.size());
+        Integer r = (Integer) result.get(0);
+        assertEquals(new Integer(5), r);
+
+
+
+
+
+    }
+
     public void testNullHandling() throws Exception {
         final PackageBuilder builder = new PackageBuilder();
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_NullHandling.drl" ) ) );
@@ -743,7 +803,7 @@
         assertEquals( bill,
                       ((List)workingMemory.getGlobal("list")).get( 0 ) );
     }
-    
+
     public void testFactBindings() throws Exception {
         final PackageBuilder builder = new PackageBuilder();
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_FactBindings.drl" ) ) );
@@ -789,7 +849,7 @@
         assertSame( bigCheese,
                     event.getObject() );
     }
-    
+
     public void testFactTemplate() throws Exception {
         final PackageBuilder builder = new PackageBuilder();
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_FactTemplate.drl" ) ) );
@@ -825,9 +885,9 @@
                     fact );
         assertEquals( new Integer( 200 ),
                       fact.getFieldValue( "price" ) );
-        assertEquals( -1, stiltonHandle.getId() );        
+        assertEquals( -1, stiltonHandle.getId() );
     }
-    
+
     public void testFactTemplateFieldBinding() throws Exception {
         // from JBRULES-1512
         String rule1 = "package org.drools.entity\n" +
@@ -839,22 +899,22 @@
         "rule TestEntity\n" +
 
         "    when\n" +
-        "        Settlement(InstrumentType == \"guitar\", name : InstrumentName)\n" +        
+        "        Settlement(InstrumentType == \"guitar\", name : InstrumentName)\n" +
         "    then \n" +
         "        list.add( name ) ;\n" +
         "end\n";
-              
+
         PackageBuilder builder = new PackageBuilder();
         builder.addPackageFromDrl( new StringReader( rule1 ));
         Package pkg = builder.getPackage();
-        
+
         RuleBase ruleBase = RuleBaseFactory.newRuleBase();
         ruleBase.addPackage(pkg);
 
         WorkingMemory wm = ruleBase.newStatefulSession();
         List list = new ArrayList();
         wm.setGlobal(  "list", list );
-        
+
         final FactTemplate cheese = pkg.getFactTemplate( "Settlement" );
         final Fact guitar = cheese.createFact( 0 );
         guitar.setFieldValue( "InstrumentType",
@@ -865,7 +925,7 @@
 
         wm.fireAllRules();
         assertEquals( "gibson", list.get(  0 ) );
-    }     
+    }
 
     public void testPropertyChangeSupport() throws Exception {
         final PackageBuilder builder = new PackageBuilder();

Added: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_GeneratedBeans.drl
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_GeneratedBeans.drl	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_GeneratedBeans.drl	2008-05-15 05:58:51 UTC (rev 19956)
@@ -0,0 +1,31 @@
+package org.drools.generatedbeans;
+
+
+global java.util.List list;
+
+
+declare Cheese
+    type: String
+end
+
+declare Person
+	age: Integer
+end
+
+
+
+rule "simple rule"
+    when
+        Cheese(  )
+    then
+		list.add( new Integer(5) );
+end
+
+
+
+rule "another"
+    when
+     	Person( age== 7 )
+    then
+    	list.add( new Integer(7) );
+end
\ No newline at end of file


Property changes on: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_GeneratedBeans.drl
___________________________________________________________________
Name: svn:eol-style
   + native




More information about the jboss-svn-commits mailing list