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 }