1
22
23 package com.liferay.util;
24
25 import com.liferay.portal.kernel.log.Log;
26 import com.liferay.portal.kernel.log.LogFactoryUtil;
27
28 import java.lang.reflect.InvocationTargetException;
29
30 import java.util.Comparator;
31
32 import org.apache.commons.beanutils.PropertyUtils;
33
34
41 public class PropertyComparator implements Comparator {
42
43 public PropertyComparator(String propertyName) {
44 this(new String[] {propertyName}, true, false);
45 }
46
47 public PropertyComparator(String[] propertyNames) {
48 this(propertyNames, true, false);
49 }
50
51 public PropertyComparator(
52 String propertyName, boolean asc, boolean caseSensitive) {
53
54 this(new String[] {propertyName}, asc, caseSensitive);
55 }
56
57 public PropertyComparator(
58 String[] propertyNames, boolean asc, boolean caseSensitive) {
59
60 _propertyNames = propertyNames;
61 _asc = asc;
62 _caseSensitive = caseSensitive;
63 }
64
65 public int compare(Object obj1, Object obj2) {
66 try {
67 for (String propertyName : _propertyNames) {
68 Object property1 = PropertyUtils.getProperty(
69 obj1, propertyName);
70 Object property2 = PropertyUtils.getProperty(
71 obj2, propertyName);
72
73 if (!_asc) {
74 Object temp = property1;
75
76 property1 = property2;
77 property2 = temp;
78 }
79
80 if (property1 instanceof String) {
81 int result = 0;
82
83 if (_caseSensitive) {
84 result = property1.toString().compareTo(
85 property2.toString());
86 }
87 else {
88 result = property1.toString().compareToIgnoreCase(
89 property2.toString());
90 }
91
92 if (result != 0) {
93 return result;
94 }
95 }
96
97 if (property1 instanceof Comparable) {
98 int result = ((Comparable)property1).compareTo(property2);
99
100 if (result != 0) {
101 return result;
102 }
103 }
104 }
105 }
106 catch (IllegalAccessException iae) {
107 _log.error(iae.getMessage());
108 }
109 catch (InvocationTargetException ite) {
110 _log.error(ite.getMessage());
111 }
112 catch (NoSuchMethodException nsme) {
113 _log.error(nsme.getMessage());
114 }
115
116 return -1;
117 }
118
119 private static Log _log = LogFactoryUtil.getLog(PropertyComparator.class);
120
121 private String[] _propertyNames;
122 private boolean _asc;
123 private boolean _caseSensitive;
124
125 }