Author: craigmcc
Date: Tue Sep 12 23:21:08 2006
New Revision: 442862
URL: http://svn.apache.org/viewvc?view=rev&rev=442862
Log:
Remove direct Commons BeanUtils dependencies.
SHALE-280
Modified:
shale/framework/trunk/shale-apps/shale-clay-usecases/src/main/java/org/apache/shale/usecases/rolodex/GenericComparator.java
Modified:
shale/framework/trunk/shale-apps/shale-clay-usecases/src/main/java/org/apache/shale/usecases/rolodex/GenericComparator.java
URL:
http://svn.apache.org/viewvc/shale/framework/trunk/shale-apps/shale-clay-usecases/src/main/java/org/apache/shale/usecases/rolodex/GenericComparator.java?view=diff&rev=442862&r1=442861&r2=442862
==============================================================================
---
shale/framework/trunk/shale-apps/shale-clay-usecases/src/main/java/org/apache/shale/usecases/rolodex/GenericComparator.java
(original)
+++
shale/framework/trunk/shale-apps/shale-clay-usecases/src/main/java/org/apache/shale/usecases/rolodex/GenericComparator.java
Tue Sep 12 23:21:08 2006
@@ -16,13 +16,18 @@
package org.apache.shale.usecases.rolodex;
+import java.beans.BeanInfo;
+import java.beans.Introspector;
+import java.beans.PropertyDescriptor;
+import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
+import java.util.Map;
import java.util.StringTokenizer;
-
-import org.apache.commons.beanutils.BeanUtils;
+import javax.faces.FacesException;
+import javax.faces.el.PropertyNotFoundException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -126,19 +131,8 @@
Object col1 = null;
Object col2 = null;
- try {
- col1 = BeanUtils.getProperty(o1, nextProperty);
- } catch (Exception e) {
- log.error("Error finding property " + nextProperty
- + "to sort on in the target object", e);
- }
-
- try {
- col2 = BeanUtils.getProperty(o2, nextProperty);
- } catch (Exception e) {
- log.error("Error finding property " + nextProperty
- + "to sort on in the target object", e);
- }
+ col1 = value(o1, nextProperty);
+ col2 = value(o2, nextProperty);
if ((col1 == null) && (col2 == null))
result = 0;
@@ -161,5 +155,40 @@
}
return (sortAscending ? 1 : -1) * result;
}
+
+
+ // --------------------------------------------------------- Private
Methods
+
+
+ /**
+ * <p>Return the specified property value from the specified object,
+ * if possible.</p>
+ *
+ * @param base Base object from which to retrieve a property
+ * @param name Name of the property to be retrieved
+ */
+ private Object value(Object base, String name) {
+
+ if (base instanceof Map) {
+ return ((Map) base).get(name);
+ }
+ try {
+ BeanInfo info = Introspector.getBeanInfo(base.getClass());
+ PropertyDescriptor[] descriptors = info.getPropertyDescriptors();
+ for (int i = 0; i < descriptors.length; i++) {
+ if (name.equals(descriptors[i].getName())) {
+ return descriptors[i].getReadMethod().invoke(base, null);
+ }
+ }
+ throw new PropertyNotFoundException(name);
+ } catch (RuntimeException e) {
+ throw e;
+ } catch (Exception e) {
+ throw new FacesException(e);
+ }
+
+ }
+
+
}