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