01: package com.jidesoft.comparator;
02:
03: import java.util.Comparator;
04:
05: /**
06: * Comparator for Number type. This is a singleton class. Call getInstance() to
07: * get the comparator.
08: */
09: public class NumberComparator implements Comparator {
10: private static NumberComparator 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 NumberComparator() {
19: }
20:
21: /**
22: * Returns <tt>NumberComparator</tt> singleton.
23: *
24: * @return an instance of NumberComparator.
25: */
26: public static NumberComparator getInstance() {
27: if (singleton == null)
28: singleton = new NumberComparator();
29: return singleton;
30: }
31:
32: /**
33: * Compares two <tt>Number</tt>s.
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 Number) {
49: if (o2 instanceof Number) {
50: final double d1 = ((Number) o1).doubleValue();
51: final double d2 = ((Number) o2).doubleValue();
52:
53: if (d1 < d2)
54: return -1;
55: else if (d1 > d2)
56: return 1;
57: else
58: return 0;
59: } else {
60: // o2 wasn't comparable
61: throw new ClassCastException(
62: "The first argument of this method was not a Number but "
63: + o2.getClass().getName());
64: }
65: } else if (o2 instanceof Number) {
66: // o1 wasn't comparable
67: throw new ClassCastException(
68: "The second argument of this method was not a Number but "
69: + o1.getClass().getName());
70: } else {
71: // neither were comparable
72: throw new ClassCastException(
73: "Both arguments of this method were not Numbers. They are "
74: + o1.getClass().getName() + " and "
75: + o2.getClass().getName());
76: }
77: }
78: }
|