[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