001    package org.springframework.binding.validation.support;
002    
003    import org.springframework.binding.validation.RichValidator;
004    import org.springframework.binding.validation.ValidationResults;
005    import org.springframework.richclient.util.Assert;
006    
007    /**
008     * This {@link RichValidator} allows combining several {@link RichValidator}s.
009     * Eg when using a validator for Hibernate (validation available on persistent
010     * object through annotations), you might want to add a RulesValidator for more
011     * specific rules or just to expand its features.
012     *
013     * @author Jan Hoskens
014     *
015     */
016    public class CompositeRichValidator implements RichValidator {
017    
018            private RichValidator[] validators;
019    
020            /**
021             * Convenient creation of {@link CompositeRichValidator} using two
022             * validators.
023             */
024            public CompositeRichValidator(RichValidator validator1, RichValidator validator2) {
025                    this(new RichValidator[] { validator1, validator2 });
026            }
027    
028            /**
029             * Create a {@link CompositeRichValidator} that combines all the results
030             * from the given validators.
031             */
032            public CompositeRichValidator(RichValidator[] validators) {
033                    Assert.notNull(validators);
034                    this.validators = validators;
035            }
036    
037            public ValidationResults validate(Object object, String property) {
038                    DefaultValidationResults results = new DefaultValidationResults();
039                    for (int i = 0; i < validators.length; ++i) {
040                            results.addAllMessages(validators[i].validate(object, property));
041                    }
042                    return results;
043            }
044    
045            public ValidationResults validate(Object object) {
046                    DefaultValidationResults results = new DefaultValidationResults();
047                    for (int i = 0; i < validators.length; ++i) {
048                            results.addAllMessages(validators[i].validate(object));
049                    }
050                    return results;
051            }
052    
053    }