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

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Tue Mar 6 20:08:19 EST 2007


Author: tirelli
Date: 2007-03-06 20:08:18 -0500 (Tue, 06 Mar 2007)
New Revision: 10005

Added:
   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/util/SuggestionCompletionEngineBuilderTest.java
Modified:
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ClassFieldExtractorFactory.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/RepositoryServiceFactory.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/JBRMSServiceServlet.java
   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/ContentHandler.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/contenthandler/DSLRuleContentHandler.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/contenthandler/ModelContentHandler.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/contenthandler/PlainTextContentHandler.java
Log:
JBRULES-629: Inspecting imports and populating suggestion completion engine

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ClassFieldExtractorFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ClassFieldExtractorFactory.java	2007-03-07 01:05:36 UTC (rev 10004)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ClassFieldExtractorFactory.java	2007-03-07 01:08:18 UTC (rev 10005)
@@ -101,9 +101,9 @@
                                                                 bytes,
                                                                 PROTECTION_DOMAIN );
                 // instantiating target class
-                int index = ((Integer) inspector.getFieldNames().get( fieldName )).intValue();
+                Integer index = (Integer) inspector.getFieldNames().get( fieldName );
                 ValueType valueType = ValueType.determineValueType( fieldType );
-                final Object[] params = { new Integer(index), fieldType, valueType };
+                final Object[] params = { index, fieldType, valueType };
                 return (BaseClassFieldExtractor) newClass.getConstructors()[0].newInstance( params );
             }
         } catch ( final Exception e ) {

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/RepositoryServiceFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/RepositoryServiceFactory.java	2007-03-07 01:05:36 UTC (rev 10004)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/RepositoryServiceFactory.java	2007-03-07 01:08:18 UTC (rev 10005)
@@ -1,7 +1,5 @@
 package org.drools.brms.client.rpc;
 
-import org.drools.brms.client.rpc.mock.MockRepositoryServiceAsync;
-
 import com.google.gwt.core.client.GWT;
 import com.google.gwt.user.client.rpc.ServiceDefTarget;
 

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/JBRMSServiceServlet.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/JBRMSServiceServlet.java	2007-03-07 01:05:36 UTC (rev 10004)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/JBRMSServiceServlet.java	2007-03-07 01:08:18 UTC (rev 10005)
@@ -208,9 +208,13 @@
         //load standard meta data
         asset.metaData = populateMetaData( item );
         
+        // get package header
+        PackageItem pkgItem = repo.loadPackage( asset.metaData.packageName );
+        String header = pkgItem.getHeader();
+
         //load the content
         ContentHandler handler = ContentHandler.getHandler( asset.metaData.format );
-        handler.retrieveAssetContent(asset, item);
+        handler.retrieveAssetContent(asset, pkgItem, item);
         
         return asset;
     }

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 01:05:36 UTC (rev 10004)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/contenthandler/BRXMLContentHandler.java	2007-03-07 01:08:18 UTC (rev 10005)
@@ -1,31 +1,35 @@
 package org.drools.brms.server.contenthandler;
 
-import java.util.HashMap;
-import java.util.Map;
+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.client.modeldriven.brxml.DSLSentence;
-import org.drools.brms.client.modeldriven.brxml.DSLSentenceFragment;
 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.util.BRLPersistence;
+import org.drools.brms.server.util.SuggestionCompletionEngineBuilder;
 import org.drools.repository.AssetItem;
+import org.drools.repository.PackageItem;
+import org.drools.util.asm.ClassFieldInspector;
 
 import com.google.gwt.user.client.rpc.SerializableException;
 
 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,
                                      AssetItem item) throws SerializableException {
         RuleModel model = BRLPersistence.getInstance().toModel( item.getContent() );
 
         RuleModelData data = new RuleModelData();
         data.model = model;
-        //TODO: replace with the code that loads it from a cache server side.
-        //otherwise it will look at the current package, and then work out the model from that.
-        data.completionEngine = getDummySuggestionEngine();
+        data.completionEngine = getSuggestionEngine( pkg );
         asset.content = data;
 
     }
@@ -36,48 +40,64 @@
         repoAsset.updateContent( BRLPersistence.getInstance().toXML( data.model ) );
     }
     
-    private SuggestionCompletionEngine getDummySuggestionEngine() {
-        SuggestionCompletionEngine com = new SuggestionCompletionEngine();
+    private SuggestionCompletionEngine getSuggestionEngine( PackageItem pkg ) {
+        builder.newCompletionEngine();
         
-        com.factTypes = new String[] {"Board", "Order", "Clothing"};
+        String header = pkg.getHeader();
         
-        Map fieldTypes = new HashMap();
-        fieldTypes.put("Board.size", SuggestionCompletionEngine.TYPE_NUMERIC);
-        fieldTypes.put("Board.cost", SuggestionCompletionEngine.TYPE_NUMERIC);
-        fieldTypes.put("Board.type", SuggestionCompletionEngine.TYPE_STRING);
-        fieldTypes.put("Board.name", SuggestionCompletionEngine.TYPE_STRING);        
-        fieldTypes.put("Order.value", SuggestionCompletionEngine.TYPE_NUMERIC);
-        fieldTypes.put("Order.quantity", SuggestionCompletionEngine.TYPE_NUMERIC);
-        fieldTypes.put("Clothing.value", SuggestionCompletionEngine.TYPE_NUMERIC);
-        fieldTypes.put("Clothing.type", SuggestionCompletionEngine.TYPE_STRING);
-        com.fieldTypes = fieldTypes;
+        // 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();
+    }
 
-        Map fieldsForType = new HashMap();
-        fieldsForType.put("Board", new String[] {"size", "cost", "type", "name"});
-        fieldsForType.put("Order", new String[] {"value", "quantity"});
-        fieldsForType.put("Clothing", new String[] {"value", "type"});
-        com.fieldsForType = fieldsForType;
-        
-        
-        DSLSentence sen = new DSLSentence();
-//        sen.elements = new DSLSentenceFragment[2];
-//        sen.elements[0] = new DSLSentenceFragment("Notify manufacturing", false);
-//        sen.elements[1] = new DSLSentenceFragment("(something)", true);
-//        com.conditionDSLSentences = new DSLSentence[] {sen};
-        
-        sen = new DSLSentence();
-        sen.elements = new DSLSentenceFragment[3];
-        sen.elements[0] = new DSLSentenceFragment("Notify manufacturing with warning [", false);
-        sen.elements[1] = new DSLSentenceFragment("(quantity of items description)", true);
-        sen.elements[2] = new DSLSentenceFragment("]", false);
-                
-        DSLSentence sen2 = new DSLSentence();
-        sen2.elements = new DSLSentenceFragment[1];
-        sen2.elements[0] = new DSLSentenceFragment("Reject order (too many items)", false);
-        
-        com.actionDSLSentences = new DSLSentence[] {sen, sen2};        
-        
-        return com;
+    /**
+     * @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;
     }    
 
 }

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/contenthandler/ContentHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/contenthandler/ContentHandler.java	2007-03-07 01:05:36 UTC (rev 10004)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/contenthandler/ContentHandler.java	2007-03-07 01:08:18 UTC (rev 10005)
@@ -6,6 +6,7 @@
 import org.drools.brms.client.common.AssetFormats;
 import org.drools.brms.client.rpc.RuleAsset;
 import org.drools.repository.AssetItem;
+import org.drools.repository.PackageItem;
 import org.drools.repository.RulesRepositoryException;
 
 import com.google.gwt.user.client.rpc.SerializableException;
@@ -39,6 +40,7 @@
      * @throws SerializableException
      */
     public abstract void retrieveAssetContent(RuleAsset asset,
+                                              PackageItem pkg, 
                                               AssetItem item) throws SerializableException;
 
     /**

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/contenthandler/DSLRuleContentHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/contenthandler/DSLRuleContentHandler.java	2007-03-07 01:05:36 UTC (rev 10004)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/contenthandler/DSLRuleContentHandler.java	2007-03-07 01:08:18 UTC (rev 10005)
@@ -4,6 +4,7 @@
 import org.drools.brms.client.rpc.RuleAsset;
 import org.drools.brms.client.rpc.RuleContentText;
 import org.drools.repository.AssetItem;
+import org.drools.repository.PackageItem;
 
 import com.google.gwt.user.client.rpc.SerializableException;
 
@@ -11,6 +12,7 @@
 
 
     public void retrieveAssetContent(RuleAsset asset,
+                                     PackageItem pkg,
                                      AssetItem item) throws SerializableException {
         RuleContentText text = new RuleContentText();
         text.content = item.getContent();

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/contenthandler/ModelContentHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/contenthandler/ModelContentHandler.java	2007-03-07 01:05:36 UTC (rev 10004)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/contenthandler/ModelContentHandler.java	2007-03-07 01:08:18 UTC (rev 10005)
@@ -2,6 +2,7 @@
 
 import org.drools.brms.client.rpc.RuleAsset;
 import org.drools.repository.AssetItem;
+import org.drools.repository.PackageItem;
 
 import com.google.gwt.user.client.rpc.SerializableException;
 
@@ -9,6 +10,7 @@
 
 
     public void retrieveAssetContent(RuleAsset asset,
+                                     PackageItem pkg,
                                      AssetItem item) throws SerializableException {
         //do nothing, as we have an attachment
     }

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/contenthandler/PlainTextContentHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/contenthandler/PlainTextContentHandler.java	2007-03-07 01:05:36 UTC (rev 10004)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/contenthandler/PlainTextContentHandler.java	2007-03-07 01:08:18 UTC (rev 10005)
@@ -3,6 +3,7 @@
 import org.drools.brms.client.rpc.RuleAsset;
 import org.drools.brms.client.rpc.RuleContentText;
 import org.drools.repository.AssetItem;
+import org.drools.repository.PackageItem;
 
 import com.google.gwt.user.client.rpc.SerializableException;
 
@@ -10,6 +11,7 @@
 
 
     public void retrieveAssetContent(RuleAsset asset,
+                                     PackageItem pkg, 
                                      AssetItem item) throws SerializableException {
         //default to text, goode olde texte, just like mum used to make.
         RuleContentText text = new RuleContentText();

Added: 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	                        (rev 0)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/util/SuggestionCompletionEngineBuilder.java	2007-03-07 01:08:18 UTC (rev 10005)
@@ -0,0 +1,174 @@
+/*
+ * Copyright 2006 JBoss Inc
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.drools.brms.server.util;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.drools.brms.client.modeldriven.SuggestionCompletionEngine;
+import org.drools.brms.client.modeldriven.brxml.DSLSentence;
+import org.drools.brms.client.modeldriven.brxml.DSLSentenceFragment;
+
+/**
+ * A builder to incrementally populate a SuggestionCompletionEngine
+ * 
+ * @author etirelli
+ */
+public class SuggestionCompletionEngineBuilder {
+
+    // The following pattern is capable of spliting a DSL sentence into
+    // fragments, supporting \{ escapes. Example:
+    //
+    // {This} is a {pattern} considered pretty \{{easy}\} by most \{people\}. What do you {say}?
+    //
+    // would be parsed into the following fragments:
+    //
+    // Fragment: [{This}]
+    // Fragment: [ is a ]
+    // Fragment: [{pattern}]
+    // Fragment: [ considered pretty {]
+    // Fragment: [{easy}]
+    // Fragment: [} by most {people}. What do you ]
+    // Fragment: [{say}]
+    // Fragment: [?]
+    private final static Pattern       splitter      = Pattern.compile( "(^|[^\\\\])(\\{[(\\\\\\{)|[^\\{]]*?\\})",
+                                                                        Pattern.MULTILINE | Pattern.DOTALL );
+
+    private SuggestionCompletionEngine instance      = new SuggestionCompletionEngine();
+    private List                       factTypes     = new ArrayList();
+    private Map                        fieldsForType = new HashMap();
+    private Map                        fieldTypes    = new HashMap();
+    private Map                        globalTypes   = new HashMap();
+    private List                       dslSentences  = new ArrayList();
+
+    public SuggestionCompletionEngineBuilder() {
+    }
+
+    /**
+     * Start the creation of a new SuggestionCompletionEngine
+     */
+    public void newCompletionEngine() {
+        this.instance = new SuggestionCompletionEngine();
+        this.factTypes = new ArrayList();
+        this.fieldsForType = new HashMap();
+        this.fieldTypes = new HashMap();
+        this.globalTypes = new HashMap();
+        this.dslSentences = new ArrayList();
+    }
+
+    /**
+     * Adds a fact type to the engine
+     * 
+     * @param factType
+     */
+    public void addFactType(String factType) {
+        this.factTypes.add( factType );
+    }
+
+    /**
+     * Adds the list of fields for a given type
+     * 
+     * @param type
+     * @param fields
+     */
+    public void addFieldsForType(String type,
+                                 String[] fields) {
+        this.fieldsForType.put( type,
+                                fields );
+    }
+
+    /**
+     * Adds a type declaration for a field
+     * 
+     * @param field
+     * @param type
+     */
+    public void addFieldType(String field,
+                             String type) {
+        this.fieldTypes.put( field,
+                             type );
+    }
+
+    /**
+     * Adds a global and its corresponding type to the engine
+     * 
+     * @param global
+     * @param type
+     */
+    public void addGlobalType(String global,
+                              String type) {
+        this.globalTypes.put( global,
+                              type );
+    }
+
+    /**
+     * Adds a DSL Sentence to the engine, splitting it into
+     * chunks of editable and non-editable text
+     *  
+     * @param sentence
+     */
+    public void addDSLSentence(String sentence) {
+        // splitting the sentence in fragments
+        Matcher m = splitter.matcher( sentence );
+        int lastEnd = 0;
+        List fragments = new ArrayList();
+
+        while ( m.find() ) {
+            if ( m.start( 2 ) > lastEnd ) {
+                // if there is anything after last match and before the current one, add
+                // a non-editable fragment
+                fragments.add( new DSLSentenceFragment( sentence.substring( lastEnd,
+                                                                            m.start( 2 ) ).replaceAll( "\\\\([\\{\\}])",
+                                                                                                       "$1" ),
+                                                        false ) );
+            }
+            // add the editable fragment
+            fragments.add( new DSLSentenceFragment( m.group( 2 ),
+                                                    true ) );
+            lastEnd = m.end( 2 );
+        }
+        if ( lastEnd < sentence.length() ) {
+            // if there is anything after the last match, add as a non-editable fragment
+            fragments.add( new DSLSentenceFragment( sentence.substring( lastEnd ),
+                                                    false ) );
+        }
+
+        DSLSentence sen = new DSLSentence();
+        sen.elements = (DSLSentenceFragment[]) fragments.toArray( new DSLSentenceFragment[fragments.size()] );
+        this.dslSentences.add( sen );
+    }
+
+    /**
+     * Returns a SuggestionCompletionEngine instance populated with 
+     * all the data since last call to newCompletionEngine() method
+     * 
+     * @return
+     */
+    public SuggestionCompletionEngine getInstance() {
+        this.instance.factTypes = (String[]) this.factTypes.toArray( new String[this.factTypes.size()] );
+        this.instance.fieldsForType = this.fieldsForType;
+        this.instance.fieldTypes = this.fieldTypes;
+        this.instance.globalTypes = this.globalTypes;
+        this.instance.actionDSLSentences = (DSLSentence[]) this.dslSentences.toArray( new DSLSentence[this.dslSentences.size()] );
+        return this.instance;
+    }
+
+}


Property changes on: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/util/SuggestionCompletionEngineBuilder.java
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:keywords
   + id author date revision
Name: svn:eol-style
   + native

Added: labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/util/SuggestionCompletionEngineBuilderTest.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/util/SuggestionCompletionEngineBuilderTest.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/util/SuggestionCompletionEngineBuilderTest.java	2007-03-07 01:08:18 UTC (rev 10005)
@@ -0,0 +1,61 @@
+package org.drools.brms.server.util;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import junit.framework.TestCase;
+
+import org.drools.brms.client.modeldriven.SuggestionCompletionEngine;
+import org.drools.brms.client.modeldriven.brxml.DSLSentence;
+import org.drools.brms.client.modeldriven.brxml.DSLSentenceFragment;
+
+public class SuggestionCompletionEngineBuilderTest extends TestCase {
+    SuggestionCompletionEngineBuilder builder = new SuggestionCompletionEngineBuilder();
+
+    protected void setUp() throws Exception {
+        super.setUp();
+        builder.newCompletionEngine();
+    }
+
+    protected void tearDown() throws Exception {
+        super.tearDown();
+    }
+
+    public void testAddDSLSentence() {
+        String input = "{This} is a {pattern} considered pretty \\{{easy}\\} by most \\{people\\}. What do you {say}?";
+        String[] strFrags = new String[] {"{This}", " is a ", "{pattern}", " considered pretty {", "{easy}", "} by most {people}. What do you ", "{say}", "?"};
+        boolean[] editable = new boolean[] { true, false, true, false, true, false, true, false };
+        builder.addDSLSentence( input );
+
+        SuggestionCompletionEngine engine = builder.getInstance();
+
+        assertEquals( 1,
+                      engine.actionDSLSentences.length );
+        DSLSentenceFragment[] fragments = engine.actionDSLSentences[0].elements;
+        assertEquals( 8,
+                      fragments.length );
+        for( int i = 0; i < 8; i++ ) {
+            assertEquals( strFrags[i],
+                          fragments[i].value );
+            assertEquals( editable[i],
+                          fragments[i].isEditableField );
+        }
+
+    }
+    
+    public void testPattern() {
+        Pattern imports = Pattern.compile( "import\\s*([\\.a-zA-Z0-9_]+)\\s*[;$]?", Pattern.MULTILINE );
+        
+        String input = "\nimport java.util.List  \nimport java.util.Map ; \n import a.b.c import x.y.z";
+        
+        Matcher m = imports.matcher( input );
+        
+        while( m.find() ) {
+            System.out.println("Found: ["+m.group(1)+"]");
+        }
+        
+        
+    }
+}


Property changes on: labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/util/SuggestionCompletionEngineBuilderTest.java
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:keywords
   + id author date revision
Name: svn:eol-style
   + native




More information about the jboss-svn-commits mailing list