001    /*
002     * Licensed to the Apache Software Foundation (ASF) under one or more
003     * contributor license agreements.  See the NOTICE file distributed with
004     * this work for additional information regarding copyright ownership.
005     * The ASF licenses this file to You under the Apache License, Version 2.0
006     * (the "License"); you may not use this file except in compliance with
007     * the License.  You may obtain a copy of the License at
008     *
009     *      http://www.apache.org/licenses/LICENSE-2.0
010     *
011     * Unless required by applicable law or agreed to in writing, software
012     * distributed under the License is distributed on an "AS IS" BASIS,
013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014     * See the License for the specific language governing permissions and
015     * limitations under the License.
016     */
017    package org.apache.commons.validator;
018    
019    import java.io.Serializable;
020    import java.util.Collections;
021    import java.util.HashMap;
022    import java.util.Iterator;
023    import java.util.Map;
024    import java.util.Set;
025    
026    /**
027     * This contains the results of a set of validation rules processed 
028     * on a JavaBean.
029     *
030     * @version $Revision: 493905 $ $Date: 2007-01-08 03:11:38 +0100 (Mo, 08. Jan 2007) $
031     */
032    public class ValidatorResults implements Serializable {
033    
034        /**
035         * Map of validation results.
036         */
037        protected Map hResults = new HashMap();
038    
039        /**
040         * Merge another ValidatorResults into mine.
041         *
042         * @param results ValidatorResults to merge.
043         */
044        public void merge(ValidatorResults results) {
045            this.hResults.putAll(results.hResults);
046        }
047    
048        /**
049         * Add a the result of a validator action.
050         *
051         * @param field The field validated.
052         * @param validatorName The name of the validator.
053         * @param result The result of the validation.
054         */
055        public void add(Field field, String validatorName, boolean result) {
056            this.add(field, validatorName, result, null);
057        }
058    
059        /**
060         * Add a the result of a validator action.
061         *
062         * @param field The field validated.
063         * @param validatorName The name of the validator.
064         * @param result The result of the validation.
065         * @param value The value returned by the validator.
066         */
067        public void add(
068                Field field,
069                String validatorName,
070                boolean result,
071                Object value) {
072    
073            ValidatorResult validatorResult = this.getValidatorResult(field.getKey());
074    
075            if (validatorResult == null) {
076                validatorResult = new ValidatorResult(field);
077                this.hResults.put(field.getKey(), validatorResult);
078            }
079    
080            validatorResult.add(validatorName, result, value);
081        }
082    
083        /**
084         * Clear all results recorded by this object.
085         */
086        public void clear() {
087            this.hResults.clear();
088        }
089    
090        /**
091         * Return <code>true</code> if there are no messages recorded
092         * in this collection, or <code>false</code> otherwise.
093         *
094         * @return Whether these results are empty.
095         */
096        public boolean isEmpty() {
097            return this.hResults.isEmpty();
098        }
099    
100        /**
101         * Gets the <code>ValidatorResult</code> associated
102         * with the key passed in.  The key the <code>ValidatorResult</code>
103         * is stored under is the <code>Field</code>'s getKey method.
104         *
105         * @param key The key generated from <code>Field</code> (this is often just
106         * the field name).
107         *
108         * @return The result of a specified key.
109         */
110        public ValidatorResult getValidatorResult(String key) {
111            return (ValidatorResult) this.hResults.get(key);
112        }
113    
114        /**
115         * Return the set of property names for which at least one message has
116         * been recorded.
117         * @return An unmodifiable Set of the property names.
118         */
119        public Set getPropertyNames() {
120            return Collections.unmodifiableSet(this.hResults.keySet());
121        }
122    
123        /**
124         * Get a <code>Map</code> of any <code>Object</code>s returned from
125         * validation routines.
126         *
127         * @return Map of objections returned by validators.
128         */
129        public Map getResultValueMap() {
130            Map results = new HashMap();
131    
132            for (Iterator i = hResults.keySet().iterator(); i.hasNext();) {
133                String propertyKey = (String) i.next();
134                ValidatorResult vr = this.getValidatorResult(propertyKey);
135    
136                for (Iterator x = vr.getActions(); x.hasNext();) {
137                    String actionKey = (String)x.next();
138                    Object result = vr.getResult(actionKey);
139    
140                    if (result != null && !(result instanceof Boolean)) {
141                        results.put(propertyKey, result);
142                    }
143                }
144            }
145    
146            return results;
147        }
148    
149    }