1 /*
2 * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
3 */
4 /*
5 * Licensed to the Apache Software Foundation (ASF) under one or more
6 * contributor license agreements. See the NOTICE file distributed with
7 * this work for additional information regarding copyright ownership.
8 * The ASF licenses this file to You under the Apache License, Version 2.0
9 * (the "License"); you may not use this file except in compliance with
10 * 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, 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.util;
22
23 import java.util.Locale;
24 import java.util.MissingResourceException;
25 import java.util.ResourceBundle;
26 import jdk.xml.internal.SecuritySupport;
27
28 /**
29 * Used to format SAX error messages using a specified locale.
30 *
31 * @author Michael Glavassevich, IBM
32 *
33 * @LastModified: Sep 2017
34 */
35 public class SAXMessageFormatter {
36
37 /**
38 * Formats a message with the specified arguments using the given
39 * locale information.
40 *
41 * @param locale The locale of the message.
42 * @param key The message key.
43 * @param arguments The message replacement text arguments. The order
44 * of the arguments must match that of the placeholders
45 * in the actual message.
46 *
47 * @return the formatted message.
48 *
49 * @throws MissingResourceException Thrown if the message with the
50 * specified key cannot be found.
51 */
52 public static String formatMessage(Locale locale,
53 String key, Object[] arguments)
54 throws MissingResourceException {
55
56 ResourceBundle resourceBundle = null;
57 if (locale != null) {
58 resourceBundle =
59 SecuritySupport.getResourceBundle("com.sun.org.apache.xerces.internal.impl.msg.SAXMessages", locale);
60 }
61 else {
62 resourceBundle =
63 SecuritySupport.getResourceBundle("com.sun.org.apache.xerces.internal.impl.msg.SAXMessages");
64 }
65
66 // format message
67 String msg;
68 try {
69 msg = resourceBundle.getString(key);
70 if (arguments != null) {
71 try {
72 msg = java.text.MessageFormat.format(msg, arguments);
73 }
74 catch (Exception e) {
75 msg = resourceBundle.getString("FormatFailed");
76 msg += " " + resourceBundle.getString(key);
77 }
78 }
79 }
80
81 // error
82 catch (MissingResourceException e) {
83 msg = resourceBundle.getString("BadMessageKey");
84 throw new MissingResourceException(key, msg, key);
85 }
86
87 // no message
88 if (msg == null) {
89 msg = key;
90 if (arguments.length > 0) {
91 StringBuffer str = new StringBuffer(msg);
92 str.append('?');
93 for (int i = 0; i < arguments.length; i++) {
94 if (i > 0) {
95 str.append('&');
96 }
97 str.append(String.valueOf(arguments[i]));
98 }
99 }
100 }
101 return msg;
102 }
103 }
--- EOF ---