1 24 package org.riotfamily.forms.support; 25 26 import java.util.Collections ; 27 import java.util.HashMap ; 28 import java.util.Iterator ; 29 import java.util.LinkedList ; 30 import java.util.List ; 31 import java.util.Map ; 32 33 import org.springframework.validation.BindingResult; 34 import org.springframework.validation.Errors; 35 import org.springframework.validation.FieldError; 36 import org.springframework.validation.MessageCodesResolver; 37 import org.springframework.validation.ObjectError; 38 39 public abstract class AbstractBindingResultSupport implements BindingResult { 40 41 private final List errors = new LinkedList (); 42 43 private final String objectName; 44 45 private MessageCodesResolver messageCodesResolver; 46 47 protected AbstractBindingResultSupport(String objectName) { 48 this.objectName = objectName; 49 } 50 51 public Map getModel() { 52 Map model = new HashMap (); 53 model.put(MODEL_KEY_PREFIX + getObjectName(), this); 55 model.put(getObjectName(), getTarget()); 57 return model; 58 } 59 60 public void recordSuppressedField(String fieldName) { 61 } 62 63 public String [] getSuppressedFields() { 64 return null; 65 } 66 67 public void addError(ObjectError error) { 68 this.errors.add(error); 69 } 70 71 public void removeError(ObjectError error) { 72 this.errors.remove(error); 73 } 74 75 public void removeErrors(List errors) { 76 for (int i = 0; i < errors.size(); i++) { 77 removeError((ObjectError) errors.get(i)); 78 } 79 } 80 81 public String [] resolveMessageCodes(String errorCode) { 82 return getMessageCodesResolver().resolveMessageCodes(errorCode, getObjectName()); 83 } 84 85 86 public String [] resolveMessageCodes(String errorCode, String field) { 87 return getMessageCodesResolver().resolveMessageCodes(errorCode, getObjectName(), field, null); 88 } 89 90 public String getObjectName() { 91 return objectName; 92 } 93 94 public void setMessageCodesResolver(MessageCodesResolver messageCodesResolver) { 95 this.messageCodesResolver = messageCodesResolver; 96 } 97 98 public MessageCodesResolver getMessageCodesResolver() { 99 return messageCodesResolver; 100 } 101 102 public void setNestedPath(String nestedPath) { 103 } 104 105 public String getNestedPath() { 106 return null; 107 } 108 109 public void pushNestedPath(String subPath) { 110 } 111 112 public void popNestedPath() throws IllegalStateException { 113 } 114 115 public void reject(String errorCode) { 116 reject(errorCode, null, null); 117 } 118 119 public void reject(String errorCode, String defaultMessage) { 120 reject(errorCode, null, defaultMessage); 121 } 122 123 public void reject(String errorCode, Object [] errorArgs, String defaultMessage) { 124 addError(new ObjectError(getObjectName(), resolveMessageCodes(errorCode), errorArgs, defaultMessage)); 125 } 126 127 public void rejectValue(String field, String errorCode) { 128 rejectValue(field, errorCode, null, null); 129 } 130 131 public void rejectValue(String field, String errorCode, String defaultMessage) { 132 rejectValue(field, errorCode, null, defaultMessage); 133 } 134 135 public void rejectValue(String field, String errorCode, Object [] errorArgs, String defaultMessage) { 136 FieldError fe = new FieldError( 137 getObjectName(), field, null, false, 138 resolveMessageCodes(errorCode, field), errorArgs, defaultMessage); 139 addError(fe); 140 } 141 142 public void addAllErrors(Errors errors) { 143 this.errors.addAll(errors.getAllErrors()); 144 } 145 146 public boolean hasErrors() { 147 return !this.errors.isEmpty(); 148 } 149 150 public int getErrorCount() { 151 return this.errors.size(); 152 } 153 154 public List getAllErrors() { 155 return Collections.unmodifiableList(this.errors); 156 } 157 158 public boolean hasGlobalErrors() { 159 return (getGlobalErrorCount() > 0); 160 } 161 162 public int getGlobalErrorCount() { 163 return getGlobalErrors().size(); 164 } 165 166 public List getGlobalErrors() { 167 List result = new LinkedList (); 168 for (Iterator it = this.errors.iterator(); it.hasNext();) { 169 Object error = it.next(); 170 if (!(error instanceof FieldError)) { 171 result.add(error); 172 } 173 } 174 return Collections.unmodifiableList(result); 175 } 176 177 public ObjectError getGlobalError() { 178 for (Iterator it = this.errors.iterator(); it.hasNext();) { 179 ObjectError objectError = (ObjectError) it.next(); 180 if (!(objectError instanceof FieldError)) { 181 return objectError; 182 } 183 } 184 return null; 185 } 186 187 public boolean hasFieldErrors() { 188 return (getFieldErrorCount() > 0); 189 } 190 191 public int getFieldErrorCount() { 192 return getFieldErrors().size(); 193 } 194 195 public List getFieldErrors() { 196 List result = new LinkedList (); 197 for (Iterator it = this.errors.iterator(); it.hasNext();) { 198 Object error = it.next(); 199 if (error instanceof FieldError) { 200 result.add(error); 201 } 202 } 203 return Collections.unmodifiableList(result); 204 } 205 206 public FieldError getFieldError() { 207 for (Iterator it = this.errors.iterator(); it.hasNext();) { 208 Object error = it.next(); 209 if (error instanceof FieldError) { 210 return (FieldError) error; 211 } 212 } 213 return null; 214 } 215 216 public boolean hasFieldErrors(String field) { 217 return (getFieldErrorCount(field) > 0); 218 } 219 220 public int getFieldErrorCount(String field) { 221 return getFieldErrors(field).size(); 222 } 223 224 public List getFieldErrors(String field) { 225 List result = new LinkedList (); 226 227 for (Iterator it = this.errors.iterator(); it.hasNext();) { 228 Object error = it.next(); 229 if (error instanceof FieldError && isMatchingFieldError(field, ((FieldError) error))) { 230 result.add(error); 231 } 232 } 233 return Collections.unmodifiableList(result); 234 } 235 236 public FieldError getFieldError(String field) { 237 for (Iterator it = this.errors.iterator(); it.hasNext();) { 238 Object error = it.next(); 239 if (error instanceof FieldError) { 240 FieldError fe = (FieldError) error; 241 if (isMatchingFieldError(field, fe)) { 242 return fe; 243 } 244 } 245 } 246 return null; 247 } 248 249 public Object getFieldValue(String field) { 250 throw new UnsupportedOperationException (); 251 } 252 253 public Class getFieldType(String field) { 254 throw new UnsupportedOperationException (); 255 } 256 257 protected boolean isMatchingFieldError(String field, FieldError fieldError) { 258 return (field.equals(fieldError.getField()) || 259 (field.endsWith("*") && fieldError.getField().startsWith(field.substring(0, field.length() - 1)))); 260 } 261 262 } 263 | Popular Tags |