[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