(no commit message)
[utils] / support / general / src / main / java / org / wamblee / conditions / PropertyRegexCondition.java
index cfc1e1655784c203699f2d4d6b10f71082cf0b39..7300e4608c37d4cd6006bdaa1de2b9604806521d 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2005 the original author or authors.
+ * Copyright 2005-2010 the original author or authors.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
- */ 
-
+ */
 package org.wamblee.conditions;
 
 import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-import org.apache.commons.beanutils.PropertyUtils;
-
 /**
- * Condition to check whether a given property value matches a certain 
- * regular expression.
- *
+ * Condition to check whether a given property of an object matches a certain
+ * regular expression. The method name to use of the object passed in to
+ * {@link #matches(Object)} is obtained using the Javabean conventions.
+ * 
  * @author Erik Brakkee
+ * 
  */
 public class PropertyRegexCondition<T> implements Condition<T> {
-    
     /**
-     * Property name. 
+     * Property name.
      */
     private String property;
-    
+
     /**
-     * Regular expression. 
+     * Regular expression.
      */
     private Pattern regex;
-    
+
     /**
-     * Whether or not to convert the value to lowercase before matching. 
+     * Whether or not to convert the value to lowercase before matching.
      */
-    private boolean tolower; 
-    
+    private boolean tolower;
+
     /**
-     * Constructs the condition. 
-     * @param aProperty Name of the property to examine. 
-     * @param aRegex Regular expression to use. 
-     * @param aTolower Whether or not to convert the value to lowercase before matching. 
+     * Constructs the condition.
+     * 
+     * @param aProperty
+     *            Name of the property to examine.
+     * @param aRegex
+     *            Regular expression to use.
+     * @param aTolower
+     *            Whether or not to convert the value to lowercase before
+     *            matching.
      */
-    public PropertyRegexCondition(String aProperty, String aRegex, boolean aTolower) {
+    public PropertyRegexCondition(String aProperty, String aRegex,
+        boolean aTolower) {
         property = aProperty;
         regex = Pattern.compile(aRegex);
         tolower = aTolower;
     }
 
-    /* (non-Javadoc)
+    /*
+     * (non-Javadoc)
+     * 
      * @see org.wamblee.conditions.Condition#matches(T)
      */
     public boolean matches(T aObject) {
         try {
-            String value = PropertyUtils.getProperty(aObject, property) + "";
-            if ( tolower ) { 
-                value = value.toLowerCase(); 
+            String readerName = "get" + property.substring(0, 1).toUpperCase() +
+                property.substring(1);
+            Method reader = aObject.getClass().getMethod(readerName);
+            String value = reader.invoke(aObject) + "";
+
+            if (tolower) {
+                value = value.toLowerCase();
             }
-            Matcher matcher = regex.matcher(value); 
-            return matcher.matches(); 
+
+            Matcher matcher = regex.matcher(value);
+
+            return matcher.matches();
+        } catch (NoSuchMethodException e) {
+            throw new RuntimeException(e.getMessage(), e);
         } catch (IllegalAccessException e) {
             throw new RuntimeException(e.getMessage(), e);
         } catch (InvocationTargetException e) {
             throw new RuntimeException(e.getMessage(), e);
-        } catch (NoSuchMethodException e) {
-            throw new RuntimeException(e.getMessage(), e);
         }
     }
 }