[jboss-svn-commits] JBL Code SVN: r6913 - in labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms: client client/rpc/mock client/rulelist client/table public/images

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu Oct 19 11:43:25 EDT 2006


Author: michael.neale at jboss.com
Date: 2006-10-19 11:43:13 -0400 (Thu, 19 Oct 2006)
New Revision: 6913

Added:
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rulelist/RuleItemListViewer.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/public/images/open_item.gif
Removed:
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rulelist/NewView.java
Modified:
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/Rules.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/Search.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/mock/MockRepositoryServiceAsync.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rulelist/EditItemEvent.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rulelist/RuleListView.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/table/SortableTable.java
Log:
much better table implementation

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/Rules.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/Rules.java	2006-10-19 14:37:28 UTC (rev 6912)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/Rules.java	2006-10-19 15:43:13 UTC (rev 6913)
@@ -9,6 +9,7 @@
 import org.drools.brms.client.ruleeditor.NewRuleWizard;
 import org.drools.brms.client.ruleeditor.RuleView;
 import org.drools.brms.client.rulelist.EditItemEvent;
+import org.drools.brms.client.rulelist.RuleItemListViewer;
 import org.drools.brms.client.rulelist.RuleListView;
 
 import com.google.gwt.user.client.ui.Button;
@@ -73,13 +74,26 @@
 		FlexTable  table = new FlexTable();
         
         //setup the list
-        final RuleListView list = new RuleListView(new EditItemEvent() {
+//        final RuleListView list = new RuleListView(new EditItemEvent() {
+//
+//            public void open(String[] rowData) {
+//                tab.selectTab( EDITOR_TAB );                
+//            }
+//            
+//        });         
+        
+        final RuleItemListViewer list = new RuleItemListViewer(new EditItemEvent() {
 
-            public void open(String[] rowData) {
-                tab.selectTab( EDITOR_TAB );                
+            public void open(String key) {
+                System.out.println("opening key " + key);
+                //tab.selectTab( EDITOR_TAB );
+                RuleView view = new RuleView();
+                
+                tab.add( view, "Rule: " + key );
+                tab.selectTab( tab.getWidgetIndex( view ) );
             }
             
-        });         
+        });    
         
         //setup the nav, which will drive the list
 		CategoryExplorerWidget nav = new CategoryExplorerWidget(new CategorySelectHandler() {
@@ -104,6 +118,7 @@
         formatter.setRowSpan( 0, 1, 3 );
         formatter.setWidth( 0, 0, "30%" );
         formatter.setWidth( 0, 1, "70%" );
+
         formatter.setHeight( 0, 0, "90%" );
 
         table.setText( 2, 0, "" );

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/Search.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/Search.java	2006-10-19 14:37:28 UTC (rev 6912)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/Search.java	2006-10-19 15:43:13 UTC (rev 6913)
@@ -16,7 +16,7 @@
 package org.drools.brms.client;
 
 import org.drools.brms.client.rpc.TableConfig;
-import org.drools.brms.client.rulelist.NewView;
+import org.drools.brms.client.rulelist.RuleItemListViewer;
 import org.drools.brms.client.table.SortableTable;
 
 import com.google.gwt.user.client.ui.Image;
@@ -180,8 +180,8 @@
         TableConfig conf = new TableConfig();
         conf.headers = new String[] {"name", "last modified", "status", "version" };
         
-        NewView view = new NewView(conf);
-        initWidget( view );
+//        NewView view = new NewView(conf);
+//        initWidget( view );
   }
 
   public void onShow() {

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/mock/MockRepositoryServiceAsync.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/mock/MockRepositoryServiceAsync.java	2006-10-19 14:37:28 UTC (rev 6912)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/mock/MockRepositoryServiceAsync.java	2006-10-19 15:43:13 UTC (rev 6913)
@@ -2,6 +2,8 @@
 
 import org.drools.brms.client.rpc.RepositoryServiceAsync;
 import org.drools.brms.client.rpc.TableConfig;
+import org.drools.brms.client.rpc.TableDataResult;
+import org.drools.brms.client.rpc.TableDataRow;
 
 import com.google.gwt.user.client.Timer;
 import com.google.gwt.user.client.rpc.AsyncCallback;
@@ -48,13 +50,22 @@
                                           String status,
                                           AsyncCallback callback)  {
         log("loading rule list", "for cat path: " + categoryPath);
-        String[][] data = { { "Rule 1", "Production", "mark", "2" },
-                            { "Rule 2", "Production", "mark", "2" },
-                            { "Rule 3", "Production", "mark", "2" }};
+        TableDataResult result = new TableDataResult();
+        result.numberOfRows = 42;
         
+        result.data = new TableDataRow[42];
         
-        callback.onSuccess( data );
+        for (int i = 0; i < 42; i++) {
+            TableDataRow row = new TableDataRow();
+            row.key = "woozle";
+            row.values = new String[] {"name", "another", "yeah", "blah"};        
+            result.data[i] = row;
+        }
+
         
+        
+        callback.onSuccess( result );
+        
     }
 
 

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rulelist/EditItemEvent.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rulelist/EditItemEvent.java	2006-10-19 14:37:28 UTC (rev 6912)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rulelist/EditItemEvent.java	2006-10-19 15:43:13 UTC (rev 6913)
@@ -1,7 +1,11 @@
 package org.drools.brms.client.rulelist;
 
+/**
+ * This is used by the list view to "open" an item.
+ * @author Michael Neale
+ */
 public interface EditItemEvent {
 
-    public void open(String[] rowData);
+    public void open(String key);
     
 }

Deleted: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rulelist/NewView.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rulelist/NewView.java	2006-10-19 14:37:28 UTC (rev 6912)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rulelist/NewView.java	2006-10-19 15:43:13 UTC (rev 6913)
@@ -1,106 +0,0 @@
-package org.drools.brms.client.rulelist;
-
-import org.drools.brms.client.common.ErrorPopup;
-import org.drools.brms.client.rpc.RepositoryServiceFactory;
-import org.drools.brms.client.rpc.TableConfig;
-import org.drools.brms.client.table.SortableTable;
-
-import com.google.gwt.user.client.rpc.AsyncCallback;
-import com.google.gwt.user.client.ui.Composite;
-import com.google.gwt.user.client.ui.FlexTable;
-import com.google.gwt.user.client.ui.HasHorizontalAlignment;
-import com.google.gwt.user.client.ui.HasVerticalAlignment;
-import com.google.gwt.user.client.ui.Label;
-import com.google.gwt.user.client.ui.ScrollPanel;
-import com.google.gwt.user.client.ui.FlexTable.FlexCellFormatter;
-
-/**
- * This is a viewer for viewing a list of rules for editing/selection.
- */
-public class NewView extends Composite {
-
-    private FlexTable     outer = new FlexTable();
-    private SortableTable table;
-
-    public NewView(TableConfig conf) {
-
-        RepositoryServiceFactory.getService().loadTableConfig( "ruleList",
-                                                               new AsyncCallback() {
-
-                                                                   public void onFailure(Throwable w) {
-                                                                       ErrorPopup.showMessage( w.getMessage() );
-                                                                   }
-
-                                                                   public void onSuccess(Object o) {
-                                                                       configTable( (TableConfig) o );
-                                                                   }
-
-                                                               } );
-
-        init();
-
-    }
-
-    private void init() {
-        FlexCellFormatter formatter = outer.getFlexCellFormatter();
-
-        //outer.setStyleName( SortableTable.styleList );
-        outer.setWidth( "100%" );
-
-        outer.setWidget( 0,
-                         0,
-                         new Label( "left" ) );
-        formatter.setAlignment( 0,
-                                0,
-                                HasHorizontalAlignment.ALIGN_LEFT,
-                                HasVerticalAlignment.ALIGN_MIDDLE );
-
-        outer.setWidget( 0,
-                         1,
-                         new Label( "right" ) );
-        formatter.setAlignment( 0,
-                                1,
-                                HasHorizontalAlignment.ALIGN_RIGHT,
-                                HasVerticalAlignment.ALIGN_MIDDLE );
-
-        initWidget( outer );
-    }
-
-    private void configTable(TableConfig conf) {
-        FlexCellFormatter formatter = outer.getFlexCellFormatter();
-        table = new SortableTable( 50,
-                                   conf.headers.length + 1 );
-        table.setHiddenColumn( 0 );
-        table.addColumnHeader( "",
-                               0 );
-        table.setWidth( "100%" );
-
-        for ( int i = 0; i < conf.headers.length; i++ ) {
-            table.addColumnHeader( conf.headers[i],
-                                   i + 1  );
-        }
-
-        ScrollPanel scroll = new ScrollPanel();
-
-        scroll.setScrollPosition( 1000 );
-        scroll.setAlwaysShowScrollBars( true );
-        scroll.add( table );
-
-        outer.setWidget( 1,
-                         0,
-                         scroll );
-        formatter.setColSpan( 1,
-                              0,
-                              2 );
-        for (int i = 1; i < 40; i++) {
-            table.setValue( i, 0, "KEY" );
-            table.setValue( i, 1, "yeah1" );
-            table.setValue( i, 2, "yeah2" );
-            table.setValue( i, 3, "yeah3" );
-            table.setValue( i, 4, "yeah4" );
-            
-            
-        }
-    }
-
-}

Copied: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rulelist/RuleItemListViewer.java (from rev 6907, labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rulelist/NewView.java)
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rulelist/NewView.java	2006-10-19 00:32:57 UTC (rev 6907)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rulelist/RuleItemListViewer.java	2006-10-19 15:43:13 UTC (rev 6913)
@@ -0,0 +1,189 @@
+package org.drools.brms.client.rulelist;
+
+import org.drools.brms.client.common.ErrorPopup;
+import org.drools.brms.client.rpc.RepositoryServiceFactory;
+import org.drools.brms.client.rpc.TableConfig;
+import org.drools.brms.client.rpc.TableDataResult;
+import org.drools.brms.client.rpc.TableDataRow;
+import org.drools.brms.client.table.SortableTable;
+
+import com.google.gwt.user.client.rpc.AsyncCallback;
+import com.google.gwt.user.client.ui.ClickListener;
+import com.google.gwt.user.client.ui.Composite;
+import com.google.gwt.user.client.ui.FlexTable;
+import com.google.gwt.user.client.ui.HasHorizontalAlignment;
+import com.google.gwt.user.client.ui.HasVerticalAlignment;
+import com.google.gwt.user.client.ui.HorizontalPanel;
+import com.google.gwt.user.client.ui.Image;
+import com.google.gwt.user.client.ui.Label;
+import com.google.gwt.user.client.ui.Widget;
+import com.google.gwt.user.client.ui.FlexTable.FlexCellFormatter;
+
+/**
+ * This is a viewer for viewing a list of rules for editing/selection.
+ * This uses the sortable table widget, and 
+ */
+public class RuleItemListViewer extends Composite {
+
+    private FlexTable     outer = new FlexTable();
+    private SortableTable table;
+    private TableConfig   tableConfig;
+    private EditItemEvent openItemEvent;
+    private String currentSelectedPath;
+
+    public RuleItemListViewer(EditItemEvent event) {
+
+        init();
+
+        RepositoryServiceFactory.getService().loadTableConfig( "ruleList",
+                                                               new AsyncCallback() {
+
+                                                                   public void onFailure(Throwable w) {
+                                                                       ErrorPopup.showMessage( w.getMessage() );
+                                                                   }
+
+                                                                   public void onSuccess(Object o) {
+                                                                       tableConfig = (TableConfig) o;
+                                                                       doTable( null );
+                                                                   }
+
+                                                               } );
+
+        this.openItemEvent = event;
+
+    }
+
+    /**
+     * Initialise the widget goodness.
+     */
+    private void init() {
+        FlexCellFormatter formatter = outer.getFlexCellFormatter();
+
+        //outer.setStyleName( SortableTable.styleList );
+        outer.setWidth( "100%" );
+
+        formatter.setAlignment( 0,
+                                0,
+                                HasHorizontalAlignment.ALIGN_LEFT,
+                                HasVerticalAlignment.ALIGN_MIDDLE );
+
+        Image openIcon = new Image( "images/open_item.gif" );
+        openIcon.addClickListener( new ClickListener() {
+            public void onClick(Widget w) {
+                openItemEvent.open( table.getSelectedKey() );
+            }
+        } );
+        openIcon.setTitle( "Open item" );
+
+        outer.setWidget( 0,
+                         1,
+                         openIcon );
+        formatter.setAlignment( 0,
+                                1,
+                                HasHorizontalAlignment.ALIGN_RIGHT,
+                                HasVerticalAlignment.ALIGN_MIDDLE );
+
+        initWidget( outer );
+    }
+
+    /** 
+     * This will create a table, and load the data, wrapping it in a scrolling area.
+     * If the data is null, it will just fill it in with something empty
+     * so it looks busy.
+     * 
+     * This could probably clear the table, but I just throw it away
+     * let the garbage collector do the hard work.
+     * 
+     */
+    private void doTable(TableDataResult data) {
+        FlexCellFormatter formatter = outer.getFlexCellFormatter();
+        outer.setWidget( 1,
+                         0,
+                         null );
+
+        if ( data == null ) {
+            table = new SortableTable( 100,
+                                       this.tableConfig.headers.length + 1 );
+            table.setValue( 1,
+                            1,
+                            "" );
+        } else {
+            table = new SortableTable( data.numberOfRows,
+                                       this.tableConfig.headers.length + 1 );
+            for ( int i = 0; i < data.data.length; i++ ) {
+                TableDataRow row = data.data[i];
+                table.setValue( i + 1,
+                                0,
+                                row.key );
+                for ( int j = 0; j < row.values.length; j++ ) {
+                    String val = row.values[j];
+                    table.setValue( i + 1,
+                                    j + 1,
+                                    val );
+                }
+            }
+            
+            //now the refresh icon and the number of rows.
+            Image refreshIcon = new Image("images/refresh.gif");
+            refreshIcon.addClickListener( new ClickListener() {
+                public void onClick(Widget w) {                    
+                    loadRulesForCategoryPath( currentSelectedPath );
+                }                
+            });
+            refreshIcon.setTitle( "Refresh current list. Will show any changes." );
+            
+            
+            HorizontalPanel panel = new HorizontalPanel();
+            panel.add( refreshIcon );
+            panel.add( new Label( "  " + data.numberOfRows + " items." ));
+            
+            outer.setWidget( 0,
+                             0,
+                              panel);
+        }
+
+        //setup the "key" column
+        table.setHiddenColumn( 0 );
+        table.addColumnHeader( "",
+                               0 );
+        table.setWidth( "100%" );
+
+        //add the headers
+        for ( int i = 0; i < this.tableConfig.headers.length; i++ ) {
+            table.addColumnHeader( this.tableConfig.headers[i],
+                                   i + 1 );
+        }
+
+        outer.setWidget( 1,
+                         0,
+                         table );
+        formatter.setColSpan( 1,
+                              0,
+                              2 );
+
+    }
+
+    /**
+     * This is called to tell the widget to reload itself for the given cat path.
+     */
+    public void loadRulesForCategoryPath(final String selectedPath) {
+
+        this.currentSelectedPath = selectedPath;
+        RepositoryServiceFactory.getService().loadRuleListForCategories( selectedPath,
+                                                                         "",
+                                                                         new AsyncCallback() {
+
+                                                                             public void onFailure(Throwable t) {
+                                                                                 ErrorPopup.showMessage( t.getMessage() );
+                                                                             }
+
+                                                                             public void onSuccess(Object o) {
+                                                                                 TableDataResult result = (TableDataResult) o;
+                                                                                 doTable( result );                                                                                 
+                                                                             }
+
+                                                                         } );
+
+    }
+
+}

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rulelist/RuleListView.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rulelist/RuleListView.java	2006-10-19 14:37:28 UTC (rev 6912)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rulelist/RuleListView.java	2006-10-19 15:43:13 UTC (rev 6913)
@@ -17,6 +17,12 @@
 import com.google.gwt.user.client.ui.Widget;
 
 /**
+ * NOTE: this is not currently used, but it worked OK.
+ * It did NOT have sorting, but did have paging, and performed reasonably well.
+ * 
+ * SO KEEP THIS AROUND IN CASE THE OTHER ONE BLOWS CHUNKS !
+ * This one is based on the mail app example.
+ * 
  * A composite that displays an explorer and a list view.
  */
 public class RuleListView extends Composite
@@ -133,7 +139,7 @@
      */
     private void openEditor() {
         if (selectedRow < data.length) {
-            this.editEvent.open( data[selectedRow] );
+            this.editEvent.open( data[selectedRow][0] );
         }
     }
 

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/table/SortableTable.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/table/SortableTable.java	2006-10-19 14:37:28 UTC (rev 6912)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/table/SortableTable.java	2006-10-19 15:43:13 UTC (rev 6913)
@@ -21,6 +21,7 @@
     public static String styleListHeader = "rule-ListHeader";
     public static String styleSelectedRow = "rule-SelectedRow";
     public static String styleEvenRow = "rule-ListEvenRow";
+    
     public static String styleList = "rule-List";
     
     
@@ -92,9 +93,8 @@
 		}
         
         //and do the zebra striping
-        if (rowIndex % 2 == 0) {           
-            getCellFormatter().setStyleName( rowIndex, colIndex, styleEvenRow  );
-        }
+        resetStyle( rowIndex,
+                    colIndex );
         
 		if((rowIndex-1) >= this.tableRows.size() || null == tableRows.get(rowIndex-1)){
 			tableRows.add(rowIndex-1, new RowData());
@@ -102,13 +102,20 @@
 		
 		RowData rowData = (RowData)this.tableRows.get(rowIndex-1); 
 		rowData.addColumnValue(colIndex, value);
-		this.setHTML(rowIndex, colIndex, "" + value.toString()+ "");
+		this.setText(rowIndex, colIndex, "" + value.toString()+ "");
         
         //and hiding the required column
         if (colIndex == hideColumnIndex) {
             getCellFormatter().setVisible( rowIndex, colIndex, false );
         }
 	}
+
+    private void resetStyle(int rowIndex,
+                            int colIndex) {
+        if (rowIndex % 2 == 0) {           
+            getCellFormatter().setStyleName( rowIndex, colIndex, styleEvenRow  );
+        } 
+    }
     
 
     /** This performs the sorting */
@@ -144,8 +151,17 @@
      */
     private void styleSelectedRow(int row) {
         if (row != 0) {
-            getRowFormatter().addStyleName( row , styleSelectedRow );
-            getRowFormatter().removeStyleName( selectedRow, styleSelectedRow );
+            CellFormatter formatter = getCellFormatter();
+            for (int i=1; i < this.getColumnCount(); i++ ) {
+                formatter.setStyleName( row, i, styleSelectedRow );
+                
+                if (selectedRow % 2 == 0 && selectedRow != 0) {
+                    formatter.setStyleName( selectedRow, i, styleEvenRow );
+                } else {
+                    formatter.removeStyleName( selectedRow, i, styleSelectedRow );
+                }
+            }
+            
             selectedRow = row;
         }
     }
@@ -156,6 +172,13 @@
     public int getSelectedRow() {
         return this.selectedRow;
     }
+    
+    /**
+     * This will return the key of the selected row.
+     */
+    public String getSelectedKey() {
+        return this.getText( selectedRow, this.hideColumnIndex );
+    }
          
     /**
      * This actually kicks off the sorting.
@@ -280,7 +303,7 @@
 				for(int colIndex=0; colIndex<columns.getColumnValues().size(); colIndex++){
 					Object value = columns.getColumnValue(colIndex);
 					if(null != value){
-						this.setHTML(rowIndex+1, colIndex, value.toString());
+						this.setText(rowIndex+1, colIndex, value.toString());
 					}
 				}
 			}
@@ -291,7 +314,7 @@
 				for(int colIndex=0; colIndex<columns.getColumnValues().size(); colIndex++){
 					Object value = columns.getColumnValue(colIndex);
 					if(null != value){
-						this.setHTML(rowNum, colIndex, value.toString());
+						this.setText(rowNum, colIndex, value.toString());
 					}
 				}
 			}

Added: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/public/images/open_item.gif
===================================================================
(Binary files differ)


Property changes on: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/public/images/open_item.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream




More information about the jboss-svn-commits mailing list