01: package org.obe.engine.util;
02:
03: import java.text.Collator;
04: import java.util.Locale;
05:
06: /**
07: * Property comparator for objects which may be strings. (Any properties
08: * which are not strings must be Comparable.)
09: * <p/>
10: * This takes a locale in which to sort the strings lexicographically.
11: *
12: * @author Adrian Price
13: */
14: public class CollatedPropertyComparator extends PropertyComparator {
15: private final Locale _locale;
16:
17: private Collator _collator;
18:
19: public CollatedPropertyComparator(Class cls, Class stopClass,
20: String propName, Locale locale) {
21:
22: super (cls, stopClass, propName);
23: _locale = locale;
24: }
25:
26: public CollatedPropertyComparator(Class beanClass, Class stopClass,
27: String[] propNames, Locale locale) {
28:
29: super (beanClass, stopClass, propNames);
30: _locale = locale;
31: }
32:
33: protected int compareProperties(Object o1, Object o2) {
34: int diff;
35: if (o1 instanceof String && o2 instanceof String) {
36: if (o1 == o2) {
37: diff = 0;
38: } else {
39: if (_collator == null)
40: _collator = Collator.getInstance(_locale);
41:
42: diff = _collator.compare(o1, o2);
43: }
44: } else {
45: diff = Comparators.compare(o1, o2);
46: }
47: return diff;
48: }
49: }
|