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.