[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