View Javadoc
1   /*
2    * reserved comment block
3    * DO NOT REMOVE OR ALTER!
4    */
5   /*
6    * Copyright 2001, 2002,2004 The Apache Software Foundation.
7    *
8    * Licensed under the Apache License, Version 2.0 (the "License");
9    * you may not use this file except in compliance with the License.
10   * 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, software
15   * distributed under the License is distributed on an "AS IS" BASIS,
16   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17   * See the License for the specific language governing permissions and
18   * limitations under the License.
19   */
20  
21  package com.sun.org.apache.xerces.internal.impl.xs;
22  
23  import com.sun.org.apache.xerces.internal.util.MessageFormatter;
24  import com.sun.org.apache.xerces.internal.utils.SecuritySupport;
25  import java.util.Locale;
26  import java.util.MissingResourceException;
27  import java.util.ResourceBundle;
28  
29  
30  /**
31   * SchemaMessageProvider implements an XMLMessageProvider that
32   * provides localizable error messages for the W3C XML Schema Language
33   *
34   * @xerces.internal
35   *
36   * @author Elena Litani, IBM
37   * @version $Id: XSMessageFormatter.java,v 1.6 2010-11-01 04:39:55 joehw Exp $
38   */
39  public class XSMessageFormatter implements MessageFormatter {
40      /**
41       * The domain of messages concerning the XML Schema: Structures specification.
42       */
43      public static final String SCHEMA_DOMAIN = "http://www.w3.org/TR/xml-schema-1";
44  
45  
46      // private objects to cache the locale and resource bundle
47      private Locale fLocale = null;
48      private ResourceBundle fResourceBundle = null;
49  
50      /**
51       * Formats a message with the specified arguments using the given
52       * locale information.
53       *
54       * @param locale    The locale of the message.
55       * @param key       The message key.
56       * @param arguments The message replacement text arguments. The order
57       *                  of the arguments must match that of the placeholders
58       *                  in the actual message.
59       *
60       * @return Returns the formatted message.
61       *
62       * @throws MissingResourceException Thrown if the message with the
63       *                                  specified key cannot be found.
64       */
65       public String formatMessage(Locale locale, String key, Object[] arguments)
66          throws MissingResourceException {
67  
68          if (fResourceBundle == null || locale != fLocale) {
69              if (locale != null) {
70                  fResourceBundle = SecuritySupport.getResourceBundle("com.sun.org.apache.xerces.internal.impl.msg.XMLSchemaMessages", locale);
71                  // memorize the most-recent locale
72                  fLocale = locale;
73              }
74              if (fResourceBundle == null)
75                  fResourceBundle = SecuritySupport.getResourceBundle("com.sun.org.apache.xerces.internal.impl.msg.XMLSchemaMessages");
76          }
77  
78          String msg = fResourceBundle.getString(key);
79          if (arguments != null) {
80              try {
81                  msg = java.text.MessageFormat.format(msg, arguments);
82              } catch (Exception e) {
83                  msg = fResourceBundle.getString("FormatFailed");
84                  msg += " " + fResourceBundle.getString(key);
85              }
86          }
87  
88          if (msg == null) {
89              msg = fResourceBundle.getString("BadMessageKey");
90              throw new MissingResourceException(msg, "com.sun.org.apache.xerces.internal.impl.msg.SchemaMessages", key);
91          }
92  
93          return msg;
94      }
95  }