View Javadoc

1   /*
2    * $Id: MessagesImpl.java 471756 2006-11-06 15:01:43Z husted $
3    *
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   *
12   *  http://www.apache.org/licenses/LICENSE-2.0
13   *
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.
20   */
21  // Copyright 2006 Google Inc. All Rights Reserved.
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 }