1 /* 2 * Copyright 2004-2009 the original author or authors. 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package org.springmodules.validation.bean.rule; 18 19 import org.springmodules.validation.bean.rule.resolver.ErrorArgumentsResolver; 20 import org.springmodules.validation.bean.rule.resolver.StaticErrorArgumentsResolver; 21 import org.springmodules.validation.util.condition.Condition; 22 import org.springmodules.validation.util.condition.common.AlwaysTrueCondition; 23 24 /** 25 * The default implementation of the {@link org.springmodules.validation.bean.rule.ValidationRule} interface. This implementation uses an applicability condition 26 * to determine whether this rule is applicable on a given object (see {@link ValidationRule#isApplicable(Object)}). 27 * 28 * @author Uri Boness 29 */ 30 public class DefaultValidationRule implements ValidationRule { 31 32 // the default applicability condition of this validation rule - always applicable. 33 private final static Condition DEFAULT_APPLICABILITY_CONDITION = new AlwaysTrueCondition(); 34 35 // the condition of this validation rule. 36 private Condition condition; 37 38 // determines whether this validation rule is applicable on a given object. 39 private Condition applicabilityCondition; 40 41 // the error code of this validation rule. 42 private String errorCode; 43 44 // the default error message of this validation rule. 45 private String defalutErrorMessage; 46 47 // the resolver to be used to resolve the error arguments. 48 private ErrorArgumentsResolver errorArgumentsResolver; 49 50 /** 51 * Empty contructor (javabean support). 52 */ 53 public DefaultValidationRule() { 54 this(null, null); 55 } 56 57 /** 58 * Constructs a new DefaultValidationRule with the given condition and error code. The condition 59 * is always applicable. 60 * 61 * @param condition The condition of this validation rule. 62 * @param errorCode The error code of this validation rule. 63 */ 64 public DefaultValidationRule(Condition condition, String errorCode) { 65 this(condition, DEFAULT_APPLICABILITY_CONDITION, errorCode, errorCode, new Object[0]); 66 } 67 68 /** 69 * Constructs a new DefaultValidationRule with the given condition, error code, and error arguments. The condition 70 * is always applicable. 71 * 72 * @param condition The condition of this validation rule. 73 * @param errorCode The error code of this validation rule. 74 * @param errorArguments The error arguments of this validation rule. 75 */ 76 public DefaultValidationRule(Condition condition, String errorCode, Object[] errorArguments) { 77 this(condition, DEFAULT_APPLICABILITY_CONDITION, errorCode, errorCode, errorArguments); 78 } 79 80 /** 81 * Constructs a new DefaultValidationRule with the given condition and error information. The condition is always 82 * applicable. 83 * 84 * @param condition The condition of this validation rule. 85 * @param errorCode The error code of this validation rule. 86 * @param defalutErrorMessage The default error message of this validation rule. 87 * @param errorArguments The error arguments of this validation rule. 88 */ 89 public DefaultValidationRule( 90 Condition condition, 91 String errorCode, 92 String defalutErrorMessage, 93 Object[] errorArguments) { 94 95 this(condition, DEFAULT_APPLICABILITY_CONDITION, errorCode, defalutErrorMessage, errorArguments); 96 } 97 98 /** 99 * Constructs a new DefaultValidationRule with given condition and error code. The applicability of this rule 100 * is determined by the given applicability condition. 101 * 102 * @param condition The condition of this validation rule. 103 * @param applicabilityCondition Determines whether this rule is applicable on a given object. 104 * @param errorCode The error code of this validation rule. 105 */ 106 public DefaultValidationRule(Condition condition, Condition applicabilityCondition, String errorCode) { 107 this(condition, applicabilityCondition, errorCode, errorCode, new Object[0]); 108 } 109 110 /** 111 * Constructs a new DefaultValidationRule with given condition, error code, and error arguments. The applicability 112 * of this rule is determined by the given applicability condition. 113 * 114 * @param condition The condition of this validation rule. 115 * @param applicabilityCondition Determines whether this rule is applicable on a given object. 116 * @param errorCode The error code of this validation rule. 117 * @param errorArguments The error arguments of this validation rule. 118 */ 119 public DefaultValidationRule( 120 Condition condition, 121 Condition applicabilityCondition, 122 String errorCode, 123 Object[] errorArguments) { 124 125 this(condition, applicabilityCondition, errorCode, errorCode, errorArguments); 126 } 127 128 /** 129 * Constructs a new DefaultValidationRule with given condition, error code, error arguments, and default error 130 * message. The applicability of this rule is determined by the given applicability condition. 131 * 132 * @param condition The condition of this validation rule. 133 * @param applicabilityCondition Determines whether this rule is applicable on a given object. 134 * @param errorCode The error code of this validation rule. 135 * @param defalutErrorMessage The default error message of this validation rule. 136 * @param errorArguments The error arguments of this validation rule. 137 */ 138 public DefaultValidationRule( 139 Condition condition, 140 Condition applicabilityCondition, 141 String errorCode, 142 String defalutErrorMessage, 143 Object[] errorArguments) { 144 145 this(condition, applicabilityCondition, errorCode, defalutErrorMessage, new StaticErrorArgumentsResolver(errorArguments)); 146 } 147 148 /** 149 * Constructs a new DefaultValidationRule with given condition, error code, error arguments resolver, and default error 150 * message. The applicability of this rule is determined by the given applicability condition. 151 * 152 * @param condition The condition of this validation rule. 153 * @param applicabilityCondition Determines whether this rule is applicable on a given object. 154 * @param errorCode The error code of this validation rule. 155 * @param defalutErrorMessage The default error message of this validation rule. 156 * @param errorArgumentsResolver The resolver that will be used to resolve the error arguments. 157 */ 158 public DefaultValidationRule( 159 Condition condition, 160 Condition applicabilityCondition, 161 String errorCode, 162 String defalutErrorMessage, 163 ErrorArgumentsResolver errorArgumentsResolver) { 164 165 this.condition = condition; 166 this.applicabilityCondition = applicabilityCondition; 167 this.errorCode = errorCode; 168 this.errorArgumentsResolver = errorArgumentsResolver; 169 this.defalutErrorMessage = defalutErrorMessage; 170 } 171 172 /** 173 * see {@link ValidationRule#isApplicable(Object)}. 174 * <p/> 175 * The applicability of this validation rule is determined by the applicability condition. 176 * see {@link #getApplicabilityCondition()}. 177 */ 178 public boolean isApplicable(Object obj) { 179 return applicabilityCondition.check(obj); 180 } 181 182 /** 183 * see {@link org.springmodules.validation.bean.rule.ValidationRule#getCondition()} 184 */ 185 public Condition getCondition() { 186 return condition; 187 } 188 189 /** 190 * Sets the condition of this validation rule. see {@link #getCondition()}. 191 * 192 * @param condition The condition of this validation rule. 193 */ 194 public void setCondition(Condition condition) { 195 this.condition = condition; 196 } 197 198 /** 199 * See {@link org.springmodules.validation.bean.rule.ValidationRule#getErrorCode()} 200 */ 201 public String getErrorCode() { 202 return errorCode; 203 } 204 205 /** 206 * Sets the error code of this validation rule. see {@link #getErrorCode()}. 207 * 208 * @param errorCode The error code of this validation rule. 209 */ 210 public void setErrorCode(String errorCode) { 211 this.errorCode = errorCode; 212 } 213 214 /** 215 * See {@link org.springmodules.validation.bean.rule.ValidationRule#getErrorArguments(Object)} 216 */ 217 public Object[] getErrorArguments(Object obj) { 218 return errorArgumentsResolver.resolveArguments(obj); 219 } 220 221 /** 222 * Sets the arguments to attach to the error code of this validation rule. see {@link #getErrorArguments(Object)}. 223 * 224 * @param errorArguments The arguments to attach to the error code of this validation rule. 225 */ 226 public void setErrorArguments(Object[] errorArguments) { 227 this.errorArgumentsResolver = new StaticErrorArgumentsResolver(errorArguments); 228 } 229 230 /** 231 * Sets the error arguments resolver to be used by this validation rule to resolve the error arguments. 232 * 233 * @param errorArgumentsResolver The given error arguments resolver. 234 */ 235 public void setErrorArgumentsResolver(ErrorArgumentsResolver errorArgumentsResolver) { 236 this.errorArgumentsResolver = errorArgumentsResolver; 237 } 238 239 /** 240 * See {@link org.springmodules.validation.bean.rule.ValidationRule#getDefaultErrorMessage()}. 241 */ 242 public String getDefaultErrorMessage() { 243 return defalutErrorMessage; 244 } 245 246 /** 247 * Sets the default error message to be used in case no error message is associated with the error code 248 * of this validation rule. See {@link #getDefaultErrorMessage()}. 249 * 250 * @param defalutErrorMessage The default error message of this validation rule. 251 */ 252 public void setDefalutErrorMessage(String defalutErrorMessage) { 253 this.defalutErrorMessage = defalutErrorMessage; 254 } 255 256 //=============================================== Setter/Getter ==================================================== 257 258 /** 259 * Returns the applicability condition of this validation rule. This applicability condition determines whether 260 * this validation rule is applicable for a given object. 261 * 262 * @return The applicability condition of this validation rule. 263 */ 264 public Condition getApplicabilityCondition() { 265 return applicabilityCondition; 266 } 267 268 /** 269 * Sets the applicability condition of this validation rule. see {@link #getApplicabilityCondition()}. 270 * 271 * @param applicabilityCondition The applicability condition of this validation rule. 272 */ 273 public void setApplicabilityCondition(Condition applicabilityCondition) { 274 this.applicabilityCondition = applicabilityCondition; 275 } 276 277 }