1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 package org.apache.struts2.impl;
24
25 import java.util.ArrayList;
26 import java.util.Collections;
27 import java.util.EnumMap;
28 import java.util.EnumSet;
29 import java.util.HashMap;
30 import java.util.List;
31 import java.util.Map;
32 import java.util.Set;
33
34 import org.apache.struts2.Messages;
35
36 import com.opensymphony.xwork2.DefaultTextProvider;
37 import com.opensymphony.xwork2.TextProvider;
38
39 public class MessagesImpl implements Messages {
40
41 final TextProvider textProvider = DefaultTextProvider.INSTANCE;
42 Map<String, Messages> fieldMap = new HashMap<String, Messages>();
43 Map<Severity, List<String>> severityMap = new EnumMap<Severity, List<String>>(Severity.class);
44
45 public Messages forField(String fieldName) {
46 Messages forField = fieldMap.get(fieldName);
47 if (forField == null) {
48 forField = new MessagesImpl();
49 fieldMap.put(fieldName, forField);
50 }
51 return forField;
52 }
53
54 public Map<String, Messages> forFields() {
55 return fieldMap;
56 }
57
58 public void addInformation(String key) {
59 forSeverity(Severity.INFO).add(textProvider.getText(key));
60 }
61
62 public void addInformation(String key, String... arguments) {
63 forSeverity(Severity.INFO).add(textProvider.getText(key, arguments));
64 }
65
66 public void addWarning(String key) {
67 forSeverity(Severity.WARN).add(textProvider.getText(key));
68 }
69
70 public void addWarning(String key, String... arguments) {
71 forSeverity(Severity.WARN).add(textProvider.getText(key, arguments));
72 }
73
74 public void addError(String key) {
75 forSeverity(Severity.ERROR).add(textProvider.getText(key));
76 }
77
78 public void addError(String key, String... arguments) {
79 forSeverity(Severity.ERROR).add(textProvider.getText(key, arguments));
80 }
81
82 public void add(Severity severity, String key) {
83 forSeverity(severity).add(textProvider.getText(key));
84 }
85
86 public void add(Severity severity, String key, String... arguments) {
87 forSeverity(severity).add(textProvider.getText(key, arguments));
88 }
89
90 public Set<Severity> getSeverities() {
91 Set<Severity> severities = EnumSet.noneOf(Severity.class);
92 for (Severity severity : Severity.values()) {
93 List<String> messages = severityMap.get(severity);
94 if (messages != null && !messages.isEmpty()) {
95 severities.add(severity);
96 }
97 }
98 return Collections.unmodifiableSet(severities);
99 }
100
101 public List<String> forSeverity(Severity severity) {
102 List<String> messages = severityMap.get(severity);
103 if (messages == null) {
104 messages = new ArrayList<String>();
105 severityMap.put(severity, messages);
106 }
107 return messages;
108 }
109
110 public List<String> getErrors() {
111 return forSeverity(Severity.ERROR);
112 }
113
114 public List<String> getWarnings() {
115 return forSeverity(Severity.WARN);
116 }
117
118 public List<String> getInformation() {
119 return forSeverity(Severity.INFO);
120 }
121
122 public boolean hasErrors() {
123 return !isEmpty(Severity.ERROR);
124 }
125
126 public boolean hasWarnings() {
127 return !isEmpty(Severity.WARN);
128 }
129
130 public boolean hasInformation() {
131 return !isEmpty(Severity.INFO);
132 }
133
134 public boolean isEmpty() {
135 for (Severity severity : Severity.values())
136 if (!isEmpty(severity))
137 return false;
138
139 return true;
140 }
141
142 public boolean isEmpty(Severity severity) {
143 List<String> messages = severityMap.get(severity);
144 if (messages != null && !messages.isEmpty()) {
145 return false;
146 }
147
148 for (Messages fieldMessages : fieldMap.values())
149 if (!fieldMessages.isEmpty(severity))
150 return false;
151
152 return true;
153 }
154 }