org.springmodules.validation.bean.conf.DefaultBeanValidationConfiguration Maven / Gradle / Ivy
/*
* Copyright 2004-2005 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.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springmodules.validation.bean.conf;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.validation.Validator;
import org.springmodules.validation.bean.rule.ValidationRule;
import org.springmodules.validation.validator.CompoundValidator;
/**
* A default implementation of {@link org.springmodules.validation.bean.conf.BeanValidationConfiguration}.
*
* @author Uri Boness
*/
public class DefaultBeanValidationConfiguration implements MutableBeanValidationConfiguration {
// a list of all the required validatable property names (list elements are strings).
private List cascadeValidations;
// a list of all the global rules (list elements are ValidationRule's)
private List globalRules;
// the property validatoin rules (key: string - the property name, value: ValidationRule array)
private Map rulesByProperty;
// the custom validator for the bean.
private CompoundValidator customValidator;
/**
* Constructs a new DefaultBeanValidationConfiguration with no rules, validatable properties, or custom validator.
*/
public DefaultBeanValidationConfiguration() {
cascadeValidations = new ArrayList();
globalRules = new ArrayList();
rulesByProperty = new HashMap();
customValidator = new CompoundValidator();
}
/**
* @see org.springmodules.validation.bean.conf.BeanValidationConfiguration#getGlobalRules()
*/
public ValidationRule[] getGlobalRules() {
return (ValidationRule[]) globalRules.toArray(new ValidationRule[globalRules.size()]);
}
/**
* Sets the global rules for this configuration.
*
* @param globalRules The global rules for this configuration
*/
public void setGlobalRules(ValidationRule[] globalRules) {
List rules = new ArrayList();
CollectionUtils.addAll(rules, globalRules);
this.globalRules = rules;
}
/**
* Adds the given rule as global rules for this configuration.
*
* @param globalRule The rule to be added as global rules for this configuration.
*/
public void addGlobalRule(ValidationRule globalRule) {
globalRules.add(globalRule);
}
/**
* Adds the given rules as global rules for this configuration.
*
* @param globalRules The rules to be added as global rules for this configuration.
*/
public void addGlobalRules(ValidationRule[] globalRules) {
CollectionUtils.addAll(this.globalRules, globalRules);
}
/**
* @see org.springmodules.validation.bean.conf.BeanValidationConfiguration#getPropertyRules(String).
*/
public ValidationRule[] getPropertyRules(String propertyName) {
List rules = (List) rulesByProperty.get(propertyName);
if (rules == null || rules.isEmpty()) {
return new ValidationRule[0];
}
return (ValidationRule[]) rules.toArray(new ValidationRule[rules.size()]);
}
/**
* @see org.springmodules.validation.bean.conf.BeanValidationConfiguration#getValidatedProperties()
*/
public String[] getValidatedProperties() {
return (String[]) rulesByProperty.keySet().toArray(new String[rulesByProperty.size()]);
}
/**
* Sets the property validation rules for the given property.
*
* @param propertyName The name of the property.
* @param rules The validation rules for the given property.
*/
public void setPropertyRules(String propertyName, ValidationRule[] rules) {
List ruleList = new ArrayList();
CollectionUtils.addAll(ruleList, rules);
rulesByProperty.put(propertyName, ruleList);
}
/**
* Adds the given validation rule to the given property.
*
* @param propertyName The name of the property.
* @param rule The validation rule to be added to the given property.
*/
public void addPropertyRule(String propertyName, ValidationRule rule) {
List rules = (List) rulesByProperty.get(propertyName);
if (rules == null) {
rules = new ArrayList();
rulesByProperty.put(propertyName, rules);
}
rules.add(rule);
}
/**
* Adds the given validation rules to the given property.
*
* @param propertyName The name of the property.
* @param extraRules The extra validation rules that will be added to the given property.
*/
public void addPropertyRules(String propertyName, ValidationRule[] extraRules) {
List rules = (List) rulesByProperty.get(propertyName);
if (rules == null) {
rules = new ArrayList();
rulesByProperty.put(propertyName, rules);
}
CollectionUtils.addAll(rules, extraRules);
}
/**
* @see org.springmodules.validation.bean.conf.BeanValidationConfiguration#getCustomValidator()
*/
public Validator getCustomValidator() {
return customValidator;
}
/**
* @see org.springmodules.validation.bean.conf.BeanValidationConfiguration#getCascadeValidations()
*/
public CascadeValidation[] getCascadeValidations() {
return (CascadeValidation[]) cascadeValidations.toArray(new CascadeValidation[cascadeValidations.size()]);
}
/**
* Sets the custom validator for this configuration.
*
* @param validator The custom validator for this configuration.
*/
public void setCustomValidator(Validator validator) {
setCustomValidators(new Validator[]{validator});
}
/**
* Sets the custom validator for this configuration. The custom validator will be compound with the given
* validators.
*
* @param validators The validators that will make the custom validator of this configuration.
*/
public void setCustomValidators(Validator[] validators) {
customValidator = new CompoundValidator(validators);
}
/**
* Adds the given validator to the custom validator of this configuration.
*
* @param validator The validator to be added to the custom validator of this configuration.
*/
public void addCustomValidator(Validator validator) {
customValidator.addValidator(validator);
}
/**
* Adds the given validators to the custom validator of this configuration.
*
* @param validators The validators to be added to the custom validator of this configuration.
*/
public void addCustomValidators(Validator[] validators) {
customValidator.addValidators(validators);
}
/**
* Sets the cascade validations of this configuration.
*
* param cascadeValidations The cascade validations of this configuration.
*/
public void setCascadeValidations(CascadeValidation[] cascadeValidations) {
this.cascadeValidations = new ArrayList();
for (int i = 0; i < cascadeValidations.length; i++) {
this.cascadeValidations.add(cascadeValidations[i]);
}
}
/**
* Adds the given cascade validation to this configuration.
*
* @param cascadeValidation The cascase validation to be added to this configuration.
*/
public void addCascadeValidation(CascadeValidation cascadeValidation) {
addCascadeValidations(new CascadeValidation[]{cascadeValidation});
}
/**
* Adds the given cascade validations to this configuration.
*
* @param cascadeValidations The cascade validation to be added to this configuration.
*/
public void addCascadeValidations(CascadeValidation[] cascadeValidations) {
for (int i = 0; i < cascadeValidations.length; i++) {
this.cascadeValidations.add(cascadeValidations[i]);
}
}
}