Docjar: A Java Source and Docuemnt Enginecom.*    java.*    javax.*    org.*    all    new    plug-in

Quick Search    Search Deep

Source code: org/alicebot/server/core/targeting/gui/TableSorter.java


1   // Decompiled by Jad v1.5.8c. Copyright 2001 Pavel Kouznetsov.
2   // Jad home page: http://www.geocities.com/kpdus/jad.html
3   // Decompiler options: packimports(3) 
4   
5   package org.alicebot.server.core.targeting.gui;
6   
7   import java.awt.event.MouseAdapter;
8   import java.awt.event.MouseEvent;
9   import java.util.Date;
10  import java.util.Vector;
11  import javax.swing.JTable;
12  import javax.swing.event.TableModelEvent;
13  import javax.swing.table.*;
14  import org.alicebot.server.core.util.Trace;
15  
16  // Referenced classes of package org.alicebot.server.core.targeting.gui:
17  //            TableMap
18  
19  public class TableSorter extends TableMap
20  {
21  
22      public TableSorter()
23      {
24          sortingColumns = new Vector();
25          ascending = true;
26          indexes = new int[0];
27      }
28  
29      public TableSorter(TableModel tablemodel)
30      {
31          sortingColumns = new Vector();
32          ascending = true;
33          setModel(tablemodel);
34      }
35  
36      public void setModel(TableModel tablemodel)
37      {
38          super.setModel(tablemodel);
39          reallocateIndexes();
40      }
41  
42      public int compareRowsByColumn(int i, int j, int k)
43      {
44          Class class1 = model.getColumnClass(k);
45          TableModel tablemodel = model;
46          Object obj = tablemodel.getValueAt(i, k);
47          Object obj1 = tablemodel.getValueAt(j, k);
48          if(obj == null && obj1 == null)
49              return 0;
50          if(obj == null)
51              return -1;
52          if(obj1 == null)
53              return 1;
54          if(class1.getSuperclass() == (java.lang.Number.class))
55          {
56              Number number = (Number)tablemodel.getValueAt(i, k);
57              double d = number.doubleValue();
58              Number number1 = (Number)tablemodel.getValueAt(j, k);
59              double d1 = number1.doubleValue();
60              if(d < d1)
61                  return -1;
62              return d <= d1 ? 0 : 1;
63          }
64          if(class1 == (java.util.Date.class))
65          {
66              Date date = (Date)tablemodel.getValueAt(i, k);
67              long l = date.getTime();
68              Date date1 = (Date)tablemodel.getValueAt(j, k);
69              long l1 = date1.getTime();
70              if(l < l1)
71                  return -1;
72              return l <= l1 ? 0 : 1;
73          }
74          if(class1 == (java.lang.String.class))
75          {
76              String s = (String)tablemodel.getValueAt(i, k);
77              String s1 = (String)tablemodel.getValueAt(j, k);
78              int i1 = s.compareTo(s1);
79              if(i1 < 0)
80                  return -1;
81              return i1 <= 0 ? 0 : 1;
82          }
83          if(class1 == (java.lang.Boolean.class))
84          {
85              Boolean boolean1 = (Boolean)tablemodel.getValueAt(i, k);
86              boolean flag = boolean1.booleanValue();
87              Boolean boolean2 = (Boolean)tablemodel.getValueAt(j, k);
88              boolean flag1 = boolean2.booleanValue();
89              if(flag == flag1)
90                  return 0;
91              return !flag ? -1 : 1;
92          }
93          Object obj2 = tablemodel.getValueAt(i, k);
94          String s2 = obj2.toString();
95          Object obj3 = tablemodel.getValueAt(j, k);
96          String s3 = obj3.toString();
97          int j1 = s2.compareTo(s3);
98          if(j1 < 0)
99              return -1;
100         return j1 <= 0 ? 0 : 1;
101     }
102 
103     public int compare(int i, int j)
104     {
105         compares++;
106         for(int k = 0; k < sortingColumns.size(); k++)
107         {
108             Integer integer = (Integer)sortingColumns.elementAt(k);
109             int l = compareRowsByColumn(i, j, integer.intValue());
110             if(l != 0)
111                 return ascending ? l : -l;
112         }
113 
114         return 0;
115     }
116 
117     public void reallocateIndexes()
118     {
119         int i = model.getRowCount();
120         indexes = new int[i];
121         for(int j = 0; j < i; j++)
122             indexes[j] = j;
123 
124     }
125 
126     public void tableChanged(TableModelEvent tablemodelevent)
127     {
128         reallocateIndexes();
129         super.tableChanged(tablemodelevent);
130     }
131 
132     public void checkModel()
133     {
134         if(indexes.length != model.getRowCount())
135             Trace.devinfo("Sorter not informed of a change in model.");
136     }
137 
138     public void sort(Object obj)
139     {
140         checkModel();
141         compares = 0;
142         shuttlesort((int[])indexes.clone(), indexes, 0, indexes.length);
143     }
144 
145     public void n2sort()
146     {
147         for(int i = 0; i < getRowCount(); i++)
148         {
149             for(int j = i + 1; j < getRowCount(); j++)
150                 if(compare(indexes[i], indexes[j]) == -1)
151                     swap(i, j);
152 
153         }
154 
155     }
156 
157     public void shuttlesort(int ai[], int ai1[], int i, int j)
158     {
159         if(j - i < 2)
160             return;
161         int k = (i + j) / 2;
162         shuttlesort(ai1, ai, i, k);
163         shuttlesort(ai1, ai, k, j);
164         int l = i;
165         int i1 = k;
166         if(j - i >= 4 && compare(ai[k - 1], ai[k]) <= 0)
167         {
168             for(int j1 = i; j1 < j; j1++)
169                 ai1[j1] = ai[j1];
170 
171             return;
172         }
173         for(int k1 = i; k1 < j; k1++)
174             if(i1 >= j || l < k && compare(ai[l], ai[i1]) <= 0)
175                 ai1[k1] = ai[l++];
176             else
177                 ai1[k1] = ai[i1++];
178 
179     }
180 
181     public void swap(int i, int j)
182     {
183         int k = indexes[i];
184         indexes[i] = indexes[j];
185         indexes[j] = k;
186     }
187 
188     public Object getValueAt(int i, int j)
189     {
190         checkModel();
191         return model.getValueAt(indexes[i], j);
192     }
193 
194     public void setValueAt(Object obj, int i, int j)
195     {
196         checkModel();
197         model.setValueAt(obj, indexes[i], j);
198     }
199 
200     public void sortByColumn(int i)
201     {
202         sortByColumn(i, true);
203     }
204 
205     public void sortByColumn(int i, boolean flag)
206     {
207         ascending = flag;
208         sortingColumns.removeAllElements();
209         sortingColumns.addElement(new Integer(i));
210         sort(this);
211         super.tableChanged(new TableModelEvent(this));
212     }
213 
214     public void addMouseListenerToHeaderInTable(JTable jtable)
215     {
216         final TableSorter sorter = this;
217         final JTable tableView = jtable;
218         tableView.setColumnSelectionAllowed(false);
219         MouseAdapter mouseadapter = new MouseAdapter() {
220 
221             public void mouseClicked(MouseEvent mouseevent)
222             {
223                 TableColumnModel tablecolumnmodel = tableView.getColumnModel();
224                 int i = tablecolumnmodel.getColumnIndexAtX(mouseevent.getX());
225                 int j = tableView.convertColumnIndexToModel(i);
226                 if(mouseevent.getClickCount() == 1 && j != -1)
227                 {
228                     int k = mouseevent.getModifiers() & 1;
229                     boolean flag = k == 0;
230                     sorter.sortByColumn(j, flag);
231                 }
232             }
233 
234         };
235         JTableHeader jtableheader = tableView.getTableHeader();
236         jtableheader.addMouseListener(mouseadapter);
237     }
238 
239     int indexes[];
240     Vector sortingColumns;
241     boolean ascending;
242     int compares;
243 }