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.xml.internal.res;
22
23 import java.util.Locale;
24 import java.util.ResourceBundle;
25 import jdk.xml.internal.SecuritySupport;
26
27 /**
28 * A utility class for issuing XML error messages.
29 * @xsl.usage internal
30 * @LastModified: Sep 2017
31 */
32 public class XMLMessages
33 {
34
35 /** The local object to use. */
36 protected Locale fLocale = Locale.getDefault();
37
38 /** The language specific resource object for XML messages. */
39 private static ResourceBundle XMLBundle = null;
40
41 /** The class name of the XML error message string table. */
42 private static final String XML_ERROR_RESOURCES =
43 "com.sun.org.apache.xml.internal.res.XMLErrorResources";
44
45 /** String to use if a bad message code is used. */
46 protected static final String BAD_CODE = "BAD_CODE";
47
48 /** String to use if the message format operation failed. */
49 protected static final String FORMAT_FAILED = "FORMAT_FAILED";
50
51 /**
52 * Set the Locale object to use.
53 *
54 * @param locale non-null reference to Locale object.
55 */
56 public void setLocale(Locale locale)
57 {
58 fLocale = locale;
59 }
60
61 /**
62 * Get the Locale object that is being used.
63 *
64 * @return non-null reference to Locale object.
65 */
66 public Locale getLocale()
67 {
68 return fLocale;
69 }
70
71 /**
72 * Creates a message from the specified key and replacement
73 * arguments, localized to the given locale.
74 *
75 * @param msgKey The key for the message text.
76 * @param args The arguments to be used as replacement text
77 * in the message created.
78 *
79 * @return The formatted message string.
80 */
81 public static final String createXMLMessage(String msgKey, Object args[])
82 {
83 if (XMLBundle == null) {
84 XMLBundle = SecuritySupport.getResourceBundle(XML_ERROR_RESOURCES);
85 }
86
87 if (XMLBundle != null)
88 {
89 return createMsg(XMLBundle, msgKey, args);
90 }
91 else
92 return "Could not load any resource bundles.";
93 }
94
95 /**
96 * Creates a message from the specified key and replacement
97 * arguments, localized to the given locale.
98 *
99 * @param fResourceBundle The resource bundle to use.
100 * @param msgKey The message key to use.
101 * @param args The arguments to be used as replacement text
102 * in the message created.
103 *
104 * @return The formatted message string.
105 */
106 public static final String createMsg(ResourceBundle fResourceBundle,
107 String msgKey, Object args[]) //throws Exception
108 {
109
110 String fmsg = null;
111 boolean throwex = false;
112 String msg = null;
113
114 if (msgKey != null)
115 msg = fResourceBundle.getString(msgKey);
116
117 if (msg == null)
118 {
119 msg = fResourceBundle.getString(BAD_CODE);
120 throwex = true;
121 }
122
123 if (args != null)
124 {
125 try
126 {
127
128 // Do this to keep format from crying.
129 // This is better than making a bunch of conditional
130 // code all over the place.
131 int n = args.length;
132
133 for (int i = 0; i < n; i++)
134 {
135 if (null == args[i])
136 args[i] = "";
137 }
138
139 fmsg = java.text.MessageFormat.format(msg, args);
140 }
141 catch (Exception e)
142 {
143 fmsg = fResourceBundle.getString(FORMAT_FAILED);
144 fmsg += " " + msg;
145 }
146 }
147 else
148 fmsg = msg;
149
150 if (throwex)
151 {
152 throw new RuntimeException(fmsg);
153 }
154
155 return fmsg;
156 }
157
158 }
--- EOF ---