home *** CD-ROM | disk | FTP | other *** search
/ Australian PC Authority 1999 May / may1999.iso / May / JBUILDER / JSAMPLES.Z / TableSorter.class (.txt) < prev    next >
Encoding:
Java Class File  |  1998-04-30  |  5.2 KB  |  227 lines

  1. import com.sun.java.swing.JTable;
  2. import com.sun.java.swing.event.TableModelEvent;
  3. import com.sun.java.swing.table.JTableHeader;
  4. import com.sun.java.swing.table.TableModel;
  5. import java.awt.Component;
  6. import java.util.Date;
  7. import java.util.Vector;
  8.  
  9. public class TableSorter extends TableMap {
  10.    int[] indexes;
  11.    Vector sortingColumns = new Vector();
  12.    boolean ascending = true;
  13.    int compares;
  14.    // $FF: synthetic field
  15.    static Class class$java$lang$Number;
  16.    // $FF: synthetic field
  17.    static Class class$java$util$Date;
  18.    // $FF: synthetic field
  19.    static Class class$java$lang$String;
  20.    // $FF: synthetic field
  21.    static Class class$java$lang$Boolean;
  22.  
  23.    public TableSorter() {
  24.       this.indexes = new int[0];
  25.    }
  26.  
  27.    public TableSorter(TableModel var1) {
  28.       this.setModel(var1);
  29.    }
  30.  
  31.    public void setModel(TableModel var1) {
  32.       super.setModel(var1);
  33.       this.reallocateIndexes();
  34.    }
  35.  
  36.    public int compareRowsByColumn(int var1, int var2, int var3) {
  37.       Class var4 = super.model.getColumnClass(var3);
  38.       TableModel var5 = super.model;
  39.       Object var6 = var5.getValueAt(var1, var3);
  40.       Object var7 = var5.getValueAt(var2, var3);
  41.       if (var6 == null && var7 == null) {
  42.          return 0;
  43.       } else if (var6 == null) {
  44.          return -1;
  45.       } else if (var7 == null) {
  46.          return 1;
  47.       } else if (var4.getSuperclass() == (class$java$lang$Number != null ? class$java$lang$Number : (class$java$lang$Number = class$("java.lang.Number")))) {
  48.          Number var17 = (Number)var5.getValueAt(var1, var3);
  49.          double var21 = var17.doubleValue();
  50.          Number var26 = (Number)var5.getValueAt(var2, var3);
  51.          double var28 = var26.doubleValue();
  52.          if (var21 < var28) {
  53.             return -1;
  54.          } else {
  55.             return var21 > var28 ? 1 : 0;
  56.          }
  57.       } else if (var4 == (class$java$util$Date != null ? class$java$util$Date : (class$java$util$Date = class$("java.util.Date")))) {
  58.          Date var16 = (Date)var5.getValueAt(var1, var3);
  59.          long var20 = var16.getTime();
  60.          Date var25 = (Date)var5.getValueAt(var2, var3);
  61.          long var27 = var25.getTime();
  62.          if (var20 < var27) {
  63.             return -1;
  64.          } else {
  65.             return var20 > var27 ? 1 : 0;
  66.          }
  67.       } else if (var4 == (class$java$lang$String != null ? class$java$lang$String : (class$java$lang$String = class$("java.lang.String")))) {
  68.          String var15 = (String)var5.getValueAt(var1, var3);
  69.          String var19 = (String)var5.getValueAt(var2, var3);
  70.          int var23 = var15.compareTo(var19);
  71.          if (var23 < 0) {
  72.             return -1;
  73.          } else {
  74.             return var23 > 0 ? 1 : 0;
  75.          }
  76.       } else if (var4 == (class$java$lang$Boolean != null ? class$java$lang$Boolean : (class$java$lang$Boolean = class$("java.lang.Boolean")))) {
  77.          Boolean var14 = (Boolean)var5.getValueAt(var1, var3);
  78.          boolean var18 = var14;
  79.          Boolean var22 = (Boolean)var5.getValueAt(var2, var3);
  80.          boolean var24 = var22;
  81.          if (var18 == var24) {
  82.             return 0;
  83.          } else {
  84.             return var18 ? 1 : -1;
  85.          }
  86.       } else {
  87.          Object var8 = var5.getValueAt(var1, var3);
  88.          String var9 = var8.toString();
  89.          Object var10 = var5.getValueAt(var2, var3);
  90.          String var11 = var10.toString();
  91.          int var12 = var9.compareTo(var11);
  92.          if (var12 < 0) {
  93.             return -1;
  94.          } else {
  95.             return var12 > 0 ? 1 : 0;
  96.          }
  97.       }
  98.    }
  99.  
  100.    public int compare(int var1, int var2) {
  101.       ++this.compares;
  102.  
  103.       for(int var3 = 0; var3 < this.sortingColumns.size(); ++var3) {
  104.          Integer var4 = (Integer)this.sortingColumns.elementAt(var3);
  105.          int var5 = this.compareRowsByColumn(var1, var2, var4);
  106.          if (var5 != 0) {
  107.             if (this.ascending) {
  108.                return var5;
  109.             }
  110.  
  111.             return -var5;
  112.          }
  113.       }
  114.  
  115.       return 0;
  116.    }
  117.  
  118.    public void reallocateIndexes() {
  119.       int var1 = super.model.getRowCount();
  120.       this.indexes = new int[var1];
  121.  
  122.       for(int var2 = 0; var2 < var1; this.indexes[var2] = var2++) {
  123.       }
  124.  
  125.    }
  126.  
  127.    public void tableChanged(TableModelEvent var1) {
  128.       System.out.println("Sorter: tableChanged");
  129.       this.reallocateIndexes();
  130.       super.tableChanged(var1);
  131.    }
  132.  
  133.    public void checkModel() {
  134.       if (this.indexes.length != super.model.getRowCount()) {
  135.          System.err.println("Sorter not informed of a change in model.");
  136.       }
  137.  
  138.    }
  139.  
  140.    public void sort(Object var1) {
  141.       this.checkModel();
  142.       this.compares = 0;
  143.       this.shuttlesort((int[])this.indexes.clone(), this.indexes, 0, this.indexes.length);
  144.       System.out.println("Compares: " + this.compares);
  145.    }
  146.  
  147.    public void n2sort() {
  148.       for(int var1 = 0; var1 < ((TableMap)this).getRowCount(); ++var1) {
  149.          for(int var2 = var1 + 1; var2 < ((TableMap)this).getRowCount(); ++var2) {
  150.             if (this.compare(this.indexes[var1], this.indexes[var2]) == -1) {
  151.                this.swap(var1, var2);
  152.             }
  153.          }
  154.       }
  155.  
  156.    }
  157.  
  158.    public void shuttlesort(int[] var1, int[] var2, int var3, int var4) {
  159.       if (var4 - var3 >= 2) {
  160.          int var5 = (var3 + var4) / 2;
  161.          this.shuttlesort(var2, var1, var3, var5);
  162.          this.shuttlesort(var2, var1, var5, var4);
  163.          int var6 = var3;
  164.          int var7 = var5;
  165.          if (var4 - var3 >= 4 && this.compare(var1[var5 - 1], var1[var5]) <= 0) {
  166.             for(int var9 = var3; var9 < var4; ++var9) {
  167.                var2[var9] = var1[var9];
  168.             }
  169.  
  170.          } else {
  171.             for(int var8 = var3; var8 < var4; ++var8) {
  172.                if (var7 < var4 && (var6 >= var5 || this.compare(var1[var6], var1[var7]) > 0)) {
  173.                   var2[var8] = var1[var7++];
  174.                } else {
  175.                   var2[var8] = var1[var6++];
  176.                }
  177.             }
  178.  
  179.          }
  180.       }
  181.    }
  182.  
  183.    public void swap(int var1, int var2) {
  184.       int var3 = this.indexes[var1];
  185.       this.indexes[var1] = this.indexes[var2];
  186.       this.indexes[var2] = var3;
  187.    }
  188.  
  189.    public Object getValueAt(int var1, int var2) {
  190.       this.checkModel();
  191.       return super.model.getValueAt(this.indexes[var1], var2);
  192.    }
  193.  
  194.    public void setValueAt(Object var1, int var2, int var3) {
  195.       this.checkModel();
  196.       super.model.setValueAt(var1, this.indexes[var2], var3);
  197.    }
  198.  
  199.    public void sortByColumn(int var1) {
  200.       this.sortByColumn(var1, true);
  201.    }
  202.  
  203.    public void sortByColumn(int var1, boolean var2) {
  204.       this.ascending = var2;
  205.       this.sortingColumns.removeAllElements();
  206.       this.sortingColumns.addElement(new Integer(var1));
  207.       this.sort(this);
  208.       super.tableChanged(new TableModelEvent(this));
  209.    }
  210.  
  211.    public void addMouseListenerToHeaderInTable(JTable var1) {
  212.       var1.setColumnSelectionAllowed(false);
  213.       TableSorter$1 var4 = new TableSorter$1(this, var1);
  214.       JTableHeader var5 = var1.getTableHeader();
  215.       ((Component)var5).addMouseListener(var4);
  216.    }
  217.  
  218.    // $FF: synthetic method
  219.    static Class class$(String var0) {
  220.       try {
  221.          return Class.forName(var0);
  222.       } catch (ClassNotFoundException var2) {
  223.          throw new NoClassDefFoundError(((Throwable)var2).getMessage());
  224.       }
  225.    }
  226. }
  227.