Author: ruschein
Date: 2011-05-24 14:46:12 -0700 (Tue, 24 May 2011)
New Revision: 25516

Added:
   
core3/table-browser-impl/trunk/src/main/java/org/cytoscape/browser/internal/ValidatedObjectAndEditStringComparator.java
Modified:
   
core3/table-browser-impl/trunk/src/main/java/org/cytoscape/browser/internal/BrowserTable.java
   
core3/table-browser-impl/trunk/src/main/java/org/cytoscape/browser/internal/BrowserTableModel.java
   
core3/table-browser-impl/trunk/src/main/java/org/cytoscape/browser/internal/TableBrowser.java
Log:
Made row sorting work.

Modified: 
core3/table-browser-impl/trunk/src/main/java/org/cytoscape/browser/internal/BrowserTable.java
===================================================================
--- 
core3/table-browser-impl/trunk/src/main/java/org/cytoscape/browser/internal/BrowserTable.java
       2011-05-24 20:10:14 UTC (rev 25515)
+++ 
core3/table-browser-impl/trunk/src/main/java/org/cytoscape/browser/internal/BrowserTable.java
       2011-05-24 21:46:12 UTC (rev 25516)
@@ -46,7 +46,9 @@
 import javax.swing.table.JTableHeader;
 import javax.swing.table.TableCellEditor;
 import javax.swing.table.TableCellRenderer;
+import javax.swing.table.TableColumn;
 import javax.swing.table.TableModel;
+import javax.swing.table.TableRowSorter;
 
 import org.cytoscape.browser.ui.FormulaBuilderDialog;
 import org.cytoscape.browser.util.HyperLinkOut;
@@ -611,5 +613,18 @@
                        }
                }
        }
+
+       public void addColumn(final TableColumn aColumn) {
+               super.addColumn(aColumn);
+
+               final TableRowSorter rowSorter = (TableRowSorter)getRowSorter();
+               if (rowSorter == null)
+                       return;
+
+               final BrowserTableModel tableModel = 
(BrowserTableModel)getModel();
+               final Class<?> rowDataType = 
tableModel.getColumn(aColumn.getModelIndex()).getType();
+               rowSorter.setComparator(aColumn.getModelIndex(),
+                                       new 
ValidatedObjectAndEditStringComparator(rowDataType));
+       }
 }
 

Modified: 
core3/table-browser-impl/trunk/src/main/java/org/cytoscape/browser/internal/BrowserTableModel.java
===================================================================
--- 
core3/table-browser-impl/trunk/src/main/java/org/cytoscape/browser/internal/BrowserTableModel.java
  2011-05-24 20:10:14 UTC (rev 25515)
+++ 
core3/table-browser-impl/trunk/src/main/java/org/cytoscape/browser/internal/BrowserTableModel.java
  2011-05-24 21:46:12 UTC (rev 25516)
@@ -82,7 +82,7 @@
 
        @Override
        public Class getColumnClass(final int columnIndex) {
-               return Object.class;
+               return ValidatedObjectAndEditString.class;
        }
 
        // Note: return value excludes the primary key of the associated 
CyTable!
@@ -249,8 +249,18 @@
                if (e.getSource() != attrs)
                        return;
 
+System.err.println("******************** in 
BrowserTableModel.handleEvent(ColumnCreatedEvent)");
+System.err.println("******************** \t new columnName = 
"+e.getColumnName());
+try{
                attrNamesAndVisibilities.add(new 
AttrNameAndVisibility(e.getColumnName(), true));
+} catch(final Exception e1) {
+       System.err.println("******************** \t exception (1) was: "+e1);
+}
+try{
                fireTableStructureChanged();
+}catch(final Exception e2) {
+       System.err.println("******************** \t exception (2) was: "+e2);
+}
        }
 
        @Override

Modified: 
core3/table-browser-impl/trunk/src/main/java/org/cytoscape/browser/internal/TableBrowser.java
===================================================================
--- 
core3/table-browser-impl/trunk/src/main/java/org/cytoscape/browser/internal/TableBrowser.java
       2011-05-24 20:10:14 UTC (rev 25515)
+++ 
core3/table-browser-impl/trunk/src/main/java/org/cytoscape/browser/internal/TableBrowser.java
       2011-05-24 21:46:12 UTC (rev 25516)
@@ -15,6 +15,8 @@
 import javax.swing.JPanel;
 import javax.swing.JScrollPane;
 import javax.swing.JTable;
+import javax.swing.event.TableModelEvent;
+import javax.swing.event.TableModelListener;
 import javax.swing.table.DefaultTableModel;
 import javax.swing.table.TableColumn;
 import javax.swing.table.TableColumnModel;
@@ -41,7 +43,8 @@
 
 @SuppressWarnings("serial")
 public class TableBrowser
-       extends JPanel implements CytoPanelComponent, ActionListener, 
NetworkViewAddedListener, TableAboutToBeDeletedListener
+       extends JPanel implements CytoPanelComponent, ActionListener, 
NetworkViewAddedListener,
+                                 TableAboutToBeDeletedListener
 {
        private final CyTableManager tableManager;
        private final CyServiceRegistrar serviceRegistrar;
@@ -146,7 +149,9 @@
                                                                  
tableRowUpdateService);
                        serviceRegistrar.registerAllServices(browserTableModel, 
new Properties());
                        browserTable.setModel(browserTableModel);
-                       browserTable.setRowSorter(new 
TableRowSorter(browserTableModel));
+                       final TableRowSorter rowSorter = new 
TableRowSorter(browserTableModel);
+                       browserTable.setRowSorter(rowSorter);
+                       updateColumnComparators(rowSorter);
                        
attributeBrowserToolBar.setBrowserTableModel(browserTableModel);
                        final TableMetadata tableMetadata = 
tableToMetadataMap.get(currentTable);
                        if (tableMetadata != null) {
@@ -169,16 +174,33 @@
                applicationManager.setCurrentTable(currentTable);
        }
 
+       public void updateColumnComparators(final TableRowSorter rowSorter) {
+               for (int column = 0; column < 
browserTableModel.getColumnCount(); ++column)
+                       rowSorter.setComparator(
+                               column,
+                               new ValidatedObjectAndEditStringComparator(
+                                       
browserTableModel.getColumn(column).getType()));
+       }
+
+       @Override
        public void handleEvent(final NetworkViewAddedEvent e) {
                final CyTable nodeTable = 
e.getNetworkView().getModel().getDefaultNodeTable();
                final MyComboBoxModel comboBoxModel = 
(MyComboBoxModel)tableChooser.getModel();
                comboBoxModel.addAndSetSelectedItem(nodeTable);
        }
 
+       @Override
        public void handleEvent(final TableAboutToBeDeletedEvent e) {
                final CyTable cyTable = e.getTable();
                final MyComboBoxModel comboBoxModel = 
(MyComboBoxModel)tableChooser.getModel();
                comboBoxModel.removeItem(cyTable);
                tableToMetadataMap.remove(cyTable);
        }
+/*
+       @Override
+       public void tableChanged(final TableModelEvent e) {
+               if (e.getFirstRow() == -1)
+                       updateColumnComparators(rowSorter);
+       }
+*/
 }
\ No newline at end of file

Added: 
core3/table-browser-impl/trunk/src/main/java/org/cytoscape/browser/internal/ValidatedObjectAndEditStringComparator.java
===================================================================
--- 
core3/table-browser-impl/trunk/src/main/java/org/cytoscape/browser/internal/ValidatedObjectAndEditStringComparator.java
                             (rev 0)
+++ 
core3/table-browser-impl/trunk/src/main/java/org/cytoscape/browser/internal/ValidatedObjectAndEditStringComparator.java
     2011-05-24 21:46:12 UTC (rev 25516)
@@ -0,0 +1,112 @@
+/*
+ Copyright (c) 2011 The Cytoscape Consortium (www.cytoscape.org)
+
+ This library is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 2.1 of the License, or
+ any later version.
+
+ This library is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF
+ MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  The software and
+ documentation provided hereunder is on an "as is" basis, and the
+ Institute for Systems Biology and the Whitehead Institute
+ have no obligations to provide maintenance, support,
+ updates, enhancements or modifications.  In no event shall the
+ Institute for Systems Biology and the Whitehead Institute
+ be liable to any party for direct, indirect, special,
+ incidental or consequential damages, including lost profits, arising
+ out of the use of this software and its documentation, even if the
+ Institute for Systems Biology and the Whitehead Institute
+ have been advised of the possibility of such damage.  See
+ the GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this library; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+*/
+package org.cytoscape.browser.internal;
+
+
+import java.util.Comparator;
+
+
+public class ValidatedObjectAndEditStringComparator implements 
Comparator<ValidatedObjectAndEditString> {
+       private final Class<?> internalColumnType;
+
+       ValidatedObjectAndEditStringComparator(final Class<?> 
internalColumnType) {
+               this.internalColumnType = internalColumnType;
+       }
+
+       @Override
+       public int compare(final ValidatedObjectAndEditString v1, final 
ValidatedObjectAndEditString v2) {
+               // Deal w/ nulls first:
+               if (v1 == null && v2 == null)
+                       return 0;
+               if (v1 == null)
+                       return -1;
+               if (v2 == null)
+                       return +1;
+
+               // Deal with ValidatedObjectAndEditString objects that must 
display an error message:
+               final String errorText1 = v1.getErrorText();
+               final String errorText2 = v2.getErrorText();
+               if (errorText1 != null && errorText2 != null)
+                       return errorText1.compareToIgnoreCase(errorText2);
+               if (errorText2 != null)
+                       return +1;
+               if (errorText1 != null)
+                       return -1;
+
+               if (internalColumnType == Double.class)
+                       return doubleCompare((Double)v1.getValidatedObject(),
+                                            (Double)v2.getValidatedObject());
+               if (internalColumnType == Long.class)
+                       return longCompare((Long)v1.getValidatedObject(),
+                                          (Long)v2.getValidatedObject());
+               if (internalColumnType == Integer.class)
+                       return integerCompare((Integer)v1.getValidatedObject(),
+                                             (Integer)v2.getValidatedObject());
+
+               if (internalColumnType == Boolean.class)
+                       return booleanCompare((Boolean)v1.getValidatedObject(),
+                                             (Boolean)v2.getValidatedObject());
+
+               return stringCompare(v1.getValidatedObject().toString(),
+                                    v2.getValidatedObject().toString());
+       }
+
+       private static int doubleCompare(final Double d1, final Double d2) {
+               if (d1 < d2)
+                       return -1;
+               return d1 > d2 ? +1 : 0;
+       }
+
+       private static int longCompare(final Long l1, final Long l2) {
+               if (l1 < l2)
+                       return -1;
+               return l1 > l2 ? +1 : 0;
+       }
+
+       private static int integerCompare(final Integer i1, Integer i2) {
+               if (i1 < i2)
+                       return -1;
+               return i1 > i2 ? +1 : 0;
+       }
+
+       private static int booleanCompare(final Boolean b1, final Boolean b2) {
+               if ((b1 && b2) || (!b1 && !b2))
+                       return 0;
+               return b1 ? -1 : +1;
+       }
+
+       private static int stringCompare(final String s1, final String s2) {
+               return s1.compareToIgnoreCase(s2);
+       }
+
+       @Override
+       public boolean equals(final Object obj) {
+               return (obj instanceof ValidatedObjectAndEditStringComparator)
+                       && 
((ValidatedObjectAndEditStringComparator)obj).internalColumnType == 
internalColumnType;
+       }
+}

-- 
You received this message because you are subscribed to the Google Groups 
"cytoscape-cvs" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/cytoscape-cvs?hl=en.

Reply via email to