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 * https://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 */ 017package org.apache.commons.validator; 018 019import java.io.Serializable; 020import java.util.Collections; 021import java.util.HashMap; 022import java.util.Iterator; 023import java.util.Map; 024import java.util.Set; 025 026/** 027 * This contains the results of a set of validation rules processed 028 * on a JavaBean. 029 */ 030//TODO mutable non-private fields 031public class ValidatorResults implements Serializable { 032 033 private static final long serialVersionUID = -2709911078904924839L; 034 035 /** 036 * Map of validation results. 037 */ 038 protected Map<String, ValidatorResult> hResults = new HashMap<>(); 039 040 /** 041 * Constructs a new instance. 042 */ 043 public ValidatorResults() { 044 // empty 045 } 046 047 /** 048 * Add the result of a validator action. 049 * 050 * @param field The field validated. 051 * @param validatorName The name of the validator. 052 * @param result The result of the validation. 053 */ 054 public void add(final Field field, final String validatorName, final boolean result) { 055 this.add(field, validatorName, result, null); 056 } 057 058 /** 059 * Add the result of a validator action. 060 * 061 * @param field The field validated. 062 * @param validatorName The name of the validator. 063 * @param result The result of the validation. 064 * @param value The value returned by the validator. 065 */ 066 public void add( 067 final Field field, 068 final String validatorName, 069 final boolean result, 070 final Object value) { 071 072 ValidatorResult validatorResult = getValidatorResult(field.getKey()); 073 074 if (validatorResult == null) { 075 validatorResult = new ValidatorResult(field); 076 hResults.put(field.getKey(), validatorResult); 077 } 078 079 validatorResult.add(validatorName, result, value); 080 } 081 082 /** 083 * Clear all results recorded by this object. 084 */ 085 public void clear() { 086 hResults.clear(); 087 } 088 089 /** 090 * Gets the set of property names for which at least one message has 091 * been recorded. 092 * 093 * @return An unmodifiable Set of the property names. 094 */ 095 public Set<String> getPropertyNames() { 096 return Collections.unmodifiableSet(hResults.keySet()); 097 } 098 099 /** 100 * Gets a {@link Map} of any {@code Object}s returned from 101 * validation routines. 102 * 103 * @return Map of objections returned by validators. 104 */ 105 public Map<String, Object> getResultValueMap() { 106 final Map<String, Object> results = new HashMap<>(); 107 108 for (final String propertyKey : hResults.keySet()) { 109 final ValidatorResult vr = getValidatorResult(propertyKey); 110 111 for (final Iterator<String> x = vr.getActions(); x.hasNext();) { 112 final String actionKey = x.next(); 113 final Object result = vr.getResult(actionKey); 114 115 if (result != null && !(result instanceof Boolean)) { 116 results.put(propertyKey, result); 117 } 118 } 119 } 120 121 return results; 122 } 123 124 /** 125 * Gets the {@code ValidatorResult} associated 126 * with the key passed in. The key the {@code ValidatorResult} 127 * is stored under is the {@code Field}'s getKey method. 128 * 129 * @param key The key generated from {@code Field} (this is often just 130 * the field name). 131 * 132 * @return The result of a specified key. 133 */ 134 public ValidatorResult getValidatorResult(final String key) { 135 return hResults.get(key); 136 } 137 138 /** 139 * Gets {@code true} if there are no messages recorded 140 * in this collection, or {@code false} otherwise. 141 * 142 * @return Whether these results are empty. 143 */ 144 public boolean isEmpty() { 145 return hResults.isEmpty(); 146 } 147 148 /** 149 * Merge another ValidatorResults into mine. 150 * 151 * @param results ValidatorResults to merge. 152 */ 153 public void merge(final ValidatorResults results) { 154 hResults.putAll(results.hResults); 155 } 156 157}