KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > jfree > ui > about > SystemPropertiesTableModel


1 /* ========================================================================
2  * JCommon : a free general purpose class library for the Java(tm) platform
3  * ========================================================================
4  *
5  * (C) Copyright 2000-2005, by Object Refinery Limited and Contributors.
6  *
7  * Project Info: http://www.jfree.org/jcommon/index.html
8  *
9  * This library is free software; you can redistribute it and/or modify it
10  * under the terms of the GNU Lesser General Public License as published by
11  * the Free Software Foundation; either version 2.1 of the License, or
12  * (at your option) any later version.
13  *
14  * This library is distributed in the hope that it will be useful, but
15  * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
16  * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
17  * License for more details.
18  *
19  * You should have received a copy of the GNU Lesser General Public
20  * License along with this library; if not, write to the Free Software
21  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
22  * USA.
23  *
24  * [Java is a trademark or registered trademark of Sun Microsystems, Inc.
25  * in the United States and other countries.]
26  *
27  * -------------------------------
28  * SystemPropertiesTableModel.java
29  * -------------------------------
30  * (C) Copyright 2000-2004, by Object Refinery Limited.
31  *
32  * Original Author: David Gilbert (for Object Refinery Limited);
33  * Contributor(s): -;
34  *
35  * $Id: SystemPropertiesTableModel.java,v 1.5 2005/10/18 13:19:13 mungady Exp $
36  *
37  * Changes (from 26-Oct-2001)
38  * --------------------------
39  * 26-Oct-2001 : Changed package to com.jrefinery.ui (DG);
40  * 28-Feb-2001 : Changed package to com.jrefinery.ui.about (DG);
41  * 15-Mar-2002 : Modified to use a ResourceBundle for elements that require localisation (DG);
42  * 08-Oct-2002 : Fixed errors reported by Checkstyle (DG);
43  *
44  */

45
46 package org.jfree.ui.about;
47
48 import java.util.Collections JavaDoc;
49 import java.util.Comparator JavaDoc;
50 import java.util.Iterator JavaDoc;
51 import java.util.List JavaDoc;
52 import java.util.Properties JavaDoc;
53 import java.util.ResourceBundle JavaDoc;
54
55 import org.jfree.ui.SortableTableModel;
56
57 /**
58  * A sortable table model containing the system properties.
59  *
60  * @author David Gilbert
61  */

62 public class SystemPropertiesTableModel extends SortableTableModel {
63
64     /**
65      * Useful class for holding the name and value of a system property.
66      *
67      */

68     protected static class SystemProperty {
69
70         /** The property name. */
71         private String JavaDoc name;
72
73         /** The property value. */
74         private String JavaDoc value;
75
76         /**
77          * Standard constructor - builds a new SystemProperty.
78          *
79          * @param name the property name.
80          * @param value the property value.
81          */

82         public SystemProperty(final String JavaDoc name, final String JavaDoc value) {
83                 this.name = name;
84                 this.value = value;
85         }
86
87         /**
88          * Returns the property name.
89          *
90          * @return the property name.
91          */

92         public String JavaDoc getName() {
93             return this.name;
94         }
95
96         /**
97          * Returns the property value.
98          *
99          * @return the property value.
100          */

101         public String JavaDoc getValue() {
102             return this.value;
103         }
104
105     }
106
107     /**
108      * A class for comparing SystemProperty objects.
109      *
110      */

111     protected static class SystemPropertyComparator implements Comparator JavaDoc {
112
113         /** Indicates the sort order. */
114         private boolean ascending;
115
116         /**
117          * Standard constructor.
118          *
119          * @param ascending a flag that controls the sort order (ascending or descending).
120          */

121         public SystemPropertyComparator(final boolean ascending) {
122             this.ascending = ascending;
123         }
124
125         /**
126          * Compares two objects.
127          *
128          * @param o1 the first object.
129          * @param o2 the second object.
130          *
131          * @return an integer that indicates the relative order of the objects.
132          */

133         public int compare(final Object JavaDoc o1, final Object JavaDoc o2) {
134
135             if ((o1 instanceof SystemProperty) && (o2 instanceof SystemProperty)) {
136                 final SystemProperty sp1 = (SystemProperty) o1;
137                 final SystemProperty sp2 = (SystemProperty) o2;
138                 if (this.ascending) {
139                     return sp1.getName().compareTo(sp2.getName());
140                 }
141                 else {
142                     return sp2.getName().compareTo(sp1.getName());
143                 }
144             }
145             else {
146                 return 0;
147             }
148
149         }
150
151         /**
152          * Returns <code>true</code> if this object is equal to the specified object, and
153          * <code>false</code> otherwise.
154          *
155          * @param o the other object.
156          *
157          * @return A boolean.
158          */

159         public boolean equals(final Object JavaDoc o) {
160             if (this == o) {
161                 return true;
162             }
163             if (!(o instanceof SystemPropertyComparator)) {
164                 return false;
165             }
166
167             final SystemPropertyComparator systemPropertyComparator = (SystemPropertyComparator) o;
168
169             if (this.ascending != systemPropertyComparator.ascending) {
170                 return false;
171             }
172
173             return true;
174         }
175
176         /**
177          * Returns a hash code value for the object.
178          *
179          * @return the hashcode
180          */

181         public int hashCode() {
182             return (this.ascending ? 1 : 0);
183         }
184     }
185
186     /** Storage for the properties. */
187     private List JavaDoc properties;
188
189     /** Localised name column label. */
190     private String JavaDoc nameColumnLabel;
191
192     /** Localised property column label. */
193     private String JavaDoc valueColumnLabel;
194
195     /**
196      * Creates a new table model using the properties of the current Java Virtual Machine.
197      */

198     public SystemPropertiesTableModel() {
199
200         this.properties = new java.util.ArrayList JavaDoc();
201         try {
202             final Properties JavaDoc p = System.getProperties();
203             final Iterator JavaDoc iterator = p.keySet().iterator();
204             while (iterator.hasNext()) {
205                 final String JavaDoc name = (String JavaDoc) iterator.next();
206                     final String JavaDoc value = System.getProperty(name);
207                     final SystemProperty sp = new SystemProperty(name, value);
208                     this.properties.add(sp);
209             }
210         }
211         catch (SecurityException JavaDoc se) {
212             // ignore SecurityExceptions
213
}
214
215         Collections.sort(this.properties, new SystemPropertyComparator(true));
216
217         final String JavaDoc baseName = "org.jfree.ui.about.resources.AboutResources";
218         final ResourceBundle JavaDoc resources = ResourceBundle.getBundle(baseName);
219
220         this.nameColumnLabel = resources.getString("system-properties-table.column.name");
221         this.valueColumnLabel = resources.getString("system-properties-table.column.value");
222
223     }
224
225     /**
226      * Returns true for the first column, and false otherwise - sorting is only allowed on the
227      * first column.
228      *
229      * @param column the column index.
230      *
231      * @return true for column 0, and false for all other columns.
232      */

233     public boolean isSortable(final int column) {
234
235         if (column == 0) {
236             return true;
237         }
238         else {
239             return false;
240         }
241
242     }
243
244     /**
245      * Returns the number of rows in the table model (that is, the number of system properties).
246      *
247      * @return the row count.
248      */

249     public int getRowCount() {
250         return this.properties.size();
251     }
252
253     /**
254      * Returns the number of columns in the table model. In this case, there are two columns: one
255      * for the property name, and one for the property value.
256      *
257      * @return the column count (always 2 in this case).
258      */

259     public int getColumnCount() {
260         return 2;
261     }
262
263     /**
264      * Returns the name of the specified column.
265      *
266      * @param column the column index.
267      *
268      * @return the column name.
269      */

270     public String JavaDoc getColumnName(final int column) {
271
272         if (column == 0) {
273             return this.nameColumnLabel;
274         }
275         else {
276             return this.valueColumnLabel;
277         }
278
279     }
280
281     /**
282      * Returns the value at the specified row and column. This method supports the TableModel
283      * interface.
284      *
285      * @param row the row index.
286      * @param column the column index.
287      *
288      * @return the value.
289      */

290     public Object JavaDoc getValueAt(final int row, final int column) {
291
292         final SystemProperty sp = (SystemProperty) this.properties.get(row);
293         if (column == 0) {
294             return sp.getName();
295         }
296         else {
297             if (column == 1) {
298                 return sp.getValue();
299             }
300             else {
301                 return null;
302             }
303         }
304
305     }
306
307     /**
308      * Sorts on the specified column.
309      *
310      * @param column the column index.
311      * @param ascending a flag that controls the sort order.
312      *
313      */

314     public void sortByColumn(final int column, final boolean ascending) {
315
316         if (isSortable(column)) {
317             super.sortByColumn(column, ascending);
318             Collections.sort(this.properties, new SystemPropertyComparator(ascending));
319         }
320
321     }
322
323
324 }
325
Popular Tags