[jboss-svn-commits] JBL Code SVN: r11388 - in labs/jbossrules/trunk/drools-jbrms/src: main/java/org/drools/brms/client/common and 5 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu Apr 26 19:38:57 EDT 2007


Author: fmeyer
Date: 2007-04-26 19:38:56 -0400 (Thu, 26 Apr 2007)
New Revision: 11388

Added:
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/DirtableComposite.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/DirtableFlexTable.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/IDirtyable.java
Modified:
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/categorynav/CategoryEditor.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/FormStyleLayout.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/FormStylePopup.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/packages/PackageExplorerWidget.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/MetaData.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/ActionToolbar.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/AssetCategoryEditor.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/DefaultRuleContentWidget.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/MetaDataWidget.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/RuleDocumentWidget.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/RuleViewer.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/util/FileManagerUtils.java
   labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/util/MetaDataMapperTest.java
Log:
JBRULES-705 Editor widgets to honour "read only" flag

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/categorynav/CategoryEditor.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/categorynav/CategoryEditor.java	2007-04-26 23:29:34 UTC (rev 11387)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/categorynav/CategoryEditor.java	2007-04-26 23:38:56 UTC (rev 11388)
@@ -35,7 +35,6 @@
         
         table.setWidget( 0, 1, new Label(getTitle( path )));
         
-        
         table.setWidget( 1, 0, new Label("Cateogory name") );
         table.setWidget( 1, 1, name );
         
@@ -104,5 +103,4 @@
     void cancel() {
         hide();
     }
-    
 }

Added: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/DirtableComposite.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/DirtableComposite.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/DirtableComposite.java	2007-04-26 23:38:56 UTC (rev 11388)
@@ -0,0 +1,26 @@
+package org.drools.brms.client.common;
+
+import com.google.gwt.user.client.ui.Composite;
+
+public abstract class DirtableComposite extends Composite implements IDirtyable  {
+    private boolean dirtyflag = false;
+    
+    /* (non-Javadoc)
+     * @see org.drools.brms.client.common.isDirtable#isDirty()
+     */
+    public boolean isDirty() {
+        return this.dirtyflag;
+    } 
+    /* (non-Javadoc)
+     * @see org.drools.brms.client.common.isDirtable#resetDirty()
+     */
+    public void resetDirty(){
+        this.dirtyflag = false;
+    }
+    /* (non-Javadoc)
+     * @see org.drools.brms.client.common.isDirtable#makeDirty()
+     */
+    public void makeDirty(){
+        this.dirtyflag = true;
+    }
+}

Added: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/DirtableFlexTable.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/DirtableFlexTable.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/DirtableFlexTable.java	2007-04-26 23:38:56 UTC (rev 11388)
@@ -0,0 +1,54 @@
+package org.drools.brms.client.common;
+
+import java.util.ArrayList;
+
+import com.google.gwt.user.client.ui.FlexTable;
+import com.google.gwt.user.client.ui.Widget;
+
+public class DirtableFlexTable extends FlexTable {
+    
+    private int length; 
+    private ArrayList list = new ArrayList();
+
+    public boolean hasDirty() {
+        
+        //Pair coordinates;
+        DirtableComposite element;
+        
+        for ( Object coordinates : list ) {
+            element = (DirtableComposite) getWidget( ( (Pair) coordinates).getRow(), ( (Pair) coordinates).getColumn() );
+            if ( element.isDirty() ) return true;
+        }
+        return false;
+    }
+    
+    public void setWidget(int row, int column , Widget arg2) {
+        super.setWidget( row, column, arg2 );
+        
+        if ( arg2 instanceof DirtableComposite ) {
+            list.add( length++, new Pair(row ,column) );
+            
+        }
+    }
+}
+
+class Pair {
+    private int row;
+    private int column;
+    
+    public Pair(int row, int column) {
+        this.row = row;
+        this.column = column;
+    }
+
+    public int getColumn() {
+        return column;
+    }
+
+    public int getRow() {
+        return row;
+    }
+    
+    
+    
+}
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/FormStyleLayout.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/FormStyleLayout.java	2007-04-26 23:29:34 UTC (rev 11387)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/FormStyleLayout.java	2007-04-26 23:38:56 UTC (rev 11388)
@@ -1,6 +1,5 @@
 package org.drools.brms.client.common;
 
-import com.google.gwt.user.client.ui.Composite;
 import com.google.gwt.user.client.ui.FlexTable;
 import com.google.gwt.user.client.ui.HTML;
 import com.google.gwt.user.client.ui.HasHorizontalAlignment;
@@ -16,7 +15,7 @@
  * 
  * @author Michael Neale
  */
-public class FormStyleLayout extends Composite {
+public class FormStyleLayout extends DirtableComposite {
     
     private FlexTable layout = new FlexTable();
     private FlexCellFormatter formatter = layout.getFlexCellFormatter();
@@ -30,7 +29,6 @@
         initWidget( layout );
     }
     
-    
     /** This has no header */
     public FormStyleLayout() {
         initWidget( layout );
@@ -83,7 +81,12 @@
         name.setStyleName( "resource-name-Label" );
 
         layout.setWidget( 0, 1, name );
+        
         numInLayout++;
-    }    
+    }
+    
+    public void setFlexTableWidget(int row, int col, Widget widget){
+        layout.setWidget( row, col, widget );
+    }
 
 }

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/FormStylePopup.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/FormStylePopup.java	2007-04-26 23:29:34 UTC (rev 11387)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/FormStylePopup.java	2007-04-26 23:38:56 UTC (rev 11388)
@@ -22,29 +22,25 @@
         form = new FormStyleLayout( image, title );
         this.setStyleName( "ks-popups-Popup" );
 
-        
-        add( form );
-    }
-    
-    public void addAttribute(String label, Widget wid) {
-        form.addAttribute( label, wid );
-    }
-    
-    public void addRow(Widget wid) {
-        form.addRow( wid );
-    }
-
-    public void show() {        
         Image close = new ImageButton("images/close.gif");
         close.addClickListener( new ClickListener() {
             public void onClick(Widget w) {
                 hide();                
             }            
         });
-        addAttribute("", close);
+
+        form.setFlexTableWidget( 0, 2, close );
+
+        add( form );
+
         
-        super.show();
     }
-    
 
+    public void addAttribute(String label, Widget wid) {
+        form.addAttribute( label, wid );
+    }
+    
+    public void addRow(Widget wid) {
+        form.addRow( wid );
+    }
 }

Added: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/IDirtyable.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/IDirtyable.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/IDirtyable.java	2007-04-26 23:38:56 UTC (rev 11388)
@@ -0,0 +1,11 @@
+package org.drools.brms.client.common;
+
+public interface IDirtyable {
+
+    public abstract boolean isDirty();
+
+    public abstract void resetDirty();
+
+    public abstract void makeDirty();
+
+}
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/packages/PackageExplorerWidget.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/packages/PackageExplorerWidget.java	2007-04-26 23:29:34 UTC (rev 11387)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/packages/PackageExplorerWidget.java	2007-04-26 23:38:56 UTC (rev 11388)
@@ -81,9 +81,7 @@
         };
         
         exTree.addTreeListener( treeListener );
-        
         VerticalPanel left = new VerticalPanel();
-        left.add( exTree );
 
         if (!readonly) {
             //only care about new buttons if its not read only
@@ -95,33 +93,27 @@
             left.add( buttons );
             buttons.setWidth( "100%" );
         }
+        left.add( exTree );
+        
         layout.setWidget( 0, 0, left );
         FlexCellFormatter formatter = layout.getFlexCellFormatter();
         formatter.setVerticalAlignment( 0, 0, HasVerticalAlignment.ALIGN_TOP );
         layout.getFlexCellFormatter().setRowSpan( 0, 1, 2 );
         layout.getFlexCellFormatter().setAlignment( 0, 1, HasHorizontalAlignment.ALIGN_CENTER, HasVerticalAlignment.ALIGN_TOP );
 
-        
-        
         refreshTreeView( );
         
         TreeItem item  = exTree.getItem( 0 );
         if (item != null) exTree.setSelectedItem( item );
 
         layout.setWidget( 0, 1, new HTML("<i>Please choose a package to edit, explore, or create a new package.</i>") );
-        
         layout.getFlexCellFormatter().setWidth( 0, 0, "25%" );
-        
         layout.getFlexCellFormatter().setAlignment( 0, 1, HasHorizontalAlignment.ALIGN_LEFT, HasVerticalAlignment.ALIGN_TOP );
-        
         listView = new AssetItemListViewer(this.editEvent);
-        
         initWidget( layout );
     }
 
 
-
-
     /** Return all the new wizard buttons. */
     private HorizontalPanel getNewWizardButtons() {
         HorizontalPanel newWizards = new HorizontalPanel();
@@ -220,16 +212,8 @@
 
     }
 
-
-
-
-
-
-
     public void refreshTreeView() {
         
-        
-        
         if (this.uuid == null) {
             LoadingPopup.showMessage( "Loading list of packages ..." );
             RepositoryServiceFactory.getService().listPackages( new GenericCallback() {
@@ -333,13 +317,6 @@
         }
     }
 
-
-
-
-
-
-
-
     /**
      * This will create a "show list" event to be attached to the tree.
      */
@@ -350,7 +327,6 @@
                 final TableDataResult table = (TableDataResult) data;
                 listView.loadTableData( table );      
                 listView.setWidth( "100%" );
-                //listView.setHeight( "100%" );
                 layout.setWidget( 0, 1, listView );
                 layout.getFlexCellFormatter().setAlignment( 0, 1, HasHorizontalAlignment.ALIGN_LEFT, HasVerticalAlignment.ALIGN_TOP );
                 LoadingPopup.close();
@@ -378,8 +354,6 @@
             public void onSuccess(Object data) {
                 PackageConfigData conf = (PackageConfigData) data;
                 PackageEditor ed = new PackageEditor(conf);
-//                ed.setWidth( "100%" );
-//                ed.setHeight( "100%" );
                 layout.setWidget( 0, 1, ed );              
             }            
         });

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/MetaData.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/MetaData.java	2007-04-26 23:29:34 UTC (rev 11387)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/MetaData.java	2007-04-26 23:38:56 UTC (rev 11388)
@@ -8,9 +8,7 @@
  * This is the DTO for a versionable asset's meta data.
  * ie basically everything except the payload.
  */
-public class MetaData
-    implements
-    IsSerializable {
+public class MetaData implements IsSerializable  {
 
     public String name = "";
     public String description = "";
@@ -42,8 +40,6 @@
     public Date dateEffective;
     public Date dateExpired;
     
-    /** used to flag dirty - ie needs to be spanked. Or saved to the repo, whatever */
-    public boolean dirty = false;
     
     /**
      * Remove a category.

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/ActionToolbar.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/ActionToolbar.java	2007-04-26 23:29:34 UTC (rev 11387)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/ActionToolbar.java	2007-04-26 23:38:56 UTC (rev 11388)
@@ -43,8 +43,6 @@
     private String uuid;
     private HTML state;
     
-
-    
     public ActionToolbar(final RuleAsset asset,
                           
                          final Command checkin,
@@ -157,8 +155,7 @@
             } );
             saveControls.add( delete );        
         }
-                
-        
+
         HorizontalPanel windowControls = new HorizontalPanel();
         
         Image maxMinImage = new ImageButton("images/max_min.gif");
@@ -174,12 +171,7 @@
         closeImg.setTitle( "Close." );
         closeImg.addClickListener( new ClickListener() {
             public void onClick(Widget w) {
-                if (metaData.dirty) {
-                    doCloseUnsavedWarning( );
-                } else {
-                    //we can actually close
-                    closeCommand.execute(  );
-                }
+                closeCommand.execute(  );
             }
         });
         
@@ -237,9 +229,7 @@
         });
         pop.show();
     }
-
     
-    
     /**
      * Show the stats change popup.
      */
@@ -255,34 +245,10 @@
     }
 
     /**
-     * Called when user wants to close, but there is "dirtyness".
-     */
-    protected void doCloseUnsavedWarning() {
-        final FormStylePopup pop = new FormStylePopup("images/warning-large.png", "WARNING: Un-committed changes.");
-        Button dis = new Button("Discard");
-        pop.addAttribute( "Are you sure you want to discard changes?", dis );
-        
-        dis.addClickListener( new ClickListener() {
-            public void onClick(Widget w) {
-                closeCommand.execute();
-                pop.hide();
-            }
-        });
-        
-        pop.setStyleName( "warning-Popup" );
-        
-        pop.setPopupPosition( 200, getAbsoluteTop() );
-        pop.show();
-        
-    }
-
-    /**
      * This needs to be set to allow the current viewer to be closed.
      */
     public void setCloseCommand(Command c) {
         this.closeCommand = c;
     }
     
-
-    
 }

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/AssetCategoryEditor.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/AssetCategoryEditor.java	2007-04-26 23:29:34 UTC (rev 11387)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/AssetCategoryEditor.java	2007-04-26 23:38:56 UTC (rev 11388)
@@ -2,12 +2,12 @@
 
 import org.drools.brms.client.categorynav.CategoryExplorerWidget;
 import org.drools.brms.client.categorynav.CategorySelectHandler;
+import org.drools.brms.client.common.DirtableComposite;
 import org.drools.brms.client.common.ImageButton;
 import org.drools.brms.client.rpc.MetaData;
 
 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.FlexTable;
 import com.google.gwt.user.client.ui.Grid;
 import com.google.gwt.user.client.ui.Image;
@@ -24,7 +24,7 @@
  * 
  * @author Michael Neale
  */
-public class AssetCategoryEditor extends Composite {
+public class AssetCategoryEditor extends DirtableComposite {
 
     private MetaData data;
     private Grid layout = new Grid(1, 2);
@@ -54,10 +54,6 @@
     
         
         
-
-        
-        
-        
         initWidget( layout );        
     }
 
@@ -79,11 +75,8 @@
     }
 
     protected void removeCategory(int idx) {
-        
         data.removeCategory( idx );
-        
-        data.dirty = true;
-        
+        makeDirty();
         resetBox();
     }
 

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/DefaultRuleContentWidget.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/DefaultRuleContentWidget.java	2007-04-26 23:29:34 UTC (rev 11387)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/DefaultRuleContentWidget.java	2007-04-26 23:38:56 UTC (rev 11388)
@@ -1,11 +1,11 @@
 package org.drools.brms.client.ruleeditor;
 
+import org.drools.brms.client.common.DirtableComposite;
 import org.drools.brms.client.rpc.MetaData;
 import org.drools.brms.client.rpc.RuleAsset;
 import org.drools.brms.client.rpc.RuleContentText;
 
 import com.google.gwt.user.client.ui.ChangeListener;
-import com.google.gwt.user.client.ui.Composite;
 import com.google.gwt.user.client.ui.TextArea;
 import com.google.gwt.user.client.ui.Widget;
 
@@ -14,7 +14,7 @@
  * This is the default rule editor widget (just text editor based) - more to come later.
  * @author michael neale
  */
-public class DefaultRuleContentWidget extends Composite {
+public class DefaultRuleContentWidget extends DirtableComposite {
 	
 	private TextArea text;
 	final private RuleContentText data;
@@ -35,7 +35,7 @@
         text.addChangeListener( new ChangeListener() {
             public void onChange(Widget w) {
                 data.content = text.getText();
-                meta.dirty = true;
+                makeDirty();
             }
         }); 
         

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/MetaDataWidget.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/MetaDataWidget.java	2007-04-26 23:29:34 UTC (rev 11387)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/MetaDataWidget.java	2007-04-26 23:38:56 UTC (rev 11388)
@@ -137,8 +137,6 @@
             horiz.add( editPackage );
             return horiz;
         }
-
-        
     }
 
 
@@ -156,27 +154,26 @@
                     Window.alert( "You need to pick a different package to move this to." );
                     return;
                 }
-                RepositoryServiceFactory.getService().changeAssetPackage( uuid, sel.getSelectedPackage(), 
-                                                                          "Moved from : " + pkg, 
+                RepositoryServiceFactory.getService().changeAssetPackage( uuid,
+                                                                          sel.getSelectedPackage(),
+                                                                          "Moved from : " + pkg,
                                                                           new GenericCallback() {
+                                                                              public void onSuccess(Object data) {
+                                                                                  refreshView.execute();
+                                                                                  pop.hide();
+                                                                              }
 
-                                                                           
-                                                                            public void onSuccess(Object data) {
-                                                                                refreshView.execute();
-                                                                                pop.hide();
-                                                                            }
-                    
-                                                                            });
+                                                                          } );
                 
                 
             }
             
         });
-        pop.setPopupPosition( source.getParent().getParent().getAbsoluteLeft(), source.getParent().getParent().getAbsoluteTop() );
+        pop.setPopupPosition( source.getParent().getParent().getAbsoluteLeft(),
+                              source.getParent().getParent().getAbsoluteTop() );
         pop.show();
     }
 
-
     private Widget getVersionNumberLabel() {
         if (data.versionNumber == 0 ) {
             return new HTML("<i>Not checked in yet</i>");
@@ -186,8 +183,6 @@
         
     }
 
-
-
     private Widget readOnlyDate(Date lastModifiedDate) {
         if (lastModifiedDate == null) {
             return null;
@@ -196,18 +191,12 @@
         }
     }
 
-    
-
     private Label readOnlyText(String text) {
         Label lbl = new Label(text);
         lbl.setWidth( "100%" );
         return lbl;
     }
-    
-    
 
-
-
     private Widget categories() {
         AssetCategoryEditor ed = new AssetCategoryEditor(this.data, this.readOnly);
         return ed;
@@ -221,8 +210,8 @@
             box.setTitle( toolTip );
             box.setText( bind.getValue() );
             ChangeListener listener = new ChangeListener() {    
-                public void onChange(Widget w) {   
-                    data.dirty = true;     
+                public void onChange(Widget w) {
+                    makeDirty();
                     bind.setValue( box.getText() );                
                 }                
             };            
@@ -233,16 +222,11 @@
         }
     }
 
-
-
     /** used to bind fields in the meta data DTO to the form */
     static interface FieldBinding {
         void setValue(String val);
         String getValue();
     }
-
-
-
     
     /**
      * Return the data if it is to be saved.
@@ -250,7 +234,5 @@
     public MetaData getData() {
         return data;
     }
-
 	
-	
 }

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/RuleDocumentWidget.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/RuleDocumentWidget.java	2007-04-26 23:29:34 UTC (rev 11387)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/RuleDocumentWidget.java	2007-04-26 23:38:56 UTC (rev 11388)
@@ -1,5 +1,6 @@
 package org.drools.brms.client.ruleeditor;
 
+import org.drools.brms.client.common.DirtableComposite;
 import org.drools.brms.client.rpc.MetaData;
 
 import com.google.gwt.user.client.ui.ChangeListener;
@@ -16,7 +17,7 @@
  * @author Michael Neale
  *
  */
-public class RuleDocumentWidget extends Composite {
+public class RuleDocumentWidget extends DirtableComposite {
 
 	private TextArea text;
 	
@@ -50,7 +51,7 @@
         text.addChangeListener( new ChangeListener() {
             public void onChange(Widget w) {                
                 data.description = text.getText();
-                data.dirty = true;
+                makeDirty();
             }            
         });
         if (data.description == null || "".equals(data.description )) {

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/RuleViewer.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/RuleViewer.java	2007-04-26 23:29:34 UTC (rev 11387)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/RuleViewer.java	2007-04-26 23:38:56 UTC (rev 11388)
@@ -1,16 +1,19 @@
 package org.drools.brms.client.ruleeditor;
 
+import org.drools.brms.client.common.DirtableComposite;
+import org.drools.brms.client.common.DirtableFlexTable;
 import org.drools.brms.client.common.ErrorPopup;
-import org.drools.brms.client.common.InfoPopup;
+import org.drools.brms.client.common.FormStylePopup;
 import org.drools.brms.client.common.LoadingPopup;
-import org.drools.brms.client.rpc.MetaData;
 import org.drools.brms.client.rpc.RepositoryServiceFactory;
 import org.drools.brms.client.rpc.RuleAsset;
 
 import com.google.gwt.user.client.Command;
 import com.google.gwt.user.client.rpc.AsyncCallback;
+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.FlexTable;
+import com.google.gwt.user.client.ui.HTML;
 import com.google.gwt.user.client.ui.HasHorizontalAlignment;
 import com.google.gwt.user.client.ui.HasVerticalAlignment;
 import com.google.gwt.user.client.ui.Widget;
@@ -24,20 +27,18 @@
 public class RuleViewer extends Composite {
 
     private Command           closeCommand;
-
     protected RuleAsset       asset;
-
-    private final FlexTable layout;
+    private final DirtableFlexTable layout;
+    
     private boolean readOnly;
 
     private MetaDataWidget metaWidget;
-
+    private RuleDocumentWidget doco;
+    private Widget editor;
+    
     private ActionToolbar toolbar;
+    
 
-    private Widget editor;
-
-    private RuleDocumentWidget doco;
-
     public RuleViewer(RuleAsset asset) {
         this(asset, false);
     }
@@ -51,10 +52,9 @@
     public RuleViewer(RuleAsset asset, boolean historicalReadOnly) {
         this.asset = asset;
         this.readOnly = historicalReadOnly;
-        layout = new FlexTable();
+        layout = new DirtableFlexTable();
         
         doWidgets();
-        
         initWidget( this.layout );
         
         LoadingPopup.close();
@@ -68,12 +68,10 @@
     private void doWidgets() {
         this.layout.clear();
         
-        metaWidget = new MetaDataWidget( this.asset.metaData,
-                                                              readOnly, this.asset.uuid, new Command() {
-
-                                                                public void execute() {
-                                                                    refreshDataAndView();
-                                                                }
+        metaWidget = new MetaDataWidget( this.asset.metaData, readOnly, this.asset.uuid, new Command() {
+            public void execute() {
+                refreshDataAndView();
+            }
             
         });
         
@@ -84,66 +82,61 @@
 
         //now the main layout table
         FlexCellFormatter formatter = layout.getFlexCellFormatter();
-        layout.setWidget( 0,
-                          1,
-                          metaWidget );
-        formatter.setRowSpan( 0,
-                              1,
-                              3 );
+        layout.setWidget( 0, 1, metaWidget );
+        
+        formatter.setRowSpan( 0, 1, 3 );
         formatter.setVerticalAlignment( 0, 1, HasVerticalAlignment.ALIGN_TOP );
-        formatter.setWidth( 0,
-                            1,
-                            "30%" );
+        formatter.setWidth( 0, 1, "30%" );
         
         //and now the action widgets (checkin/close etc).
         toolbar = new ActionToolbar( asset,
-                                                   new Command() {
-                                                       public void execute() {
-                                                           doCheckin();
-                                                       }
-                                                   },
-                                                   new Command() {
-                                                       public void execute() {
-                                                           doArchive();
-                                                       }
-                                                   },
-                                                   new Command() {
-                                                       public void execute() {
-                                                           zoomIntoAsset();
-                                                       }
-                                                   },
-                                                   new Command() {
-                                                       public void execute() {
-                                                           doDelete();
-                                                       }
-                                                   },
-                                                   readOnly);
+                                     new Command() {
+                public void execute() {
+                    doCheckin();
+                }
+                },
+                new Command() {
+                    public void execute() {
+                        doArchive();
+                    }
+                },
+                new Command() {
+                    public void execute() {
+                        zoomIntoAsset();
+                    }
+                },
+                new Command() {
+                    public void execute() {
+                        doDelete();
+                    }
+                },
+        readOnly);
+
+        
+        layout.setWidget( 0, 0, toolbar );
+        formatter.setAlignment( 0, 0, HasHorizontalAlignment.ALIGN_RIGHT, HasVerticalAlignment.ALIGN_MIDDLE );
+
+        //REMEMBER: subsequent rows have only one column, doh that is confusing ! 
+        //GAAAAAAAAAAAAAAAAAAAAAAAAAAH
+
+        editor = EditorLauncher.getEditorViewer(asset, this);
         toolbar.setCloseCommand( new Command() {
             public void execute() {
+                if (layout.hasDirty()) {
+                    doCloseUnsavedWarning( );
+                } else {
+
                 closeCommand.execute();
+                }
             }
         } );
 
-        layout.setWidget( 0,
-                          0,
-                          toolbar );
-        formatter.setAlignment( 0,
-                                0,
-                                HasHorizontalAlignment.ALIGN_RIGHT,
-                                HasVerticalAlignment.ALIGN_MIDDLE );
-
-        //REMEMBER: subsequent rows have only one column, doh that is confusing ! 
-        //GAAAAAAAAAAAAAAAAAAAAAAAAAAH
-
-        editor = EditorLauncher.getEditorViewer(asset, this);
         layout.setWidget( 1, 0, editor);
         
 
         //the document widget
         doco = new RuleDocumentWidget(asset.metaData);
-        layout.setWidget( 2,
-                          0,
-                          doco );
+        layout.setWidget( 2, 0, doco );
     }
     
     void doDelete() {
@@ -181,6 +174,11 @@
 
             public void onSuccess(Object o) {
                 String uuid = (String)o;
+                
+                ((DirtableComposite) editor).resetDirty();
+                metaWidget.resetDirty();
+                doco.resetDirty();
+                
                 if (uuid == null) {
                     ErrorPopup.showMessage( "Failed to check in the item. Please contact your system administrator." );
                     return;
@@ -213,7 +211,6 @@
      * in the rule asset).
      */
     public void zoomIntoAsset() {
-        
 
        boolean vis = !layout.getFlexCellFormatter().isVisible( 2, 0 );
        this.layout.getFlexCellFormatter().setVisible( 0, 1, vis );
@@ -229,4 +226,27 @@
         this.closeCommand = c;
     }
 
+    /**
+     * Called when user wants to close, but there is "dirtyness".
+     */
+    protected void doCloseUnsavedWarning() {
+        final FormStylePopup pop = new FormStylePopup("images/warning-large.png", "WARNING: Un-committed changes.");
+        Button dis = new Button("Discard");
+        pop.addRow( new HTML("Are you sure you want to discard changes?") );
+        pop.addRow( dis );
+        
+        dis.addClickListener( new ClickListener() {
+            public void onClick(Widget w) {
+                closeCommand.execute();
+                pop.hide();
+            }
+        });
+        
+        pop.setStyleName( "warning-Popup" );
+        
+        pop.setPopupPosition( 200, getAbsoluteTop() );
+        pop.show();
+        
+    }
+
 }

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/util/FileManagerUtils.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/util/FileManagerUtils.java	2007-04-26 23:29:34 UTC (rev 11387)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/util/FileManagerUtils.java	2007-04-26 23:38:56 UTC (rev 11388)
@@ -14,7 +14,6 @@
 import org.apache.commons.fileupload.disk.DiskFileItemFactory;
 import org.apache.commons.fileupload.servlet.ServletFileUpload;
 import org.drools.brms.client.common.HTMLFileManagerFields;
-import org.drools.brms.client.packages.ModelAttachmentFileWidget;
 import org.drools.repository.AssetItem;
 import org.drools.repository.RulesRepository;
 import org.drools.repository.RulesRepositoryException;

Modified: labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/util/MetaDataMapperTest.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/util/MetaDataMapperTest.java	2007-04-26 23:29:34 UTC (rev 11387)
+++ labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/util/MetaDataMapperTest.java	2007-04-26 23:38:56 UTC (rev 11388)
@@ -26,8 +26,6 @@
         assertEquals("abc", bean.getPublisher());
         assertEquals("def", bean.getCreator());
         
-        assertFalse(data.dirty);
-        
     }
     
 




More information about the jboss-svn-commits mailing list