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

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu Jan 11 07:51:37 EST 2007


Author: michael.neale at jboss.com
Date: 2007-01-11 07:50:26 -0500 (Thu, 11 Jan 2007)
New Revision: 8813

Modified:
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/Packages.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/SuggestionCompletionEngine.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/ActionAssertFactWidget.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/ActionRetractFactWidget.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/ActionSetFieldWidget.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/CompositeFactPatternWidget.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/FactPatternWidget.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/RuleModeller.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/EditorLauncher.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/AssetContentFormatHandler.java
   labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/client/modeldriven/SuggestionCompletionTest.java
Log:
JBRULES-605 Type aware rule modeller

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/Packages.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/Packages.java	2007-01-10 23:50:03 UTC (rev 8812)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/Packages.java	2007-01-11 12:50:26 UTC (rev 8813)
@@ -1,5 +1,7 @@
 package org.drools.brms.client;
 
+import java.util.HashMap;
+
 import org.drools.brms.client.modeldriven.SuggestionCompletionEngine;
 import org.drools.brms.client.modeldriven.brxml.ActionAssertFact;
 import org.drools.brms.client.modeldriven.brxml.ActionFieldValue;
@@ -51,23 +53,25 @@
     private SuggestionCompletionEngine getDummySuggestionEngine() {
         SuggestionCompletionEngine com = new SuggestionCompletionEngine();
         
-        com.addFact( "Person", new String[] {"age", "name"}  );
-        com.addFact("Vehicle", new String[] {"type", "make"} );
-        com.addOperators( "Person", "name", new String[] {"==", "!="});
-        com.addOperators( "Person", "age", new String[] {"==", "!=", "<", ">", "<=", ">="});
-        com.addOperators( "Vehicle", "age", new String[] {"==", "!=", "<", ">"});
-        com.addOperators( "Vehicle", "type", new String[] {"==", "!=", "<", ">"});
+        com.factTypes = new String[] {"Person", "Vehicle"};
+        com.fieldTypes = new HashMap() {{
+            put("Person.age", SuggestionCompletionEngine.TYPE_NUMERIC);
+            put("Person.name", "String");
+            put("Vehicle.type", "String");
+            put("Vehcile.make", "String");
+        }};
 
-        com.addConnectiveOperators( "Person", "name", new String[] {"|=", "!="});
-
+        com.fieldsForType = new HashMap() {{
+           put("Person", new String[] {"age", "name"});
+           put("Vehicle", new String[] {"type", "make"});
+        }};
         
-        com.addConnectiveOperators( "Vehicle", "make", new String[] {"|="});
         
         DSLSentence sen = new DSLSentence();
         sen.elements = new DSLSentenceFragment[2];
         sen.elements[0] = new DSLSentenceFragment("This is a dsl expression", false);
         sen.elements[1] = new DSLSentenceFragment("(something)", true);
-        com.addDSLCondition( sen );
+        com.conditionDSLSentences = new DSLSentence[] {sen};
 
         
         sen = new DSLSentence();
@@ -75,15 +79,15 @@
         sen.elements[0] = new DSLSentenceFragment("Send an email to [", false);
         sen.elements[1] = new DSLSentenceFragment("(someone)", true);
         sen.elements[2] = new DSLSentenceFragment("]", false);
-        com.addDSLAction( sen );
         
-        sen = new DSLSentence();
-        sen.elements = new DSLSentenceFragment[1];
-        sen.elements[0] = new DSLSentenceFragment("do nothing", false);        
-        com.addDSLAction( sen );
         
+        DSLSentence sen2 = new DSLSentence();
+        sen2.elements = new DSLSentenceFragment[1];
+        sen2.elements[0] = new DSLSentenceFragment("do nothing", false);        
         
+        com.actionDSLSentences = new DSLSentence[] {sen, sen2};
         
+        
         return com;
     }
 

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/SuggestionCompletionEngine.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/SuggestionCompletionEngine.java	2007-01-10 23:50:03 UTC (rev 8812)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/SuggestionCompletionEngine.java	2007-01-11 12:50:26 UTC (rev 8813)
@@ -1,193 +1,201 @@
 package org.drools.brms.client.modeldriven;
 
-import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Iterator;
-import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
 import org.drools.brms.client.modeldriven.brxml.DSLSentence;
 
+import com.google.gwt.user.client.rpc.IsSerializable;
+
 /**
  * An suggestion completion processor. This should be usable in both GWT/Web and the IDE.
  * The data for this can be loaded into this from simple string lists.
  *  
- * TODO: also make this include type info for the fields (for display, but may be needed
- * for rendering DRL).
- * TODO: MAYBE make operator suggestions based on type of field, not field/fact as it is now?
- * (may make it more efficient and easier? )
- *  
  * @author Michael Neale
  */
-public class SuggestionCompletionEngine {
+public class SuggestionCompletionEngine implements IsSerializable {
 
+    /** These are the explicit types supported */
+    public static final String TYPE_COLLECTION = "Collection";
+    public static final String TYPE_COMPARABLE = "Comparable";
+    public static final String TYPE_STRING = "String";
+    public static final String TYPE_NUMERIC = "Numeric";
     
-    private Map factToFields = new HashMap();
-    private Map factFieldToOperator = new HashMap();
-    private Map factFieldToConnectiveOperator = new HashMap();
-    private Map globals = new HashMap();
-    private Map operatorMap = new HashMap();
-    private HashMap ceMap = new HashMap();
-    private HashMap actionMap = new HashMap();
-    private List conditionDSLSentences = new ArrayList();
-    private List actionDSLSentences = new ArrayList();
-    
-    
     /**
-     * For bulk loading up the data (from a previous rule save)
-     * 
-     * @param factToFields A map of "FactType" (key - String) to String[] (value) 
-     * @param factFieldToOperator A map of "FactType.field" (key - String) to String[] operators
-     * @param factFieldToConnectiveOperator A map of "FactType.field" (key -String) to String[] operators 
-     *                                  that are valid CONNECTIVE operators.
-     *                                  
-     * @param globals A map of global variable name to its fields (String[]).
-     * @param boundFacts A map of bound facts to types.
-     * @param conditionDSLs a list of DSLSentence suggestions for the LHS
-     * @param actionDSLs a list of DSLSentence suggestions for the RHS                          
-     *                                       
+     * The operators that are used at different times (based on type).
      */
-    public void load( 
-                      Map factToFields, 
-                      Map factFieldToOperator, 
-                      Map factFieldToConnectiveOperator,
-                      Map globals,                      
-                      List conditionDSLs,
-                      List actionDSLs
-                    ) {
-        this.factToFields = factToFields;
-        this.factFieldToOperator = factFieldToOperator;
-        this.factFieldToConnectiveOperator = factFieldToConnectiveOperator;
-        this.actionDSLSentences = actionDSLs;
-        this.conditionDSLSentences = conditionDSLs;
-        this.globals = globals;
-
-    }
+    private static final String[] STANDARD_CONNECTIVES = new String[] { "| ==", "| !=", "& !="};
+    private static final String[] STRING_CONNECTIVES = new String[] { "| ==", "| !=", "& !=", "& matches", "| matches"};
+    private static final String[] COMPARABLE_CONNECTIVES = new String[] {"| ==", "| !=", "& !=", "& >", "& <", "| >", "| <", "& >=", "& <=", "| <=", "| >="};
+    private static final String[] COLLECTION_CONNECTIVES = new String[] {"| ==", "| !=", "& !=", "| contains", "& contains", "| excludes", "& excludes"};
     
-    public SuggestionCompletionEngine() {  
-        //load the default operator map
-        defaultMappings();
+    private static final String[] STANDARD_OPERATORS = new String[] { "==", "!=" };
+    private static final String[] COMPARABLE_OPERATORS = new String[] { "==", "!=", "<", ">", "<=", ">="};
+    private static final String[] STRING_OPERATORS = new String[] {"==", "!=", "matches"};
+    private static final String[] COLLECTION_OPERATORS = new String[] {"contains", "excludes", "==", "!="};
         
-        
-    }
-
-    /**
-     * This loads the default mappings for verbalisation
-     *
+    /** The top level conditional elements (first order logic) */
+    private static final String[] CONDITIONAL_ELEMENTS = new String[] {"not", "exists", "or"};
+    
+    
+    /** 
+     * A list of fact types (never fully qualified).
      */
-    private void defaultMappings() {
-        this.operatorMap.put( "==", "is equal to" );
-        this.operatorMap.put( "!=", "is not equal to" );
-        this.operatorMap.put( "<", "is less than" );
-        this.operatorMap.put( "<=", "less than or equal to" );
-        this.operatorMap.put( ">", "greater than" );
-        this.operatorMap.put( ">=", "greater than or equal to" );
-        
-        this.operatorMap.put( "|==", "or equal to" );
-        this.operatorMap.put( "|!=", "or not equal to" );
-        this.operatorMap.put( "&!=", "and not equal to" );
-        this.operatorMap.put( "&>", "and greater than" );
-        
-        
-        
-        this.ceMap.put( "not", "There is no" );
-        this.ceMap.put( "exists", "There exists" );
-        this.ceMap.put( "or", "Any of" );
-        
-        this.actionMap.put( "assert", "Assert" );
-        this.actionMap.put( "retract", "Retract" );
-        this.actionMap.put( "set", "Set" );
-        
-        
-    }
+    public String[] factTypes;
     
     /**
-     * This will use the given operator map rather then the default verbalisation.
+     * A map of types to the fields. key is type, value is (String[] of fields)
+     * 
+     * @gwt.typeArgs <java.lang.String, java.lang.String[]>
      */
-    public void addOperatorDisplayValuesMap(Map operatorMap) {
-        this.operatorMap = operatorMap;
-    }
+    public Map fieldsForType;
     
-    
     /**
-     * Add a DSL suggestion for the LHS.
-     * @param sentence
+     * A map of the Fields to their types, needed for operator completions,
+     * as well as other things like rendering strings, dates etc.
+     * This is in the format of: { 'Type.field' => 'typename' }.
+     * Should not be the exact type, perhaps just a high level interface, eg "Comparable".
+     * 
+     * @gwt.typeArgs <java.lang.String, java.lang.String>
      */
-    public void addDSLCondition(DSLSentence sentence) {
-        this.conditionDSLSentences.add( sentence );
-    }
+    public Map fieldTypes;
     
+    
+    
+    
     /**
-     * Add a DSL suggestion for the RHS.
-     * @param sentence
+     * Contains a map of globals (name is key) and their type (value).
+     * @gwt.typeArgs <java.lang.String, java.lang.String>
      */
-    public void addDSLAction(DSLSentence sentence) {
-        this.actionDSLSentences.add( sentence );
-    }
+    public Map globalTypes = new HashMap();
     
     
-    /**
-     * Add a fact, with the applicable fields.
+    /** Operators (from the grammar):
+     *      op=(    '=='
+        |   '>'
+        |   '>='
+        |   '<'
+        |   '<='
+        |   '!='
+        |   'contains'
+        |   'matches'
+        |       'excludes'
+        )
+     * Connectives add "&" and "|" to this.
      */
-    public void addFact(String factType, String[] fields) {
-        this.factToFields.put(factType, fields);
-    }
+    
 
-    /**
-     * add an operator, to the applicable fact/field combination.
-     */
-    public void addOperators(String factType, String fieldName, String[] operators) {
-        this.factFieldToOperator.put( factType + "." + fieldName, operators );
-    }
     
+
+
     /**
-     * add a connective operator (as they are generally a subset of the full set of operators).
+     * DSL language extensions, if needed, if provided by the package.
      */
-    public void addConnectiveOperators(String factType, String fieldName, String[] operators) {
-        this.factFieldToConnectiveOperator.put( factType + "." + fieldName, operators );
-    }
+    public DSLSentence[] conditionDSLSentences = new DSLSentence[0];
+    public DSLSentence[] actionDSLSentences = new DSLSentence[0];
     
     
-    /**
-     * Add a global with the specified fields.
-     */
-    public void addGlobal(String global, String[] fields) {
-        this.globals.put( global, fields );
+//    /**
+//     * For bulk loading up the data (from a previous rule save)
+//     * 
+//     * @param factToFields A map of "FactType" (key - String) to String[] (value) 
+//     * @param factFieldToOperator A map of "FactType.field" (key - String) to String[] operators
+//     * @param factFieldToConnectiveOperator A map of "FactType.field" (key -String) to String[] operators 
+//     *                                  that are valid CONNECTIVE operators.
+//     *                                  
+//     * @param globals A map of global variable name to its fields (String[]).
+//     * @param boundFacts A map of bound facts to types.
+//     * @param conditionDSLs a list of DSLSentence suggestions for the LHS
+//     * @param actionDSLs a list of DSLSentence suggestions for the RHS                          
+//     *                                       
+//     */
+//    public void load( 
+//                      Map factToFields, 
+//                      Map factFieldToOperator, 
+//                      Map factFieldToConnectiveOperator,
+//                      Map globals,                      
+//                      List conditionDSLs,
+//                      List actionDSLs
+//                    ) {
+//        this.factToFields = factToFields;
+//        this.factFieldToOperator = factFieldToOperator;
+//        this.factFieldToConnectiveOperator = factFieldToConnectiveOperator;
+//        this.actionDSLSentences = actionDSLs;
+//        this.conditionDSLSentences = conditionDSLs;
+//        this.globals = globals;
+//
+//    }
+    
+    public SuggestionCompletionEngine() {  
+
+        
+        
     }
 
+    
+    
+
     public String[] getConditionalElements() {       
-        return new String[] {"not", "exists", "or"};
+        return CONDITIONAL_ELEMENTS;
     }
     
-    public List getDSLConditions() {
+    public DSLSentence[] getDSLConditions() {
         return conditionDSLSentences;
     }
     
-    public List getDSLActions() {
+    public DSLSentence[] getDSLActions() {
         return actionDSLSentences;
     }
 
     public String[] getConnectiveOperatorCompletions(String factType,
                                                      String fieldName) {
-        return (String[]) this.factFieldToConnectiveOperator.get( factType + "." + fieldName );
+        String type = (String) this.fieldTypes.get( factType + "." + fieldName );
+        if (type == null) {
+          return STANDARD_CONNECTIVES;  
+        } else if (type.equals( TYPE_STRING )) {
+          return STRING_CONNECTIVES;  
+        } else if (type.equals( TYPE_COMPARABLE ) || type.equals( TYPE_NUMERIC )) {
+          return COMPARABLE_CONNECTIVES;
+        } else if (type.equals( TYPE_COLLECTION )){
+            return COLLECTION_CONNECTIVES;
+        } else {
+            return STANDARD_CONNECTIVES;
+        }
+        
     }
 
+
+
     public String[] getFactTypes() {
-        return toStringArray( this.factToFields.keySet() );
+        return this.factTypes;
     }
 
-    public String[] getFieldCompletions(String factType) {        
-        return (String[]) this.factToFields.get( factType );
+    public String[] getFieldCompletions(String factType) {
+       return (String[]) this.fieldsForType.get( factType );
+        
     }
 
     public String[] getOperatorCompletions(String factType,
                                            String fieldName) {
-        return (String[]) this.factFieldToOperator.get( factType + "." + fieldName );        
+        String type = (String) this.fieldTypes.get( factType + "." + fieldName );
+        if (type == null) {
+            return STANDARD_OPERATORS;
+        } else if (type.equals( TYPE_STRING )) {
+            return STRING_OPERATORS;
+        } else if (type.equals( TYPE_COMPARABLE ) || type.equals( TYPE_NUMERIC )) {
+            return COMPARABLE_OPERATORS;
+        } else if (type.equals( TYPE_COLLECTION )) {
+            return COLLECTION_OPERATORS;
+        } else {            
+            return STANDARD_OPERATORS;
+        }
+                
     }
     
     public boolean isGlobalVariable(String variable) {
-        return globals.containsKey( variable );
+        return this.globalTypes.containsKey( variable );
     }
     
     private String[] toStringArray(Set set) {
@@ -201,48 +209,18 @@
     }
 
 
-    public String[] getFieldCompletionsForGlobalVariable(String varName) {        
-        return (String[]) this.globals.get( varName );
+    public String[] getFieldCompletionsForGlobalVariable(String varName) {
+        String type = (String) this.globalTypes.get( varName );        
+        return (String[]) this.fieldsForType.get( type );
     }
 
 
-    public String[] getGlobalVariables() { 
-        return toStringArray( this.globals.keySet() );
+    public String[] getGlobalVariables() {         
+        return toStringArray( this.globalTypes.keySet() );
     }
 
-    /**
-     * Returns a list of First order logic prefixes
-     */
-    public String[] getListOfCEs() {
-        return new String[] {"not", "exists", "or"};
-    }
 
     
-    /**
-     * Returns display names for operators. 
-     */
-    public String getOperatorDisplayName(String op) {
-        if (this.operatorMap.containsKey(op)) {
-            return (String) operatorMap.get(op);
-        } else {
-            return op;
-        }
-    }
+
     
-    public String getCEDisplayName(String ce) {
-        if (this.ceMap.containsKey(ce)) {
-            return (String) ceMap.get(ce);
-        } else {
-            return ce;
-        }
-    }
-    
-    public String getActionDisplayName(String action) {
-        if (this.actionMap.containsKey(action)) {
-            return (String) actionMap.get(action);
-        } else {
-            return action;
-        }
-    }
-    
 }

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/ActionAssertFactWidget.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/ActionAssertFactWidget.java	2007-01-10 23:50:03 UTC (rev 8812)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/ActionAssertFactWidget.java	2007-01-11 12:50:26 UTC (rev 8813)
@@ -2,6 +2,7 @@
 
 import org.drools.brms.client.common.FormStylePopup;
 import org.drools.brms.client.common.YesNoDialog;
+import org.drools.brms.client.modeldriven.HumanReadable;
 import org.drools.brms.client.modeldriven.SuggestionCompletionEngine;
 import org.drools.brms.client.modeldriven.brxml.ActionAssertFact;
 import org.drools.brms.client.modeldriven.brxml.ActionFieldValue;
@@ -107,7 +108,7 @@
             }
         } );
                 
-        horiz.add( new Label(completions.getActionDisplayName("assert") + " " + this.model.factType) );
+        horiz.add( new Label(HumanReadable.getActionDisplayName("assert") + " " + this.model.factType) );
         horiz.add( edit );
         return horiz;
         

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/ActionRetractFactWidget.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/ActionRetractFactWidget.java	2007-01-10 23:50:03 UTC (rev 8812)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/ActionRetractFactWidget.java	2007-01-11 12:50:26 UTC (rev 8813)
@@ -1,5 +1,6 @@
 package org.drools.brms.client.modeldriven.ui;
 
+import org.drools.brms.client.modeldriven.HumanReadable;
 import org.drools.brms.client.modeldriven.SuggestionCompletionEngine;
 import org.drools.brms.client.modeldriven.brxml.ActionRetractFact;
 
@@ -22,7 +23,7 @@
         
         layout.setStyleName( "model-builderInner-Background" );
         
-        layout.setWidget( 0, 0, new Label(com.getActionDisplayName( "retract" )) );
+        layout.setWidget( 0, 0, new Label(HumanReadable.getActionDisplayName( "retract" )) );
         layout.setWidget( 0, 1, new Label( "[" + model.variableName + "]") );
         
         initWidget( layout );

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/ActionSetFieldWidget.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/ActionSetFieldWidget.java	2007-01-10 23:50:03 UTC (rev 8812)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/ActionSetFieldWidget.java	2007-01-11 12:50:26 UTC (rev 8813)
@@ -2,6 +2,7 @@
 
 import org.drools.brms.client.common.FormStylePopup;
 import org.drools.brms.client.common.YesNoDialog;
+import org.drools.brms.client.modeldriven.HumanReadable;
 import org.drools.brms.client.modeldriven.SuggestionCompletionEngine;
 import org.drools.brms.client.modeldriven.brxml.ActionFieldValue;
 import org.drools.brms.client.modeldriven.brxml.ActionSetField;
@@ -106,7 +107,7 @@
         } );
         
         
-        horiz.add( new Label(completions.getActionDisplayName("set") + " [" + model.variable + "]") );
+        horiz.add( new Label(HumanReadable.getActionDisplayName("set") + " [" + model.variable + "]") );
         horiz.add( edit );
         
         return horiz;

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/CompositeFactPatternWidget.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/CompositeFactPatternWidget.java	2007-01-10 23:50:03 UTC (rev 8812)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/CompositeFactPatternWidget.java	2007-01-11 12:50:26 UTC (rev 8813)
@@ -1,6 +1,7 @@
 package org.drools.brms.client.modeldriven.ui;
 
 import org.drools.brms.client.common.FormStylePopup;
+import org.drools.brms.client.modeldriven.HumanReadable;
 import org.drools.brms.client.modeldriven.SuggestionCompletionEngine;
 import org.drools.brms.client.modeldriven.brxml.CompositeFactPattern;
 import org.drools.brms.client.modeldriven.brxml.FactPattern;
@@ -75,7 +76,7 @@
             }
         } );
         
-        horiz.add( new Label( completions.getCEDisplayName( pattern.type ) ) );
+        horiz.add( new Label( HumanReadable.getCEDisplayName( pattern.type ) ) );
         horiz.add( edit );
         return horiz;
     }

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/FactPatternWidget.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/FactPatternWidget.java	2007-01-10 23:50:03 UTC (rev 8812)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/FactPatternWidget.java	2007-01-11 12:50:26 UTC (rev 8813)
@@ -2,6 +2,7 @@
 
 import org.drools.brms.client.common.FormStylePopup;
 import org.drools.brms.client.common.YesNoDialog;
+import org.drools.brms.client.modeldriven.HumanReadable;
 import org.drools.brms.client.modeldriven.SuggestionCompletionEngine;
 import org.drools.brms.client.modeldriven.brxml.ConnectiveConstraint;
 import org.drools.brms.client.modeldriven.brxml.Constraint;
@@ -220,7 +221,7 @@
         final ListBox box = new ListBox();
         for ( int i = 0; i < ops.length; i++ ) {
             String op = ops[i];
-            box.addItem(completions.getOperatorDisplayName( op ), op );
+            box.addItem(HumanReadable.getOperatorDisplayName( op ), op );
             if (op.equals( con.operator )) {
                 box.setSelectedIndex( i );
             }
@@ -261,7 +262,7 @@
         final ListBox box = new ListBox();
         for ( int i = 0; i < ops.length; i++ ) {
             String op = ops[i];
-            box.addItem( completions.getOperatorDisplayName( op ) , op );
+            box.addItem( HumanReadable.getOperatorDisplayName( op ) , op );
             if (op.equals( c.operator )) {
                 box.setSelectedIndex( i );
             }

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/RuleModeller.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/RuleModeller.java	2007-01-10 23:50:03 UTC (rev 8812)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/RuleModeller.java	2007-01-11 12:50:26 UTC (rev 8813)
@@ -6,6 +6,7 @@
 import org.drools.brms.client.common.ErrorPopup;
 import org.drools.brms.client.common.FormStylePopup;
 import org.drools.brms.client.common.YesNoDialog;
+import org.drools.brms.client.modeldriven.HumanReadable;
 import org.drools.brms.client.modeldriven.SuggestionCompletionEngine;
 import org.drools.brms.client.modeldriven.brxml.ActionAssertFact;
 import org.drools.brms.client.modeldriven.brxml.ActionRetractFact;
@@ -223,12 +224,12 @@
         //
         // The list of top level CEs
         //
-        String ces[]  = completions.getListOfCEs();
+        String ces[]  = HumanReadable.CONDITIONAL_ELEMENTS;
         final ListBox ceBox = new ListBox();
         ceBox.addItem( "Choose condition type...", "IGNORE" ); 
         for ( int i = 0; i < ces.length; i++ ) {
             String ce = ces[i];
-            ceBox.addItem( completions.getCEDisplayName( ce ), ce );
+            ceBox.addItem( HumanReadable.getCEDisplayName( ce ), ce );
         }
         ceBox.setSelectedIndex( 0 );
         
@@ -247,18 +248,18 @@
         //
         // The list of DSL sentences
         //
-        if (completions.getDSLConditions().size() > 0) {
+        if (completions.getDSLConditions().length > 0) {
             final ListBox dsls = new ListBox();
             dsls.addItem( "Choose..." );
-            for(int i = 0; i < completions.getDSLConditions().size(); i++ ) {
-                DSLSentence sen = (DSLSentence) completions.getDSLConditions().get( i );
+            for(int i = 0; i < completions.getDSLConditions().length; i++ ) {
+                DSLSentence sen = completions.getDSLConditions()[i];
                 dsls.addItem( sen.toString(), Integer.toString( i ) );
             }
             
             dsls.addChangeListener( new ChangeListener() {
                 public void onChange(Widget w) {
                     int idx = Integer.parseInt( dsls.getValue( dsls.getSelectedIndex() ) );
-                    addNewDSLLhs( (DSLSentence) completions.getDSLConditions().get( idx ) );
+                    addNewDSLLhs( (DSLSentence) completions.getDSLConditions()[ idx ] );
                     popup.hide();
                 }
             });
@@ -349,18 +350,18 @@
         //
         // The list of DSL sentences
         //
-        if (completions.getDSLActions().size() > 0) {
+        if (completions.getDSLActions().length > 0) {
             final ListBox dsls = new ListBox();
             dsls.addItem( "Choose..." );
-            for(int i = 0; i < completions.getDSLActions().size(); i++ ) {
-                DSLSentence sen = (DSLSentence) completions.getDSLActions().get( i );
+            for(int i = 0; i < completions.getDSLActions().length; i++ ) {
+                DSLSentence sen = (DSLSentence) completions.getDSLActions()[ i ];
                 dsls.addItem( sen.toString(), Integer.toString( i ) );
             }
             
             dsls.addChangeListener( new ChangeListener() {
                 public void onChange(Widget w) {
                     int idx = Integer.parseInt( dsls.getValue( dsls.getSelectedIndex() ) );
-                    addNewDSLRhs( (DSLSentence) completions.getDSLActions().get( idx ) );
+                    addNewDSLRhs( (DSLSentence) completions.getDSLActions()[ idx ] );
                     popup.hide();
                 }
             });

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/EditorLauncher.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/EditorLauncher.java	2007-01-10 23:50:03 UTC (rev 8812)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/EditorLauncher.java	2007-01-11 12:50:26 UTC (rev 8813)
@@ -2,20 +2,10 @@
 
 import org.drools.brms.client.common.AssetFormats;
 import org.drools.brms.client.modeldriven.SuggestionCompletionEngine;
-import org.drools.brms.client.modeldriven.brxml.ActionAssertFact;
-import org.drools.brms.client.modeldriven.brxml.ActionFieldValue;
-import org.drools.brms.client.modeldriven.brxml.ActionRetractFact;
-import org.drools.brms.client.modeldriven.brxml.ActionSetField;
-import org.drools.brms.client.modeldriven.brxml.CompositeFactPattern;
-import org.drools.brms.client.modeldriven.brxml.Constraint;
-import org.drools.brms.client.modeldriven.brxml.DSLSentence;
-import org.drools.brms.client.modeldriven.brxml.DSLSentenceFragment;
-import org.drools.brms.client.modeldriven.brxml.FactPattern;
-import org.drools.brms.client.modeldriven.brxml.IAction;
-import org.drools.brms.client.modeldriven.brxml.IPattern;
 import org.drools.brms.client.modeldriven.brxml.RuleModel;
 import org.drools.brms.client.modeldriven.ui.RuleModeller;
 import org.drools.brms.client.rpc.RuleAsset;
+import org.drools.brms.client.rpc.RuleModelData;
 
 import com.google.gwt.user.client.ui.Widget;
 
@@ -39,130 +29,15 @@
 
     }
 
-    private static RuleModel getRuleModel(RuleAsset asset) {
-//        RuleModel model = new RuleModel();
-//        
-//        model.lhs = new IPattern[3];
-//        
-//        FactPattern p1 = new FactPattern();
-//        FactPattern p2 = new FactPattern();
-//        CompositeFactPattern p3 = new CompositeFactPattern();
-//        
-//        
-//        model.lhs[0] = p1;
-//        model.lhs[1] = p2;
-//        model.lhs[2] = p3;
-//        
-//        DSLSentence dsl = new DSLSentence();
-//        dsl.elements = new DSLSentenceFragment[2];
-//        dsl.elements[0] = new DSLSentenceFragment("There is a Storm alert of type", false);
-//        dsl.elements[1] = new DSLSentenceFragment("(code here)", true);
-//        
-//        model.addLhsItem( dsl );
-//        
-//        dsl = new DSLSentence();
-//        dsl.elements = new DSLSentenceFragment[2];
-//        dsl.elements[0] = new DSLSentenceFragment("- severity rating is not more than", false);
-//        dsl.elements[1] = new DSLSentenceFragment("(code here)", true);
-//        
-//        model.addLhsItem( dsl );
-//            
-//        
-//        
-//        
-//        p1.factType = "Person";
-//        p1.constraints = new Constraint[2];
-//        p1.constraints[0] = new Constraint();
-//        p1.constraints[1] = new Constraint();
-//        p1.constraints[0].fieldName = "age";
-//        p1.constraints[0].operator = "<";
-//        p1.constraints[0].value = "42";
-//
-//        p1.constraints[1].fieldName = "name";
-//        p1.constraints[1].operator = "==";
-//        p1.constraints[1].value = "Bob";
-//        p1.constraints[1].fieldBinding = "n";
-//  
-//        
-//        
-//        p2.factType = "Vehicle";
-//        p2.boundName = "car1";
-//        p2.constraints = new Constraint[1];
-//        p2.constraints[0] = new Constraint();
-//        p2.constraints[0].fieldName = "type";
-//        p2.constraints[0].operator = "!=";
-//        
-//        p3.type = "not";
-//        p3.patterns = new FactPattern[1];
-//        FactPattern i1 = new FactPattern("Vehicle");
-//        i1.constraints = new Constraint[1];
-//        i1.constraints[0] = new Constraint();
-//        i1.constraints[0].fieldName = "type";
-//        i1.constraints[0].operator = "==";
-//        
-//        p3.patterns[0] = i1;
-//        
-//        ActionSetField set = new ActionSetField();
-//        set.variable = "car1";
-//        set.fieldValues = new ActionFieldValue[1];
-//        set.fieldValues[0] = new ActionFieldValue();
-//        set.fieldValues[0].field = "type";
-//        
-//        ActionAssertFact fact = new ActionAssertFact();
-//        fact.factType = "Person";
-//        fact.fieldValues = new ActionFieldValue[2];
-//        fact.fieldValues[0] = new ActionFieldValue("name", "Mike");
-//        fact.fieldValues[1] = new ActionFieldValue("age", "42");
-//        
-//        ActionRetractFact retract = new ActionRetractFact("car1");
-//        
-//        model.rhs = new IAction[3];
-//        model.rhs[0] = set;
-//        model.rhs[1] = fact;
-//        model.rhs[2] = retract;
-        
-        
-        
-        return (RuleModel) asset.content;
+    private static SuggestionCompletionEngine getSuggestionCompletionEngine(RuleAsset asset) {
+        RuleModelData data = (RuleModelData) asset.content;
+        return data.completionEngine;
     }
 
-    private static SuggestionCompletionEngine getSuggestionCompletionEngine(RuleAsset asset) {
-        SuggestionCompletionEngine com = new SuggestionCompletionEngine();
-        
-        com.addFact( "Person", new String[] {"age", "name"}  );
-        com.addFact("Vehicle", new String[] {"type", "make"} );
-        com.addOperators( "Person", "name", new String[] {"==", "!="});
-        com.addOperators( "Person", "age", new String[] {"==", "!=", "<", ">", "<=", ">="});
-        com.addOperators( "Vehicle", "age", new String[] {"==", "!=", "<", ">"});
-        com.addOperators( "Vehicle", "type", new String[] {"==", "!=", "<", ">"});
-
-        com.addConnectiveOperators( "Person", "name", new String[] {"|=", "!="});
-
-        
-        com.addConnectiveOperators( "Vehicle", "make", new String[] {"|="});
-        
-        DSLSentence sen = new DSLSentence();
-        sen.elements = new DSLSentenceFragment[2];
-        sen.elements[0] = new DSLSentenceFragment("This is a dsl expression", false);
-        sen.elements[1] = new DSLSentenceFragment("(something)", true);
-        com.addDSLCondition( sen );
-
-        
-        sen = new DSLSentence();
-        sen.elements = new DSLSentenceFragment[3];
-        sen.elements[0] = new DSLSentenceFragment("Send an email to [", false);
-        sen.elements[1] = new DSLSentenceFragment("(someone)", true);
-        sen.elements[2] = new DSLSentenceFragment("]", false);
-        com.addDSLAction( sen );
-        
-        sen = new DSLSentence();
-        sen.elements = new DSLSentenceFragment[1];
-        sen.elements[0] = new DSLSentenceFragment("do nothing", false);        
-        com.addDSLAction( sen );
-        
-        
-        
-        return com;
+    private static RuleModel getRuleModel(RuleAsset asset) {
+        RuleModelData data = (RuleModelData) asset.content;        
+        return (RuleModel) data.model;
     }
 
+
 }

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/AssetContentFormatHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/AssetContentFormatHandler.java	2007-01-10 23:50:03 UTC (rev 8812)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/AssetContentFormatHandler.java	2007-01-11 12:50:26 UTC (rev 8813)
@@ -1,10 +1,17 @@
 package org.drools.brms.server;
 
 
+import java.util.HashMap;
+import java.util.Map;
+
 import org.drools.brms.client.common.AssetFormats;
+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.RuleContentText;
+import org.drools.brms.client.rpc.RuleModelData;
 import org.drools.brms.server.util.BRLPersistence;
 import org.drools.repository.AssetItem;
 
@@ -40,7 +47,14 @@
 
         } else if (item.getFormat().equals( AssetFormats.BUSINESS_RULE )) {             
             RuleModel model = BRLPersistence.getInstance().toModel( item.getContent() );
-            asset.content = model;
+
+            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();
+            
+            asset.content = data;
         } else {
             //default to text, goode olde texte, just like mum used to make.
             RuleContentText text = new RuleContentText();
@@ -53,6 +67,45 @@
         
     }
     
+    private SuggestionCompletionEngine getDummySuggestionEngine() {
+        SuggestionCompletionEngine com = new SuggestionCompletionEngine();
+        
+        com.factTypes = new String[] {"Person", "Vehicle"};
+        
+        Map fieldTypes = new HashMap();
+        fieldTypes.put("Person.age", SuggestionCompletionEngine.TYPE_NUMERIC);
+        fieldTypes.put("Person.name", "String");
+        fieldTypes.put("Vehicle.type", "String");
+        fieldTypes.put("Vehcile.make", "String");
+        com.fieldTypes = fieldTypes;
+
+        Map fieldsForType = new HashMap();
+        fieldsForType.put("Person", new String[] {"age", "name"});
+        fieldsForType.put("Vehicle", new String[] {"type", "make"});
+        com.fieldsForType = fieldsForType;
+        
+        
+        DSLSentence sen = new DSLSentence();
+        sen.elements = new DSLSentenceFragment[2];
+        sen.elements[0] = new DSLSentenceFragment("This is a dsl expression", 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("Send an email to [", false);
+        sen.elements[1] = new DSLSentenceFragment("(someone)", true);
+        sen.elements[2] = new DSLSentenceFragment("]", false);
+                
+        DSLSentence sen2 = new DSLSentence();
+        sen2.elements = new DSLSentenceFragment[1];
+        sen2.elements[0] = new DSLSentenceFragment("do nothing", false);        
+        
+        com.actionDSLSentences = new DSLSentence[] {sen, sen2};        
+        
+        return com;
+    }
+    
     /**
      * For storing the asset content back into the repo node (any changes).
      * @param asset
@@ -62,9 +115,9 @@
     public void storeAssetContent(RuleAsset asset, AssetItem repoAsset) throws SerializableException {
         if (asset.content instanceof RuleContentText) {
             repoAsset.updateContent( ((RuleContentText)asset.content).content );        
-        } else if (asset.content instanceof RuleModel) {
-            RuleModel model = (RuleModel) asset.content;
-            repoAsset.updateContent( BRLPersistence.getInstance().toXML( model ) );
+        } else if (asset.content instanceof RuleModelData) {
+            RuleModelData data = (RuleModelData) asset.content;
+            repoAsset.updateContent( BRLPersistence.getInstance().toXML( data.model ) );
         } else {
             throw new SerializableException("Not able to handle that type of content just yet...");
         }

Modified: labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/client/modeldriven/SuggestionCompletionTest.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/client/modeldriven/SuggestionCompletionTest.java	2007-01-10 23:50:03 UTC (rev 8812)
+++ labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/client/modeldriven/SuggestionCompletionTest.java	2007-01-11 12:50:26 UTC (rev 8813)
@@ -1,6 +1,5 @@
 package org.drools.brms.client.modeldriven;
 
-import java.util.ArrayList;
 import java.util.HashMap;
 
 import junit.framework.TestCase;
@@ -12,31 +11,25 @@
         
         SuggestionCompletionEngine com = new SuggestionCompletionEngine();
 
-        com.load(
-                     new HashMap() {{
-                         put( "Person", new String[] {"age", "name"} );
-                         put( "Vehicle", new String[] {"type", "make"} );
-                     }},
-                     new HashMap() {{
-                         put( "Person.name", new String[] {"==", "!="});
-                         put( "Person.age", new String[] {"==", "!=", "<", ">"});
-                         
-                     }},
-                     new HashMap() {{
-                         put("Vehicle.make", new String[] {"|="});  
-                     }},
-                     new HashMap() {{
-                         put("foo", new String[] {"bar", "baz"});
-                     }},  
-                     new ArrayList() {{
-                         
-                     }}, 
-                     new ArrayList() {{
-                         
-                     }}
-                     
-        );
+        com.factTypes = new String[] {"Person", "Vehicle"};
+        com.fieldsForType = new HashMap() {{
+            put("Person", new String[] {"age", "name", "rank"});
+            put("Vehicle", new String[] {"type", "make"});
+        }};
+        com.fieldTypes = new HashMap() {{
+           put("Person.age", "Numeric");
+           put("Person.rank", "Comparable");
+           put("Person.name", "String");
+           put("Vehicle.make", "String");
+           put("Vehicle.type", "String");
+        }};
+        com.globalTypes = new HashMap() {{
+           put("bar", "Person");
+           put("baz", "Vehicle");
+        }};
         
+
+        
         String[] c =com.getConditionalElements();
         assertEquals("not", c[0]);
         assertEquals("exists", c[1]);
@@ -57,38 +50,58 @@
         assertEquals( "make", c[1] );
         
         c = com.getOperatorCompletions( "Person", "name" );
-        assertEquals(2, c.length);
+        assertEquals(3, c.length);
         assertEquals("==", c[0]);
         assertEquals( "!=", c[1] );
+        assertEquals( "matches", c[2] );
         
         
         c = com.getOperatorCompletions( "Person", "age" );
-        assertEquals(4, c.length);
+        assertEquals(6, c.length);
         assertEquals(c[0], "==");
         assertEquals(c[1], "!=");
         assertEquals(c[2], "<" );
         assertEquals(c[3], ">" );
+        
+        c = com.getOperatorCompletions( "Person", "rank" );        
+        assertEquals(6, c.length);
+        assertEquals(c[0], "==");
+        assertEquals(c[1], "!=");
+        assertEquals(c[2], "<" );
+        assertEquals(c[3], ">" );
 
         c = com.getConnectiveOperatorCompletions( "Vehicle", "make" );
-        assertEquals(1, c.length);
-        assertEquals("|=", c[0]);
+        assertEquals(5, c.length);
+        assertEquals("| ==", c[0]);
         
         c = com.getGlobalVariables();
-        assertEquals(1, c.length);
-        assertEquals("foo", c[0]);
-        
-        c = com.getFieldCompletionsForGlobalVariable( "foo" );
         assertEquals(2, c.length);
-        assertEquals("bar", c[0]);
-        assertEquals("baz", c[1]);
+        assertEquals("baz", c[0]);
+        assertEquals("bar", c[1]);
         
+        c = com.getFieldCompletionsForGlobalVariable( "bar" );
+        assertEquals(3, c.length);
+        assertEquals("age", c[0]);
+        assertEquals("name", c[1]);
 
+        c = com.getFieldCompletionsForGlobalVariable( "baz" );
+        assertEquals(2, c.length);
+        assertEquals("type", c[0]);
+        assertEquals("make", c[1]);
+
+
+        //check that it has default operators for general objects
+        c = com.getOperatorCompletions( "Person", "wankle" );
+        assertEquals(2, c.length);        
         
     }
     
     public void testAdd() {
         SuggestionCompletionEngine com = new SuggestionCompletionEngine();
-        com.addFact( "Foo", new String[] {"a"});
+        com.factTypes = new String[] {"Foo"};
+        com.fieldsForType = new HashMap() {{
+           put("Foo", new String[] {"a"}); 
+        }};
         
         assertEquals(1, com.getFactTypes().length);
         assertEquals("Foo", com.getFactTypes()[0]);
@@ -112,33 +125,40 @@
 
 
     public void testOperatorMapping() {
-        SuggestionCompletionEngine com = new SuggestionCompletionEngine();
-        assertEquals("is not equal to", com.getOperatorDisplayName("!="));
-        assertEquals("is equal to", com.getOperatorDisplayName("=="));        
-        assertEquals("xxx", com.getOperatorDisplayName("xxx"));
+
+        assertEquals("is not equal to", HumanReadable.getOperatorDisplayName("!="));
+        assertEquals("is equal to", HumanReadable.getOperatorDisplayName("=="));        
+        assertEquals("xxx", HumanReadable.getOperatorDisplayName("xxx"));
     }
     
     public void testCEMapping() {
-        SuggestionCompletionEngine com = new SuggestionCompletionEngine();
-        assertEquals("There is no", com.getCEDisplayName( "not" ));
-        assertEquals("There exists", com.getCEDisplayName( "exists" ));
-        assertEquals("Any of", com.getCEDisplayName( "or" ));
-        assertEquals("xxx", com.getCEDisplayName( "xxx" ));
+
+        assertEquals("There is no", HumanReadable.getCEDisplayName( "not" ));
+        assertEquals("There exists", HumanReadable.getCEDisplayName( "exists" ));
+        assertEquals("Any of", HumanReadable.getCEDisplayName( "or" ));
+        assertEquals("xxx", HumanReadable.getCEDisplayName( "xxx" ));
         
     }
     
     public void testActionMapping() {
-        SuggestionCompletionEngine com = new SuggestionCompletionEngine();
-        assertEquals("Assert", com.getActionDisplayName( "assert" ));
-        assertEquals("foo", com.getActionDisplayName( "foo" ));
+
+        assertEquals("Assert", HumanReadable.getActionDisplayName( "assert" ));
+        assertEquals("foo", HumanReadable.getActionDisplayName( "foo" ));
     }
     
     
     public void testGlobalAndFacts() {
         SuggestionCompletionEngine com = new SuggestionCompletionEngine();
 
-        com.addGlobal( "y", new String[] {"a"} );
+        com.globalTypes = new HashMap() {{
+            put("y", "Foo");
+        }};
+        com.fieldsForType = new HashMap() {{
+           put("Foo", new String[] {"a"}); 
+        }};
         
+        
+        
         assertFalse(com.isGlobalVariable( "x" ));        
         assertTrue(com.isGlobalVariable( "y" ));
     }




More information about the jboss-svn-commits mailing list