1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package net.wotonomy.foundation.internal;
20
21 import java.io.Serializable;
22 import java.util.Comparator;
23
24
25 /***
26 * A Comparator that will sort elements based on the
27 * property specified in the constructor.
28 *
29 * @author michael@mpowers.net
30 * @author $Author: cgruber $
31 * @version $Revision: 893 $
32 */
33 public class PropertyComparator implements Comparator, Serializable
34 {
35 private String property;
36
37 /***
38 * Standard constructor to configure the comparator.
39 * @param aProperty A property whose value is used to sort elements.
40 */
41 public PropertyComparator( String aProperty )
42 {
43 property = aProperty;
44 }
45
46
47
48 public int compare(Object o1, Object o2)
49 {
50 Object v1 = Introspector.get( o1, property );
51 Object v2 = Introspector.get( o2, property );
52 if ( v1 instanceof Comparable )
53 {
54 return ((Comparable)v1).compareTo( v2 );
55 }
56 else
57 if ( v2 instanceof Comparable )
58 {
59 return ((Comparable)v2).compareTo( v1 );
60 }
61 else
62 {
63 if ( v1 == null )
64 {
65 if ( v2 == null )
66 {
67 return 0;
68 }
69 return -1;
70 }
71 else
72 if ( v2 == null )
73 {
74 return 1;
75 }
76 }
77
78 return v1.toString().compareTo( v2.toString() );
79 }
80
81 public boolean equals( Object obj )
82 {
83 return ( obj instanceof PropertyComparator );
84 }
85 }
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100