01: /*
02: *
03: * Copyright (c) 2003 Adrian Price. All rights reserved.
04: */
05:
06: package org.obe.engine.util;
07:
08: import java.text.Collator;
09: import java.util.Comparator;
10: import java.util.Locale;
11:
12: /**
13: * Compares objects directly, and strings using a collator.
14: *
15: * @author Adrian Price
16: */
17: public class CollatedComparator implements Comparator {
18: private final Locale _locale;
19: private Collator _collator;
20:
21: public CollatedComparator() {
22: _locale = Locale.getDefault();
23: }
24:
25: public CollatedComparator(Locale locale) {
26: _locale = locale;
27: }
28:
29: public int compare(Object o1, Object o2) {
30: int diff;
31: // If the objects aren't directly comparable, compare them as strings.
32: if (!(o1 instanceof Comparable) || !(o2 instanceof Comparable)) {
33: o1 = o1 == null ? null : o1.toString();
34: o2 = o2 == null ? null : o2.toString();
35: }
36: if (o1 instanceof String && o2 instanceof String) {
37: if (o1 == o2) {
38: diff = 0;
39: } else {
40: if (_collator == null)
41: _collator = Collator.getInstance(_locale);
42:
43: diff = _collator.compare(o1, o2);
44: }
45: } else {
46: diff = Comparators.compare(o1, o2);
47: }
48: return diff;
49: }
50: }
|