(no commit message)
[utils] / support / general / src / main / java / org / wamblee / conditions / PropertyRegexCondition.java
index 3aa68b14eb890ceb64debc877595eae2d64323fd..7300e4608c37d4cd6006bdaa1de2b9604806521d 100644 (file)
@@ -1,12 +1,12 @@
 /*
- * 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.
  * You may obtain a copy of the License at
- *
+ * 
  *      http://www.apache.org/licenses/LICENSE-2.0
- *
+ * 
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  */
 package org.wamblee.conditions;
 
-import org.apache.commons.beanutils.PropertyUtils;
-
 import java.lang.reflect.InvocationTargetException;
-
+import java.lang.reflect.Method;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-
 /**
- * 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
- *
- * @param <T> DOCUMENT ME!
+ * 
  */
 public class PropertyRegexCondition<T> implements Condition<T> {
     /**
@@ -43,37 +40,39 @@ public class PropertyRegexCondition<T> implements Condition<T> {
     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;
 
-/**
+    /**
      * 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.
+     * 
+     * @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) {
-        property     = aProperty;
-        regex        = Pattern.compile(aRegex);
-        tolower      = aTolower;
+        property = aProperty;
+        regex = Pattern.compile(aRegex);
+        tolower = aTolower;
     }
 
-    /* (non-Javadoc)
+    /*
+     * (non-Javadoc)
+     * 
      * @see org.wamblee.conditions.Condition#matches(T)
      */
-    /**
-     * DOCUMENT ME!
-     *
-     * @param aObject DOCUMENT ME!
-     *
-     * @return DOCUMENT ME!
-     */
     public boolean matches(T aObject) {
         try {
-            String value = PropertyUtils.getProperty(aObject, property) + "";
+            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();
@@ -82,12 +81,12 @@ public class PropertyRegexCondition<T> implements Condition<T> {
             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);
         }
     }
 }