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 }