Author: scooter
Date: 2011-06-07 21:38:48 -0700 (Tue, 07 Jun 2011)
New Revision: 25672

Removed:
   
cytoscape/trunk/coreplugins/browser/src/main/java/browser/DefaultSortTableModel.java
Modified:
   
cytoscape/trunk/coreplugins/browser/src/main/java/browser/ColumnComparator.java
   cytoscape/trunk/coreplugins/browser/src/main/java/browser/DataTableModel.java
Log:
Fix table sorting


Modified: 
cytoscape/trunk/coreplugins/browser/src/main/java/browser/ColumnComparator.java
===================================================================
--- 
cytoscape/trunk/coreplugins/browser/src/main/java/browser/ColumnComparator.java 
    2011-06-08 02:12:23 UTC (rev 25671)
+++ 
cytoscape/trunk/coreplugins/browser/src/main/java/browser/ColumnComparator.java 
    2011-06-08 04:38:48 UTC (rev 25672)
@@ -16,12 +16,15 @@
 import java.util.Vector;
 
 
+import cytoscape.data.CyAttributes;
+
 /**
  *
  */
 public class ColumnComparator implements Comparator {
        private static final int EMPTY_STR_LENGTH = 2;
        protected int index;
+       protected byte internalColumnType;
        protected boolean ascending;
 
        /**
@@ -30,8 +33,9 @@
         * @param index  DOCUMENT ME!
         * @param ascending  DOCUMENT ME!
         */
-       public ColumnComparator(final int index, final boolean ascending) {
+       public ColumnComparator(final int index, final byte type, final boolean 
ascending) {
                this.index = index;
+               this.internalColumnType = type;
                this.ascending = ascending;
        }
 
@@ -54,31 +58,33 @@
                                return 1;
                        } else if (secondObj == null) {
                                return -1;
-                       } else if (firstObj instanceof Comparable && secondObj 
instanceof Comparable) {
-                               final Comparable firstComparableObj = 
(Comparable) firstObj;
-                               final Comparable secondComparableObj = 
(Comparable) secondObj;
+                       } else if (firstObj instanceof 
ValidatedObjectAndEditString && secondObj instanceof 
ValidatedObjectAndEditString) {
+                               final ValidatedObjectAndEditString v1 = 
(ValidatedObjectAndEditString) firstObj;
+                               final ValidatedObjectAndEditString v2 = 
(ValidatedObjectAndEditString) secondObj;
+                               final String errorText1 = v1.getErrorText();
+                               final String errorText2 = v2.getErrorText();
+                               if (errorText1 != null && errorText2 != null)
+                                       return ascending ? 
errorText1.compareToIgnoreCase(errorText2) : 
errorText2.compareToIgnoreCase(errorText1);
+                               if (errorText2 != null)
+                                       return ascending? 1: -1;
+                               if (errorText1 != null)
+                                       return ascending? -1: 1;
+                               final Object val1 = v1.getValidatedObject();
+                               final Object val2 = v2.getValidatedObject();
 
-                               /*
-                                * If these values are Strings, treat empty 
values as null.
-                                */
-                               if (firstComparableObj instanceof String && 
secondComparableObj instanceof String) {
-                                       final int firstLength = ((String) 
firstComparableObj).trim().length();
-                                       final int secondLength = ((String) 
secondComparableObj).trim().length();
+                               if (internalColumnType == 
CyAttributes.TYPE_FLOATING)
+                                       return ascending ? 
doubleCompare((double)(Double)val1, (double)(Double)val2) :
+                                                          
doubleCompare((double)(Double)val2, (double)(Double)val1);
+                               if (internalColumnType == 
CyAttributes.TYPE_INTEGER)
+                                       return ascending ? 
integerCompare((int)(Integer)val1, (int)(Integer)val2) :
+                                                          
integerCompare((int)(Integer)val2, (int)(Integer)val1);
 
-                                       if ((firstLength == 0) && (secondLength 
== 0)) {
-                                               return 0;
-                                       } else if (firstLength == 0) {
-                                               return 1;
-                                       } else if (secondLength == 0) {
-                                               return -1;
-                                       } else {
-                                               return ascending ? 
firstComparableObj.compareTo(secondComparableObj)
-                                                                : 
secondComparableObj.compareTo(firstComparableObj);
-                                       }
-                               } else {
-                                       return ascending ? 
firstComparableObj.compareTo(secondComparableObj)
-                                                        : 
secondComparableObj.compareTo(firstComparableObj);
-                               }
+                               if (internalColumnType == 
CyAttributes.TYPE_BOOLEAN)
+                                       return ascending ? 
booleanCompare((boolean)(Boolean)val1, (boolean)(Boolean)val2) :
+                                                          
booleanCompare((boolean)(Boolean)val2, (boolean)(Boolean)val1);
+
+                               return ascending ? 
stringCompare(val1.toString(), val2.toString()):
+                                                  
stringCompare(val2.toString(), val1.toString());
                        } else {
                                /*
                                 * If not primitive, just compare as String
@@ -101,6 +107,34 @@
                return 1;
        }
 
+       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 int i1, int 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);
+       }
+
        /**
         * Comparing numbers.
         *

Modified: 
cytoscape/trunk/coreplugins/browser/src/main/java/browser/DataTableModel.java
===================================================================
--- 
cytoscape/trunk/coreplugins/browser/src/main/java/browser/DataTableModel.java   
    2011-06-08 02:12:23 UTC (rev 25671)
+++ 
cytoscape/trunk/coreplugins/browser/src/main/java/browser/DataTableModel.java   
    2011-06-08 04:38:48 UTC (rev 25672)
@@ -462,6 +462,11 @@
                return CyAttributesUtils.getClass(colName, data);
        }
 
+       public byte getObjectTypeAt(int col) {
+               String columnName = getColumnName(col);
+               return data.getType(columnName);
+       }
+
        /**
         *  DOCUMENT ME!
         *
@@ -480,7 +485,7 @@
         * @param ascending DOCUMENT ME!
         */
        public void sortColumn(int col, boolean ascending) {
-               Collections.sort(getDataVector(), new ColumnComparator(col, 
ascending));
+               Collections.sort(getDataVector(), new ColumnComparator(col, 
getObjectTypeAt(col), ascending));
        }
 
        /**

Deleted: 
cytoscape/trunk/coreplugins/browser/src/main/java/browser/DefaultSortTableModel.java
===================================================================
--- 
cytoscape/trunk/coreplugins/browser/src/main/java/browser/DefaultSortTableModel.java
        2011-06-08 02:12:23 UTC (rev 25671)
+++ 
cytoscape/trunk/coreplugins/browser/src/main/java/browser/DefaultSortTableModel.java
        2011-06-08 04:38:48 UTC (rev 25672)
@@ -1,124 +0,0 @@
-/*
- * $Archive: SourceJammer$
- * $FileName: DefaultSortTableModel.java$
- * $FileID: 3982$
- *
- * Last change:
- * $AuthorName: Timo Haberkern$
- * $Date$
- * $Comment: $
- *
- * $KeyWordsOff: $
- */
-
-/*
-=====================================================================
-
-  DefaultSortTableModel.java
-
-  Created by Claude Duguay
-  Copyright (c) 2002
-
-=====================================================================
-*/
-package browser;
-
-import java.util.Collections;
-import java.util.Vector;
-
-import javax.swing.table.DefaultTableModel;
-
-
-/**
- *
- */
-public class DefaultSortTableModel extends DefaultTableModel implements 
SortTableModel {
-       /**
-        * Creates a new DefaultSortTableModel object.
-        */
-       public DefaultSortTableModel() {
-       }
-
-       /**
-        * Creates a new DefaultSortTableModel object.
-        *
-        * @param rows  DOCUMENT ME!
-        * @param cols  DOCUMENT ME!
-        */
-       public DefaultSortTableModel(int rows, int cols) {
-               super(rows, cols);
-       }
-
-       /**
-        * Creates a new DefaultSortTableModel object.
-        *
-        * @param data  DOCUMENT ME!
-        * @param names  DOCUMENT ME!
-        */
-       public DefaultSortTableModel(Object[][] data, Object[] names) {
-               super(data, names);
-       }
-
-       /**
-        * Creates a new DefaultSortTableModel object.
-        *
-        * @param names  DOCUMENT ME!
-        * @param rows  DOCUMENT ME!
-        */
-       public DefaultSortTableModel(Object[] names, int rows) {
-               super(names, rows);
-       }
-
-       /**
-        * Creates a new DefaultSortTableModel object.
-        *
-        * @param names  DOCUMENT ME!
-        * @param rows  DOCUMENT ME!
-        */
-       public DefaultSortTableModel(Vector names, int rows) {
-               super(names, rows);
-       }
-
-       /**
-        * Creates a new DefaultSortTableModel object.
-        *
-        * @param data  DOCUMENT ME!
-        * @param names  DOCUMENT ME!
-        */
-       public DefaultSortTableModel(Vector data, Vector names) {
-               super(data, names);
-       }
-
-       /**
-        *  DOCUMENT ME!
-        *
-        * @param col DOCUMENT ME!
-        *
-        * @return  DOCUMENT ME!
-        */
-       public boolean isSortable(int col) {
-               return true;
-       }
-
-       /**
-        *  DOCUMENT ME!
-        *
-        * @param col DOCUMENT ME!
-        * @param ascending DOCUMENT ME!
-        */
-       public void sortColumn(int col, boolean ascending) {
-               Collections.sort(getDataVector(), new ColumnComparator(col, 
ascending));
-       }
-
-       /**
-        *  DOCUMENT ME!
-        *
-        * @param aValue DOCUMENT ME!
-        * @param rowIndex DOCUMENT ME!
-        * @param columnIndex DOCUMENT ME!
-        */
-       public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
-               // System.out.println("SetValueAt: " + aValue + " " + rowIndex 
+ " " + columnIndex);
-               super.setValueAt(aValue, rowIndex, columnIndex);
-       }
-}

-- 
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