[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