[jboss-svn-commits] JBL Code SVN: r8333 - 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/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
Thu Dec 14 18:09:50 EST 2006


Author: michael.neale at jboss.com
Date: 2006-12-14 18:09:38 -0500 (Thu, 14 Dec 2006)
New Revision: 8333

Added:
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/model/DSLSentence.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/model/DSLSentenceFragment.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/DSLSentenceWidget.java
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/model/FactPattern.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/SuggestionCompletionTest.java
Log:
DSL editor built into the modeller now

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	2006-12-14 22:02:58 UTC (rev 8332)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/Packages.java	2006-12-14 23:09:38 UTC (rev 8333)
@@ -1,19 +1,18 @@
 package org.drools.brms.client;
 
-import org.drools.brms.client.common.DatePicker;
 import org.drools.brms.client.modeldriven.SuggestionCompletionEngine;
 import org.drools.brms.client.modeldriven.model.ActionAssertFact;
 import org.drools.brms.client.modeldriven.model.ActionFieldValue;
 import org.drools.brms.client.modeldriven.model.ActionRetractFact;
 import org.drools.brms.client.modeldriven.model.ActionSetField;
 import org.drools.brms.client.modeldriven.model.CompositeFactPattern;
-import org.drools.brms.client.modeldriven.model.ConnectiveConstraint;
 import org.drools.brms.client.modeldriven.model.Constraint;
+import org.drools.brms.client.modeldriven.model.DSLSentence;
+import org.drools.brms.client.modeldriven.model.DSLSentenceFragment;
 import org.drools.brms.client.modeldriven.model.FactPattern;
 import org.drools.brms.client.modeldriven.model.IAction;
 import org.drools.brms.client.modeldriven.model.IPattern;
 import org.drools.brms.client.modeldriven.model.RuleModel;
-import org.drools.brms.client.modeldriven.ui.CompositeFactPatternWidget;
 import org.drools.brms.client.modeldriven.ui.RuleModeller;
 
 import com.google.gwt.user.client.ui.Image;
@@ -48,10 +47,8 @@
         panel.add( new RuleModeller(getDummySuggestionEngine(), getDummyData() ) );
         
         panel.setSpacing( 8 );
+
         
-        DatePicker pick = new DatePicker();
-        panel.add( pick );
-        
         initWidget( panel );
     }
 
@@ -71,6 +68,27 @@
         
         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;
     }
 
@@ -89,6 +107,23 @@
         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();
@@ -101,11 +136,9 @@
         p1.constraints[1].operator = "==";
         p1.constraints[1].value = "Bob";
         p1.constraints[1].fieldBinding = "n";
-//        p1.constraints[1].connectives = new ConnectiveConstraint[2];
-//        p1.constraints[1].connectives[0] = new ConnectiveConstraint("|=", "Michael");
-//        p1.constraints[1].connectives[1] = new ConnectiveConstraint("|=", "Mark");
-
+  
         
+        
         p2.factType = "Vehicle";
         p2.boundName = "car1";
         p2.constraints = new Constraint[1];

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	2006-12-14 22:02:58 UTC (rev 8332)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/SuggestionCompletionEngine.java	2006-12-14 23:09:38 UTC (rev 8333)
@@ -1,10 +1,14 @@
 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.model.DSLSentence;
+
 /**
  * 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.
@@ -26,7 +30,10 @@
     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)
      * 
@@ -36,6 +43,9 @@
      *                                  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( 
@@ -43,11 +53,15 @@
                       Map factFieldToOperator, 
                       Map factFieldToConnectiveOperator,
                       Map globals,
-                      Map boundFacts
+                      Map boundFacts,
+                      List conditionDSLs,
+                      List actionDSLs
                     ) {
         this.factToFields = factToFields;
         this.factFieldToOperator = factFieldToOperator;
         this.factFieldToConnectiveOperator = factFieldToConnectiveOperator;
+        this.actionDSLSentences = actionDSLs;
+        this.conditionDSLSentences = conditionDSLs;
         this.globals = globals;
 
     }
@@ -97,7 +111,21 @@
     }
     
     
+    /**
+     * Add a DSL suggestion for the LHS.
+     * @param sentence
+     */
+    public void addDSLCondition(DSLSentence sentence) {
+        this.conditionDSLSentences.add( sentence );
+    }
     
+    /**
+     * Add a DSL suggestion for the RHS.
+     * @param sentence
+     */
+    public void addDSLAction(DSLSentence sentence) {
+        this.actionDSLSentences.add( sentence );
+    }
     
     
     /**
@@ -132,6 +160,14 @@
     public String[] getConditionalElements() {       
         return new String[] {"not", "exists", "or"};
     }
+    
+    public List getDSLConditions() {
+        return conditionDSLSentences;
+    }
+    
+    public List getDSLActions() {
+        return actionDSLSentences;
+    }
 
     public String[] getConnectiveOperatorCompletions(String factType,
                                                      String fieldName) {

Added: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/model/DSLSentence.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/model/DSLSentence.java	2006-12-14 22:02:58 UTC (rev 8332)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/model/DSLSentence.java	2006-12-14 23:09:38 UTC (rev 8333)
@@ -0,0 +1,24 @@
+package org.drools.brms.client.modeldriven.model;
+
+
+/**
+ * This represents a DSL sentence.
+ * @author Michael Neale
+ */
+public class DSLSentence
+    implements
+    IPattern,
+    IAction {
+
+    public DSLSentenceFragment[] elements;
+    
+    public String toString() {
+        String result = "";
+        if (elements != null) {
+            for ( int i = 0; i < elements.length; i++ ) {
+                result += elements[i].value + " ";
+            }
+        }
+        return result;
+    }
+}

Added: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/model/DSLSentenceFragment.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/model/DSLSentenceFragment.java	2006-12-14 22:02:58 UTC (rev 8332)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/model/DSLSentenceFragment.java	2006-12-14 23:09:38 UTC (rev 8333)
@@ -0,0 +1,30 @@
+package org.drools.brms.client.modeldriven.model;
+
+import com.google.gwt.user.client.rpc.IsSerializable;
+
+/**
+ * This holds the value of a fragment of a DSL.
+ * It can either be a sentence fragment (a display only thing) or a 
+ * value which the user can change.
+ *  
+ * @author Michael Neale
+ *
+ */
+public class DSLSentenceFragment
+    implements
+    IsSerializable {
+
+    public String  value;
+    public boolean isEditableField;
+
+    /**
+     * @param fragment
+     * @param isEditableField true if it is a editable value. false means display only.
+     */
+    public DSLSentenceFragment(String fragment,
+                               boolean isEditableField) {
+        value = fragment;
+        this.isEditableField = isEditableField;
+    }
+
+}

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/model/FactPattern.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/model/FactPattern.java	2006-12-14 22:02:58 UTC (rev 8332)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/model/FactPattern.java	2006-12-14 23:09:38 UTC (rev 8333)
@@ -1,7 +1,18 @@
 package org.drools.brms.client.modeldriven.model;
 
+/**
+ * A fact pattern is a declaration of a fact type, and its constraint,
+ * and perhaps a variable that is it bound to
+ * It is the equivalent of a "column" in drools terms. 
+ * @author Michael Neale
+ *
+ */
 public class FactPattern implements IPattern {
 
+    public Constraint[] constraints;
+    public String factType;
+    public String boundName;
+    
     public FactPattern() {
         this.constraints = new Constraint[0];
     }
@@ -11,9 +22,7 @@
         this.constraints = new Constraint[0];
     }
     
-    public Constraint[] constraints;
-    public String factType;
-    public String boundName;
+
     
     
     public void addConstraint(Constraint constraint) {

Added: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/DSLSentenceWidget.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/DSLSentenceWidget.java	2006-12-14 22:02:58 UTC (rev 8332)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/DSLSentenceWidget.java	2006-12-14 23:09:38 UTC (rev 8333)
@@ -0,0 +1,79 @@
+package org.drools.brms.client.modeldriven.ui;
+
+import org.drools.brms.client.modeldriven.model.DSLSentence;
+import org.drools.brms.client.modeldriven.model.DSLSentenceFragment;
+
+import com.google.gwt.user.client.DOM;
+import com.google.gwt.user.client.ui.ChangeListener;
+import com.google.gwt.user.client.ui.Composite;
+import com.google.gwt.user.client.ui.HTML;
+import com.google.gwt.user.client.ui.HorizontalPanel;
+import com.google.gwt.user.client.ui.Label;
+import com.google.gwt.user.client.ui.TextBox;
+import com.google.gwt.user.client.ui.Widget;
+
+/**
+ * This displays a widget to edit a DSL sentence.
+ * 
+ * @author Michael Neale
+ *
+ */
+public class DSLSentenceWidget extends Composite {
+
+    private HorizontalPanel horiz = new HorizontalPanel();
+    
+    /**
+     * @param sentence The sentence to render/bind to.
+     * @param lastOne true if this is the last one to render.
+     * @param firstOne true if this is the first one to render.
+     */
+    public DSLSentenceWidget(DSLSentence sentence, boolean lastOne, boolean firstOne) {
+        
+        
+        if (lastOne) {
+            this.horiz.setStyleName( "model-builderInnerLastRow-Background" );
+        }
+        if (firstOne) {
+            this.horiz.setStyleName( "model-builderInnerFirstRow-Background" );
+        }
+        if (!lastOne && !firstOne) {
+            this.horiz.setStyleName( "model-builderInnerNoBorders-Background" );
+        }
+        
+        init( sentence );
+        
+        
+    }
+    
+    public DSLSentenceWidget(DSLSentence sentence) {
+        this.horiz.setStyleName( "model-builderInner-Background" );
+        init( sentence );
+    }
+
+    private void init(DSLSentence sentence) {
+        for ( int i = 0; i < sentence.elements.length; i++ ) {
+            final DSLSentenceFragment el = sentence.elements[i];
+            if (!el.isEditableField) {                
+                horiz.add( new Label(el.value) );
+            } else {
+                horiz.add( new HTML("&nbsp;") );
+                final TextBox box = new TextBox();
+                box.addChangeListener( new ChangeListener() {
+                    public void onChange(Widget w) {
+                      el.value = box.getText();  
+                    }
+                });
+                box.setText( el.value );
+                box.setVisibleLength( el.value.length() );
+                horiz.add( box );
+                horiz.add( new HTML("&nbsp;") );
+            }
+        }
+        
+        initWidget( this.horiz );
+    }
+
+    
+    
+    
+}

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-14 22:02:58 UTC (rev 8332)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/RuleModeller.java	2006-12-14 23:09:38 UTC (rev 8333)
@@ -11,6 +11,7 @@
 import org.drools.brms.client.modeldriven.model.ActionRetractFact;
 import org.drools.brms.client.modeldriven.model.ActionSetField;
 import org.drools.brms.client.modeldriven.model.CompositeFactPattern;
+import org.drools.brms.client.modeldriven.model.DSLSentence;
 import org.drools.brms.client.modeldriven.model.FactPattern;
 import org.drools.brms.client.modeldriven.model.IAction;
 import org.drools.brms.client.modeldriven.model.IPattern;
@@ -62,7 +63,7 @@
         addPattern.setTitle( "Add a condition to this rule." );
         addPattern.addClickListener( new ClickListener() {
             public void onClick(Widget w) {
-                showAddConditionSelector(w);               
+                showConditionSelector(w);               
             }            
         });
         
@@ -86,7 +87,7 @@
 
 
     /**
-     * Do the widgets for the RHS.
+     * Do all the widgets for the RHS.
      */
     private Widget renderRhs(final RuleModel model) {
         VerticalPanel vert = new VerticalPanel();
@@ -100,7 +101,9 @@
             } else if (action instanceof ActionAssertFact) {
                 w = new ActionAssertFactWidget(this, (ActionAssertFact) action, completions );
             } else if (action instanceof ActionRetractFact) {
-                w = new ActionRetractFactWidget(this.completions, (ActionRetractFact) action);
+                w = new ActionRetractFactWidget(this.completions, (ActionRetractFact) action );
+            } else if (action instanceof DSLSentence) {
+                w = new DSLSentenceWidget((DSLSentence) action);
             }
             
             HorizontalPanel horiz = new HorizontalPanel();
@@ -133,11 +136,9 @@
     /**
      * Pops up the fact selector.
      */
-    protected void showAddConditionSelector(final Widget w) {
+    protected void showConditionSelector(final Widget w) {
         final FormStylePopup popup = new FormStylePopup("images/new_fact.gif", "Add a condition to the rule...");
 
-        
-
         //
         // The list of facts 
         //
@@ -182,12 +183,40 @@
                 }
             }
         });        
+
         
+        //
+        // The list of DSL sentences
+        //
+        if (completions.getDSLConditions().size() > 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 );
+                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 ) );
+                    popup.hide();
+                }
+            });
+            popup.addAttribute( "Template conditions", dsls );
+        }
+        
         popup.setPopupPosition( w.getAbsoluteLeft() - 400, w.getAbsoluteTop() );
         popup.show();
 
     }
     
+    protected void addNewDSLLhs(DSLSentence sentence) {
+        model.addLhsItem( sentence );
+        refreshWidget();
+        
+    }
+
     protected void showActionSelector(Widget w) {
         final FormStylePopup popup = new FormStylePopup("images/new_fact.gif", "Add a new action...");
         
@@ -256,6 +285,29 @@
         if (factsToAssert.getItemCount() > 1) {
             popup.addAttribute( "Assert a new fact", factsToAssert );
         }
+        
+        
+        //
+        // The list of DSL sentences
+        //
+        if (completions.getDSLActions().size() > 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 );
+                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 ) );
+                    popup.hide();
+                }
+            });
+            popup.addAttribute( "Template actions", dsls );
+        }
+        
 
         popup.setPopupPosition( w.getAbsoluteLeft() - 400, w.getAbsoluteTop() );
         popup.show();
@@ -263,6 +315,11 @@
     
 
 
+    protected void addNewDSLRhs(DSLSentence sentence) {
+        this.model.addRhsItem( sentence );
+        refreshWidget();        
+    }
+
     protected void addRetract(String var) {
         this.model.addRhsItem( new ActionRetractFact(var) );
         refreshWidget();        
@@ -286,51 +343,93 @@
         refreshWidget();
     }
 
+    /**
+     * Builds all the condition widgets.
+     */
     private Widget renderLhs(final RuleModel model) {
         VerticalPanel vert = new VerticalPanel();
-        
+         
         for ( int i = 0; i < model.lhs.length; i++ ) {
             IPattern pattern = model.lhs[i];
-            Widget w;
+            Widget w = null;
             if (pattern instanceof FactPattern) {                  
                 w = new FactPatternWidget(this, pattern, completions, true) ;
+                addLhsWidget( model,
+                              vert,
+                              i,
+                              w );
             } else if (pattern instanceof CompositeFactPattern) {
                 w = new CompositeFactPatternWidget(this, (CompositeFactPattern) pattern, completions) ;
+                addLhsWidget( model,
+                              vert,
+                              i,
+                              w );
+            } else if (pattern instanceof DSLSentence) {
+                //ignore this time                
             } else {
                 throw new RuntimeException("I don't know what type of pattern that is.");
             }
             
-            HorizontalPanel horiz = new HorizontalPanel();
+
+        }
+        
+        boolean startedDSLSection = false;
+        for ( int i = 0; i < model.lhs.length; i++ ) {
+            IPattern pattern = model.lhs[i];
+            Widget w = null;
             
-            Image remove = new Image("images/delete_item_small.gif");
-            remove.setTitle( "Remove this condition, and all the field constraints that belong to it." );
-            final int idx = i;
-            remove.addClickListener( new ClickListener() {
-                public void onClick(Widget w) {
-                    YesNoDialog diag = new YesNoDialog("Remove this item?", new Command() {
-                        public void execute() {
-                            if (model.removeLhsItem(idx)) {
-                                refreshWidget();
-                            } else {
-                                ErrorPopup.showMessage( "Can't remove that item as it is used in the action part of the rule." );
-                            }                            
-                        }                        
-                    });
-                    diag.setPopupPosition( w.getAbsoluteLeft(), w.getAbsoluteTop() );
-                    diag.show();
+            if (pattern instanceof DSLSentence) {
+                if (!startedDSLSection) {
+                    w = new DSLSentenceWidget((DSLSentence) pattern, false, true);
+                    startedDSLSection = true;
+                } else if (i == model.lhs.length - 1) {
+                    w = new DSLSentenceWidget((DSLSentence) pattern, true, false);
+                } else {
+                    w = new DSLSentenceWidget((DSLSentence) pattern, false, false);
                 }
-            } );
-            horiz.add( w );
-            horiz.add( remove );
-
-
-            vert.add( horiz );
+                addLhsWidget( model, vert, i, w );
+                
+            }
         }
         
         return vert;
     }
 
+    /**
+     * This adds the widget to the UI, also adding the  
+     */
+    private void addLhsWidget(final RuleModel model,
+                              VerticalPanel vert,
+                              int i,
+                              Widget w) {
+        HorizontalPanel horiz = new HorizontalPanel();
+        
+        Image remove = new Image("images/delete_item_small.gif");
+        remove.setTitle( "Remove this condition, and all the field constraints that belong to it." );
+        final int idx = i;
+        remove.addClickListener( new ClickListener() {
+            public void onClick(Widget w) {
+                YesNoDialog diag = new YesNoDialog("Remove this item?", new Command() {
+                    public void execute() {
+                        if (model.removeLhsItem(idx)) {
+                            refreshWidget();
+                        } else {
+                            ErrorPopup.showMessage( "Can't remove that item as it is used in the action part of the rule." );
+                        }                            
+                    }                        
+                });
+                diag.setPopupPosition( w.getAbsoluteLeft(), w.getAbsoluteTop() );
+                diag.show();
+            }
+        } );
+        horiz.add( w );
+        horiz.add( remove );
 
+
+        vert.add( horiz );
+    }
+
+
     
     public RuleModel getModel() {
         return model;

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	2006-12-14 22:02:58 UTC (rev 8332)
+++ labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/client/modeldriven/SuggestionCompletionTest.java	2006-12-14 23:09:38 UTC (rev 8333)
@@ -1,5 +1,6 @@
 package org.drools.brms.client.modeldriven;
 
+import java.util.ArrayList;
 import java.util.HashMap;
 
 import junit.framework.TestCase;
@@ -29,6 +30,12 @@
                      }}, 
                      new HashMap() {{
                          put("x", "Person");
+                     }}, 
+                     new ArrayList() {{
+                         
+                     }}, 
+                     new ArrayList() {{
+                         
                      }}
                      
         );
@@ -109,8 +116,8 @@
 
     public void testOperatorMapping() {
         SuggestionCompletionEngine com = new SuggestionCompletionEngine();
-        assertEquals("is not", com.getOperatorDisplayName("!="));
-        assertEquals("is", com.getOperatorDisplayName("=="));        
+        assertEquals("is not equal to", com.getOperatorDisplayName("!="));
+        assertEquals("is equal to", com.getOperatorDisplayName("=="));        
         assertEquals("xxx", com.getOperatorDisplayName("xxx"));
     }
     




More information about the jboss-svn-commits mailing list