Typo: inspect_jpegs, not inspect-jpegs in form
[privoxy.git] / src / java / org / privoxy / activityconsole / TableSorter.java
1 /*********************************************************************
2  *
3  * File        :  $Source$
4  *
5  * Purpose     :  Sorts JTable rows.
6  *
7  * Copyright   :  Written by and Copyright (C) 2003 the SourceForge
8  *                Privoxy team. http://www.privoxy.org/
9  *
10  *                Based on the Internet Junkbuster originally written
11  *                by and Copyright (C) 1997 Anonymous Coders and
12  *                Junkbusters Corporation.  http://www.junkbusters.com
13  *
14  *                This program is free software; you can redistribute it
15  *                and/or modify it under the terms of the GNU General
16  *                Public License as published by the Free Software
17  *                Foundation; either version 2 of the License, or (at
18  *                your option) any later version.
19  *
20  *                This program is distributed in the hope that it will
21  *                be useful, but WITHOUT ANY WARRANTY; without even the
22  *                implied warranty of MERCHANTABILITY or FITNESS FOR A
23  *                PARTICULAR PURPOSE.  See the GNU General Public
24  *                License for more details.
25  *
26  *                The GNU General Public License should be included with
27  *                this file.  If not, you can view it at
28  *                http://www.gnu.org/copyleft/gpl.html
29  *                or write to the Free Software Foundation, Inc., 59
30  *                Temple Place - Suite 330, Boston, MA  02111-1307, USA.
31  *
32  * Revisions   :
33  *    $Log$
34  *********************************************************************/
35
36 package org.privoxy.activityconsole;
37
38 import java.awt.*;
39 import java.util.*;
40 import javax.swing.*;
41 import javax.swing.table.*;
42
43
44 /** 
45  * Sorts JTable rows.
46  * @author Last Modified By: $Author$
47  * @version $Rev$-$Date$$State$
48  */
49 public class TableSorter
50 {
51   private static final String
52   COPYRIGHT = org.privoxy.activityconsole.Copyright.COPYRIGHT;
53
54   SortableTableModel model;
55
56   public TableSorter(SortableTableModel model)
57   {
58     this.model = model;
59   }
60
61
62   //n2 selection
63   public void sort(int column, boolean isAscent)
64   {
65     int n = model.getRowCount();
66     int[] indexes = model.getIndexes();   
67
68     for (int i=0; i<n-1; i++)
69     {
70       int k = i;
71       for (int j=i+1; j<n; j++)
72       {
73         if (isAscent)
74         {
75           if (compare(column, j, k) < 0)
76           {
77             k = j;
78           }
79         }
80         else
81         {
82           if (compare(column, j, k) > 0)
83           {
84             k = j;
85           }
86         }
87       }
88       int tmp = indexes[i];
89       indexes[i] = indexes[k];
90       indexes[k] = tmp;
91     }
92   }
93
94
95   // comparators
96   public int compare(int column, int row1, int row2)
97   {
98     Object o1 = model.getValueAt(row1, column);
99     Object o2 = model.getValueAt(row2, column); 
100     if (o1 == null && o2 == null)
101     {
102       return  0; 
103     }
104     else if (o1 == null)
105     {
106       return -1; 
107     }
108     else if (o2 == null)
109     {
110       return  1; 
111     }
112     else
113     {
114       Class type = model.getColumnClass(column);
115       if (type.getSuperclass() == Number.class)
116       {
117         return compare((Number)o1, (Number)o2);
118       }
119       else if (type == String.class)
120       {
121         return((String)o1).compareTo((String)o2);
122       }
123       else if (type == Date.class)
124       {
125         return compare((Date)o1, (Date)o2);
126       }
127       else if (type == Boolean.class)
128       {
129         return compare((Boolean)o1, (Boolean)o2);
130       }
131       else if (o1 instanceof StatWidget)
132       {
133         return((StatWidget)o1).compareTo((StatWidget)o2);
134       }
135       else
136       {
137         return((String)o1).compareTo((String)o2);
138       }      
139     }
140   }
141
142   public int compare(Number o1, Number o2)
143   {
144     double n1 = o1.doubleValue();
145     double n2 = o2.doubleValue();
146     if (n1 < n2)
147     {
148       return -1;
149     }
150     else if (n1 > n2)
151     {
152       return 1;
153     }
154     else
155     {
156       return 0;
157     }
158   }
159
160   public int compare(Date o1, Date o2)
161   {
162     long n1 = o1.getTime();
163     long n2 = o2.getTime();
164     if (n1 < n2)
165     {
166       return -1;
167     }
168     else if (n1 > n2)
169     {
170       return 1;
171     }
172     else
173     {
174       return 0;
175     }
176   }
177
178   public int compare(Boolean o1, Boolean o2)
179   {
180     boolean b1 = o1.booleanValue();
181     boolean b2 = o2.booleanValue();
182     if (b1 == b2)
183     {
184       return 0;
185     }
186     else if (b1)
187     {
188       return 1;
189     }
190     else
191     {
192       return -1;
193     }
194   }
195 }