[jboss-svn-commits] JBL Code SVN: r7854 - in labs/jbossrules/trunk/drools-jbrms/src: main/java/org/drools/brms/client main/java/org/drools/brms/client/modeldriven main/java/org/drools/brms/client/modeldriven/ui test/java/org/drools/brms/client test/java/org/drools/brms/client/modeldriven
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Mon Nov 27 12:58:11 EST 2006
Author: michael.neale at jboss.com
Date: 2006-11-27 12:58:05 -0500 (Mon, 27 Nov 2006)
New Revision: 7854
Added:
labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/
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/package.html
labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/
labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/ConstraintWidget.java
labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/FactTypeWidget.java
labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/PatternWidget.java
labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/RuleScorecardWidget.java
labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/client/modeldriven/
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/package.html
labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/client/modeldriven/ui/
Log:
new model driven rule editor
Added: 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 2006-11-27 17:57:22 UTC (rev 7853)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/SuggestionCompletionEngine.java 2006-11-27 17:58:05 UTC (rev 7854)
@@ -0,0 +1,164 @@
+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;
+
+/**
+ * An suggestion completion processor. This should be usable in both GWT/Web and the IDE.
+ *
+ * @author Michael Neale
+ */
+public class SuggestionCompletionEngine {
+
+
+ private Map factToFields = new HashMap();
+ private Map factFieldToOperator = new HashMap();
+ private Map factFieldToConnectiveOperator = new HashMap();
+ private Map boundFacts = new HashMap();
+ private List boundFields = new ArrayList();
+ private Map globals = new HashMap();
+
+ /**
+ * 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[]).
+
+ */
+ public void load(
+ Map factToFields,
+ Map factFieldToOperator,
+ Map factFieldToConnectiveOperator,
+ Map globals
+ ) {
+ this.factToFields = factToFields;
+ this.factFieldToOperator = factFieldToOperator;
+ this.factFieldToConnectiveOperator = factFieldToConnectiveOperator;
+ this.globals = globals;
+
+ }
+
+ public SuggestionCompletionEngine() {
+ }
+
+
+ /**
+ * Add a fact, with the applicable fields.
+ */
+ 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).
+ */
+ public void addConnectiveOperators(String factType, String fieldName, String[] operators) {
+ this.factFieldToConnectiveOperator.put( factType + "." + fieldName, operators );
+ }
+
+
+ /**
+ * Add a global with the specified fields.
+ */
+ public void addGlobal(String global, String[] fields) {
+ this.globals.put( global, fields );
+ }
+
+ public String[] getConditionalElements() {
+ return new String[] {"not", "exists", "or"};
+ }
+
+ public String[] getConnectiveOperatorCompletions(String factType,
+ String fieldName) {
+ return (String[]) this.factFieldToConnectiveOperator.get( factType + "." + fieldName );
+ }
+
+ public String[] getFactTypes() {
+ return toStringArray( this.factToFields.keySet() );
+ }
+
+ public String[] getFieldCompletions(String factType) {
+
+ return (String[]) this.factToFields.get( factType );
+ }
+
+ public String[] getOperatorCompletions(String factType,
+ String fieldName) {
+ return (String[]) this.factFieldToOperator.get( factType + "." + fieldName );
+ }
+
+
+
+ /**
+ * This adds a bound field which may be used later on (fields values cannot be set this way).
+ */
+ public void addBoundField(String fieldName) {
+ this.boundFields.add(fieldName);
+ }
+
+ public String[] getBoundFacts() {
+ return toStringArray( boundFacts.keySet() );
+ }
+
+ private String[] toStringArray(Set set) {
+ String[] f = new String[set.size()];
+ int i = 0;
+ for ( Iterator iter = set.iterator(); iter.hasNext(); ) {
+ f[i] = (String) iter.next();
+ i++;
+ }
+ return f;
+ }
+
+
+ private String[] toStringArray(List list) {
+ String[] result = new String[list.size()];
+ for(int i = 0; i < list.size(); i ++) {
+ result[i] = (String) list.get( i );
+ }
+ return result;
+ }
+
+
+ public String[] getBoundFields() {
+ return toStringArray( boundFields );
+ }
+
+
+ public void addBoundFact(String varName,
+ String factType) {
+ this.boundFacts.put(varName, factType);
+ }
+
+
+ public String[] getFieldCompletionsForBoundFact(String varName) {
+ String factType = (String) this.boundFacts.get( varName );
+ return this.getFieldCompletions( factType );
+ }
+
+
+ public String[] getFieldCompletionsForGlobalVariable(String varName) {
+ return (String[]) this.globals.get( varName );
+ }
+
+
+ public String[] getGlobalVariables() {
+ return toStringArray( this.globals.keySet() );
+ }
+
+}
Added: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/package.html
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/package.html 2006-11-27 17:57:22 UTC (rev 7853)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/package.html 2006-11-27 17:58:05 UTC (rev 7854)
@@ -0,0 +1,4 @@
+<body>
+This is the model driven GUI builder which is really a superset of the breditor.
+
+</body>
\ No newline at end of file
Added: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/ConstraintWidget.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/ConstraintWidget.java 2006-11-27 17:57:22 UTC (rev 7853)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/ConstraintWidget.java 2006-11-27 17:58:05 UTC (rev 7854)
@@ -0,0 +1,200 @@
+package org.drools.brms.client.modeldriven.ui;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.drools.brms.client.modeldriven.SuggestionCompletionEngine;
+
+import com.google.gwt.user.client.ui.ChangeListener;
+import com.google.gwt.user.client.ui.ClickListener;
+import com.google.gwt.user.client.ui.Composite;
+import com.google.gwt.user.client.ui.FlexTable;
+import com.google.gwt.user.client.ui.HasHorizontalAlignment;
+import com.google.gwt.user.client.ui.Image;
+import com.google.gwt.user.client.ui.ListBox;
+import com.google.gwt.user.client.ui.TextBox;
+import com.google.gwt.user.client.ui.Widget;
+import com.google.gwt.user.client.ui.FlexTable.FlexCellFormatter;
+
+/**
+ * This contains all the constraints that are placed on a fact class.
+ *
+ * @author Michael Neale
+ */
+public class ConstraintWidget extends Composite {
+
+ private FlexTable outer;
+ public FlexTable layout;
+ private List rowData = new ArrayList();
+ private final SuggestionCompletionEngine completions;
+ private String factType;
+
+
+ /**
+ *
+ * @param factType The type of the fact (needed for lists)
+ * @param com The suggestion completion.
+ * @param constraints A list of ConstraintAtom's, which apply to the fact.
+ */
+ public ConstraintWidget(String factType, SuggestionCompletionEngine com, List constraints) {
+ this.completions = com;
+ this.factType = factType;
+ this.rowData = constraints;
+ outer = new FlexTable();
+ doTable();
+
+
+
+ initWidget( outer );
+ }
+
+
+
+ private void doTable() {
+ layout = new FlexTable();
+ outer.setWidget( 0, 0, layout);
+
+ //firstly to add a row
+ Image add = new Image("images/new_item.gif");
+ add.setTitle( "Add a new constraint on this fact." );
+ add.addClickListener( new ClickListener() {
+ public void onClick(Widget w) {
+ rowData.add( new ConstraintAtom() );
+ doTable();
+ }
+ });
+
+ int addRow = rowData.size() + 1;
+ layout.setWidget( addRow, 0, add );
+ FlexCellFormatter formatter = layout.getFlexCellFormatter();
+ formatter.setColSpan( addRow, 0, 5 );
+ formatter.setHorizontalAlignment( addRow, 0, HasHorizontalAlignment.ALIGN_CENTER );
+
+
+ //now to do the rows:
+ for ( int i = 0; i < rowData.size(); i++ ) {
+ ConstraintAtom row = (ConstraintAtom) rowData.get( i );
+ layout.setWidget( i, 0, doFieldDropDown(row, i));
+ layout.setWidget( i, 1, doOperatorDropDown(row) );
+ layout.setWidget( i, 2, doValueEditor(row) );
+ //TODO: add in connectives here...
+
+ Image remove = new Image("images/clear_item.gif");
+ final int idx = i;
+ remove.addClickListener( new ClickListener() {
+
+ public void onClick(Widget w) {
+ rowData.remove( idx );
+ doTable();
+ }
+
+ });
+ layout.setWidget( i, 4, remove );
+ }
+
+
+ }
+
+
+
+ private Widget doValueEditor(final ConstraintAtom row) {
+ final TextBox text = new TextBox();
+ text.setText( row.value );
+ text.addChangeListener( new ChangeListener() {
+ public void onChange(Widget w) {
+ row.value = text.getText();
+ }
+ });
+ return text;
+ }
+
+
+
+ /**
+ * Builds the list of valid operators based on the field selected.
+ */
+ private ListBox doOperatorDropDown(final ConstraintAtom row) {
+ final ListBox box = new ListBox();
+ String[] oprs = completions.getOperatorCompletions( factType, row.field.field );
+ if (oprs != null) {
+ for ( int i = 0; i < oprs.length; i++ ) {
+ box.addItem( oprs[i] );
+ if (oprs[i].equals( row.operator )) {
+ box.setSelectedIndex( i );
+ }
+
+ }
+
+ box.addChangeListener( new ChangeListener() {
+ public void onChange(Widget w) {
+ row.operator = box.getItemText( box.getSelectedIndex() );
+ }
+ });
+
+ }
+
+ if (row.operator == null) {
+ box.addItem( "..." );
+
+ }
+
+ return box;
+ }
+
+
+
+ /**
+ * Creates the field list drop down, and selects the item.
+ */
+ private ListBox doFieldDropDown(final ConstraintAtom row, final int rowNumberInLayout) {
+
+ final ListBox box = new ListBox();
+
+ String[] com = completions.getFieldCompletions( factType );
+ for ( int i = 0; i < com.length; i++ ) {
+ box.addItem( com[i] );
+ if (com[i].equals( row.field.field )) {
+ box.setSelectedIndex( i );
+ }
+
+ }
+
+ box.addChangeListener( new ChangeListener() {
+
+ public void onChange(Widget w) {
+ row.field.field = box.getItemText( box.getSelectedIndex() );
+ layout.setWidget( rowNumberInLayout, 1, doOperatorDropDown( row ) );
+ }
+
+ });
+
+ if (row.field.field == null) {
+ box.addItem( "..." );
+ }
+
+ return box;
+
+ }
+
+
+ /**
+ * These classes are for containing the values.
+ */
+ class ConstraintAtom {
+ public ConstraintField field = new ConstraintField();
+ public String operator;
+ public String value;
+ public ConnectiveConstraint[] connectives;
+ }
+
+ class ConstraintField {
+ public String field;
+ public String boundVariableName;
+ }
+
+ class ConnectiveConstraint {
+ public String operator;
+ public String value;
+ }
+
+}
Added: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/FactTypeWidget.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/FactTypeWidget.java 2006-11-27 17:57:22 UTC (rev 7853)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/FactTypeWidget.java 2006-11-27 17:58:05 UTC (rev 7854)
@@ -0,0 +1,91 @@
+package org.drools.brms.client.modeldriven.ui;
+
+import org.drools.brms.client.modeldriven.SuggestionCompletionEngine;
+
+import com.google.gwt.user.client.Command;
+import com.google.gwt.user.client.ui.ChangeListener;
+import com.google.gwt.user.client.ui.ClickListener;
+import com.google.gwt.user.client.ui.Composite;
+import com.google.gwt.user.client.ui.HorizontalPanel;
+import com.google.gwt.user.client.ui.Image;
+import com.google.gwt.user.client.ui.Label;
+import com.google.gwt.user.client.ui.ListBox;
+import com.google.gwt.user.client.ui.PopupPanel;
+import com.google.gwt.user.client.ui.Widget;
+
+/**
+ * This is the widget for choosing/viewing the fact type.
+ *
+ * @author Michael Neale
+ *
+ */
+public class FactTypeWidget extends Composite {
+
+ private final HorizontalPanel widget = new HorizontalPanel();
+ private SuggestionCompletionEngine completion;
+ private Label type;
+ private Command onChange;
+
+ public FactTypeWidget(String factType, SuggestionCompletionEngine com, Command onChange) {
+ this.completion = com;
+ this.onChange = onChange;
+
+ type = new Label(factType);
+ Image edit = new Image("images/edit_tiny.gif");
+ edit.addClickListener( new ClickListener() {
+
+ public void onClick(Widget w) {
+ FactTypeList list = new FactTypeList();
+ list.setPopupPosition( w.getAbsoluteLeft(), w.getAbsoluteTop() );
+ list.show();
+
+ }
+
+ });
+
+ widget.add( edit );
+ widget.add( type );
+
+ initWidget( widget );
+ }
+
+ /**
+ * This returns the current fact type.
+ */
+ public String getFactType() {
+ return type.getText();
+ }
+
+ /**
+ * The popup for choosing a fact type.
+ *
+ * @author Michael Neale
+ */
+ class FactTypeList extends PopupPanel {
+
+ public FactTypeList() {
+ super(true);
+ final ListBox box = new ListBox();
+ String[] types = completion.getFactTypes();
+ box.addItem( "-- please choose --" );
+ for ( int i = 0; i < types.length; i++ ) {
+ box.addItem( types[i] );
+ }
+
+
+ box.addChangeListener( new ChangeListener() {
+
+ public void onChange(Widget w) {
+ type.setText(box.getValue( box.getSelectedIndex()));
+ onChange.execute();
+ hide();
+ }
+
+ });
+
+ add( box );
+ }
+
+ }
+
+}
Added: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/PatternWidget.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/PatternWidget.java 2006-11-27 17:57:22 UTC (rev 7853)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/PatternWidget.java 2006-11-27 17:58:05 UTC (rev 7854)
@@ -0,0 +1,56 @@
+package org.drools.brms.client.modeldriven.ui;
+
+import java.util.ArrayList;
+
+import org.drools.brms.client.modeldriven.SuggestionCompletionEngine;
+
+import com.google.gwt.user.client.Command;
+import com.google.gwt.user.client.ui.Composite;
+import com.google.gwt.user.client.ui.FlexTable;
+import com.google.gwt.user.client.ui.HasVerticalAlignment;
+
+/**
+ * This is the containing widgets for applying constraints to a pattern.
+ *
+ * eg: <code>Person(age < 42)</code> would be covered by this widget.
+ *
+ * @author Michael Neale
+ */
+public class PatternWidget extends Composite {
+
+ private final FlexTable layout;
+ private String factTypeSelected;
+ private FactTypeWidget factWidget;
+ private SuggestionCompletionEngine completions;
+
+ public PatternWidget(SuggestionCompletionEngine com, String factType) {
+
+ this.completions = com;
+ layout = new FlexTable();
+ this.factTypeSelected = factType;
+
+ layout.setStyleName( "model-builder-Background" );
+
+
+ factWidget = new FactTypeWidget(factTypeSelected, com, new Command() {
+ public void execute() {
+ selectedFactType();
+ }
+ });
+ layout.setWidget( 0, 0, factWidget );
+ layout.getFlexCellFormatter().setVerticalAlignment( 0, 0, HasVerticalAlignment.ALIGN_MIDDLE );
+
+ //TODO: add loading up of existing data if its passed in here.
+
+
+ initWidget( layout );
+
+ }
+
+
+ protected void selectedFactType() {
+ factTypeSelected = factWidget.getFactType();
+ layout.setWidget(0, 1, new ConstraintWidget(factTypeSelected, completions, new ArrayList()) );
+ }
+
+}
Added: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/RuleScorecardWidget.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/RuleScorecardWidget.java 2006-11-27 17:57:22 UTC (rev 7853)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/RuleScorecardWidget.java 2006-11-27 17:58:05 UTC (rev 7854)
@@ -0,0 +1,56 @@
+package org.drools.brms.client.modeldriven.ui;
+
+import org.drools.brms.client.modeldriven.SuggestionCompletionEngine;
+
+import com.google.gwt.user.client.ui.ClickListener;
+import com.google.gwt.user.client.ui.Composite;
+import com.google.gwt.user.client.ui.FlexTable;
+import com.google.gwt.user.client.ui.Image;
+import com.google.gwt.user.client.ui.Label;
+import com.google.gwt.user.client.ui.VerticalPanel;
+import com.google.gwt.user.client.ui.Widget;
+
+/**
+ * This is the parent widget that contains the model based rule builder.
+ *
+ * @author Michael Neale
+ *
+ */
+public class RuleScorecardWidget extends Composite {
+
+ private FlexTable layout;
+ private SuggestionCompletionEngine completions;
+
+ public RuleScorecardWidget(SuggestionCompletionEngine com) {
+ this.completions = com;
+
+ layout = new FlexTable();
+ layout.setStyleName( "model-builder-Background" );
+
+ initWidget( layout );
+ final VerticalPanel lhsPanel = new VerticalPanel();
+
+ Image addPattern = new Image( "images/new_item.gif" );
+ addPattern.addClickListener( new ClickListener() {
+
+ public void onClick(Widget w) {
+ lhsPanel.add( new PatternWidget(completions, "") );
+
+ }
+
+ });
+
+
+
+ layout.setWidget( 0, 0, new Label("IF") );
+ layout.setWidget( 0, 2, addPattern );
+
+ layout.setWidget( 1, 1, lhsPanel );
+
+
+ }
+
+
+
+
+}
Added: 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 2006-11-27 17:57:22 UTC (rev 7853)
+++ labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/client/modeldriven/SuggestionCompletionTest.java 2006-11-27 17:58:05 UTC (rev 7854)
@@ -0,0 +1,131 @@
+package org.drools.brms.client.modeldriven;
+
+import java.util.HashMap;
+
+import junit.framework.TestCase;
+
+public class SuggestionCompletionTest extends TestCase {
+
+ public void testCompletions() {
+
+
+ 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"});
+ }}
+ );
+
+ String[] c =com.getConditionalElements();
+ assertEquals("not", c[0]);
+ assertEquals("exists", c[1]);
+ assertEquals("or", c[2]);
+
+ c = com.getFactTypes();
+ assertEquals(2, c.length);
+ assertContains("Person", c);
+ assertContains("Vehicle", c);
+
+
+ c = com.getFieldCompletions( "Person" );
+ assertEquals("age", c[0]);
+ assertEquals("name", c[1]);
+
+ c = com.getFieldCompletions( "Vehicle" );
+ assertEquals("type", c[0]);
+ assertEquals( "make", c[1] );
+
+ c = com.getOperatorCompletions( "Person", "name" );
+ assertEquals(2, c.length);
+ assertEquals("==", c[0]);
+ assertEquals( "!=", c[1] );
+
+
+ c = com.getOperatorCompletions( "Person", "age" );
+ assertEquals(4, 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]);
+
+ 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]);
+
+ com.addBoundFact( "myFact", "Person" );
+
+ c = com.getFieldCompletionsForBoundFact( "myFact" );
+ assertEquals(2, c.length);
+ assertEquals("age", c[0]);
+ assertEquals("name", c[1]);
+
+ }
+
+ public void testAdd() {
+ SuggestionCompletionEngine com = new SuggestionCompletionEngine();
+ com.addFact( "Foo", new String[] {"a"});
+
+ assertEquals(1, com.getFactTypes().length);
+ assertEquals("Foo", com.getFactTypes()[0]);
+
+ assertEquals(1, com.getFieldCompletions( "Foo" ).length);
+ assertEquals("a", com.getFieldCompletions( "Foo" )[0]);
+
+ }
+
+ private void assertContains(String string,
+ String[] c) {
+
+ for ( int i = 0; i < c.length; i++ ) {
+ if (string.equals( c[i] )) {
+ return;
+ }
+ }
+ fail( "String array did not contain: " + string );
+
+ }
+
+ public void testBoundVariables() {
+ SuggestionCompletionEngine com = new SuggestionCompletionEngine();
+ com.addBoundFact( "foo", "Person" );
+ com.addBoundFact( "bar", "Vehicle" );
+ assertEquals(0, com.getBoundFields().length);
+ assertEquals(2, com.getBoundFacts().length);
+
+ com.addBoundField( "x" );
+ assertEquals(1, com.getBoundFields().length);
+
+ assertEquals( "foo", com.getBoundFacts()[0]);
+ assertEquals( "bar", com.getBoundFacts()[1]);
+
+ assertEquals( "x", com.getBoundFields()[0]);
+
+
+
+ }
+
+
+
+}
Added: labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/client/modeldriven/package.html
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/client/modeldriven/package.html 2006-11-27 17:57:22 UTC (rev 7853)
+++ labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/client/modeldriven/package.html 2006-11-27 17:58:05 UTC (rev 7854)
@@ -0,0 +1,10 @@
+<body>
+This contains utilities and widgets for the model driven/scorecard style way of
+editing a rule.
+
+This has the interesting feature of being able to work over standard DRL, no special markup needed.
+Its actually a subset of DRL, complex structures and semantics can not be supported.
+
+However, this can be augmented with DSLs which can express any construct needed.
+
+</body>
\ No newline at end of file
More information about the jboss-svn-commits
mailing list