01: package com.jidesoft.comparator;
02:
03: import java.util.Comparator;
04:
05: /**
06: * Comparator for boolean type. This is a singleton class. Call getInstance() to
07: * get the comparator.
08: */
09: public class BooleanComparator implements Comparator {
10: private static BooleanComparator singleton = null;
11:
12: /**
13: * Constructor.
14: * <p/>
15: * Has protected access to prevent other clients creating instances of the
16: * class ... it is stateless so we need only one instance.
17: */
18: protected BooleanComparator() {
19: }
20:
21: /**
22: * Returns <tt>BooleanComparator</tt> singleton.
23: *
24: * @return an instance of BooleanComparator.
25: */
26: public static BooleanComparator getInstance() {
27: if (singleton == null)
28: singleton = new BooleanComparator();
29: return singleton;
30: }
31:
32: /**
33: * Compares two <tt>Boolean</tt>s. False is treated as being less than True.
34: *
35: * @param o1 the first object to be compared
36: * @param o2 the second object to be compared
37: * @return 0 if a and b are equal, -1 if a is less than b, 1 if a is more than b
38: */
39: public int compare(Object o1, Object o2) {
40: if (o1 == null && o2 == null) {
41: return 0;
42: } else if (o1 == null) {
43: return -1;
44: } else if (o2 == null) {
45: return 1;
46: }
47:
48: if (o1 instanceof Boolean) {
49: if (o2 instanceof Boolean) {
50: final boolean b1 = (Boolean) o1;
51: final boolean b2 = (Boolean) o2;
52:
53: if (b1 == b2)
54: return 0;
55: else if (b1) // Define false < true
56: return 1;
57: else
58: return -1;
59: } else {
60: // o2 wasn't comparable
61: throw new ClassCastException(
62: "The first argument of this method was not a Boolean but "
63: + o2.getClass().getName());
64: }
65: } else if (o2 instanceof Boolean) {
66: // o1 wasn't comparable
67: throw new ClassCastException(
68: "The second argument of this method was not a Boolean but "
69: + o1.getClass().getName());
70: } else {
71: // neither were comparable
72: throw new ClassCastException(
73: "Both arguments of this method were not Booleans. They are "
74: + o1.getClass().getName() + " and "
75: + o2.getClass().getName());
76: }
77: }
78: }
|