1 /*
   2  * reserved comment block
   3  * DO NOT REMOVE OR ALTER!
   4  */
   5 /*
   6  * Licensed to the Apache Software Foundation (ASF) under one or more
   7  * contributor license agreements.  See the NOTICE file distributed with
   8  * this work for additional information regarding copyright ownership.
   9  * The ASF licenses this file to You under the Apache License, Version 2.0
  10  * (the "License"); you may not use this file except in compliance with
  11  * the License.  You may obtain a copy of the License at
  12  *
  13  *      http://www.apache.org/licenses/LICENSE-2.0
  14  *
  15  * Unless required by applicable law or agreed to in writing, software
  16  * distributed under the License is distributed on an "AS IS" BASIS,
  17  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  18  * See the License for the specific language governing permissions and
  19  * limitations under the License.
  20  */
  21 
  22 package com.sun.org.apache.xerces.internal.impl.msg;
  23 
  24 import java.util.Locale;
  25 import java.util.MissingResourceException;
  26 import java.util.ResourceBundle;
  27 import java.util.PropertyResourceBundle;
  28 
  29 import com.sun.org.apache.xerces.internal.util.MessageFormatter;
  30 import com.sun.org.apache.xerces.internal.utils.SecuritySupport;
  31 
  32 /**
  33  * XMLMessageFormatter provides error messages for the XML 1.0 Recommendation and for
  34  * the Namespaces Recommendation
  35  *
  36  * @xerces.internal
  37  *
  38  * @author Eric Ye, IBM
  39  * @version $Id: XMLMessageFormatter_ja.java 3094 2012-03-21 05:50:01Z joehw $
  40  *
  41  */
  42 public class XMLMessageFormatter_ja implements MessageFormatter {
  43     /**
  44      * The domain of messages concerning the XML 1.0 specification.
  45      */
  46     public static final String XML_DOMAIN = "http://www.w3.org/TR/1998/REC-xml-19980210";
  47     public static final String XMLNS_DOMAIN = "http://www.w3.org/TR/1999/REC-xml-names-19990114";
  48 
  49     // private objects to cache the locale and resource bundle
  50     private Locale fLocale = null;
  51     private ResourceBundle fResourceBundle = null;
  52 
  53     //
  54     // MessageFormatter methods
  55     //
  56 
  57     /**
  58      * Formats a message with the specified arguments using the given
  59      * locale information.
  60      *
  61      * @param locale    The locale of the message.
  62      * @param key       The message key.
  63      * @param arguments The message replacement text arguments. The order
  64      *                  of the arguments must match that of the placeholders
  65      *                  in the actual message.
  66      *
  67      * @return Returns the formatted message.
  68      *
  69      * @throws MissingResourceException Thrown if the message with the
  70      *                                  specified key cannot be found.
  71      */
  72     public String formatMessage(Locale locale, String key, Object[] arguments)
  73         throws MissingResourceException {
  74 
  75         if (fResourceBundle == null || locale != fLocale) {
  76             if (locale != null) {
  77                 fResourceBundle = SecuritySupport.getResourceBundle("com.sun.org.apache.xerces.internal.impl.msg.XMLMessages", locale);
  78                 // memorize the most-recent locale
  79                 fLocale = locale;
  80             }
  81             if (fResourceBundle == null)
  82                 fResourceBundle = SecuritySupport.getResourceBundle("com.sun.org.apache.xerces.internal.impl.msg.XMLMessages");
  83         }
  84 
  85         // format message
  86         String msg;
  87         try {
  88             msg = fResourceBundle.getString(key);
  89             if (arguments != null) {
  90                 try {
  91                     msg = java.text.MessageFormat.format(msg, arguments);
  92                 }
  93                 catch (Exception e) {
  94                     msg = fResourceBundle.getString("FormatFailed");
  95                     msg += " " + fResourceBundle.getString(key);
  96                 }
  97             }
  98         }
  99 
 100         // error
 101         catch (MissingResourceException e) {
 102             msg = fResourceBundle.getString("BadMessageKey");
 103             throw new MissingResourceException(key, msg, key);
 104         }
 105 
 106         // no message
 107         if (msg == null) {
 108             msg = key;
 109             if (arguments.length > 0) {
 110                 StringBuffer str = new StringBuffer(msg);
 111                 str.append('?');
 112                 for (int i = 0; i < arguments.length; i++) {
 113                     if (i > 0) {
 114                         str.append('&');
 115                     }
 116                     str.append(String.valueOf(arguments[i]));
 117                 }
 118             }
 119         }
 120 
 121         return msg;
 122     }
 123 
 124 }