[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