001: /* *************************************************************************
002:
003: Millstone(TM)
004: Open Sourced User Interface Library for
005: Internet Development with Java
006:
007: Millstone is a registered trademark of IT Mill Ltd
008: Copyright (C) 2000-2005 IT Mill Ltd
009:
010: *************************************************************************
011:
012: This library is free software; you can redistribute it and/or
013: modify it under the terms of the GNU Lesser General Public
014: license version 2.1 as published by the Free Software Foundation.
015:
016: This library is distributed in the hope that it will be useful,
017: but WITHOUT ANY WARRANTY; without even the implied warranty of
018: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
019: Lesser General Public License for more details.
020:
021: You should have received a copy of the GNU Lesser General Public
022: License along with this library; if not, write to the Free Software
023: Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
024:
025: *************************************************************************
026:
027: For more information, contact:
028:
029: IT Mill Ltd phone: +358 2 4802 7180
030: Ruukinkatu 2-4 fax: +358 2 4802 7181
031: 20540, Turku email: info@itmill.com
032: Finland company www: www.itmill.com
033:
034: Primary source for MillStone information and releases: www.millstone.org
035:
036: ********************************************************************** */
037:
038: package org.millstone.base.terminal;
039:
040: import java.util.ArrayList;
041: import java.util.Collection;
042: import java.util.Iterator;
043: import java.util.List;
044:
045: /** Class for combining multiple error messages together.
046: *
047: * @author IT Mill Ltd
048: * @version 3.1.1
049: * @since 3.0
050: */
051: public class CompositeErrorMessage implements ErrorMessage {
052:
053: /** Array of all the errors */
054: private List errors;
055:
056: /** Level of the error */
057: private int level;
058:
059: /** Constructor for CompositeErrorMessage.
060: *
061: * @param errorMessages Array of error messages that are listed togeter.
062: * Nulls are ignored, but at least one message is required.
063: * @throws NullPointerException if errorMessages is null.
064: * * @throws IllegalArgumentException if the array was empty.
065: */
066: public CompositeErrorMessage(ErrorMessage[] errorMessages) {
067: errors = new ArrayList(errorMessages.length);
068: level = Integer.MIN_VALUE;
069:
070: for (int i = 0; i < errorMessages.length; i++) {
071: addErrorMessage(errorMessages[i]);
072: }
073:
074: if (errors.size() == 0)
075: throw new IllegalArgumentException(
076: "Composite error message must have at least one error");
077:
078: }
079:
080: /** Constructor for CompositeErrorMessage.
081: * @param errorMessages Collection of error messages that are listed
082: * togeter. At least one message is required.
083: * @throws NullPointerException if the collection is null.
084: * @throws IllegalArgumentException if the collection was empty.
085: */
086: public CompositeErrorMessage(Collection errorMessages) {
087: errors = new ArrayList(errorMessages.size());
088: level = Integer.MIN_VALUE;
089:
090: for (Iterator i = errorMessages.iterator(); i.hasNext();) {
091: addErrorMessage((ErrorMessage) i.next());
092: }
093:
094: if (errors.size() == 0)
095: throw new IllegalArgumentException(
096: "Composite error message must have at least one error");
097: }
098:
099: /** The error level is the largest error level in
100: * @see org.millstone.base.terminal.ErrorMessage#getErrorLevel()
101: */
102: public final int getErrorLevel() {
103: return level;
104: }
105:
106: /** Add a error message into this composite message.
107: * Updates the level field.
108: * @param error The error message to be added. Duplicate errors are ignored.
109: */
110: private void addErrorMessage(ErrorMessage error) {
111: if (error != null && !errors.contains(error)) {
112: this .errors.add(error);
113: int l = error.getErrorLevel();
114: if (l > level)
115: level = l;
116: }
117: }
118:
119: /** Get Error Iterator. */
120: public Iterator iterator() {
121: return errors.iterator();
122: }
123:
124: public void paint(PaintTarget target) throws PaintException {
125:
126: if (errors.size() == 1)
127: ((ErrorMessage) errors.iterator().next()).paint(target);
128: else {
129: target.startTag("error");
130:
131: if (level > 0 && level <= ErrorMessage.INFORMATION)
132: target.addAttribute("level", "info");
133: else if (level <= ErrorMessage.WARNING)
134: target.addAttribute("level", "warning");
135: else if (level <= ErrorMessage.ERROR)
136: target.addAttribute("level", "error");
137: else if (level <= ErrorMessage.CRITICAL)
138: target.addAttribute("level", "critical");
139: else
140: target.addAttribute("level", "system");
141:
142: // Paint all the exceptions
143: for (Iterator i = errors.iterator(); i.hasNext();) {
144: ((ErrorMessage) i.next()).paint(target);
145: }
146:
147: target.endTag("error");
148: }
149: }
150:
151: /* Documented in super interface */
152: public void addListener(RepaintRequestListener listener) {
153: }
154:
155: /* Documented in super interface */
156: public void removeListener(RepaintRequestListener listener) {
157: }
158:
159: /* Documented in super interface */
160: public void requestRepaint() {
161: }
162:
163: /* Documented in super interface */
164: public void requestRepaintRequests() {
165: }
166:
167: /** Returns a comma separated list of the error messages.
168: * @return String, comma separated list of error messages.
169: */
170: public String toString() {
171: String retval = "[";
172: int pos = 0;
173: for (Iterator i = errors.iterator(); i.hasNext();) {
174: if (pos > 0)
175: retval += ",";
176: pos++;
177: retval += i.next().toString();
178: }
179: retval += "]";
180:
181: return retval;
182: }
183: }
|