View Javadoc

1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one or more
3    * contributor license agreements.  See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * The ASF licenses this file to You under the Apache License, Version 2.0
6    * (the "License"); you may not use this file except in compliance with
7    * the License.  You may obtain a copy of the License at
8    *
9    *      http://www.apache.org/licenses/LICENSE-2.0
10   *
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
16   */
17  package org.apache.commons.validator;
18  
19  import java.io.Serializable;
20  import java.util.Collections;
21  import java.util.HashMap;
22  import java.util.Iterator;
23  import java.util.Map;
24  import java.util.Set;
25  
26  /***
27   * This contains the results of a set of validation rules processed 
28   * on a JavaBean.
29   *
30   * @version $Revision: 478334 $ $Date: 2006-11-22 21:31:54 +0000 (Wed, 22 Nov 2006) $
31   */
32  public class ValidatorResults implements Serializable {
33  
34      /***
35       * Map of validation results.
36       */
37      protected Map hResults = new HashMap();
38  
39      /***
40       * Merge another ValidatorResults into mine.
41       *
42       * @param results ValidatorResults to merge.
43       */
44      public void merge(ValidatorResults results) {
45          this.hResults.putAll(results.hResults);
46      }
47  
48      /***
49       * Add a the result of a validator action.
50       *
51       * @param field The field validated.
52       * @param validatorName The name of the validator.
53       * @param result The result of the validation.
54       */
55      public void add(Field field, String validatorName, boolean result) {
56          this.add(field, validatorName, result, null);
57      }
58  
59      /***
60       * Add a the result of a validator action.
61       *
62       * @param field The field validated.
63       * @param validatorName The name of the validator.
64       * @param result The result of the validation.
65       * @param value The value returned by the validator.
66       */
67      public void add(
68              Field field,
69              String validatorName,
70              boolean result,
71              Object value) {
72  
73          ValidatorResult validatorResult = this.getValidatorResult(field.getKey());
74  
75          if (validatorResult == null) {
76              validatorResult = new ValidatorResult(field);
77              this.hResults.put(field.getKey(), validatorResult);
78          }
79  
80          validatorResult.add(validatorName, result, value);
81      }
82  
83      /***
84       * Clear all results recorded by this object.
85       */
86      public void clear() {
87          this.hResults.clear();
88      }
89  
90      /***
91       * Return <code>true</code> if there are no messages recorded
92       * in this collection, or <code>false</code> otherwise.
93       *
94       * @return Whether these results are empty.
95       */
96      public boolean isEmpty() {
97          return this.hResults.isEmpty();
98      }
99  
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 }