001 /*
002 * The Spring Framework is published under the terms of the Apache Software
003 * License.
004 */
005 package org.springframework.rules.constraint.property;
006
007 import org.springframework.binding.PropertyAccessStrategy;
008 import org.springframework.binding.support.BeanPropertyAccessStrategy;
009 import org.springframework.util.Assert;
010
011 /**
012 * Convenience superclass for bean property expressions.
013 *
014 * @author Keith Donald
015 */
016 public abstract class AbstractPropertyConstraint implements PropertyConstraint {
017
018 private String propertyName;
019
020 protected AbstractPropertyConstraint() {
021 }
022
023 protected AbstractPropertyConstraint(String propertyName) {
024 setPropertyName(propertyName);
025 }
026
027 public String getPropertyName() {
028 return propertyName;
029 }
030
031 public boolean isDependentOn(String propertyName) {
032 return getPropertyName().equals(propertyName);
033 }
034
035 public boolean isCompoundRule() {
036 return false;
037 }
038
039 protected void setPropertyName(String propertyName) {
040 Assert.notNull(propertyName, "The propertyName to constrain is required");
041 this.propertyName = propertyName;
042 }
043
044 public boolean test(Object o) {
045 if (o instanceof PropertyAccessStrategy)
046 return test((PropertyAccessStrategy)o);
047
048 return test(new BeanPropertyAccessStrategy(o));
049 }
050
051 protected abstract boolean test(PropertyAccessStrategy domainObjectAccessStrategy);
052
053 public String toString() {
054 return getPropertyName();
055 }
056
057 }