You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

CompositeErrorMessage.java 4.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. /*
  2. @ITMillApache2LicenseForJavaFiles@
  3. */
  4. package com.itmill.toolkit.terminal;
  5. import java.util.ArrayList;
  6. import java.util.Collection;
  7. import java.util.Iterator;
  8. import java.util.List;
  9. /**
  10. * Class for combining multiple error messages together.
  11. *
  12. * @author IT Mill Ltd
  13. * @version
  14. * @VERSION@
  15. * @since 3.0
  16. */
  17. public class CompositeErrorMessage implements ErrorMessage {
  18. /**
  19. * Array of all the errors.
  20. */
  21. private final List errors;
  22. /**
  23. * Level of the error.
  24. */
  25. private int level;
  26. /**
  27. * Constructor for CompositeErrorMessage.
  28. *
  29. * @param errorMessages
  30. * the Array of error messages that are listed togeter. Nulls
  31. * are ignored, but at least one message is required.
  32. */
  33. public CompositeErrorMessage(ErrorMessage[] errorMessages) {
  34. errors = new ArrayList(errorMessages.length);
  35. level = Integer.MIN_VALUE;
  36. for (int i = 0; i < errorMessages.length; i++) {
  37. addErrorMessage(errorMessages[i]);
  38. }
  39. if (errors.size() == 0) {
  40. throw new IllegalArgumentException(
  41. "Composite error message must have at least one error");
  42. }
  43. }
  44. /**
  45. * Constructor for CompositeErrorMessage.
  46. *
  47. * @param errorMessages
  48. * the Collection of error messages that are listed togeter.
  49. * At least one message is required.
  50. */
  51. public CompositeErrorMessage(Collection errorMessages) {
  52. errors = new ArrayList(errorMessages.size());
  53. level = Integer.MIN_VALUE;
  54. for (final Iterator i = errorMessages.iterator(); i.hasNext();) {
  55. addErrorMessage((ErrorMessage) i.next());
  56. }
  57. if (errors.size() == 0) {
  58. throw new IllegalArgumentException(
  59. "Composite error message must have at least one error");
  60. }
  61. }
  62. /**
  63. * The error level is the largest error level in
  64. *
  65. * @see com.itmill.toolkit.terminal.ErrorMessage#getErrorLevel()
  66. */
  67. public final int getErrorLevel() {
  68. return level;
  69. }
  70. /**
  71. * Adds a error message into this composite message. Updates the level
  72. * field.
  73. *
  74. * @param error
  75. * the error message to be added. Duplicate errors are
  76. * ignored.
  77. */
  78. private void addErrorMessage(ErrorMessage error) {
  79. if (error != null && !errors.contains(error)) {
  80. errors.add(error);
  81. final int l = error.getErrorLevel();
  82. if (l > level) {
  83. level = l;
  84. }
  85. }
  86. }
  87. /**
  88. * Gets Error Iterator.
  89. *
  90. * @return the error iterator.
  91. */
  92. public Iterator iterator() {
  93. return errors.iterator();
  94. }
  95. /**
  96. * @see com.itmill.toolkit.terminal.Paintable#paint(com.itmill.toolkit.terminal.PaintTarget)
  97. */
  98. public void paint(PaintTarget target) throws PaintException {
  99. if (errors.size() == 1) {
  100. ((ErrorMessage) errors.iterator().next()).paint(target);
  101. } else {
  102. target.startTag("error");
  103. if (level > 0 && level <= ErrorMessage.INFORMATION) {
  104. target.addAttribute("level", "info");
  105. } else if (level <= ErrorMessage.WARNING) {
  106. target.addAttribute("level", "warning");
  107. } else if (level <= ErrorMessage.ERROR) {
  108. target.addAttribute("level", "error");
  109. } else if (level <= ErrorMessage.CRITICAL) {
  110. target.addAttribute("level", "critical");
  111. } else {
  112. target.addAttribute("level", "system");
  113. }
  114. // Paint all the exceptions
  115. for (final Iterator i = errors.iterator(); i.hasNext();) {
  116. ((ErrorMessage) i.next()).paint(target);
  117. }
  118. target.endTag("error");
  119. }
  120. }
  121. /* Documented in super interface */
  122. public void addListener(RepaintRequestListener listener) {
  123. }
  124. /* Documented in super interface */
  125. public void removeListener(RepaintRequestListener listener) {
  126. }
  127. /* Documented in super interface */
  128. public void requestRepaint() {
  129. }
  130. /* Documented in super interface */
  131. public void requestRepaintRequests() {
  132. }
  133. /**
  134. * Returns a comma separated list of the error messages.
  135. *
  136. * @return String, comma separated list of error messages.
  137. */
  138. public String toString() {
  139. String retval = "[";
  140. int pos = 0;
  141. for (final Iterator i = errors.iterator(); i.hasNext();) {
  142. if (pos > 0) {
  143. retval += ",";
  144. }
  145. pos++;
  146. retval += i.next().toString();
  147. }
  148. retval += "]";
  149. return retval;
  150. }
  151. }