[jboss-svn-commits] JBL Code SVN: r10010 - in labs/jbossrules/trunk/drools-jbrms/src: main/java/org/drools/brms/server and 4 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed Mar 7 04:51:06 EST 2007


Author: michael.neale at jboss.com
Date: 2007-03-07 04:51:06 -0500 (Wed, 07 Mar 2007)
New Revision: 10010

Added:
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/packages/SuggestionCompletionCache.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/rules/
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/rules/SuggestionCompletionLoader.java
   labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/rules/
   labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/rules/SuggestionCompletionLoaderTest.java
Modified:
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/contenthandler/BRXMLContentHandler.java
Log:
refactoring for suggestion completion engine

Added: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/packages/SuggestionCompletionCache.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/packages/SuggestionCompletionCache.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/packages/SuggestionCompletionCache.java	2007-03-07 09:51:06 UTC (rev 10010)
@@ -0,0 +1,27 @@
+package org.drools.brms.client.packages;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.drools.brms.client.modeldriven.SuggestionCompletionEngine;
+
+public class SuggestionCompletionCache {
+
+    private static SuggestionCompletionCache INSTANCE = new SuggestionCompletionCache();
+    
+    private Map cache = new HashMap();
+    
+    public static SuggestionCompletionCache getInstance() {
+        return INSTANCE;
+    }
+    
+    public SuggestionCompletionEngine getSuggestions(String packageName) {
+        if (cache.containsKey( packageName )) {
+            return (SuggestionCompletionEngine) cache.get( packageName );
+        } else {
+            return null;
+        }
+    }
+    
+    
+}


Property changes on: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/packages/SuggestionCompletionCache.java
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/contenthandler/BRXMLContentHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/contenthandler/BRXMLContentHandler.java	2007-03-07 07:58:55 UTC (rev 10009)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/contenthandler/BRXMLContentHandler.java	2007-03-07 09:51:06 UTC (rev 10010)
@@ -9,6 +9,7 @@
 import org.drools.brms.client.modeldriven.brxml.RuleModel;
 import org.drools.brms.client.rpc.RuleAsset;
 import org.drools.brms.client.rpc.RuleModelData;
+import org.drools.brms.server.rules.SuggestionCompletionLoader;
 import org.drools.brms.server.util.BRLPersistence;
 import org.drools.brms.server.util.SuggestionCompletionEngineBuilder;
 import org.drools.repository.AssetItem;
@@ -19,8 +20,6 @@
 
 public class BRXMLContentHandler extends ContentHandler {
     
-    private SuggestionCompletionEngineBuilder builder = new SuggestionCompletionEngineBuilder();
-    private static final Pattern imports = Pattern.compile( "import\\s*([\\.a-zA-Z0-9_]+)\\s*[;$]?", Pattern.MULTILINE );
 
     public void retrieveAssetContent(RuleAsset asset,
                                      PackageItem pkg,
@@ -29,7 +28,9 @@
 
         RuleModelData data = new RuleModelData();
         data.model = model;
-        data.completionEngine = getSuggestionEngine( pkg );
+        
+        SuggestionCompletionLoader loader = new SuggestionCompletionLoader();
+        data.completionEngine = loader.getSuggestionEngine( pkg );
         asset.content = data;
 
     }
@@ -40,64 +41,5 @@
         repoAsset.updateContent( BRLPersistence.getInstance().toXML( data.model ) );
     }
     
-    private SuggestionCompletionEngine getSuggestionEngine( PackageItem pkg ) {
-        builder.newCompletionEngine();
-        
-        String header = pkg.getHeader();
-        
-        // get fact types from imports
-        Matcher m = imports.matcher( header );
-        while( m.find() ) {
-            String classname = m.group( 1 );
-            
-            try {
-                Class clazz = Class.forName( classname );
-                String factType = clazz.getName().replace( clazz.getPackage().getName()+".", "" );
-                
-                ClassFieldInspector inspector = new ClassFieldInspector( clazz );
-                String[] fields = (String[]) inspector.getFieldNames().keySet().toArray( new String[inspector.getFieldNames().size()] );
-                
-                builder.addFactType( factType );
-                builder.addFieldsForType( factType, fields );
-                for( int i = 0; i < fields.length; i++ ) {
-                    // need to fix that
-                    String fieldType = getFieldType( inspector,
-                                                     fields[i] );
-                    builder.addFieldType( factType+"."+fields[i], fieldType );
-                }
-            } catch ( ClassNotFoundException e ) {
-                // TODO Auto-generated catch block
-                e.printStackTrace();
-            } catch ( IOException e ) {
-                // TODO Auto-generated catch block
-                e.printStackTrace();
-            }
-        }
-        return builder.getInstance();
-    }
 
-    /**
-     * @param inspector
-     * @param fields
-     * @param i
-     * @return
-     */
-    private String getFieldType(ClassFieldInspector inspector,
-                                String field ) {
-        Class type = (Class) inspector.getFieldTypes().get( field );
-        String fieldType = null; // if null, will use standard operators
-        if( type.isPrimitive() && ( type != boolean.class ) ) {
-            fieldType = SuggestionCompletionEngine.TYPE_NUMERIC;
-        } else if( Number.class.isAssignableFrom( type ) ) {
-            fieldType = SuggestionCompletionEngine.TYPE_NUMERIC;
-        } else if( String.class.isAssignableFrom( type ) ) {
-            fieldType = SuggestionCompletionEngine.TYPE_STRING;
-        } else if( Collection.class.isAssignableFrom( type ) ) {
-            fieldType = SuggestionCompletionEngine.TYPE_COLLECTION;
-        } else if( Comparable.class.isAssignableFrom( type ) ) {
-            fieldType = SuggestionCompletionEngine.TYPE_COMPARABLE;
-        }
-        return fieldType;
-    }    
-
 }

Added: 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	                        (rev 0)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/rules/SuggestionCompletionLoader.java	2007-03-07 09:51:06 UTC (rev 10010)
@@ -0,0 +1,89 @@
+package org.drools.brms.server.rules;
+
+import java.io.IOException;
+import java.util.Collection;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.drools.brms.client.modeldriven.SuggestionCompletionEngine;
+import org.drools.brms.server.util.SuggestionCompletionEngineBuilder;
+import org.drools.repository.PackageItem;
+import org.drools.util.asm.ClassFieldInspector;
+
+/**
+ * This utility class loads suggestion completion stuff for the package, 
+ * introspecting from models, templates etc. 
+ * 
+ * This also includes DSL stuff. 
+ * 
+ * @author Michael Neale
+ *
+ */
+public class SuggestionCompletionLoader {
+
+    private SuggestionCompletionEngineBuilder builder = new SuggestionCompletionEngineBuilder();
+    private static final Pattern imports = Pattern.compile( "import\\s*([\\.a-zA-Z0-9_]+)\\s*[;$]?", Pattern.MULTILINE );
+    
+    
+    public SuggestionCompletionEngine getSuggestionEngine( PackageItem pkg ) {
+        builder.newCompletionEngine();
+        
+        String header = pkg.getHeader();
+        
+        // get fact types from imports
+        Matcher m = imports.matcher( header );
+        while( m.find() ) {
+            String classname = m.group( 1 );
+            
+            try {
+                Class clazz = Class.forName( classname );
+                String factType = clazz.getName().replace( clazz.getPackage().getName()+".", "" );
+                
+                ClassFieldInspector inspector = new ClassFieldInspector( clazz );
+                String[] fields = (String[]) inspector.getFieldNames().keySet().toArray( new String[inspector.getFieldNames().size()] );
+                
+                builder.addFactType( factType );
+                builder.addFieldsForType( factType, fields );
+                for( int i = 0; i < fields.length; i++ ) {
+                    // need to fix that
+                    String fieldType = getFieldType( inspector,
+                                                     fields[i] );
+                    builder.addFieldType( factType+"."+fields[i], fieldType );
+                }
+            } catch ( ClassNotFoundException e ) {
+                // TODO Auto-generated catch block
+                e.printStackTrace();
+            } catch ( IOException e ) {
+                // TODO Auto-generated catch block
+                e.printStackTrace();
+            }
+        }
+        return builder.getInstance();
+    }
+
+    /**
+     * @param inspector
+     * @param fields
+     * @param i
+     * @return
+     */
+    private String getFieldType(ClassFieldInspector inspector,
+                                String field ) {
+        Class type = (Class) inspector.getFieldTypes().get( field );
+        String fieldType = null; // if null, will use standard operators
+        if( type.isPrimitive() && ( type != boolean.class ) ) {
+            fieldType = SuggestionCompletionEngine.TYPE_NUMERIC;
+        } else if( Number.class.isAssignableFrom( type ) ) {
+            fieldType = SuggestionCompletionEngine.TYPE_NUMERIC;
+        } else if( String.class.isAssignableFrom( type ) ) {
+            fieldType = SuggestionCompletionEngine.TYPE_STRING;
+        } else if( Collection.class.isAssignableFrom( type ) ) {
+            fieldType = SuggestionCompletionEngine.TYPE_COLLECTION;
+        } else if( Comparable.class.isAssignableFrom( type ) ) {
+            fieldType = SuggestionCompletionEngine.TYPE_COMPARABLE;
+        }
+        return fieldType;
+    }    
+
+    
+}


Property changes on: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/rules/SuggestionCompletionLoader.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: 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	                        (rev 0)
+++ labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/rules/SuggestionCompletionLoaderTest.java	2007-03-07 09:51:06 UTC (rev 10010)
@@ -0,0 +1,24 @@
+package org.drools.brms.server.rules;
+
+import org.drools.brms.client.modeldriven.SuggestionCompletionEngine;
+import org.drools.brms.server.SessionHelper;
+import org.drools.repository.PackageItem;
+import org.drools.repository.RulesRepository;
+
+import junit.framework.TestCase;
+
+public class SuggestionCompletionLoaderTest extends TestCase {
+
+    public void testLoader() throws Exception {
+        
+        RulesRepository repo = new RulesRepository(SessionHelper.getSession());
+        PackageItem item = repo.createPackage( "testLoader", "to test the loader" );
+        item.updateHeader( "import java.util.Date" );
+        
+        SuggestionCompletionLoader loader = new SuggestionCompletionLoader();
+        SuggestionCompletionEngine engine = loader.getSuggestionEngine( item );
+        assertNotNull(engine);
+        
+    }
+    
+}


Property changes on: labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/rules/SuggestionCompletionLoaderTest.java
___________________________________________________________________
Name: svn:eol-style
   + native




More information about the jboss-svn-commits mailing list