[jboss-svn-commits] JBL Code SVN: r20508 - in labs/jbossrules/trunk: drools-compiler/src/main/java/org/drools/compiler and 4 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Sun Jun 15 22:32:12 EDT 2008
Author: michael.neale at jboss.com
Date: 2008-06-15 22:32:12 -0400 (Sun, 15 Jun 2008)
New Revision: 20508
Modified:
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/brms/server/rules/SuggestionCompletionLoader.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/PackageBuilder.java
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/brms/server/rules/SuggestionCompletionLoaderTest.java
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java
labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/lang/declare_type_with_fields.drl
labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/builder/BRMSPackageBuilderTest.java
Log:
improvements for dynamic facts
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/brms/server/rules/SuggestionCompletionLoader.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/brms/server/rules/SuggestionCompletionLoader.java 2008-06-15 22:55:37 UTC (rev 20507)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/brms/server/rules/SuggestionCompletionLoader.java 2008-06-16 02:32:12 UTC (rev 20508)
@@ -9,6 +9,8 @@
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
+import java.util.Map;
+import java.util.Set;
import java.util.jar.JarEntry;
import java.util.jar.JarInputStream;
@@ -24,6 +26,8 @@
import org.drools.lang.descr.GlobalDescr;
import org.drools.lang.descr.ImportDescr;
import org.drools.lang.descr.PackageDescr;
+import org.drools.lang.descr.TypeDeclarationDescr;
+import org.drools.lang.descr.TypeFieldDescr;
import org.drools.lang.dsl.DSLMapping;
import org.drools.lang.dsl.DSLMappingEntry;
import org.drools.lang.dsl.DSLMappingFile;
@@ -272,14 +276,12 @@
final String className = imp.getTarget();
resolver.addImport( className );
- final Class clazz = loadClass( className,
- jars );
+ final Class clazz = loadClass( className, jars );
if ( clazz != null ) {
try {
final String shortTypeName = getShortNameOfClass( clazz.getName() );
- loadClassFields( clazz,
- shortTypeName );
+ loadClassFields( clazz, shortTypeName );
this.builder.addFactType( shortTypeName );
} catch ( final IOException e ) {
this.errors.add( "Error while inspecting the class: " + className + ". The error was: " + e.getMessage() );
@@ -289,6 +291,44 @@
}
}
+ /** now we do the dynamic facts - the declared types */
+ Set<String> declaredTypes = new HashSet<String>();
+
+ for ( final Iterator<TypeDeclarationDescr> it = pkgDescr.getTypeDeclarations().iterator(); it.hasNext(); ) {
+ TypeDeclarationDescr td = it.next();
+
+ if (td.getFields().size() > 0) {
+ //add the type to the map
+ String declaredType = td.getTypeName();
+ declaredTypes.add(declaredType);
+ this.builder.addFactType(declaredType);
+ List<String> fieldNames = new ArrayList<String>();
+ for (Map.Entry<String, TypeFieldDescr> f : td.getFields().entrySet()) {
+ String fieldName = f.getKey();
+ fieldNames.add(fieldName);
+ String fieldClass = f.getValue().getPattern().getObjectType();
+
+
+ if (declaredTypes.contains(fieldClass)) {
+ this.builder.addFieldType( declaredType + "." + fieldName, SuggestionCompletionEngine.TYPE_OBJECT );
+ } else {
+ try {
+ Class clz = resolver.resolveType(fieldClass);
+ this.builder.addFieldType(declaredType + "." + fieldName, getFieldType(clz));
+ } catch (ClassNotFoundException e) {
+ this.errors.add( "Class of field not found: " + fieldClass );
+ }
+ }
+
+ }
+
+ this.builder.addFieldsForType(declaredType, fieldNames.toArray(new String[fieldNames.size()]));
+
+ }
+ }
+
+
+
// iterating over templates
populateFactTemplateTypes( pkgDescr,
resolver );
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-06-15 22:55:37 UTC (rev 20507)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/PackageBuilder.java 2008-06-16 02:32:12 UTC (rev 20508)
@@ -494,7 +494,7 @@
}
/**
- *
+ *
* @throws SecurityException
* @throws IllegalArgumentException
* @throws InstantiationException
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/brms/server/rules/SuggestionCompletionLoaderTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/brms/server/rules/SuggestionCompletionLoaderTest.java 2008-06-15 22:55:37 UTC (rev 20507)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/brms/server/rules/SuggestionCompletionLoaderTest.java 2008-06-16 02:32:12 UTC (rev 20508)
@@ -32,6 +32,22 @@
}
+ public void testGeneratedBeans() throws Exception {
+ SuggestionCompletionLoader loader = new SuggestionCompletionLoader();
+ SuggestionCompletionEngine eng = loader.getSuggestionEngine( "package foo \n declare GenBean \n id: int \n name : String \n end \n declare GenBean2 \n list: java.util.List \n gb: GenBean \n end", new ArrayList(), new ArrayList() );
+ assertFalse(loader.hasErrors());
+ assertNotNull(eng);
+
+ assertEquals(2, eng.factTypes.length);
+ assertEquals("GenBean", eng.factTypes[0]);
+ assertEquals("GenBean2", eng.factTypes[1]);
+
+ assertEquals(SuggestionCompletionEngine.TYPE_NUMERIC, eng.getFieldType( "GenBean", "id" ));
+ assertEquals(SuggestionCompletionEngine.TYPE_STRING, eng.getFieldType( "GenBean", "name"));
+
+ }
+
+
public void testGlobal() throws Exception {
SuggestionCompletionLoader loader = new SuggestionCompletionLoader();
SuggestionCompletionEngine eng = loader.getSuggestionEngine( "package foo \n global org.drools.Person p", new ArrayList(), new ArrayList() );
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-06-15 22:55:37 UTC (rev 20507)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java 2008-06-16 02:32:12 UTC (rev 20508)
@@ -122,6 +122,7 @@
import org.drools.spi.ConsequenceExceptionHandler;
import org.drools.spi.GlobalResolver;
import org.drools.xml.XmlDumper;
+import org.mvel.MVEL;
/** Run all the tests with the ReteOO engine implementation */
public class MiscTest extends TestCase {
@@ -540,18 +541,36 @@
// test rulebase serialization
ruleBase = SerializationHelper.serializeObject(ruleBase);
-
- // Retrieve the generated fact type
+
+ // Retrieve the generated fact type
FactType cheeseFact = ruleBase.getFactType( "org.drools.generatedbeans.Cheese" );
// Create a new Fact instance
Object cheese = cheeseFact.newInstance();
+
+
+
+
+//see - it works with mvel !
+// Map<String, Object> tokens = new HashMap<String, Object>();
+// tokens.put("c", cheese);
+// MVEL.eval("c.type= 'cheddar'", tokens);
+// Object o = MVEL.eval("c.type", tokens);
+// System.err.println(o);
+
+
+
// Set a field value using the more verbose method chain...
// should we add short cuts?
- cheeseFact.getField( "type" ).getFieldAccessor().setValue( cheese,
- "stilton" );
+// cheeseFact.getField( "type" ).getFieldAccessor().setValue( cheese,
+// "stilton" );
+ cheeseFact.set(cheese, "type", "stilton");
+ assertEquals("stilton", cheeseFact.get(cheese, "type"));
+
+
+
// just documenting toString() result:
// assertEquals( "Cheese( type=stilton )",
// cheese.toString() );
@@ -579,7 +598,7 @@
result.get( 0 ) );
// creating a person that likes the cheese:
- // Retrieve the generated fact type
+ // Retrieve the generated fact type
FactType personFact = ruleBase.getFactType( "org.drools.generatedbeans.Person" );
// Create a new Fact instance
@@ -5311,7 +5330,7 @@
list.size() );
}
-
+
public class SubvertedClassLoader extends URLClassLoader {
private static final long serialVersionUID = 400L;
@@ -5337,6 +5356,6 @@
return c;
}
}
-
+
}
Modified: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/lang/declare_type_with_fields.drl
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/lang/declare_type_with_fields.drl 2008-06-15 22:55:37 UTC (rev 20507)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/lang/declare_type_with_fields.drl 2008-06-16 02:32:12 UTC (rev 20508)
@@ -1,5 +1,5 @@
declare SomeFact
- name: String
+ name : String
age: Integer
end
Modified: labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/builder/BRMSPackageBuilderTest.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/builder/BRMSPackageBuilderTest.java 2008-06-15 22:55:37 UTC (rev 20507)
+++ labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/builder/BRMSPackageBuilderTest.java 2008-06-16 02:32:12 UTC (rev 20508)
@@ -1,13 +1,13 @@
package org.drools.brms.server.builder;
/*
* Copyright 2005 JBoss Inc
- *
+ *
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
- *
+ *
* http://www.apache.org/licenses/LICENSE-2.0
- *
+ *
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -31,19 +31,19 @@
import org.drools.rule.builder.dialect.java.JavaDialectConfiguration;
public class BRMSPackageBuilderTest extends TestCase {
-
- // Added this empty test so this class doesn't fail
+
+ // Added this empty test so this class doesn't fail
public void testEmpty() {
-
+
}
-
+
public void setUp() {
System.getProperties().remove( "drools.dialect.java.compiler" );
}
-
+
public void tearDown() {
System.getProperties().remove( "drools.dialect.java.compiler" );
- }
+ }
// @FIXME rule "abc" is null and the Packge has no namespace
public void testPartialPackage() throws Exception {
@@ -52,60 +52,96 @@
List<JarInputStream> l = new ArrayList<JarInputStream>();
l.add( jis );
BRMSPackageBuilder builder = BRMSPackageBuilder.getInstance( l );
-
+
PackageDescr pc = new PackageDescr("foo.bar");
builder.addPackage( pc );
-
+
String header = "import com.billasurf.Person\n import com.billasurf.Board";
builder.addPackageFromDrl( new StringReader(header) );
assertFalse(builder.hasErrors());
-
- JavaDialectConfiguration javaConf = ( JavaDialectConfiguration ) builder.getPackageBuilderConfiguration().getDialectConfiguration( "java" );
+
+ JavaDialectConfiguration javaConf = ( JavaDialectConfiguration ) builder.getPackageBuilderConfiguration().getDialectConfiguration( "java" );
assertEquals(JavaDialectConfiguration.JANINO, javaConf.getCompiler());
-
+
String ruleAtom = "rule foo \n when \n Person() \n then \n System.out.println(42); end";
builder.addPackageFromDrl( new StringReader(ruleAtom) );
- if (builder.hasErrors()) {
+ if (builder.hasErrors()) {
System.err.println(builder.getErrors().getErrors()[0].getMessage());
}
assertFalse(builder.hasErrors());
ruleAtom = "rule foo2 \n when \n Person() \n then \n System.out.println(42); end";
builder.addPackageFromDrl( new StringReader(ruleAtom) );
- if (builder.hasErrors()) {
+ if (builder.hasErrors()) {
System.err.println(builder.getErrors().getErrors()[0].getMessage());
}
assertFalse(builder.hasErrors());
-
+
assertEquals("foo.bar", builder.getPackage().getName());
-
-
+
+
String functionAtom = "function int fooBar(String x) { return 42; }";
builder.addPackageFromDrl( new StringReader(functionAtom) );
- if (builder.hasErrors()) {
+ if (builder.hasErrors()) {
System.err.println(builder.getErrors().getErrors()[0].getMessage());
}
assertFalse(builder.hasErrors());
-
+
Package p = builder.getPackage();
assertEquals(2, p.getRules().length);
assertEquals(1, p.getFunctions().size());
assertNotNull(p.getRule( "foo2" ));
-
+
functionAtom = "xxx";
builder.addPackageFromDrl( new StringReader(functionAtom) );
assertTrue(builder.hasErrors());
builder.clearErrors();
assertFalse(builder.hasErrors());
-
-
+
+
}
-
+
+ public void testGeneratedBeans() throws Exception {
+
+ JarInputStream jis = new JarInputStream( this.getClass().getResourceAsStream( "/billasurf.jar" ) );
+ List<JarInputStream> l = new ArrayList<JarInputStream>();
+ l.add( jis );
+ BRMSPackageBuilder builder = BRMSPackageBuilder.getInstance( l );
+
+ PackageDescr pc = new PackageDescr("foo.bar");
+ builder.addPackage( pc );
+
+ String header = "import com.billasurf.Person\n import com.billasurf.Board\n declare GenBean \n name: String \n end";
+ builder.addPackageFromDrl( new StringReader(header) );
+ assertFalse(builder.hasErrors());
+
+ JavaDialectConfiguration javaConf = ( JavaDialectConfiguration ) builder.getPackageBuilderConfiguration().getDialectConfiguration( "java" );
+ assertEquals(JavaDialectConfiguration.JANINO, javaConf.getCompiler());
+
+ String ruleAtom = "rule foo \n when \n Person() \n GenBean(name=='mike')\n then \n System.out.println(42); end";
+ builder.addPackageFromDrl( new StringReader(ruleAtom) );
+ if (builder.hasErrors()) {
+ System.err.println(builder.getErrors().getErrors()[0].getMessage());
+ }
+ assertFalse(builder.hasErrors());
+
+ ruleAtom = "rule foo2 \n when \n Person() \n then \n System.out.println(42); end";
+ builder.addPackageFromDrl( new StringReader(ruleAtom) );
+ if (builder.hasErrors()) {
+ System.err.println(builder.getErrors().getErrors()[0].getMessage());
+ }
+ assertFalse(builder.hasErrors());
+
+ assertEquals("foo.bar", builder.getPackage().getName());
+
+
+ }
+
public void testHasDSL() {
BRMSPackageBuilder builder = new BRMSPackageBuilder(null);
assertFalse(builder.hasDSL());
}
-
+
public void testGetExpander() {
BRMSPackageBuilder builder = new BRMSPackageBuilder(null);
List<DSLMappingFile> files = new ArrayList<DSLMappingFile>();
@@ -114,7 +150,7 @@
assertTrue(builder.hasDSL());
assertNotNull(builder.getDSLExpander());
}
-
+
// public void testDefaultCompiler() {
// assertEquals(JavaDialectConfiguration.JANINO, BRMSPackageBuilder.COMPILER);
// assertEquals(PackageBuilderConfiguration.JANINO, BRMSPackageBuilder.getPreferredBRMSCompiler());
@@ -123,7 +159,7 @@
// System.setProperty( "drools.compiler", "" );
// assertEquals(PackageBuilderConfiguration.JANINO, BRMSPackageBuilder.getPreferredBRMSCompiler());
// }
-
+
// @FIXME rule "abc" is null and the Packge has no namespace
public void testDefaultCompiler() throws Exception {
@@ -131,18 +167,18 @@
List<JarInputStream> l = new ArrayList<JarInputStream>();
l.add( jis );
BRMSPackageBuilder builder = BRMSPackageBuilder.getInstance( l );
-
+
PackageDescr pc = new PackageDescr("foo.bar");
builder.addPackage( pc );
-
+
String header = "import com.billasurf.Person\n import com.billasurf.Board";
builder.addPackageFromDrl( new StringReader(header) );
assertFalse(builder.hasErrors());
-
- JavaDialectConfiguration javaConf = ( JavaDialectConfiguration ) builder.getPackageBuilderConfiguration().getDialectConfiguration( "java" );
+
+ JavaDialectConfiguration javaConf = ( JavaDialectConfiguration ) builder.getPackageBuilderConfiguration().getDialectConfiguration( "java" );
assertEquals(JavaDialectConfiguration.JANINO, javaConf.getCompiler());
}
-
+
public void testEclipseCompiler() throws Exception {
System.setProperty( "drools.dialect.java.compiler", "ECLIPSE" );
@@ -150,17 +186,17 @@
List<JarInputStream> l = new ArrayList<JarInputStream>();
l.add( jis );
BRMSPackageBuilder builder = BRMSPackageBuilder.getInstance( l );
-
+
PackageDescr pc = new PackageDescr("foo.bar");
builder.addPackage( pc );
-
+
String header = "import com.billasurf.Person\n import com.billasurf.Board";
builder.addPackageFromDrl( new StringReader(header) );
assertFalse(builder.hasErrors());
-
- JavaDialectConfiguration javaConf = ( JavaDialectConfiguration ) builder.getPackageBuilderConfiguration().getDialectConfiguration( "java" );
+
+ JavaDialectConfiguration javaConf = ( JavaDialectConfiguration ) builder.getPackageBuilderConfiguration().getDialectConfiguration( "java" );
assertEquals(JavaDialectConfiguration.ECLIPSE, javaConf.getCompiler());
- }
-
+ }
+
}
\ No newline at end of file
More information about the jboss-svn-commits
mailing list