Coverage Report - javax.faces.internal.FacesMessageUtil
 
Classes in this File Line Coverage Branch Coverage Complexity
FacesMessageUtil
55%
91/165
72%
42/58
1.463
 
 1  
 /*
 2  
  * Copyright 2004-2011 the Seasar Foundation and the Others.
 3  
  *
 4  
  * Licensed under the Apache License, Version 2.0 (the "License");
 5  
  * you may not use this file except in compliance with the License.
 6  
  * You may obtain a copy of the License at
 7  
  *
 8  
  *     http://www.apache.org/licenses/LICENSE-2.0
 9  
  *
 10  
  * Unless required by applicable law or agreed to in writing, software
 11  
  * distributed under the License is distributed on an "AS IS" BASIS,
 12  
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
 13  
  * either express or implied. See the License for the specific language
 14  
  * governing permissions and limitations under the License.
 15  
  */
 16  
 package javax.faces.internal;
 17  
 
 18  
 import java.text.MessageFormat;
 19  
 import java.util.ArrayList;
 20  
 import java.util.Iterator;
 21  
 import java.util.List;
 22  
 import java.util.Locale;
 23  
 
 24  
 import javax.faces.application.FacesMessage;
 25  
 import javax.faces.application.FacesMessage.Severity;
 26  
 import javax.faces.component.ComponentUtil_;
 27  
 import javax.faces.component.UIComponent;
 28  
 import javax.faces.context.FacesContext;
 29  
 
 30  
 import org.seasar.framework.message.MessageResourceBundle;
 31  
 import org.seasar.framework.util.AssertionUtil;
 32  
 import org.seasar.teeda.core.util.HTMLEncodeUtil;
 33  
 
 34  
 /**
 35  
  * @author shot
 36  
  *
 37  
  * This class might be changed without notice. Please do not use it
 38  
  * excluding the JSF specification part.
 39  
  */
 40  
 public class FacesMessageUtil {
 41  
 
 42  
     private static final String DETAIL_SUFFIX = "_detail";
 43  
 
 44  1
     private static final FacesMessage[] EMPTY_MESSAGES = new FacesMessage[0];
 45  
 
 46  0
     private FacesMessageUtil() {
 47  0
     }
 48  
 
 49  
     public static FacesMessage[] getWarnMessages() {
 50  1
         FacesContext context = FacesContext.getCurrentInstance();
 51  1
         FacesMessage.Severity severity = FacesMessage.SEVERITY_WARN;
 52  1
         return getTargetFacesMessages(context, severity);
 53  
     }
 54  
 
 55  
     public static FacesMessage[] getInfoMessages() {
 56  1
         FacesContext context = FacesContext.getCurrentInstance();
 57  1
         FacesMessage.Severity severity = FacesMessage.SEVERITY_INFO;
 58  1
         return getTargetFacesMessages(context, severity);
 59  
     }
 60  
 
 61  
     public static FacesMessage[] getErrorMessages() {
 62  1
         FacesContext context = FacesContext.getCurrentInstance();
 63  1
         FacesMessage.Severity severity = FacesMessage.SEVERITY_ERROR;
 64  1
         return getTargetFacesMessages(context, severity);
 65  
     }
 66  
 
 67  
     public static FacesMessage[] getFatalMessages() {
 68  1
         FacesContext context = FacesContext.getCurrentInstance();
 69  1
         FacesMessage.Severity severity = FacesMessage.SEVERITY_FATAL;
 70  1
         return getTargetFacesMessages(context, severity);
 71  
     }
 72  
 
 73  
     public static FacesMessage[] getTargetFacesMessages(Severity severity) {
 74  0
         return getTargetFacesMessages(FacesContext.getCurrentInstance(),
 75  
                 severity);
 76  
     }
 77  
 
 78  
     public static FacesMessage[] getTargetFacesMessages(FacesContext context,
 79  
             Severity severity) {
 80  4
         return getTargetFacesMessages(context,
 81  
                 new FacesMessage.Severity[] { severity });
 82  
     }
 83  
 
 84  
     public static FacesMessage[] getAllMessages() {
 85  1
         final FacesContext context = FacesContext.getCurrentInstance();
 86  1
         return getAllMessages(context);
 87  
     }
 88  
 
 89  
     public static FacesMessage[] getAllMessages(FacesContext context) {
 90  4
         return getTargetFacesMessages(context, new FacesMessage.Severity[] {
 91  
                 FacesMessage.SEVERITY_FATAL, FacesMessage.SEVERITY_ERROR,
 92  
                 FacesMessage.SEVERITY_INFO, FacesMessage.SEVERITY_WARN });
 93  
     }
 94  
 
 95  
     public static FacesMessage[] getTargetFacesMessages(Severity[] severities) {
 96  0
         return getTargetFacesMessages(FacesContext.getCurrentInstance(),
 97  
                 severities);
 98  
     }
 99  
 
 100  
     public static FacesMessage[] getTargetFacesMessages(FacesContext context,
 101  
             Severity[] severities) {
 102  12
         AssertionUtil.assertNotNull("context", context);
 103  12
         if (severities == null || severities.length == 0) {
 104  0
             return EMPTY_MESSAGES;
 105  
         }
 106  12
         Iterator it = context.getMessages();
 107  12
         if (!it.hasNext()) {
 108  1
             return EMPTY_MESSAGES;
 109  
         }
 110  11
         List list = new ArrayList();
 111  38
         for (; it.hasNext();) {
 112  27
             FacesMessage facesMessage = (FacesMessage) it.next();
 113  27
             Severity severity = facesMessage.getSeverity();
 114  77
             for (int i = 0; i < severities.length; i++) {
 115  50
                 if (!severity.equals(severities[i])) {
 116  36
                     continue;
 117  
                 }
 118  14
                 list.add(facesMessage);
 119  
             }
 120  
         }
 121  11
         if (list.size() == 0) {
 122  1
             return EMPTY_MESSAGES;
 123  
         }
 124  10
         return (FacesMessage[]) list.toArray(new FacesMessage[list.size()]);
 125  
     }
 126  
 
 127  
     public static void addWarnMessage(String messageId) {
 128  0
         final FacesContext context = FacesContext.getCurrentInstance();
 129  0
         addWarnComponentMessage(context, (UIComponent) null, messageId);
 130  0
     }
 131  
 
 132  
     public static void addWarnMessage(String messageId, Object[] args) {
 133  0
         final FacesContext context = FacesContext.getCurrentInstance();
 134  0
         addWarnComponentMessage(context, (UIComponent) null, messageId, args);
 135  0
     }
 136  
 
 137  
     public static void addWarnComponentMessage(FacesContext context,
 138  
             UIComponent component, String messageId) {
 139  0
         addWarnComponentMessage(context, component, messageId, null);
 140  0
     }
 141  
 
 142  
     public static void addWarnComponentMessage(FacesContext context,
 143  
             UIComponent component, String messageId, Object[] args) {
 144  0
         addTargetSeverityMessage(context, component, messageId, args,
 145  
                 FacesMessage.SEVERITY_WARN);
 146  0
     }
 147  
 
 148  
     public static void addWarnComponentMessage(FacesContext context,
 149  
             String clientId, String messageId) {
 150  0
         addWarnComponentMessage(context, clientId, messageId, null);
 151  0
     }
 152  
 
 153  
     public static void addWarnComponentMessage(FacesContext context,
 154  
             String clientId, String messageId, Object[] args) {
 155  0
         addTargetSeverityMessage(context, clientId, messageId, args,
 156  
                 FacesMessage.SEVERITY_WARN);
 157  0
     }
 158  
 
 159  
     public static void addInfoMessage(String messageId) {
 160  0
         final FacesContext context = FacesContext.getCurrentInstance();
 161  0
         addInfoComponentMessage(context, (UIComponent) null, messageId);
 162  0
     }
 163  
 
 164  
     public static void addInfoMessage(String messageId, Object[] args) {
 165  0
         final FacesContext context = FacesContext.getCurrentInstance();
 166  0
         addInfoComponentMessage(context, (UIComponent) null, messageId, args);
 167  0
     }
 168  
 
 169  
     public static void addInfoComponentMessage(FacesContext context,
 170  
             UIComponent component, String messageId) {
 171  0
         addInfoComponentMessage(context, component, messageId, null);
 172  0
     }
 173  
 
 174  
     public static void addInfoComponentMessage(FacesContext context,
 175  
             UIComponent component, String messageId, Object[] args) {
 176  0
         addTargetSeverityMessage(context, component, messageId, args,
 177  
                 FacesMessage.SEVERITY_INFO);
 178  0
     }
 179  
 
 180  
     public static void addInfoComponentMessage(FacesContext context,
 181  
             String clientId, String messageId) {
 182  0
         addInfoComponentMessage(context, clientId, messageId, null);
 183  0
     }
 184  
 
 185  
     public static void addInfoComponentMessage(FacesContext context,
 186  
             String clientId, String messageId, Object[] args) {
 187  0
         addTargetSeverityMessage(context, clientId, messageId, args,
 188  
                 FacesMessage.SEVERITY_INFO);
 189  0
     }
 190  
 
 191  
     public static void addErrorMessage(String messageId) {
 192  0
         final FacesContext context = FacesContext.getCurrentInstance();
 193  0
         addErrorComponentMessage(context, (UIComponent) null, messageId);
 194  0
     }
 195  
 
 196  
     public static void addErrorMessage(String messageId, Object[] args) {
 197  0
         final FacesContext context = FacesContext.getCurrentInstance();
 198  0
         addErrorComponentMessage(context, (UIComponent) null, messageId, args);
 199  0
     }
 200  
 
 201  
     public static void addErrorComponentMessage(FacesContext context,
 202  
             UIComponent component, String messageId) {
 203  3
         addErrorComponentMessage(context, component, messageId, null);
 204  3
     }
 205  
 
 206  
     public static void addErrorComponentMessage(FacesContext context,
 207  
             UIComponent component, String messageId, Object[] args) {
 208  24
         addTargetSeverityMessage(context, component, messageId, args,
 209  
                 FacesMessage.SEVERITY_ERROR);
 210  24
     }
 211  
 
 212  
     public static void addErrorComponentMessage(FacesContext context,
 213  
             String clientId, String messageId) {
 214  0
         addErrorComponentMessage(context, clientId, messageId, null);
 215  0
     }
 216  
 
 217  
     public static void addErrorComponentMessage(FacesContext context,
 218  
             String clientId, String messageId, Object[] args) {
 219  0
         addTargetSeverityMessage(context, clientId, messageId, args,
 220  
                 FacesMessage.SEVERITY_ERROR);
 221  0
     }
 222  
 
 223  
     public static void addFatalMessage(String messageId) {
 224  0
         final FacesContext context = FacesContext.getCurrentInstance();
 225  0
         addFatalComponentMessage(context, (UIComponent) null, messageId);
 226  0
     }
 227  
 
 228  
     public static void addFatalMessage(String messageId, Object[] args) {
 229  0
         final FacesContext context = FacesContext.getCurrentInstance();
 230  0
         addFatalComponentMessage(context, (UIComponent) null, messageId, args);
 231  0
     }
 232  
 
 233  
     public static void addFatalComponentMessage(FacesContext context,
 234  
             UIComponent component, String messageId) {
 235  0
         addFatalComponentMessage(context, component, messageId, null);
 236  0
     }
 237  
 
 238  
     public static void addFatalComponentMessage(FacesContext context,
 239  
             UIComponent component, String messageId, Object[] args) {
 240  0
         addTargetSeverityMessage(context, component, messageId, args,
 241  
                 FacesMessage.SEVERITY_FATAL);
 242  0
     }
 243  
 
 244  
     public static void addFatalComponentMessage(FacesContext context,
 245  
             String clientId, String messageId) {
 246  0
         addFatalComponentMessage(context, clientId, messageId, null);
 247  0
     }
 248  
 
 249  
     public static void addFatalComponentMessage(FacesContext context,
 250  
             String clientId, String messageId, Object[] args) {
 251  0
         addTargetSeverityMessage(context, clientId, messageId, args,
 252  
                 FacesMessage.SEVERITY_FATAL);
 253  0
     }
 254  
 
 255  
     private static void addTargetSeverityMessage(FacesContext context,
 256  
             UIComponent component, String messageId, Object[] args,
 257  
             Severity severity) {
 258  24
         final String clientId = (component != null) ? component
 259  
                 .getClientId(context) : null;
 260  24
         addTargetSeverityMessage(context, clientId, messageId, args, severity);
 261  24
     }
 262  
 
 263  
     private static void addTargetSeverityMessage(FacesContext context,
 264  
             String clientId, String messageId, Object[] args, Severity severity) {
 265  24
         final Locale locale = ComponentUtil_.getLocale(context);
 266  24
         final FacesMessage message = getMessage(context, locale, severity,
 267  
                 messageId, args);
 268  24
         context.addMessage(clientId, message);
 269  24
     }
 270  
 
 271  
     public static String getSummary(String messageId, Object[] args) {
 272  0
         FacesMessage message = getMessage(FacesContext.getCurrentInstance(),
 273  
                 messageId, args);
 274  0
         return (message != null) ? message.getSummary() : null;
 275  
     }
 276  
 
 277  
     public static String getSummary(FacesContext context, String messageId,
 278  
             Object[] args) {
 279  0
         FacesMessage message = getMessage(context, messageId, args);
 280  0
         return (message != null) ? message.getSummary() : null;
 281  
     }
 282  
 
 283  
     public static String getDetail(String messageId, Object[] args) {
 284  0
         FacesMessage message = getMessage(FacesContext.getCurrentInstance(),
 285  
                 messageId, args);
 286  0
         return (message != null) ? message.getDetail() : null;
 287  
     }
 288  
 
 289  
     public static String getDetail(FacesContext context, String messageId,
 290  
             Object[] args) {
 291  0
         FacesMessage message = getMessage(context, messageId, args);
 292  0
         return (message != null) ? message.getDetail() : null;
 293  
     }
 294  
 
 295  
     public static FacesMessage getMessage(FacesContext context,
 296  
             String messageId, Object[] args) {
 297  75
         Locale locale = ComponentUtil_.getLocale(context);
 298  75
         return getMessage(context, locale, FacesMessage.SEVERITY_ERROR,
 299  
                 messageId, args);
 300  
     }
 301  
 
 302  
     public static FacesMessage getMessage(FacesContext context, Locale locale,
 303  
             Severity severity, String messageId, Object[] args) {
 304  
 
 305  99
         MessageResourceBundle bundle = getBundle(context, locale);
 306  99
         String summary = bundle.get(messageId);
 307  99
         String detail = bundle.get(messageId + DETAIL_SUFFIX);
 308  99
         if (summary == null && detail == null) {
 309  4
             MessageResourceBundle defaultBundle = getDefaultBundle(context,
 310  
                     locale);
 311  4
             summary = defaultBundle.get(messageId);
 312  4
             detail = defaultBundle.get(messageId + DETAIL_SUFFIX);
 313  
         }
 314  99
         if (args != null) {
 315  261
             for (int i = 0; i < args.length; i++) {
 316  166
                 final Object o = args[i];
 317  166
                 if (o != null && (o instanceof String)) {
 318  62
                     args[i] = HTMLEncodeUtil.encodeAll(o.toString());
 319  
                 }
 320  
             }
 321  
         }
 322  99
         if (summary != null) {
 323  97
             summary = getFormattedMessage(summary, locale, args);
 324  
         }
 325  99
         if (detail != null) {
 326  76
             detail = getFormattedMessage(detail, locale, args);
 327  
         }
 328  99
         return new FacesMessage(severity, summary, detail);
 329  
     }
 330  
 
 331  
     private static MessageResourceBundle getBundle(FacesContext context,
 332  
             Locale locale) {
 333  99
         MessageResourceBundle bundle = null;
 334  99
         String appBundleName = context.getApplication().getMessageBundle();
 335  99
         if (appBundleName != null) {
 336  26
             bundle = getBundle(context, locale, appBundleName);
 337  
         }
 338  
 
 339  99
         if (bundle == null) {
 340  73
             bundle = getDefaultBundle(context, locale);
 341  
         }
 342  99
         return bundle;
 343  
     }
 344  
 
 345  
     private static MessageResourceBundle getDefaultBundle(FacesContext context,
 346  
             Locale locale) {
 347  77
         return getBundle(context, locale, FacesMessage.FACES_MESSAGES);
 348  
     }
 349  
 
 350  
     private static MessageResourceBundle getBundle(FacesContext context,
 351  
             Locale locale, String bundleName) {
 352  103
         return MessageResourceBundleChainFactory
 353  
                 .createChain(bundleName, locale);
 354  
     }
 355  
 
 356  
     private static String getFormattedMessage(String message, Locale locale,
 357  
             Object[] args) {
 358  173
         if (args == null || args.length == 0) {
 359  8
             return message;
 360  
         }
 361  165
         return new MessageFormat(message, locale).format(args);
 362  
     }
 363  
 
 364  
     public static boolean hasClientId(FacesContext context,
 365  
             UIComponent component) {
 366  0
         AssertionUtil.assertNotNull("context", context);
 367  0
         final String clientId = component.getClientId(context);
 368  0
         for (Iterator itr = context.getClientIdsWithMessages(); itr.hasNext();) {
 369  0
             String cId = (String) itr.next();
 370  0
             if (clientId.equals(cId)) {
 371  0
                 return true;
 372  
             }
 373  
         }
 374  0
         return false;
 375  
     }
 376  
 
 377  
     public static boolean hasMessagesByClientId(FacesContext context,
 378  
             UIComponent component) {
 379  1
         AssertionUtil.assertNotNull("context", context);
 380  1
         final String clientId = component.getClientId(context);
 381  1
         return hasMessagesByClientId(context, clientId);
 382  
     }
 383  
 
 384  
     public static boolean hasMessagesByClientId(FacesContext context,
 385  
             String clientId) {
 386  1
         final Iterator itr = context.getMessages(clientId);
 387  1
         return itr.hasNext();
 388  
     }
 389  
 
 390  
     public static boolean hasMessages() {
 391  0
         return hasMessages(FacesContext.getCurrentInstance());
 392  
     }
 393  
 
 394  
     public static boolean hasMessages(FacesContext context) {
 395  2
         AssertionUtil.assertNotNull("context", context);
 396  2
         final Iterator itr = context.getMessages();
 397  2
         return itr.hasNext();
 398  
     }
 399  
 
 400  
     public static boolean hasErrorOrFatalMessage() {
 401  0
         return hasErrorOrFatalMessage(FacesContext.getCurrentInstance());
 402  
     }
 403  
 
 404  
     public static boolean hasErrorOrFatalMessage(final FacesContext context) {
 405  3
         AssertionUtil.assertNotNull("context", context);
 406  3
         final FacesMessage[] allMessages = getAllMessages(context);
 407  4
         for (int i = 0; i < allMessages.length; i++) {
 408  3
             final FacesMessage fm = allMessages[i];
 409  3
             final Severity severity = fm.getSeverity();
 410  3
             if (severity.equals(FacesMessage.SEVERITY_ERROR) ||
 411  
                     severity.equals(FacesMessage.SEVERITY_FATAL)) {
 412  2
                 return true;
 413  
             }
 414  
         }
 415  1
         return false;
 416  
     }
 417  
 }