[jboss-svn-commits] JBL Code SVN: r8144 - in labs/jbossrules/trunk/drools-jbrms/src: main/java/org/drools/brms/client/modeldriven/model main/java/org/drools/brms/client/modeldriven/ui test/java/org/drools/brms/client/modeldriven

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Fri Dec 8 10:47:03 EST 2006


Author: michael.neale at jboss.com
Date: 2006-12-08 10:46:46 -0500 (Fri, 08 Dec 2006)
New Revision: 8144

Added:
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/model/ActionFieldList.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/LeftHandSideSelector.java
   labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/client/modeldriven/CompositeFactPatternTest.java
Modified:
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/model/ActionAssertFact.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/model/ActionRetractFact.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/model/ActionSetField.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/model/CompositeFactPattern.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/model/RuleModel.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/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/test/java/org/drools/brms/client/modeldriven/RuleModelTest.java
Log:
more ajax love

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/model/ActionAssertFact.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/model/ActionAssertFact.java	2006-12-08 15:43:37 UTC (rev 8143)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/model/ActionAssertFact.java	2006-12-08 15:46:46 UTC (rev 8144)
@@ -1,12 +1,15 @@
 package org.drools.brms.client.modeldriven.model;
 
+/**
+ * This is used when asserting a new fact.
+ * @author Michael Neale
+ *
+ */
 public class ActionAssertFact
-    implements
-    IAction {
+    extends
+    ActionFieldList {
 
     public String factType;
     
-    /** tuples of field = value */
-    public ActionFieldValue[] fieldValues;
-    
+
 }

Added: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/model/ActionFieldList.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/model/ActionFieldList.java	2006-12-08 15:43:37 UTC (rev 8143)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/model/ActionFieldList.java	2006-12-08 15:46:46 UTC (rev 8144)
@@ -0,0 +1,48 @@
+package org.drools.brms.client.modeldriven.model;
+
+/**
+ * This class is the parent for field setting or assertion actions.
+ * 
+ * Contains the list of fields and their values to be set.
+ * 
+ * @author Michael Neale
+ *
+ */
+public abstract class ActionFieldList
+    implements
+    IAction {
+
+    public ActionFieldValue[] fieldValues;
+
+    public void removeField(int idx) {
+        //Unfortunately, this is kinda duplicate code with other methods, 
+        //but with typed arrays, and GWT, its not really possible to do anything "better" 
+        //at this point in time. 
+        ActionFieldValue[] newList = new ActionFieldValue[fieldValues.length - 1];
+        int newIdx = 0;
+        for ( int i = 0; i < fieldValues.length; i++ ) {
+            
+            if (i != idx) {
+                newList[newIdx] = fieldValues[i];
+                newIdx++;
+            }
+            
+        }
+        this.fieldValues = newList;        
+    }
+    
+    public void addFieldValue(ActionFieldValue val) {
+        if (fieldValues == null) {
+            fieldValues = new ActionFieldValue[1];            
+            fieldValues[0] = val;            
+        } else {
+            ActionFieldValue[] newList = new ActionFieldValue[fieldValues.length + 1];
+            for ( int i = 0; i < fieldValues.length; i++ ) {            
+                newList[i] = fieldValues[i];
+            }
+            newList[fieldValues.length] = val;
+            fieldValues = newList;
+        }        
+    }    
+    
+}

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/model/ActionRetractFact.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/model/ActionRetractFact.java	2006-12-08 15:43:37 UTC (rev 8143)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/model/ActionRetractFact.java	2006-12-08 15:46:46 UTC (rev 8144)
@@ -1,5 +1,11 @@
 package org.drools.brms.client.modeldriven.model;
 
+/**
+ * This is used to specify that the bound fact should be retracted
+ * when the rule fires.
+ * @author Michael Neale
+ *
+ */
 public class ActionRetractFact
     implements
     IAction {

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/model/ActionSetField.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/model/ActionSetField.java	2006-12-08 15:43:37 UTC (rev 8143)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/model/ActionSetField.java	2006-12-08 15:46:46 UTC (rev 8144)
@@ -5,42 +5,12 @@
  * @author Michael Neale
  *
  */
-public class ActionSetField implements IAction {
+public class ActionSetField extends ActionFieldList {
 
     public String variable;
-    public ActionFieldValue[] fieldValues;
     public boolean modify;
 
+     
+ 
     
-    public void removeField(int idx) {
-        //Unfortunately, this is kinda duplicate code with other methods, 
-        //but with typed arrays, and GWT, its not really possible to do anything "better" 
-        //at this point in time. 
-        ActionFieldValue[] newList = new ActionFieldValue[fieldValues.length - 1];
-        int newIdx = 0;
-        for ( int i = 0; i < fieldValues.length; i++ ) {
-            
-            if (i != idx) {
-                newList[newIdx] = fieldValues[i];
-                newIdx++;
-            }
-            
-        }
-        this.fieldValues = newList;        
-    }
-    
-    public void addFieldValue(ActionFieldValue val) {
-        if (fieldValues == null) {
-            fieldValues = new ActionFieldValue[1];            
-            fieldValues[0] = val;            
-        } else {
-            ActionFieldValue[] newList = new ActionFieldValue[fieldValues.length + 1];
-            for ( int i = 0; i < fieldValues.length; i++ ) {            
-                newList[i] = fieldValues[i];
-            }
-            newList[fieldValues.length] = val;
-            fieldValues = newList;
-        }        
-    }
-    
 }

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/model/CompositeFactPattern.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/model/CompositeFactPattern.java	2006-12-08 15:43:37 UTC (rev 8143)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/model/CompositeFactPattern.java	2006-12-08 15:46:46 UTC (rev 8144)
@@ -14,5 +14,18 @@
     public String type;
     public FactPattern[] patterns;
     
+    public void addFactPattern(FactPattern pat) {
+        if (this.patterns == null) this.patterns = new FactPattern[0];
+        
+        FactPattern[] list = this.patterns;
+        FactPattern[] newList = new FactPattern[list.length + 1];
+        
+        for ( int i = 0; i < list.length; i++ ) {
+            newList[i] =  list[i];
+        }
+        newList[list.length] = pat; 
+        
+        this.patterns = newList;    
+    }
     
 }

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/model/RuleModel.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/model/RuleModel.java	2006-12-08 15:43:37 UTC (rev 8143)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/model/RuleModel.java	2006-12-08 15:46:46 UTC (rev 8144)
@@ -98,6 +98,20 @@
         return false;
     }
     
+    public void addLhsItem(IPattern pat) {
+        if (this.lhs == null) this.lhs = new IPattern[0];
+        
+        IPattern[] list = this.lhs;
+        IPattern[] newList = new IPattern[list.length + 1];
+        
+        for ( int i = 0; i < list.length; i++ ) {
+            newList[i] =  list[i];
+        }
+        newList[list.length] = pat; 
+        
+        this.lhs = newList;        
+    }
+    
     public void removeRhsItem(int idx) {
         IAction[] newList = new IAction[rhs.length - 1];
         int newIdx = 0;

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	2006-12-08 15:43:37 UTC (rev 8143)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/ActionAssertFactWidget.java	2006-12-08 15:46:46 UTC (rev 8144)
@@ -1,12 +1,18 @@
 package org.drools.brms.client.modeldriven.ui;
 
+import org.drools.brms.client.common.FormStylePopup;
+import org.drools.brms.client.common.YesNoDialog;
 import org.drools.brms.client.modeldriven.SuggestionCompletionEngine;
 import org.drools.brms.client.modeldriven.model.ActionAssertFact;
 import org.drools.brms.client.modeldriven.model.ActionFieldValue;
 
+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.FlexTable;
+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.TextBox;
@@ -24,11 +30,13 @@
     private ActionAssertFact model;
     private SuggestionCompletionEngine completions;
     private String[] fieldCompletions;
+    private RuleModeller modeller;
     
-    public ActionAssertFactWidget(ActionAssertFact set, SuggestionCompletionEngine com) {
+    public ActionAssertFactWidget(RuleModeller mod, ActionAssertFact set, SuggestionCompletionEngine com) {
         this.model = set;
         this.completions = com;
         this.layout = new FlexTable();
+        this.modeller = mod;
         this.fieldCompletions = this.completions.getFieldCompletions( set.factType );
         
         layout.setStyleName( "model-builderInner-Background" );
@@ -44,12 +52,27 @@
         
         FlexTable inner = new FlexTable();
         
-        
         for ( int i = 0; i < model.fieldValues.length; i++ ) {
             ActionFieldValue val = model.fieldValues[i];
             
             inner.setWidget( i, 0, fieldSelector(val) );
             inner.setWidget( i, 1, valueEditor(val) );
+            final int idx = i;
+            Image remove = new Image("images/clear_item.gif");
+            remove.addClickListener( new ClickListener() {
+                public void onClick(Widget w) {
+                    YesNoDialog diag = new YesNoDialog("Remove this item?", new Command() {
+                        public void execute() {
+                            model.removeField( idx );
+                            modeller.refreshWidget();
+                        }                        
+                    });
+                    diag.setPopupPosition( w.getAbsoluteLeft(), w.getAbsoluteTop() );
+                    diag.show();
+                }                
+            });
+            inner.setWidget( i, 2, remove );
+            
         }
         
         layout.setWidget( 0, 1, inner );
@@ -69,26 +92,52 @@
     }
 
     private Widget fieldSelector(final ActionFieldValue val) {
+        return new Label(val.field);    
+    }
+
+    private Widget getAssertLabel() {   
+        HorizontalPanel horiz = new HorizontalPanel();
+        
+        
+        Image edit = new Image("images/edit.gif");
+        edit.addClickListener( new ClickListener() {
+            public void onClick(Widget w) {
+                showAddFieldPopup(w);
+            }
+        } );
+        
+        horiz.add( edit );
+        horiz.add( new Label("Assert " + this.model.factType) );
+        return horiz;
+        
+    }
+    
+    protected void showAddFieldPopup(Widget w) {
+        final FormStylePopup popup = new FormStylePopup("images/newex_wiz.gif", "Add a field");
+        popup.setStyleName( "ks-popups-Popup" );
         final ListBox box = new ListBox();
-        for ( int i = 0; i < this.fieldCompletions.length; i++ ) {
-            box.addItem( this.fieldCompletions[i] );
-            if (this.fieldCompletions[i].equals( val.field )) {
-                box.setSelectedIndex( i );
-            }
+        box.addItem( "..." );
 
+        for ( int i = 0; i < fieldCompletions.length; i++ ) {
+            box.addItem( fieldCompletions[i] );
         }
         
+        box.setSelectedIndex( 0 );
+        
+        popup.addAttribute( "Add field", box );
         box.addChangeListener( new ChangeListener() {
             public void onChange(Widget w) {
-                val.field = box.getItemText( box.getSelectedIndex() );                
-            }            
+                model.addFieldValue( new ActionFieldValue(box.getItemText( box.getSelectedIndex() ), "") );
+                modeller.refreshWidget();
+                popup.hide();
+            }
         });
         
-        return box;    
-    }
 
-    private Widget getAssertLabel() {        
-        return new Label("Assert new "  + this.model.factType);
-    }
+        
+        popup.setPopupPosition( w.getAbsoluteLeft(), w.getAbsoluteTop() );
+        popup.show();
+ 
+    }    
     
 }

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	2006-12-08 15:43:37 UTC (rev 8143)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/ActionSetFieldWidget.java	2006-12-08 15:46:46 UTC (rev 8144)
@@ -5,7 +5,6 @@
 import org.drools.brms.client.modeldriven.SuggestionCompletionEngine;
 import org.drools.brms.client.modeldriven.model.ActionFieldValue;
 import org.drools.brms.client.modeldriven.model.ActionSetField;
-import org.drools.brms.client.modeldriven.model.Constraint;
 import org.drools.brms.client.modeldriven.model.FactPattern;
 import org.drools.brms.client.modeldriven.model.RuleModel;
 
@@ -32,6 +31,7 @@
     final private SuggestionCompletionEngine completions;
     final private FlexTable layout;
     private boolean isBoundFact = false;
+    
     final private String[] fieldCompletions;
     private RuleModeller modeller;
     
@@ -151,27 +151,15 @@
     }
 
 
-    private Widget fieldSelector(final ActionFieldValue val) {
-
-//        final ListBox box = new ListBox();
-//        for ( int i = 0; i < this.fieldCompletions.length; i++ ) {
-//            box.addItem( this.fieldCompletions[i] );
-//            if (this.fieldCompletions[i].equals( val.field )) {
-//                box.setSelectedIndex( i );
-//            }
-//
-//        }
-//        
-//        box.addChangeListener( new ChangeListener() {
-//            public void onChange(Widget w) {
-//                val.field = box.getItemText( box.getSelectedIndex() );                
-//            }            
-//        });
-        
-        //return box;
-        
-        return new Label(val.field);
-        
-   }
+    private Widget fieldSelector(final ActionFieldValue val) {        
+        return new Label(val.field);        
+    }
     
+    /**
+     * This returns true if the values being set are on a fact.
+     */
+    public boolean isBoundFact() {
+        return isBoundFact;
+    }
+    
 }

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	2006-12-08 15:43:37 UTC (rev 8143)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/CompositeFactPatternWidget.java	2006-12-08 15:46:46 UTC (rev 8144)
@@ -1,15 +1,28 @@
 package org.drools.brms.client.modeldriven.ui;
 
+import org.drools.brms.client.common.FormStylePopup;
 import org.drools.brms.client.modeldriven.SuggestionCompletionEngine;
 import org.drools.brms.client.modeldriven.model.CompositeFactPattern;
 import org.drools.brms.client.modeldriven.model.FactPattern;
 
-import com.google.gwt.user.client.Command;
+import com.google.gwt.user.client.ui.Button;
+import com.google.gwt.user.client.ui.ClickListener;
 import com.google.gwt.user.client.ui.Composite;
 import com.google.gwt.user.client.ui.Grid;
+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.VerticalPanel;
+import com.google.gwt.user.client.ui.Widget;
 
+/**
+ * This represents a top level CE, like an OR, NOT, EXIST etc...
+ * Contains a list of FactPatterns. 
+ * 
+ * @author Michael Neale
+ *
+ */
 public class CompositeFactPatternWidget extends Composite {
 
     private final SuggestionCompletionEngine completions;
@@ -41,10 +54,55 @@
             vert.add( new FactPatternWidget(modeller, facts[i], this.completions, false) );
         }
         
-        this.layout.setWidget( 0, 0, new Label(pattern.type) );
+        this.layout.setWidget( 0, 0, getCompositeLabel() );
         this.layout.setWidget( 0, 1, vert );
     }
 
+    private Widget getCompositeLabel() {
+        
+        HorizontalPanel horiz = new HorizontalPanel();
+        Image edit = new Image("images/edit.gif");
+        edit.addClickListener( new ClickListener() {
+            public void onClick(Widget w) {
+                showFactTypeSelector( w );
+            }
+        } );
+        
+        horiz.add( edit );
+        horiz.add( new Label(pattern.type));
+        return horiz;
+    }
     
+    /**
+     * Pops up the fact selector.
+     */
+    protected void showFactTypeSelector(final Widget w) {
+        final ListBox box = new ListBox();
+        String[] facts = completions.getFactTypes();
+        
+        for ( int i = 0; i < facts.length; i++ ) {
+            box.addItem( facts[i] );
+        }
+
+        final FormStylePopup popup = new FormStylePopup("images/new_fact.gif", "New fact pattern...");
+        popup.addAttribute( "choose type", box );
+        Button ok = new Button("OK");
+        popup.addAttribute( "", ok );
+        
+        ok.addClickListener( new ClickListener() {
+            public void onClick(Widget w) {
+                pattern.addFactPattern( new FactPattern(box.getItemText( box.getSelectedIndex() )));
+                modeller.refreshWidget();
+                popup.hide();                
+            }
+        });
+        popup.setStyleName( "ks-popups-Popup" );
+        
+        popup.setPopupPosition( w.getAbsoluteLeft() - 400, w.getAbsoluteTop() );
+        popup.show();
+
+    }    
+
     
+    
 }

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	2006-12-08 15:43:37 UTC (rev 8143)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/FactPatternWidget.java	2006-12-08 15:46:46 UTC (rev 8144)
@@ -50,11 +50,12 @@
             final Constraint c = pattern.constraints[row];
             final int currentRow = row;
 
-            inner.setWidget( row, 0, fieldDropDown(c, new Command() {
+            inner.setWidget( row, 0, fieldDropDown(c));/*, new Command() {
                 public void execute() {
                     inner.setWidget( currentRow, 1, operatorDropDown( c ));
                 }                
             }));
+            */
             
             inner.setWidget( row, 1, operatorDropDown(c) );
             inner.setWidget( row, 2, valueEditor(c) );            
@@ -257,34 +258,39 @@
     }
 
 
-    private Widget fieldDropDown(final Constraint con, final Command onChange) {
-        HorizontalPanel horiz = new HorizontalPanel();
-
-        final ListBox box = new ListBox();
+    private Widget fieldDropDown(final Constraint con) {//, final Command onChange) {
+//MN: don't really need drop downs here. No idea why I did it initially.        
+//        HorizontalPanel horiz = new HorizontalPanel();
+//
+//        final ListBox box = new ListBox();
+//        
+//        String[] com = completions.getFieldCompletions( this.pattern.factType );
+//        for ( int i = 0; i < com.length; i++ ) {
+//            box.addItem( com[i] );
+//            if (com[i].equals( con.fieldName )) {
+//                box.setSelectedIndex( i );
+//            }
+//        }
+//        
+//        box.addChangeListener( new ChangeListener() {
+//
+//            public void onChange(Widget w) {
+//                con.fieldName = box.getItemText( box.getSelectedIndex() );
+//                onChange.execute();
+//            }
+//            
+//        });
+//        horiz.add( box );
+//        
+//        if (con.fieldBinding != null) {
+//            horiz.add( new Label( "[" + con.fieldBinding + "]") );
+//        }
+//        
+//        return horiz;
+//        
         
-        String[] com = completions.getFieldCompletions( this.pattern.factType );
-        for ( int i = 0; i < com.length; i++ ) {
-            box.addItem( com[i] );
-            if (com[i].equals( con.fieldName )) {
-                box.setSelectedIndex( i );
-            }
-        }
+        return new Label(con.fieldName);
         
-        box.addChangeListener( new ChangeListener() {
-
-            public void onChange(Widget w) {
-                con.fieldName = box.getItemText( box.getSelectedIndex() );
-                onChange.execute();
-            }
-            
-        });
-        horiz.add( box );
-        
-        if (con.fieldBinding != null) {
-            horiz.add( new Label( "[" + con.fieldBinding + "]") );
-        }
-        
-        return horiz;
     }
     
 }

Added: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/LeftHandSideSelector.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/LeftHandSideSelector.java	2006-12-08 15:43:37 UTC (rev 8143)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/LeftHandSideSelector.java	2006-12-08 15:46:46 UTC (rev 8144)
@@ -0,0 +1,39 @@
+package org.drools.brms.client.modeldriven.ui;
+
+import org.drools.brms.client.common.FormStylePopup;
+import org.drools.brms.client.modeldriven.SuggestionCompletionEngine;
+
+import com.google.gwt.user.client.ui.Button;
+import com.google.gwt.user.client.ui.ClickListener;
+import com.google.gwt.user.client.ui.ListBox;
+
+/**
+ * This shows a list of options for the left hand side of a rule.
+ * @author Michael Neale
+ */
+public class LeftHandSideSelector {
+    
+    private FormStylePopup form;
+    
+    public LeftHandSideSelector(SuggestionCompletionEngine completions, ClickListener okClick) {
+        final ListBox box = new ListBox();
+        String[] facts = completions.getFactTypes();
+        for ( int i = 0; i < facts.length; i++ ) {
+            box.addItem( facts[i] );
+        }
+        final FormStylePopup popup = new FormStylePopup("images/new_fact.gif", "New fact pattern...");
+        popup.addAttribute( "choose type", box );
+        Button ok = new Button("OK");
+        popup.addAttribute( "", ok );
+        
+        ok.addClickListener( okClick );
+        popup.setStyleName( "ks-popups-Popup" );
+   
+    }
+    
+    public void show(int left, int top) {
+        form.setPopupPosition( left, top );
+        form.show();     
+    }
+
+}

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	2006-12-08 15:43:37 UTC (rev 8143)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/RuleModeller.java	2006-12-08 15:46:46 UTC (rev 8144)
@@ -65,8 +65,6 @@
         layout.setWidget( 0, 0, new Label("IF") );
         layout.setWidget( 0, 2, addPattern );
         
-        
-        
         layout.setWidget( 1, 1, renderLhs(this.model) );
         layout.setWidget( 2, 0, new Label("THEN") );
         layout.setWidget( 3, 1, renderRhs(this.model) );
@@ -85,7 +83,7 @@
             if (action instanceof ActionSetField) {                
                 w =  new ActionSetFieldWidget(this, this.model, (ActionSetField) action, completions ) ; 
             } else if (action instanceof ActionAssertFact) {
-                w = new ActionAssertFactWidget((ActionAssertFact) action, completions );
+                w = new ActionAssertFactWidget(this, (ActionAssertFact) action, completions );
             } else if (action instanceof ActionRetractFact) {
                 w = new ActionRetractFactWidget((ActionRetractFact) action);
             }
@@ -124,9 +122,11 @@
     protected void showFactTypeSelector(final Widget w) {
         final ListBox box = new ListBox();
         String[] facts = completions.getFactTypes();
+        
         for ( int i = 0; i < facts.length; i++ ) {
             box.addItem( facts[i] );
         }
+
         final FormStylePopup popup = new FormStylePopup("images/new_fact.gif", "New fact pattern...");
         popup.addAttribute( "choose type", box );
         Button ok = new Button("OK");
@@ -135,31 +135,21 @@
         ok.addClickListener( new ClickListener() {
             public void onClick(Widget w) {
                 addNewFact(box.getItemText( box.getSelectedIndex() ));
-                popup.hide();
-                
+                popup.hide();                
             }
         });
         popup.setStyleName( "ks-popups-Popup" );
         
         popup.setPopupPosition( w.getAbsoluteLeft() - 400, w.getAbsoluteTop() );
         popup.show();
+
     }
 
     /**
      * Adds a fact to the model, and then refreshes the display.
      */
     protected void addNewFact(String itemText) {
-        IPattern[] list = this.model.lhs;
-        IPattern[] newList = new IPattern[list.length + 1];
-        
-        
-        for ( int i = 0; i < list.length; i++ ) {
-            newList[i] =  list[i];
-        }
-        newList[list.length] = new FactPattern(itemText); 
-        
-        this.model.lhs = newList;
-        
+        this.model.addLhsItem( new FactPattern(itemText) );
         refreshWidget();
     }
 

Added: labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/client/modeldriven/CompositeFactPatternTest.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/client/modeldriven/CompositeFactPatternTest.java	2006-12-08 15:43:37 UTC (rev 8143)
+++ labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/client/modeldriven/CompositeFactPatternTest.java	2006-12-08 15:46:46 UTC (rev 8144)
@@ -0,0 +1,24 @@
+package org.drools.brms.client.modeldriven;
+
+import org.drools.brms.client.modeldriven.model.CompositeFactPattern;
+import org.drools.brms.client.modeldriven.model.FactPattern;
+
+import junit.framework.TestCase;
+
+public class CompositeFactPatternTest extends TestCase {
+
+    public void testAddPattern() {
+        CompositeFactPattern pat = new CompositeFactPattern();
+        FactPattern x = new FactPattern();
+        pat.addFactPattern( x  );
+        assertEquals(1, pat.patterns.length);
+        
+        FactPattern y = new FactPattern();
+        pat.addFactPattern( y  );
+        assertEquals(2, pat.patterns.length);
+        assertEquals(x, pat.patterns[0]);
+        assertEquals(y, pat.patterns[1]);
+    }
+    
+    
+}

Modified: labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/client/modeldriven/RuleModelTest.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/client/modeldriven/RuleModelTest.java	2006-12-08 15:43:37 UTC (rev 8143)
+++ labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/client/modeldriven/RuleModelTest.java	2006-12-08 15:46:46 UTC (rev 8144)
@@ -77,8 +77,6 @@
         assertEquals("x", b.get( 0 ));
         assertEquals("y", b.get( 1 ));
         
-        
-        
     }
     
     public void testRemoveItemLhs() {
@@ -102,8 +100,7 @@
         model.removeLhsItem( 0 );
         
         assertEquals(2, model.lhs.length);
-        assertEquals(y, model.lhs[0]);
-        
+        assertEquals(y, model.lhs[0]);        
     }
     
     public void testRemoveItemRhs() {
@@ -122,9 +119,25 @@
         
         assertEquals(2, model.rhs.length);
         assertEquals(r0, model.rhs[0]);
-        assertEquals(r2, model.rhs[1]);
+        assertEquals(r2, model.rhs[1]);        
+    }
+    
+    public void testAddItemLhs() {
+        RuleModel model = new RuleModel();
+        FactPattern x = new FactPattern();
+        model.addLhsItem( x );
+        assertEquals(1, model.lhs.length);
         
+        FactPattern y = new FactPattern();
+        model.addLhsItem( y );
+        
+        assertEquals(2, model.lhs.length);
+        assertEquals(x, model.lhs[0]);
+        assertEquals(y, model.lhs[1]);
+        
     }
     
     
+    
+    
 }




More information about the jboss-svn-commits mailing list