[jboss-svn-commits] JBL Code SVN: r10150 - in labs/jbossrules/trunk/drools-jbrms/src: main/java/org/drools/brms/server/util and 2 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Tue Mar 13 03:07:07 EDT 2007
Author: michael.neale at jboss.com
Date: 2007-03-13 03:07:07 -0400 (Tue, 13 Mar 2007)
New Revision: 10150
Modified:
labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/rules/SuggestionCompletionLoader.java
labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/util/SuggestionCompletionEngineBuilder.java
labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/PopulateDataTest.java
labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/rules/SuggestionCompletionLoaderTest.java
Log:
Added tests for suggestion completion
Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/rules/SuggestionCompletionLoader.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/rules/SuggestionCompletionLoader.java 2007-03-13 04:41:35 UTC (rev 10149)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/rules/SuggestionCompletionLoader.java 2007-03-13 07:07:07 UTC (rev 10150)
@@ -65,7 +65,8 @@
// populating globals
this.populateGlobalInfo( errors,
- pkgDescr );
+ pkgDescr,
+ pkg);
// populating DSL sentences
this.populateDSLSentences( pkg,
@@ -108,39 +109,47 @@
}
/**
- * @param errors
- * @param pkgDescr
+ * Populate the global stuff.
*/
private void populateGlobalInfo(StringBuffer errors,
- PackageDescr pkgDescr) {
+ PackageDescr pkgDescr, PackageItem pkg) {
+
// populating information for the globals
for ( Iterator it = pkgDescr.getGlobals().iterator(); it.hasNext(); ) {
GlobalDescr global = (GlobalDescr) it.next();
-
try {
- Class clazz = Class.forName( global.getType() );
-
- builder.addGlobalType( global.getIdentifier(),
- this.getFieldType( clazz ) );
- } catch ( ClassNotFoundException e ) {
- errors.append( "\tClass " );
+ String shortTypeName = global.getType();
+ if (!this.builder.hasFieldsForType( shortTypeName )) {
+ Class clazz = loadClass( pkg,
+ global.getType(),
+ errors );
+ loadClassFields( clazz,
+ shortTypeName );
+
+ this.builder.addGlobalType( global.getIdentifier(), shortTypeName );
+ }
+
+
+ builder.addGlobalType( global.getIdentifier(), shortTypeName );
+ } catch (IOException e) {
+ errors.append( "\tError while inspecting class: " );
errors.append( global.getType() );
- errors.append( " not found for global " );
- errors.append( global.getIdentifier() );
+ errors.append( " : " );
+ errors.append( e.getMessage() );
errors.append( "\n" );
}
+
}
}
/**
- * @param errors
- * @param pkgDescr
+ * Populate the fact type data.
*/
private void populateModelInfo(StringBuffer errors,
PackageDescr pkgDescr,
PackageItem pkg ) {
- ByteArrayClassLoader loader = new ByteArrayClassLoader( this.getClass().getClassLoader() );
+
// iterating over the import list
for ( Iterator it = pkgDescr.getImports().iterator(); it.hasNext(); ) {
@@ -148,27 +157,14 @@
String classname = imp.getTarget();
Class clazz = loadClass( pkg,
- classname,
- loader,
+ classname,
errors );
if ( clazz != null ) {
try {
- String factType = clazz.getName().substring( clazz.getName().lastIndexOf('.')+1 );
-
- ClassFieldInspector inspector = new ClassFieldInspector( clazz );
- String[] fields = (String[]) inspector.getFieldNames().keySet().toArray( new String[inspector.getFieldNames().size()] );
-
- fields = removeIrrelevantFields(fields);
-
- builder.addFactType( factType );
- builder.addFieldsForType( factType,
- fields );
- for ( int i = 0; i < fields.length; i++ ) {
- Class type = (Class) inspector.getFieldTypes().get( fields[i] );
- String fieldType = getFieldType( type );
- builder.addFieldType( factType + "." + fields[i],
- fieldType );
- }
+ String shortTypeName = getShortNameOfClass( clazz.getName() );
+ loadClassFields( clazz,
+ shortTypeName );
+ builder.addFactType( shortTypeName );
} catch ( IOException e ) {
errors.append( "\tError while inspecting class: " );
errors.append( classname );
@@ -180,6 +176,28 @@
}
}
+ private void loadClassFields(Class clazz,
+ String shortTypeName) throws IOException {
+ ClassFieldInspector inspector = new ClassFieldInspector( clazz );
+ String[] fields = (String[]) inspector.getFieldNames().keySet().toArray( new String[inspector.getFieldNames().size()] );
+
+ fields = removeIrrelevantFields(fields);
+
+
+ builder.addFieldsForType( shortTypeName,
+ fields );
+ for ( int i = 0; i < fields.length; i++ ) {
+ Class type = (Class) inspector.getFieldTypes().get( fields[i] );
+ String fieldType = getFieldType( type );
+ builder.addFieldType( shortTypeName + "." + fields[i],
+ fieldType );
+ }
+ }
+
+ String getShortNameOfClass(String clazz) {
+ return clazz.substring( clazz.lastIndexOf('.')+1 );
+ }
+
/**
* This will remove the unneeded "fields" that come from java.lang.Object
* these are really not needed for the modeller.
@@ -205,8 +223,8 @@
*/
private Class loadClass(PackageItem pkg,
String classname,
- ByteArrayClassLoader loader,
StringBuffer errors ) {
+ ByteArrayClassLoader loader = new ByteArrayClassLoader( this.getClass().getClassLoader() );
Class clazz = null;
try {
// check if it is already in the classpath
Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/util/SuggestionCompletionEngineBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/util/SuggestionCompletionEngineBuilder.java 2007-03-13 04:41:35 UTC (rev 10149)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/util/SuggestionCompletionEngineBuilder.java 2007-03-13 07:07:07 UTC (rev 10150)
@@ -96,6 +96,13 @@
}
/**
+ * @return true if this has the type already registered (field information).
+ */
+ public boolean hasFieldsForType(String type) {
+ return this.fieldsForType.containsKey( type );
+ }
+
+ /**
* Adds a type declaration for a field
*
* @param field
Modified: labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/PopulateDataTest.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/PopulateDataTest.java 2007-03-13 04:41:35 UTC (rev 10149)
+++ labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/PopulateDataTest.java 2007-03-13 07:07:07 UTC (rev 10150)
@@ -56,7 +56,8 @@
SuggestionCompletionLoader loader = new SuggestionCompletionLoader();
PackageItem pkg = repo.loadPackage( "com.billasurf.manufacturing.plant" );
- pkg.updateHeader( "import com.billasurf.Board\nimport com.billasurf.Person" );
+ pkg.updateHeader( "import com.billasurf.Board\nimport com.billasurf.Person" +
+ "\n\nglobal com.billasurf.Person prs" );
pkg.checkin( "added imports" );
SuggestionCompletionEngine eng = loader.getSuggestionEngine( pkg );
@@ -66,6 +67,10 @@
String[] fields = (String[]) eng.fieldsForType.get( "Board" );
assertTrue(fields.length == 3);
+ String[] globalVars = eng.getGlobalVariables();
+ assertEquals(1, globalVars.length);
+ assertEquals("prs", globalVars[0]);
+ assertEquals(2, eng.getFieldCompletionsForGlobalVariable( "prs" ).length);
fields = (String[]) eng.fieldsForType.get( "Person" );
Modified: labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/rules/SuggestionCompletionLoaderTest.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/rules/SuggestionCompletionLoaderTest.java 2007-03-13 04:41:35 UTC (rev 10149)
+++ labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/rules/SuggestionCompletionLoaderTest.java 2007-03-13 07:07:07 UTC (rev 10150)
@@ -28,4 +28,15 @@
assertEquals("foo", result[0]);
}
+ public void testGetShortNameOfClass() {
+ SuggestionCompletionLoader loader = new SuggestionCompletionLoader();
+
+ assertEquals("Object", loader.getShortNameOfClass( Object.class.getName() ));
+
+ assertEquals("Foo", loader.getShortNameOfClass( "Foo" ));
+
+
+
+ }
+
}
More information about the jboss-svn-commits
mailing list