[jboss-svn-commits] JBL Code SVN: r32846 - labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed May 12 15:31:21 EDT 2010


Author: eaa
Date: 2010-05-12 15:31:20 -0400 (Wed, 12 May 2010)
New Revision: 32846

Modified:
   labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ActionCallMethodWidget.java
   labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ActionInsertFactWidget.java
   labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ActionRetractFactWidget.java
   labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ActionSetFieldWidget.java
   labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ActionValueEditor.java
   labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/CompositeFactPatternWidget.java
   labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ConstraintValueEditor.java
   labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/DSLSentenceWidget.java
   labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/DefaultLiteralEditor.java
   labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/EnumDropDownLabel.java
   labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ExpressionBuilder.java
   labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/FactPatternWidget.java
   labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/FreeFormLineWidget.java
   labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/FromAccumulateCompositeFactPatternWidget.java
   labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/FromCollectCompositeFactPatternWidget.java
   labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/FromCompositeFactPatternWidget.java
   labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/GlobalCollectionAddWidget.java
   labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/MethodParameterValueEditor.java
   labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/RuleModeller.java
   labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/RuleModellerWidget.java
Log:
GUVNOR-538: Allow real time verification of Fact's constraints in Guided Editor
	- Info message added when Rule Verifier options are modified

Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ActionCallMethodWidget.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ActionCallMethodWidget.java	2010-05-12 15:47:22 UTC (rev 32845)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ActionCallMethodWidget.java	2010-05-12 19:31:20 UTC (rev 32846)
@@ -21,6 +21,7 @@
 import org.drools.ide.common.client.modeldriven.brl.FactPattern;
 
 import com.google.gwt.core.client.GWT;
+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.HorizontalPanel;
@@ -252,10 +253,15 @@
         DropDownData enums = completions.getEnums( type,
                                                         this.model.fieldValues,
                                                         val.field );
-        return new MethodParameterValueEditor( val,
-                                               enums,
-                                               this.getModeller(),
-                                               val.type );
+        return new MethodParameterValueEditor(val,
+                enums,
+                this.getModeller(),
+                val.type, new Command() {
+
+            public void execute() {
+                setModified(true);
+            }
+        });
     }
 
     /**

Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ActionInsertFactWidget.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ActionInsertFactWidget.java	2010-05-12 15:47:22 UTC (rev 32845)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ActionInsertFactWidget.java	2010-05-12 19:31:20 UTC (rev 32846)
@@ -31,6 +31,7 @@
 import com.google.gwt.user.client.Window;
 import com.google.gwt.user.client.ui.*;
 import com.google.gwt.core.client.GWT;
+import com.google.gwt.user.client.Command;
 import com.gwtext.client.util.Format;
 
 /**
@@ -100,6 +101,7 @@
                 public void onClick(Widget w) {
                 	if (Window.confirm(constants.RemoveThisItem())) {
                             model.removeField( idx );
+                            setModified(true);
                             getModeller().refreshWidget();
                 	};
                 }
@@ -118,7 +120,15 @@
     private Widget valueEditor(final ActionFieldValue val) {
         SuggestionCompletionEngine completions = this.getModeller().getSuggestionCompletions();
     	DropDownData enums = completions.getEnums(this.factType, this.model.fieldValues, val.field);
-    	return new ActionValueEditor(val, enums,this.getModeller(),val.type,this.readOnly);
+
+        ActionValueEditor actionValueEditor = new ActionValueEditor(val, enums,this.getModeller(),val.type,this.readOnly);
+        actionValueEditor.setOnChangeCommand(new Command() {
+            public void execute() {
+                setModified(true);
+            }
+        });
+
+    	return actionValueEditor;
     }
 
     private Widget fieldSelector(final ActionFieldValue val) {
@@ -171,6 +181,7 @@
                 model.addFieldValue( new ActionFieldValue( fieldName,
                                                            "",
                                                            fieldType ) );
+                setModified(true);
                 getModeller().refreshWidget();
                 popup.hide();
             }
@@ -197,6 +208,7 @@
                     return;
                 }
                 model.setBoundName( var );
+                setModified(true);
                 getModeller().refreshWidget();
                 popup.hide();
             }

Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ActionRetractFactWidget.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ActionRetractFactWidget.java	2010-05-12 15:47:22 UTC (rev 32845)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ActionRetractFactWidget.java	2010-05-12 19:31:20 UTC (rev 32846)
@@ -56,6 +56,9 @@
         String desc = modeller.getModel().getBoundFact(model.variableName).factType + " [" + model.variableName + "]";
         layout.add(new SmallLabel(HumanReadable.getActionDisplayName( "retract" )+"&nbsp;<b>"  + desc  + "</b>"));
 
+        //This widget couldn't be modified.
+        this.setModified(false);
+
         initWidget( layout );
     }
 
@@ -67,4 +70,5 @@
 
 
 
+
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ActionSetFieldWidget.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ActionSetFieldWidget.java	2010-05-12 15:47:22 UTC (rev 32845)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ActionSetFieldWidget.java	2010-05-12 19:31:20 UTC (rev 32846)
@@ -36,6 +36,7 @@
 import com.google.gwt.user.client.ui.Widget;
 import com.google.gwt.user.client.ui.MouseListenerAdapter;
 import com.google.gwt.core.client.GWT;
+import com.google.gwt.user.client.Command;
 import com.gwtext.client.util.Format;
 
 /**
@@ -123,6 +124,7 @@
                 public void onClick(Widget w) {
                     if (Window.confirm(constants.RemoveThisItem())) {
                         model.removeField(idx);
+                        setModified(true);
                         getModeller().refreshWidget();
                     }
                 }
@@ -209,6 +211,7 @@
 
                 String fieldType = completions.getFieldType(variableClass, fieldName);
                 model.addFieldValue(new ActionFieldValue(fieldName, "", fieldType));
+                setModified(true);
                 getModeller().refreshWidget();
                 popup.hide();
             }
@@ -235,7 +238,14 @@
         }
 
         DropDownData enums = completions.getEnums(type, this.model.fieldValues, val.field);
-        return new ActionValueEditor(val, enums, this.getModeller(), val.type, this.readOnly);
+        ActionValueEditor actionValueEditor = new ActionValueEditor(val, enums, this.getModeller(), val.type, this.readOnly);
+        actionValueEditor.setOnChangeCommand(new Command() {
+
+            public void execute() {
+                setModified(true);
+            }
+        });
+        return actionValueEditor;
     }
 
     private Widget fieldSelector(final ActionFieldValue val) {

Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ActionValueEditor.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ActionValueEditor.java	2010-05-12 15:47:22 UTC (rev 32845)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ActionValueEditor.java	2010-05-12 19:31:20 UTC (rev 32846)
@@ -1,5 +1,6 @@
 package org.drools.guvnor.client.modeldriven.ui;
 
+import com.google.gwt.event.dom.client.ChangeEvent;
 import java.util.List;
 
 import org.drools.guvnor.client.common.DirtyableComposite;
@@ -16,6 +17,7 @@
 import org.drools.ide.common.client.modeldriven.brl.FactPattern;
 
 import com.google.gwt.core.client.GWT;
+import com.google.gwt.event.dom.client.ChangeHandler;
 import com.google.gwt.user.client.Command;
 import com.google.gwt.user.client.ui.Button;
 import com.google.gwt.user.client.ui.ChangeListener;
@@ -44,6 +46,7 @@
     private RuleModeller model = null;
     private String variableType = null;
     private boolean readOnly;
+    private Command onChangeCommand;
 
     public ActionValueEditor(final ActionFieldValue val,
             final DropDownData enums, boolean readOnly) {
@@ -175,6 +178,7 @@
                 public void onChange(Widget arg0) {
                     ListBox w = (ListBox) arg0;
                     value.value = "=" + w.getValue(w.getSelectedIndex());
+                    executeOnChageCommand();
                     makeDirty();
                     refresh();
                 }
@@ -193,6 +197,7 @@
 
             public void valueChanged(String newText, String newValue) {
                 value.value = newValue;
+                executeOnChageCommand();
                 makeDirty();
             }
         }, enums);
@@ -226,6 +231,7 @@
 
             public void onChange(Widget w) {
                 c.value = box.getText();
+                executeOnChageCommand();
                 makeDirty();
             }
         });
@@ -301,6 +307,7 @@
                 value.nature = ActionFieldValue.TYPE_LITERAL;
                 value.value = " ";
                 makeDirty();
+                executeOnChageCommand();
                 refresh();
                 form.hide();
             }
@@ -406,4 +413,20 @@
         h.add(popup);
         return h;
     }
+
+    private void executeOnChageCommand(){
+        if (this.onChangeCommand != null){
+            this.onChangeCommand.execute();
+        }
+    }
+
+    public Command getOnChangeCommand() {
+        return onChangeCommand;
+    }
+
+    public void setOnChangeCommand(Command onChangeCommand) {
+        this.onChangeCommand = onChangeCommand;
+    }
+
+
 }

Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/CompositeFactPatternWidget.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/CompositeFactPatternWidget.java	2010-05-12 15:47:22 UTC (rev 32845)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/CompositeFactPatternWidget.java	2010-05-12 19:31:20 UTC (rev 32846)
@@ -29,6 +29,9 @@
 
 import com.google.gwt.user.client.ui.*;
 import com.google.gwt.core.client.GWT;
+import com.google.gwt.user.client.Command;
+import java.util.ArrayList;
+import java.util.List;
 
 /**
  * This represents a top level CE, like an OR, NOT, EXIST etc...
@@ -45,6 +48,8 @@
     protected Constants constants = ((Constants) GWT.create(Constants.class));
     protected boolean readOnly;
 
+    private List<FactPatternWidget> childWidgets;
+
     public CompositeFactPatternWidget(RuleModeller modeller,
                                       CompositeFactPattern pattern) {
         this(modeller, pattern, null);
@@ -84,6 +89,9 @@
     }
 
     protected void doLayout() {
+
+        this.childWidgets = new ArrayList<FactPatternWidget>();
+
         this.layout.setWidget( 0,
                                0,
                                getCompositeLabel() );
@@ -97,9 +105,14 @@
             DirtyableVerticalPane vert = new DirtyableVerticalPane();
             FactPattern[] facts = pattern.patterns;
             for ( int i = 0; i < facts.length; i++ ) {
-                vert.add( new FactPatternWidget( this.getModeller(),
-                                                 facts[i],
-                                                 false,this.readOnly ) );
+                FactPatternWidget factPatternWidget = new FactPatternWidget(this.getModeller(), facts[i], false, this.readOnly);
+                factPatternWidget.addOnModifiedCommand(new Command() {
+                    public void execute() {
+                        setModified(true);
+                    }
+                });
+                childWidgets.add(factPatternWidget);
+                vert.add(factPatternWidget);
             }
             this.layout.setWidget( 1,
                                    1,
@@ -144,6 +157,7 @@
         box.addChangeListener( new ChangeListener() {
             public void onChange(Widget w) {
                 pattern.addFactPattern( new FactPattern( box.getItemText( box.getSelectedIndex() ) ) );
+                setModified(true);
                 getModeller().refreshWidget();
                 popup.hide();
             }

Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ConstraintValueEditor.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ConstraintValueEditor.java	2010-05-12 15:47:22 UTC (rev 32845)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ConstraintValueEditor.java	2010-05-12 19:31:20 UTC (rev 32846)
@@ -15,6 +15,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+import com.google.gwt.event.dom.client.ChangeEvent;
 import java.util.List;
 
 import org.drools.guvnor.client.common.DirtyableComposite;
@@ -31,6 +32,8 @@
 import org.drools.ide.common.client.modeldriven.brl.SingleFieldConstraint;
 
 import com.google.gwt.core.client.GWT;
+import com.google.gwt.event.dom.client.ChangeHandler;
+import com.google.gwt.user.client.Command;
 import com.google.gwt.user.client.ui.Button;
 import com.google.gwt.user.client.ui.ChangeListener;
 import com.google.gwt.user.client.ui.ClickListener;
@@ -65,7 +68,9 @@
     private Constants constants = ((Constants) GWT.create(Constants.class));
     private String fieldType;
     private boolean readOnly;
+    private Command onValueChangeCommand;
 
+
     public ConstraintValueEditor(FactPattern pattern, String fieldName,
     		ISingleFieldConstraint con, RuleModeller modeller, String valueType,
 			boolean readOnly) {
@@ -119,6 +124,12 @@
                                 this.fieldName,
                                 this.sce,
                                 this.constraint);
+                        ((EnumDropDownLabel)constraintWidget).setOnValueChangeCommand(new Command() {
+
+                            public void execute() {
+                                executeOnValueChangeCommand();
+                            }
+                        });
                     } else if (SuggestionCompletionEngine.TYPE_DATE.equals(this.fieldType)) {
 
                         DatePickerLabel datePicker = new DatePickerLabel(constraint.value);
@@ -130,6 +141,7 @@
                             datePicker.addValueChanged(new ValueChanged() {
 
                                 public void valueChanged(String newValue) {
+                                    executeOnValueChangeCommand();
                                     constraint.value = newValue;
                                 }
                             });
@@ -142,6 +154,12 @@
                         if (!this.readOnly) {
                         	constraintWidget = new DefaultLiteralEditor(this.constraint,
                                     this.numericValue);
+                                ((DefaultLiteralEditor)constraintWidget).setOnValueChangeCommand(new Command() {
+
+                                    public void execute() {
+                                        executeOnValueChangeCommand();
+                                    }
+                                });
                         } else {
                         	constraintWidget = new SmallLabel(this.constraint.value);
                         }
@@ -208,6 +226,7 @@
         box.addChangeListener(new ChangeListener() {
 
             public void onChange(Widget w) {
+                executeOnValueChangeCommand();
                 constraint.value = box.getItemText(box.getSelectedIndex());
             }
         });
@@ -224,6 +243,12 @@
         Image img = new Image("images/function_assets.gif"); //NON-NLS
         img.setTitle(msg);
         box.setTitle(msg);
+        box.addChangeHandler(new ChangeHandler() {
+
+            public void onChange(ChangeEvent event) {
+                executeOnValueChangeCommand();
+            }
+        });
         Widget ed = widgets(img,
                 box);
         return ed;
@@ -234,6 +259,12 @@
             throw new IllegalArgumentException("Expected SingleFieldConstraint, but " + constraint.getClass().getName() + " found.");
         }
         ExpressionBuilder builder = new ExpressionBuilder(this.modeller, ((SingleFieldConstraint) this.constraint).getExpression());
+        builder.addOnModifiedCommand(new Command() {
+
+            public void execute() {
+                executeOnValueChangeCommand();
+            }
+        });
         String msg = constants.ExpressionEditor();
         Widget ed = widgets(new HTML("&nbsp;"),
                 builder);
@@ -351,6 +382,7 @@
     }
 
     private void doTypeChosen(final FormStylePopup form) {
+        executeOnValueChangeCommand();
         refreshEditor();
         form.hide();
     }
@@ -364,7 +396,20 @@
         return panel;
     }
 
+    private void executeOnValueChangeCommand(){
+        if (this.onValueChangeCommand != null){
+            this.onValueChangeCommand.execute();
+        }
+    }
+
+
     public boolean isDirty() {
         return super.isDirty();
     }
+
+    public void setOnValueChangeCommand(Command onValueChangeCommand) {
+        this.onValueChangeCommand = onValueChangeCommand;
+    }
+
+
 }

Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/DSLSentenceWidget.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/DSLSentenceWidget.java	2010-05-12 15:47:22 UTC (rev 32845)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/DSLSentenceWidget.java	2010-05-12 19:31:20 UTC (rev 32846)
@@ -285,6 +285,7 @@
                 newSentence = newSentence + "\\n";
             }
         }
+        this.setModified(true);
         this.sentence.sentence = newSentence.trim();
     }
 

Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/DefaultLiteralEditor.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/DefaultLiteralEditor.java	2010-05-12 15:47:22 UTC (rev 32845)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/DefaultLiteralEditor.java	2010-05-12 19:31:20 UTC (rev 32846)
@@ -6,6 +6,7 @@
 import org.drools.ide.common.client.modeldriven.brl.ISingleFieldConstraint;
 
 import com.google.gwt.core.client.GWT;
+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;
@@ -35,10 +36,15 @@
     private final ValueChanged     valueChanged = new ValueChanged() {
                                                     public void valueChanged(String newValue) {
                                                         constraint.value = newValue;
+                                                        if (onValueChangeCommand != null){
+                                                            onValueChangeCommand.execute();
+                                                        }
                                                         okButton.click();
                                                     }
                                                 };
 
+    private Command onValueChangeCommand;
+
     public DefaultLiteralEditor(ISingleFieldConstraint constraint,
                                 boolean numericValue) {
         this.constraint = constraint;
@@ -72,6 +78,9 @@
             public void onClick(Widget arg0) {
 
                 if ( !isValueEmpty( constraint.value ) ) {
+                    if (onValueChangeCommand != null){
+                        onValueChangeCommand.execute();
+                    }
                     textWidget.setText( constraint.value );
 
                     popup.hide();
@@ -133,4 +142,14 @@
             return false;
         }
     }
+
+    private void executeOnValueChangeCommand(){
+        if (this.onValueChangeCommand != null){
+            this.onValueChangeCommand.execute();
+        }
+    }
+
+    public void setOnValueChangeCommand(Command onValueChangeCommand) {
+        this.onValueChangeCommand = onValueChangeCommand;
+    }
 }

Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/EnumDropDownLabel.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/EnumDropDownLabel.java	2010-05-12 15:47:22 UTC (rev 32845)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/EnumDropDownLabel.java	2010-05-12 19:31:20 UTC (rev 32846)
@@ -8,6 +8,7 @@
 import org.drools.ide.common.client.modeldriven.brl.ISingleFieldConstraint;
 
 import com.google.gwt.core.client.GWT;
+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;
@@ -33,6 +34,8 @@
 
     private final Button       okButton  = new Button( constants.OK() );
 
+    private Command onValueChangeCommand;
+
     public EnumDropDownLabel(FactPattern pattern,
                              String fieldName,
                              SuggestionCompletionEngine sce,
@@ -75,6 +78,7 @@
 
         okButton.addClickListener( new ClickListener() {
             public void onClick(Widget arg0) {
+                executeOnValueChangeCommand();
                 panel.clear();
                 panel.add( textWidget );
                 popup.hide();
@@ -124,4 +128,15 @@
 
         return box;
     }
+
+    private void executeOnValueChangeCommand(){
+        if (this.onValueChangeCommand != null){
+            this.onValueChangeCommand.execute();
+        }
+    }
+
+    public void setOnValueChangeCommand(Command onValueChangeCommand) {
+        this.onValueChangeCommand = onValueChangeCommand;
+    }
+
 }

Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ExpressionBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ExpressionBuilder.java	2010-05-12 15:47:22 UTC (rev 32845)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ExpressionBuilder.java	2010-05-12 19:31:20 UTC (rev 32846)
@@ -110,6 +110,7 @@
     }
 
     private void startPointChange(String value) {
+        setModified(true);
         panel.clear();
         Widget w;
         int dotPos = value.indexOf('.');
@@ -215,6 +216,8 @@
     }
 
     private void onChangeSelection(String value) {
+        setModified(true);
+
         String prevFactName = null;
         if (DELETE_VALUE.equals(value)) {
             expression.removeLast();

Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/FactPatternWidget.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/FactPatternWidget.java	2010-05-12 15:47:22 UTC (rev 32845)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/FactPatternWidget.java	2010-05-12 19:31:20 UTC (rev 32846)
@@ -34,6 +34,7 @@
 import org.drools.ide.common.client.modeldriven.brl.SingleFieldConstraint;
 
 import com.google.gwt.core.client.GWT;
+import com.google.gwt.user.client.Command;
 import com.google.gwt.user.client.DOM;
 import com.google.gwt.user.client.Window;
 import com.google.gwt.user.client.ui.*;
@@ -178,6 +179,7 @@
 
                 public void onClick(Widget w) {
                     if (Window.confirm(constants.RemoveThisItem())) {
+                        setModified(true);
                         pattern.removeConstraint(currentRow);
                         getModeller().refreshWidget();
                     }
@@ -285,6 +287,7 @@
 
                     public void onClick(Widget w) {
                         if (Window.confirm(constants.RemoveThisItemFromNestedConstraint())) {
+                            setModified(true);
                             constraint.removeConstraint(currentRow);
                             getModeller().refreshWidget();
                         }
@@ -325,6 +328,7 @@
             addConnective.addClickListener(new ClickListener() {
 
                 public void onClick(Widget w) {
+                    setModified(true);
                     constraint.addNewConnective();
                     modeller.refreshWidget();
                 }
@@ -361,6 +365,7 @@
             box.addChangeListener(new ChangeListener() {
 
                 public void onChange(Widget w) {
+                    setModified(true);
                     c.value = box.getText();
                     getModeller().makeDirty();
                 }
@@ -419,7 +424,13 @@
 
     private Widget valueEditor(final SingleFieldConstraint c, String factType) {
         //String type = this.modeller.getSuggestionCompletions().getFieldType( factType, c.fieldName );
-        return new ConstraintValueEditor(pattern, c.fieldName, c, this.getModeller(), c.fieldType,this.readOnly);
+        ConstraintValueEditor constraintValueEditor = new ConstraintValueEditor(pattern, c.fieldName, c, this.getModeller(), c.fieldType,this.readOnly);
+        constraintValueEditor.setOnValueChangeCommand(new Command() {
+            public void execute() {
+                setModified(true);
+            }
+        });
+        return constraintValueEditor;
     }
 
     private Widget operatorDropDown(final SingleFieldConstraint c) {
@@ -439,6 +450,7 @@
             box.addChangeListener(new ChangeListener() {
 
                 public void onChange(Widget w) {
+                    setModified(true);
                     c.operator = box.getValue(box.getSelectedIndex());
                     if (c.operator.equals("")) {
                         c.operator = null;

Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/FreeFormLineWidget.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/FreeFormLineWidget.java	2010-05-12 15:47:22 UTC (rev 32845)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/FreeFormLineWidget.java	2010-05-12 19:31:20 UTC (rev 32846)
@@ -79,19 +79,11 @@
             tb.addChangeListener(new ChangeListener() {
 
                 public void onChange(Widget arg0) {
+                    setModified(true);
                     action.text = tb.getText();
                 }
             });
-
             
-//            tb.addFocusListener(new FocusListenerAdapter() {
-//
-//                @Override
-//                public void onLostFocus(Widget sender) {
-//                    getModeller().verifyRule();
-//                }
-//
-//            });
         } else {
             tb.setEnabled(false);
         }

Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/FromAccumulateCompositeFactPatternWidget.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/FromAccumulateCompositeFactPatternWidget.java	2010-05-12 15:47:22 UTC (rev 32845)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/FromAccumulateCompositeFactPatternWidget.java	2010-05-12 19:31:20 UTC (rev 32846)
@@ -1,5 +1,6 @@
 package org.drools.guvnor.client.modeldriven.ui;
 
+import com.google.gwt.user.client.Command;
 import com.google.gwt.user.client.Window;
 import com.google.gwt.user.client.ui.Button;
 import com.google.gwt.user.client.ui.ChangeListener;
@@ -27,6 +28,8 @@
  */
 public class FromAccumulateCompositeFactPatternWidget extends FromCompositeFactPatternWidget {
 
+    private RuleModellerWidget sourcePatternWidget;
+
     public FromAccumulateCompositeFactPatternWidget(RuleModeller modeller,
             FromAccumulateCompositeFactPattern pattern, Boolean readOnly) {
         super(modeller, pattern, readOnly);
@@ -74,25 +77,31 @@
         } else {
             IPattern rPattern = this.getFromAccumulatePattern().getSourcePattern();
 
-            Widget patternWidget = null;
             if (rPattern instanceof FactPattern) {
-                patternWidget = new FactPatternWidget(this.getModeller(), rPattern, constants.All0with(), true,this.readOnly);
+                this.sourcePatternWidget = new FactPatternWidget(this.getModeller(), rPattern, constants.All0with(), true,this.readOnly);
             } else if (rPattern instanceof FromAccumulateCompositeFactPattern) {
-                patternWidget = new FromAccumulateCompositeFactPatternWidget(this.getModeller(), (FromAccumulateCompositeFactPattern) rPattern,this.readOnly);
+                this.sourcePatternWidget = new FromAccumulateCompositeFactPatternWidget(this.getModeller(), (FromAccumulateCompositeFactPattern) rPattern,this.readOnly);
             } else if (rPattern instanceof FromCollectCompositeFactPattern) {
-                patternWidget = new FromCollectCompositeFactPatternWidget(this.getModeller(), (FromCollectCompositeFactPattern) rPattern,this.readOnly);
+                this.sourcePatternWidget = new FromCollectCompositeFactPatternWidget(this.getModeller(), (FromCollectCompositeFactPattern) rPattern,this.readOnly);
             } else if (rPattern instanceof FromCompositeFactPattern) {
-                patternWidget = new FromCompositeFactPatternWidget(this.getModeller(), (FromCompositeFactPattern) rPattern,this.readOnly);
+                this.sourcePatternWidget = new FromCompositeFactPatternWidget(this.getModeller(), (FromCompositeFactPattern) rPattern,this.readOnly);
             } else {
                 throw new IllegalArgumentException("Unsuported pattern " + rPattern + " for right side of FROM ACCUMULATE");
             }
 
+            this.sourcePatternWidget.addOnModifiedCommand(new Command() {
+                public void execute() {
+                    setModified(true);
+                }
+            });
+
             panel.setWidget(r++,
                     0,
-                    addRemoveButton(patternWidget, new ClickListener() {
+                    addRemoveButton(this.sourcePatternWidget, new ClickListener() {
 
                 public void onClick(Widget sender) {
                     if (Window.confirm(constants.RemoveThisBlockOfData())) {
+                        setModified(true);
                         getFromAccumulatePattern().setSourcePattern(null);
                         getModeller().refreshWidget();
                     }
@@ -166,7 +175,7 @@
 
                 TextBox senderTB = (TextBox) sender;
                 String code = senderTB.getText();
-
+                setModified(true);
                 if (sender == initField) {
                     getFromAccumulatePattern().setFunction(null);
                     functionField.setText("");
@@ -244,6 +253,7 @@
 
             public void onChange(Widget w) {
                 pattern.setFactPattern(new FactPattern(box.getItemText(box.getSelectedIndex())));
+                setModified(true);
                 getModeller().refreshWidget();
                 popup.hide();
             }
@@ -275,6 +285,7 @@
 
             public void onChange(Widget w) {
                 getFromAccumulatePattern().setSourcePattern(new FactPattern(box.getItemText(box.getSelectedIndex())));
+                setModified(true);
                 getModeller().refreshWidget();
                 popup.hide();
             }
@@ -301,6 +312,7 @@
                     throw new IllegalArgumentException("Unknown sender: " + sender);
                 }
 
+                setModified(true);
                 getModeller().refreshWidget();
                 popup.hide();
             }

Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/FromCollectCompositeFactPatternWidget.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/FromCollectCompositeFactPatternWidget.java	2010-05-12 15:47:22 UTC (rev 32845)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/FromCollectCompositeFactPatternWidget.java	2010-05-12 19:31:20 UTC (rev 32846)
@@ -1,5 +1,6 @@
 package org.drools.guvnor.client.modeldriven.ui;
 
+import com.google.gwt.user.client.Command;
 import com.google.gwt.user.client.Window;
 import com.google.gwt.user.client.ui.Button;
 import com.google.gwt.user.client.ui.ChangeListener;
@@ -82,7 +83,7 @@
         } else {
             IPattern rPattern = this.getFromCollectPattern().getRightPattern();
 
-            Widget patternWidget = null;
+            RuleModellerWidget patternWidget = null;
             if (rPattern instanceof FactPattern) {
                 patternWidget = new FactPatternWidget(this.getModeller(), rPattern, constants.All0with(), true, this.readOnly);
             } else if (rPattern instanceof FromAccumulateCompositeFactPattern) {
@@ -97,6 +98,11 @@
                 throw new IllegalArgumentException("Unsuported pattern " + rPattern + " for right side of FROM COLLECT");
             }
 
+            patternWidget.addOnModifiedCommand(new Command() {
+                public void execute() {
+                    setModified(true);
+                }
+            });
 
             panel.setWidget(r++,
                     0,
@@ -104,6 +110,7 @@
 
                 public void onClick(Widget sender) {
                     if (Window.confirm(constants.RemoveThisBlockOfData())) {
+                        setModified(true);
                         getFromCollectPattern().setRightPattern(null);
                         getModeller().refreshWidget();
                     }
@@ -138,6 +145,7 @@
 
             public void onChange(Widget w) {
                 pattern.setFactPattern(new FactPattern(box.getValue(box.getSelectedIndex())));
+                setModified(true);
                 getModeller().refreshWidget();
                 popup.hide();
             }
@@ -172,6 +180,7 @@
 
             public void onChange(Widget w) {
                 getFromCollectPattern().setRightPattern(new FactPattern(box.getItemText(box.getSelectedIndex())));
+                setModified(true);
                 getModeller().refreshWidget();
                 popup.hide();
             }
@@ -197,7 +206,7 @@
                 } else {
                     throw new IllegalArgumentException("Unknown sender: " + sender);
                 }
-
+                setModified(true);
                 getModeller().refreshWidget();
                 popup.hide();
             }

Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/FromCompositeFactPatternWidget.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/FromCompositeFactPatternWidget.java	2010-05-12 15:47:22 UTC (rev 32845)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/FromCompositeFactPatternWidget.java	2010-05-12 19:31:20 UTC (rev 32846)
@@ -1,6 +1,7 @@
 package org.drools.guvnor.client.modeldriven.ui;
 
 import com.google.gwt.core.client.GWT;
+import com.google.gwt.user.client.Command;
 import com.google.gwt.user.client.Window;
 import com.google.gwt.user.client.ui.ChangeListener;
 import com.google.gwt.user.client.ui.ClickListener;
@@ -30,6 +31,9 @@
     protected Constants constants = ((Constants) GWT.create(Constants.class));
     protected boolean readOnly;
 
+    private FactPatternWidget factPatternWidget;
+    private ExpressionBuilder expressionBuilder;
+
     public FromCompositeFactPatternWidget(RuleModeller modeller,
             FromCompositeFactPattern pattern) {
         this(modeller, pattern, null);
@@ -69,17 +73,23 @@
 
                 if (this.readOnly) {
                     //creates a new read-only FactPatternWidget
-                    FactPatternWidget factPatternWidget = new FactPatternWidget(this.getModeller(), fact, false, true);
+                    this.factPatternWidget = new FactPatternWidget(this.getModeller(), fact, false, true);
                     this.layout.setWidget(r,
                             0, factPatternWidget);
                 } else {
-                    FactPatternWidget factPatternWidget = new FactPatternWidget(this.getModeller(), fact, true,false);
+                    this.factPatternWidget = new FactPatternWidget(this.getModeller(), fact, true,false);
+                    this.factPatternWidget.addOnModifiedCommand(new Command() {
+                        public void execute() {
+                            setModified(true);
+                        }
+                    });
                     this.layout.setWidget(r,
                             0,
                             addRemoveButton(factPatternWidget, new ClickListener() {
 
                         public void onClick(Widget w) {
                             if (Window.confirm(constants.RemoveThisEntireConditionQ())) {
+                                setModified(true);
                                 pattern.setFactPattern(null);
                                 getModeller().refreshWidget();
                             }
@@ -117,9 +127,14 @@
 
 
         panel.setWidget(r, 0, new HTML(lbl));
-        panel.setWidget(r, 1, new ExpressionBuilder(this.getModeller(), this.pattern.getExpression(), this.readOnly));
+        this.expressionBuilder =new ExpressionBuilder(this.getModeller(), this.pattern.getExpression(), this.readOnly);
+        this.expressionBuilder.addOnModifiedCommand(new Command() {
+            public void execute() {
+                setModified(true);
+            }
+        });
+        panel.setWidget(r, 1, this.expressionBuilder);
 
-
         return panel;
     }
 
@@ -147,6 +162,7 @@
 
             public void onChange(Widget w) {
                 pattern.setFactPattern(new FactPattern(box.getItemText(box.getSelectedIndex())));
+                setModified(true);
                 getModeller().refreshWidget();
                 popup.hide();
             }

Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/GlobalCollectionAddWidget.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/GlobalCollectionAddWidget.java	2010-05-12 15:47:22 UTC (rev 32845)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/GlobalCollectionAddWidget.java	2010-05-12 19:31:20 UTC (rev 32846)
@@ -70,6 +70,8 @@
         layout.setWidget(0, 0, sp);
         initWidget(layout);
 
+        //This widget couldn't be modified
+        this.setModified(false);
     }
 
     @Override

Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/MethodParameterValueEditor.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/MethodParameterValueEditor.java	2010-05-12 15:47:22 UTC (rev 32845)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/MethodParameterValueEditor.java	2010-05-12 19:31:20 UTC (rev 32846)
@@ -45,11 +45,12 @@
     private Constants           constants     = GWT.create( Constants.class );
     private RuleModeller        model         = null;
     private String              parameterType = null;
+    private Command             onValueChangeCommand = null;
 
     public MethodParameterValueEditor(final ActionFieldFunction val,
                                       final DropDownData enums,
                                       RuleModeller model,
-                                      String parameterType) {
+                                      String parameterType, Command onValueChangeCommand) {
         if ( val.type.equals( SuggestionCompletionEngine.TYPE_BOOLEAN ) ) {
             this.enums = DropDownData.create( new String[]{"true", "false"} );
         } else {
@@ -59,6 +60,7 @@
         this.methodParameter = val;
         this.model = model;
         this.parameterType = parameterType;
+        this.onValueChangeCommand = onValueChangeCommand;
         refresh();
         initWidget( root );
     }
@@ -71,6 +73,9 @@
                                             public void valueChanged(String newText,
                                                                      String newValue) {
                                                 methodParameter.value = newValue;
+                                                if (onValueChangeCommand != null){
+                                                    onValueChangeCommand.execute();
+                                                }
                                                 makeDirty();
                                             }
                                         },
@@ -145,6 +150,9 @@
                 public void onChange(Widget arg0) {
                     ListBox w = (ListBox) arg0;
                     methodParameter.value = w.getValue( w.getSelectedIndex() );
+                    if (onValueChangeCommand != null){
+                        onValueChangeCommand.execute();
+                    }
                     makeDirty();
                     refresh();
                 }
@@ -175,6 +183,9 @@
         box.addChangeListener( new ChangeListener() {
             public void onChange(Widget w) {
                 c.value = box.getText();
+                if (onValueChangeCommand != null) {
+                    onValueChangeCommand.execute();
+                }
                 makeDirty();
             }
 

Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/RuleModeller.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/RuleModeller.java	2010-05-12 15:47:22 UTC (rev 32845)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/RuleModeller.java	2010-05-12 19:31:20 UTC (rev 32846)
@@ -104,7 +104,20 @@
     private String packageName;
     private RuleAsset asset;
     private ModellerWidgetFactory widgetFactory;
-    
+
+    private List<RuleModellerWidget> lhsWidgets = new ArrayList<RuleModellerWidget>();
+    private List<RuleModellerWidget> rhsWidgets = new ArrayList<RuleModellerWidget>();
+
+    private boolean hasModifiedWidgets;
+
+    private final Command onWidgetModifiedCommand = new Command() {
+
+        public void execute() {
+            GWT.log("Widget Modified!");
+            hasModifiedWidgets = true;
+        }
+    };
+
     public RuleModeller(RuleAsset asset, RuleViewer viewer, ModellerWidgetFactory widgetFactory) {
         this(asset, widgetFactory);
     }
@@ -360,6 +373,7 @@
             Boolean readOnly = this.lockRHS()?true:null;
 
             RuleModellerWidget w = getWidgetFactory().getWidget(this, action, readOnly);
+            w.addOnModifiedCommand(this.onWidgetModifiedCommand);
 
             w.setWidth( "100%" );
             widget.add(spacerWidget());
@@ -428,7 +442,7 @@
             }
 
             
-
+            this.rhsWidgets.add(w);
             currentLayoutRow++;
 
 
@@ -960,6 +974,7 @@
             IPattern pattern = model.lhs[i];
             
             RuleModellerWidget w = getWidgetFactory().getWidget(this, pattern, readOnly);
+            w.addOnModifiedCommand(this.onWidgetModifiedCommand);
 
             vert.add(wrapLHSWidget(model, i, w));
             vert.add(spacerWidget());
@@ -997,7 +1012,7 @@
             }
 
             
-
+            this.lhsWidgets.add(w);
             currentLayoutRow++;
         }
 
@@ -1161,30 +1176,13 @@
     private List<AnalysisReportLine> errors;
     private List<AnalysisReportLine> warnings;
 
-    private void showWarningsAndErrors(){
-        this.clearLinesIcons();
-        if (this.warnings != null){
-            for (AnalysisReportLine warning : this.warnings) {
-                if (warning.patternOrderNumber != null){
-                    this.addLineIcon(warning.patternOrderNumber+1, "images/warning.gif", warning.description);
-                }
-            }
-        }
-        if (this.errors != null){
-            for (AnalysisReportLine error : this.errors) {
-                if (error.patternOrderNumber != null){
-                    this.addLineIcon(error.patternOrderNumber+1, "images/error.gif", error.description);
-                }
-            }
-        }
-    }
-
     public void verifyRule(final Command cmd){
         errors = new ArrayList<AnalysisReportLine>();
         warnings = new ArrayList<AnalysisReportLine>();
         
-        //if AutoVerifierEnabled is off, just execute cmd and return.
-        if (!WorkingSetManager.getInstance().isAutoVerifierEnabled()){
+        //if AutoVerifierEnabled is off or there are not modified widgets,
+        //just execute cmd and return.
+        if (!WorkingSetManager.getInstance().isAutoVerifierEnabled() || !this.hasModifiedWidgets){
             if (cmd != null){
                 cmd.execute();
             }
@@ -1202,20 +1200,53 @@
                         errors = Arrays.asList(report.errors);
                         warnings = Arrays.asList(report.warnings);
 
-                        showWarningsAndErrors();
+                        processWarningsAndErrors();
 
+
+                        hasModifiedWidgets = false;
                         if (cmd != null) {
                             cmd.execute();
                         }
                     }
 
                     public void onFailure(Throwable arg0) {
-                        // TODO Auto-generated method stub
+                         LoadingPopup.close();
                     }
                 });
 
     }
 
+    private void processWarningsAndErrors(){
+        
+        if (this.warnings.isEmpty() && this.errors.isEmpty()){
+            for (RuleModellerWidget ruleModellerWidget : this.lhsWidgets) {
+                ruleModellerWidget.setModified(false);
+            }
+            for (RuleModellerWidget ruleModellerWidget : this.rhsWidgets) {
+                ruleModellerWidget.setModified(false);
+            }
+        }
+        showWarningsAndErrors();
+    }
+
+    private void showWarningsAndErrors(){
+        this.clearLinesIcons();
+        if (this.warnings != null){
+            for (AnalysisReportLine warning : this.warnings) {
+                if (warning.patternOrderNumber != null){
+                    this.addLineIcon(warning.patternOrderNumber+1, "images/warning.gif", warning.description);
+                }
+            }
+        }
+        if (this.errors != null){
+            for (AnalysisReportLine error : this.errors) {
+                if (error.patternOrderNumber != null){
+                    this.addLineIcon(error.patternOrderNumber+1, "images/error.gif", error.description);
+                }
+            }
+        }
+    }
+
     public boolean hasVerifierErrors(){
         return this.errors != null && this.errors.size() > 0;
     }

Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/RuleModellerWidget.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/RuleModellerWidget.java	2010-05-12 15:47:22 UTC (rev 32845)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/RuleModellerWidget.java	2010-05-12 19:31:20 UTC (rev 32846)
@@ -1,5 +1,9 @@
 package org.drools.guvnor.client.modeldriven.ui;
 
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.user.client.Command;
+import java.util.ArrayList;
+import java.util.List;
 import org.drools.guvnor.client.common.DirtyableComposite;
 
 /**
@@ -10,6 +14,10 @@
 
     private RuleModeller modeller;
 
+    private boolean modified;
+
+    private List<Command> onModifiedCommands = new ArrayList<Command>();
+
     public RuleModellerWidget(RuleModeller modeller) {
         this.modeller = modeller;
     }
@@ -25,4 +33,22 @@
     public RuleModeller getModeller() {
         return modeller;
     }
+
+    protected void setModified(boolean modified) {
+        if (modified){
+            executeOnModifiedCommands();
+        }
+        this.modified = modified;
+    }
+
+    public void addOnModifiedCommand(Command command){
+        this.onModifiedCommands.add(command);
+    }
+
+    private void executeOnModifiedCommands(){
+        for (Command command : onModifiedCommands) {
+            command.execute();
+        }
+    }
+
 }



More information about the jboss-svn-commits mailing list