[jboss-svn-commits] JBL Code SVN: r32566 - in labs/jbossrules/trunk/drools-compiler/src: test/java/org/drools/guvnor/server/rules and 1 other directory.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed Apr 14 12:03:40 EDT 2010


Author: eaa
Date: 2010-04-14 12:03:38 -0400 (Wed, 14 Apr 2010)
New Revision: 32566

Modified:
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/guvnor/server/rules/SuggestionCompletionLoader.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/guvnor/server/rules/SuggestionCompletionLoaderTest.java
Log:
GUVNOR-527 Add the ability of creating Business Rules Templates using drools-templates 
	- SuggestionCompletionLoader now uses external providers to add extra Fact Types.
	- Fixed some failing tests and added tests for external providers and fact filters

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/guvnor/server/rules/SuggestionCompletionLoader.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/guvnor/server/rules/SuggestionCompletionLoader.java	2010-04-14 15:41:16 UTC (rev 32565)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/guvnor/server/rules/SuggestionCompletionLoader.java	2010-04-14 16:03:38 UTC (rev 32566)
@@ -77,6 +77,20 @@
     final ClassTypeResolver                         resolver;
 
     /**
+     * Interface used for add external ImportDescr added to SuggestionCompletionEngine
+     * Use this to add Fact Types that are not imported by the package.
+     * @author esteban.aliverti at gmail.com
+     */
+    public static interface ExternalImportDescrProvider{
+        public Set<ImportDescr> getImportDescrs();
+    }
+
+    /**
+     * List of external ImportDescr providers.
+     */
+    private List<ExternalImportDescrProvider> externalImportDescrProviders = new ArrayList<ExternalImportDescrProvider>();
+
+    /**
      * This uses the current classes classloader as a base, and jars can be
      * added.
      */
@@ -151,7 +165,7 @@
 
         return sce;
     }
-    
+
     private void populateDateEnums(List<String> dataEnums,
                                    SuggestionCompletionEngine sce) {
         for ( Iterator<String> iter = dataEnums.iterator(); iter.hasNext(); ) {
@@ -261,13 +275,13 @@
                 final String shortTypeName = getShortNameOfClass( global.getType() );
                 final Class<?> clazz = loadClass( global.getType(), jars );
                 if ( !this.builder.hasFieldsForType( shortTypeName ) ) {
-                    
+
                     loadClassFields( clazz,
                                      shortTypeName );
 
                     this.builder.addGlobalType( global.getIdentifier(),
                                                 shortTypeName );
-                    
+
                 }
                 if ( clazz != null && Collection.class.isAssignableFrom( clazz ) ) {
                     this.builder.addGlobalCollection( global.getIdentifier() );
@@ -287,11 +301,15 @@
     private void populateModelInfo(final PackageDescr pkgDescr,
                                    final List jars) {
         List<ImportDescr> imports = new ArrayList<ImportDescr>(pkgDescr.getImports());
-        imports.add(new ImportDescr("java.util.Set"));
-        imports.add(new ImportDescr("java.util.List"));
-        imports.add(new ImportDescr("java.util.Collection"));
-        imports.add(new ImportDescr("java.lang.Number"));
-        
+
+        //Adds any external import 
+        if (this.externalImportDescrProviders != null){
+            for (ExternalImportDescrProvider externalImportDescrProvider : this.externalImportDescrProviders) {
+                imports.addAll(externalImportDescrProvider.getImportDescrs());
+            }
+        }
+
+
 		for (ImportDescr imp : imports) {
             final String className = imp.getTarget();
             if ( className.endsWith( "*" ) ) {
@@ -380,8 +398,8 @@
             final String factType = templ.getName();
             this.builder.addFactType( factType,
                                       FIELD_CLASS_TYPE.TYPE_DECLARATION_CLASS );
-            
 
+
             final String[] fields = new String[templ.getFields().size()];
 
             int index = 0;
@@ -531,7 +549,7 @@
         this.builder.getInstance().addMethodInfo( shortTypeName,
                                                   methodInfos );
     }
-    
+
     String getShortNameOfClass(final String clazz) {
         return clazz.substring( clazz.lastIndexOf( '.' ) + 1 );
     }
@@ -608,6 +626,19 @@
         return fieldType;
     }
 
+    public void addExternalImportDescrProvider(ExternalImportDescrProvider provider){
+        this.externalImportDescrProviders.add(provider);
+    }
+
+    public Set<ImportDescr> getExternalImportDescrs(){
+        Set<ImportDescr> result = new HashSet<ImportDescr>();
+        for (ExternalImportDescrProvider externalImportDescrProvider : this.externalImportDescrProviders) {
+            result.addAll(externalImportDescrProvider.getImportDescrs());
+        }
+
+        return result;
+    }
+
     /**
      * @return true if there were errors when processing the package.
      */

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/guvnor/server/rules/SuggestionCompletionLoaderTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/guvnor/server/rules/SuggestionCompletionLoaderTest.java	2010-04-14 15:41:16 UTC (rev 32565)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/guvnor/server/rules/SuggestionCompletionLoaderTest.java	2010-04-14 16:03:38 UTC (rev 32566)
@@ -1,12 +1,17 @@
 package org.drools.guvnor.server.rules;
 
 import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Set;
 
 import junit.framework.TestCase;
+import org.drools.guvnor.client.modeldriven.FactTypeFilter;
 import org.drools.guvnor.client.modeldriven.ModelField.FIELD_CLASS_TYPE;
 
 import org.drools.guvnor.client.modeldriven.SuggestionCompletionEngine;
+import org.drools.lang.descr.ImportDescr;
 
 public class SuggestionCompletionLoaderTest extends TestCase {
 
@@ -17,6 +22,71 @@
 
     }
 
+    public void testSuggestionCompLoaderWithExtraImportProviders() throws Exception {
+        SuggestionCompletionLoader loader = new SuggestionCompletionLoader();
+        loader.addExternalImportDescrProvider(new SuggestionCompletionLoader.ExternalImportDescrProvider() {
+
+            public Set<ImportDescr> getImportDescrs() {
+                return new HashSet<ImportDescr>(){
+                    {
+                        add(new ImportDescr("java.util.List"));
+                        add(new ImportDescr("java.util.Set"));
+                    }
+                };
+            }
+        });
+        SuggestionCompletionEngine eng = loader.getSuggestionEngine( "package foo \n import org.drools.Person", new ArrayList(), new ArrayList() );
+        assertNotNull(eng);
+
+        assertEquals(3, eng.getFactTypes().length);
+        List<String> factTypes = Arrays.asList(eng.getFactTypes());
+        assertTrue(factTypes.contains("List"));
+        assertTrue(factTypes.contains("Set"));
+        assertTrue(factTypes.contains("Person"));
+
+        eng = loader.getSuggestionEngine( "package foo \n import org.drools.Person \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());
+        assertEquals(5, eng.getFactTypes().length);
+        factTypes = Arrays.asList(eng.getFactTypes());
+        assertTrue(factTypes.contains("List"));
+        assertTrue(factTypes.contains("Set"));
+        assertTrue(factTypes.contains("Person"));
+        assertTrue(factTypes.contains("GenBean"));
+        assertTrue(factTypes.contains("GenBean2"));
+
+    }
+
+    public void testSuggestionCompLoaderWithExtraImportProvidersAndFilters() throws Exception {
+        SuggestionCompletionLoader loader = new SuggestionCompletionLoader();
+        loader.addExternalImportDescrProvider(new SuggestionCompletionLoader.ExternalImportDescrProvider() {
+
+            public Set<ImportDescr> getImportDescrs() {
+                return new HashSet<ImportDescr>(){
+                    {
+                        add(new ImportDescr("java.util.List"));
+                        add(new ImportDescr("java.util.Set"));
+                    }
+                };
+            }
+        });
+        SuggestionCompletionEngine eng = loader.getSuggestionEngine( "package foo \n import org.drools.Person \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());
+        eng.setFactTypeFilter(new FactTypeFilter() {
+
+            public boolean filter(String originalFact) {
+                return originalFact.equals("List") || originalFact.equals("GenBean2");
+            }
+        });
+        eng.setFilteringFacts(true);
+
+        assertNotNull(eng);
+
+        assertEquals(3, eng.getFactTypes().length);
+        List<String> factTypes = Arrays.asList(eng.getFactTypes());
+        assertTrue(factTypes.contains("Set"));
+        assertTrue(factTypes.contains("Person"));
+        assertTrue(factTypes.contains("GenBean"));
+
+    }
+
     public void testSuggestionCompLoaderWildcards() throws Exception {
         SuggestionCompletionLoader loader = new SuggestionCompletionLoader();
         loader.getSuggestionEngine( "package foo \n import org.drools.*", new ArrayList(), new ArrayList() );
@@ -45,7 +115,7 @@
         assertEquals(SuggestionCompletionEngine.TYPE_COLLECTION,eng.getFieldType( "SomeFact", "factListString"));
         assertEquals("String",eng.getParametricFieldType("SomeFact", "factListString"));
     }
-    
+
     public void testLoadDifferentMethodTypes() throws Exception {
         SuggestionCompletionLoader loader = new SuggestionCompletionLoader();
         SuggestionCompletionEngine eng = loader.getSuggestionEngine( "package foo \n import org.drools.guvnor.server.rules.SomeFact", new ArrayList(), new ArrayList() );
@@ -61,9 +131,9 @@
         assertFalse(loader.hasErrors());
         assertNotNull(eng);
 
-        assertEquals(6, eng.getFactTypes().length); //Collection, Set, List, Number are always present
-        assertEquals("GenBean", eng.getFactTypes()[1]);
-        assertEquals("GenBean2", eng.getFactTypes()[2]);
+        assertEquals(2, eng.getFactTypes().length);
+        assertEquals("GenBean", eng.getFactTypes()[0]);
+        assertEquals("GenBean2", eng.getFactTypes()[1]);
 
         assertEquals(SuggestionCompletionEngine.TYPE_NUMERIC, eng.getFieldType( "GenBean", "id" ));
         assertEquals(SuggestionCompletionEngine.TYPE_STRING, eng.getFieldType( "GenBean", "name"));
@@ -114,7 +184,7 @@
         assertEquals("anEnum", fields[2]);
 	    assertEquals("bigDecimal", fields[3]);
     }
-    
+
     public void testEnumFields() throws Exception {
 	    SuggestionCompletionLoader loader = new SuggestionCompletionLoader();
 	    SuggestionCompletionEngine eng = loader.getSuggestionEngine( "package foo \n import org.drools.guvnor.server.rules.SomeFact", new ArrayList(), new ArrayList() );
@@ -132,10 +202,10 @@
         SuggestionCompletionEngine eng = loader.getSuggestionEngine( "package foo \n import org.drools.guvnor.server.rules.SomeFact\n import org.drools.Person", new ArrayList(), new ArrayList() );
         assertNotNull(eng);
         String[] facts  = eng.getFactTypes();
-        assertEquals(6, facts.length);
+        assertEquals(2, facts.length);
 
-        assertEquals("Person", facts[3]);
-        assertEquals("SomeFact", facts[5]);
+        assertEquals("Person", facts[0]);
+        assertEquals("SomeFact", facts[1]);
     }
 
     public void testTypeDeclarations() throws Exception {



More information about the jboss-svn-commits mailing list