[jboss-svn-commits] JBL Code SVN: r21419 - 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
Sun Aug 10 20:15:00 EDT 2008


Author: tirelli
Date: 2008-08-10 20:15:00 -0400 (Sun, 10 Aug 2008)
New Revision: 21419

Added:
   labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_GeneratedBeans2.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:
Adding support to @key metadata to define PKs on generated beans

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-08-10 12:56:26 UTC (rev 21418)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/PackageBuilder.java	2008-08-11 00:15:00 UTC (rev 21419)
@@ -33,8 +33,6 @@
 import org.drools.base.ClassFieldAccessorCache;
 import org.drools.base.ClassFieldReader;
 import org.drools.base.ClassFieldWriter;
-import org.drools.base.ClassTypeResolver;
-import org.drools.base.TypeResolver;
 import org.drools.commons.jci.problems.CompilationProblem;
 import org.drools.factmodel.ClassBuilder;
 import org.drools.factmodel.ClassDefinition;
@@ -58,7 +56,6 @@
 import org.drools.lang.descr.TypeFieldDescr;
 import org.drools.process.core.Process;
 import org.drools.reteoo.ReteooRuleBase;
-import org.drools.rule.ImportDeclaration;
 import org.drools.rule.Package;
 import org.drools.rule.Rule;
 import org.drools.rule.TypeDeclaration;
@@ -726,8 +723,12 @@
         try {
             for ( TypeFieldDescr field : flds.values() ) {
                 String fullFieldType = pkgRegistry.getTypeResolver().resolveType( field.getPattern().getObjectType() ).getName();
-                def.addField( new FieldDefinition( field.getFieldName(),
-                                                   fullFieldType ) );
+                FieldDefinition fieldDef = new FieldDefinition( field.getFieldName(),
+                                                                fullFieldType );
+                // field is marked as PK
+                boolean isKey = field.getMetaAttributes().containsKey( "key" );
+                fieldDef.setKey( isKey );
+                def.addField( fieldDef );
             }
 
             byte[] d = cb.buildClass( def );

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-08-10 12:56:26 UTC (rev 21418)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java	2008-08-11 00:15:00 UTC (rev 21419)
@@ -524,7 +524,7 @@
 
     public void testGeneratedBeans1() throws Exception {
         final PackageBuilderConfiguration pbconf = new PackageBuilderConfiguration();
-        pbconf.setDumpDir( new File( "target" ) );
+        //pbconf.setDumpDir( new File( "target" ) );
         final PackageBuilder builder = new PackageBuilder( pbconf );
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_GeneratedBeans.drl" ) ) );
         assertFalse( builder.getErrors().toString(),
@@ -644,6 +644,134 @@
 
     }
 
+    public void testGeneratedBeans2() throws Exception {
+        final PackageBuilderConfiguration pbconf = new PackageBuilderConfiguration();
+        //pbconf.setDumpDir( new File( "target" ) );
+        final PackageBuilder builder = new PackageBuilder( pbconf );
+        builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_GeneratedBeans2.drl" ) ) );
+        assertFalse( builder.getErrors().toString(),
+                     builder.hasErrors() );
+
+        Package p = builder.getPackage();
+        assertEquals( 2,
+                      p.getRules().length );
+
+        // disabling shadow proxies, since they don't work yet with generated facts and
+        // we will scrap shadow proxies in drools 5 anyway.
+        RuleBaseConfiguration conf = new RuleBaseConfiguration();
+        RuleBase ruleBase = RuleBaseFactory.newRuleBase( conf );
+        ruleBase.addPackage( p );
+
+        // test rulebase serialization
+        ruleBase = SerializationHelper.serializeObject( ruleBase );
+
+        // Retrieve the generated fact type
+        FactType cheeseFact = ruleBase.getFactType( "org.drools.generatedbeans.Cheese" );
+
+        // Create a new Fact instance
+        Object cheese = cheeseFact.newInstance();
+
+        cheeseFact.set( cheese,
+                        "type",
+                        "stilton" );
+        assertEquals( "stilton",
+                      cheeseFact.get( cheese,
+                                      "type" ) );
+        
+        // testing equals method
+        Object cheese2 = cheeseFact.newInstance();
+        cheeseFact.set( cheese2,
+                        "type",
+                        "stilton" );
+        assertEquals( cheese,
+                      cheese2 );
+        
+
+        FactType personType = ruleBase.getFactType( "org.drools.generatedbeans.Person" );
+
+        Object ps = personType.newInstance();
+        personType.set( ps,
+                        "name",
+                        "mark" );
+        personType.set( ps,
+                        "last",
+                        "proctor" );
+        personType.set( ps,
+                        "age",
+                        42 );
+
+        Object ps2 = personType.newInstance();
+        personType.set( ps2,
+                        "name",
+                        "mark" );
+        personType.set( ps2,
+                        "last",
+                        "proctor" );
+        personType.set( ps2,
+                        "age",
+                        30 );
+        
+        assertEquals( ps, ps2);
+        
+        personType.set( ps2,
+                        "last",
+                        "little" );
+        
+        assertFalse( ps.equals( ps2 ) );
+
+        // creating a stateful session
+        StatefulSession wm = ruleBase.newStatefulSession();
+        Object cg = cheeseFact.newInstance();
+        wm.setGlobal("cg", cg);
+        List result = new ArrayList();
+        wm.setGlobal( "list",
+                      result );
+
+        // inserting fact
+        wm.insert( cheese );
+
+        // firing rules
+        wm.fireAllRules();
+
+        // checking results
+        assertEquals( 1,
+                      result.size() );
+        assertEquals( new Integer( 5 ),
+                      result.get( 0 ) );
+
+        // creating a person that likes the cheese:
+        // Retrieve the generated fact type
+        FactType personFact = ruleBase.getFactType( "org.drools.generatedbeans.Person" );
+
+        // Create a new Fact instance
+        Object person = personFact.newInstance();
+
+        // Set a field value using the more verbose method chain...
+        // should we add short cuts?
+        personFact.getField( "likes" ).getFieldAccessor().setValue( person,
+                                                                    cheese );
+        // demonstrating primitive type support
+        personFact.getField( "age" ).getFieldAccessor().setIntValue( person,
+                                                                     7 );
+
+        // just documenting toString() result:
+        //        assertEquals( "Person( age=7, likes=Cheese( type=stilton ) )",
+        //                      person.toString() );
+
+        // inserting fact
+        wm.insert( person );
+
+        // firing rules
+        wm.fireAllRules();
+
+        // checking results
+        assertEquals( 2,
+                      result.size() );
+        assertEquals( person,
+                      result.get( 1 ) );
+
+    }
+
     public void testNullHandling() throws Exception {
         final PackageBuilder builder = new PackageBuilder();
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_NullHandling.drl" ) ) );

Added: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_GeneratedBeans2.drl
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_GeneratedBeans2.drl	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_GeneratedBeans2.drl	2008-08-11 00:15:00 UTC (rev 21419)
@@ -0,0 +1,32 @@
+package org.drools.generatedbeans;
+
+global java.util.List list;
+global Cheese cg;
+
+
+declare Cheese
+    type: String @key()
+end
+
+declare Person
+    name : String @key()
+    last : String @key()
+	age: int
+	likes: Cheese
+end
+
+rule "simple rule"
+    when
+        Cheese( type == "stilton" )
+    then
+		list.add( new Integer(5) );
+		cg.setType("nothing");
+end
+
+rule "another"
+    when
+        $cheese : Cheese( type == "stilton" )
+     	$person : Person( age== 7, likes == $cheese )
+    then
+    	list.add( $person );
+end
\ No newline at end of file




More information about the jboss-svn-commits mailing list