001: /*
002: * Copyright (c) 2002-2006 by OpenSymphony
003: * All rights reserved.
004: */
005: package com.opensymphony.xwork;
006:
007: import java.io.Serializable;
008: import java.util.*;
009:
010: /**
011: * Provides a default implementation of ValidationAware. Returns new collections for
012: * errors and messages (defensive copy).
013: *
014: * @author Jason Carreira
015: * @author tm_jee
016: * @version $Date: 2006-03-30 17:28:01 +0200 (Do, 30 Mrz 2006) $ $Id: ValidationAwareSupport.java 965 2006-03-30 15:28:01Z davsclaus $
017: */
018: public class ValidationAwareSupport implements ValidationAware,
019: Serializable {
020:
021: private Collection actionErrors;
022: private Collection actionMessages;
023: private Map fieldErrors;
024:
025: public synchronized void setActionErrors(Collection errorMessages) {
026: this .actionErrors = errorMessages;
027: }
028:
029: public synchronized Collection getActionErrors() {
030: return new ArrayList(internalGetActionErrors());
031: }
032:
033: public synchronized void setActionMessages(Collection messages) {
034: this .actionMessages = messages;
035: }
036:
037: public synchronized Collection getActionMessages() {
038: return new ArrayList(internalGetActionMessages());
039: }
040:
041: public synchronized void setFieldErrors(Map errorMap) {
042: this .fieldErrors = errorMap;
043: }
044:
045: public synchronized Map getFieldErrors() {
046: return new LinkedHashMap(internalGetFieldErrors());
047: }
048:
049: public synchronized void addActionError(String anErrorMessage) {
050: internalGetActionErrors().add(anErrorMessage);
051: }
052:
053: public synchronized void addActionMessage(String aMessage) {
054: internalGetActionMessages().add(aMessage);
055: }
056:
057: public synchronized void addFieldError(String fieldName,
058: String errorMessage) {
059: final Map errors = internalGetFieldErrors();
060: List this FieldErrors = (List) errors.get(fieldName);
061:
062: if (this FieldErrors == null) {
063: this FieldErrors = new ArrayList();
064: errors.put(fieldName, this FieldErrors);
065: }
066:
067: this FieldErrors.add(errorMessage);
068: }
069:
070: public synchronized boolean hasActionErrors() {
071: return (actionErrors != null) && !actionErrors.isEmpty();
072: }
073:
074: public synchronized boolean hasActionMessages() {
075: return (actionMessages != null) && !actionMessages.isEmpty();
076: }
077:
078: public synchronized boolean hasErrors() {
079: return (hasActionErrors() || hasFieldErrors());
080: }
081:
082: public synchronized boolean hasFieldErrors() {
083: return (fieldErrors != null) && !fieldErrors.isEmpty();
084: }
085:
086: private Collection internalGetActionErrors() {
087: if (actionErrors == null) {
088: actionErrors = new ArrayList();
089: }
090:
091: return actionErrors;
092: }
093:
094: private Collection internalGetActionMessages() {
095: if (actionMessages == null) {
096: actionMessages = new ArrayList();
097: }
098:
099: return actionMessages;
100: }
101:
102: private Map internalGetFieldErrors() {
103: if (fieldErrors == null) {
104: fieldErrors = new LinkedHashMap();
105: }
106:
107: return fieldErrors;
108: }
109:
110: /**
111: * Clears all error and messages list/maps.
112: * <p/>
113: * Will clear the maps/lists that contain
114: * field errors, action errors and action messages.
115: */
116: public synchronized void clearErrorsAndMessages() {
117: internalGetFieldErrors().clear();
118: internalGetActionErrors().clear();
119: internalGetActionMessages().clear();
120: }
121: }
|