1 /* 2 * reserved comment block 3 * DO NOT REMOVE OR ALTER! 4 */ 5 /* 6 * Copyright 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 22 package com.sun.org.apache.xerces.internal.dom; 23 import com.sun.org.apache.xerces.internal.utils.SecuritySupport; 24 import java.util.Locale; 25 import java.util.MissingResourceException; 26 import java.util.ResourceBundle; 27 28 /** 29 * Used to format DOM error messages, using the system locale. 30 * 31 * @xerces.internal 32 * 33 * @author Sandy Gao, IBM 34 * @version $Id: DOMMessageFormatter.java,v 1.6 2010-11-01 04:39:38 joehw Exp $ 35 */ 36 public class DOMMessageFormatter { 37 public static final String DOM_DOMAIN = "http://www.w3.org/dom/DOMTR"; 38 public static final String XML_DOMAIN = "http://www.w3.org/TR/1998/REC-xml-19980210"; 39 public static final String SERIALIZER_DOMAIN = "http://apache.org/xml/serializer"; 40 41 private static ResourceBundle domResourceBundle = null; 42 private static ResourceBundle xmlResourceBundle = null; 43 private static ResourceBundle serResourceBundle = null; 44 private static Locale locale = null; 45 46 47 DOMMessageFormatter(){ 48 locale = Locale.getDefault(); 49 } 50 /** 51 * Formats a message with the specified arguments using the given 52 * locale information. 53 * 54 * @param domain domain from which error string is to come. 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 the formatted message. 61 * 62 * @throws MissingResourceException Thrown if the message with the 63 * specified key cannot be found. 64 */ 65 public static String formatMessage(String domain, 66 String key, Object[] arguments) 67 throws MissingResourceException { 68 ResourceBundle resourceBundle = getResourceBundle(domain); 69 if(resourceBundle == null){ 70 init(); 71 resourceBundle = getResourceBundle(domain); 72 if(resourceBundle == null) 73 throw new MissingResourceException("Unknown domain" + domain, null, key); 74 } 75 // format message 76 String msg; 77 try { 78 msg = key + ": " + resourceBundle.getString(key); 79 if (arguments != null) { 80 try { 81 msg = java.text.MessageFormat.format(msg, arguments); 82 } 83 catch (Exception e) { 84 msg = resourceBundle.getString("FormatFailed"); 85 msg += " " + resourceBundle.getString(key); 86 } 87 } 88 } // error 89 catch (MissingResourceException e) { 90 msg = resourceBundle.getString("BadMessageKey"); 91 throw new MissingResourceException(key, msg, key); 92 } 93 94 // no message 95 if (msg == null) { 96 msg = key; 97 if (arguments.length > 0) { 98 StringBuffer str = new StringBuffer(msg); 99 str.append('?'); 100 for (int i = 0; i < arguments.length; i++) { 101 if (i > 0) { 102 str.append('&'); 103 } 104 str.append(String.valueOf(arguments[i])); 105 } 106 } 107 } 108 109 return msg; 110 } 111 112 static ResourceBundle getResourceBundle(String domain){ 113 if(domain == DOM_DOMAIN || domain.equals(DOM_DOMAIN)) 114 return domResourceBundle; 115 else if( domain == XML_DOMAIN || domain.equals(XML_DOMAIN)) 116 return xmlResourceBundle; 117 else if(domain == SERIALIZER_DOMAIN || domain.equals(SERIALIZER_DOMAIN)) 118 return serResourceBundle; 119 return null; 120 } 121 /** 122 * Initialize Message Formatter. 123 */ 124 public static void init(){ 125 if (locale != null) { 126 domResourceBundle = SecuritySupport.getResourceBundle("com.sun.org.apache.xerces.internal.impl.msg.DOMMessages", locale); 127 serResourceBundle = SecuritySupport.getResourceBundle("com.sun.org.apache.xerces.internal.impl.msg.XMLSerializerMessages", locale); 128 xmlResourceBundle = SecuritySupport.getResourceBundle("com.sun.org.apache.xerces.internal.impl.msg.XMLMessages", locale); 129 }else{ 130 domResourceBundle = SecuritySupport.getResourceBundle("com.sun.org.apache.xerces.internal.impl.msg.DOMMessages"); 131 serResourceBundle = SecuritySupport.getResourceBundle("com.sun.org.apache.xerces.internal.impl.msg.XMLSerializerMessages"); 132 xmlResourceBundle = SecuritySupport.getResourceBundle("com.sun.org.apache.xerces.internal.impl.msg.XMLMessages"); 133 } 134 } 135 136 /** 137 * setLocale to be used by the formatter. 138 * @param locale 139 */ 140 public static void setLocale(Locale dlocale){ 141 locale = dlocale; 142 } 143 }