View Javadoc

1   // Copyright 2006 Google Inc. All Rights Reserved.
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 }