⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 messageservice.java

📁 derby database source code.good for you.
💻 JAVA
字号:
/*   Derby - Class org.apache.derby.iapi.services.i18n.MessageService   Copyright 2000, 2004 The Apache Software Foundation or its licensors, as applicable.   Licensed under the Apache License, Version 2.0 (the "License");   you may not use this file except in compliance with the License.   You may obtain a copy of the License at      http://www.apache.org/licenses/LICENSE-2.0   Unless required by applicable law or agreed to in writing, software   distributed under the License is distributed on an "AS IS" BASIS,   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   See the License for the specific language governing permissions and   limitations under the License. */package org.apache.derby.iapi.services.i18n;import org.apache.derby.iapi.services.info.JVMInfo;import org.apache.derby.iapi.services.context.ShutdownException;import java.util.Locale;import java.util.MissingResourceException;import java.util.ResourceBundle;import java.text.MessageFormat;/** *  Message Service implementation provides a mechanism for locating * messages and substituting arguments for message parameters. * It also provides a service for locating property values. * <p> * It uses the resource bundle mechanism for locating messages based on * keys; the preferred form of resource bundle is a property file mapping * keys to messages. * * @author ames */public final class MessageService {	private static final Locale EN = new Locale("en", "US");	private static BundleFinder finder;	private MessageService() {}	public static ResourceBundle getBundleForLocale(Locale locale, String msgId) {		try {			return MessageService.getBundleWithEnDefault("org.apache.derby.loc.m"+hashString50(msgId), locale);		} catch (MissingResourceException mre) {		}		return null;	}	public static Object setFinder(BundleFinder theFinder) {		finder = theFinder;		// Return an object for a caller to hang onto so		// Garbage collection doesn't GC this class.		return new MessageService().getClass();	}	public static String getTextMessage(String messageID) {		return getCompleteMessage(messageID, (Object[]) null);	}	public static String getTextMessage(String messageID, Object a1) {		return getCompleteMessage(messageID, new Object[]{a1});	}	public static String getTextMessage(String messageID, Object a1, Object a2) {		return getCompleteMessage(messageID, new Object[]{a1, a2});	}	public static String getTextMessage(String messageID, Object a1, Object a2, Object a3) {		return getCompleteMessage(messageID, new Object[]{a1, a2, a3});	}	public static String getTextMessage(String messageID, Object a1, Object a2, Object a3, Object a4) {		return getCompleteMessage(messageID, new Object[]{a1, a2, a3, a4});	}	/**	  Transform the message from messageID to the actual error, warning, or	  info message using the correct locale.	  <P>	  The arguments to the messages are passed via an object array, the objects	  in the array WILL be changed by this class. The caller should NOT get the	  object back from this array.	 */	public static String getCompleteMessage(String messageId, Object[] arguments) {		try {			return formatMessage(getBundle(messageId), messageId, arguments, true);		} catch (MissingResourceException mre) {			// message does not exist in the requested locale or the default locale.			// most likely it does exist in our fake base class _en, so try that.		} catch (ShutdownException se) {		}		return formatMessage(getBundleForLocale(EN, messageId), messageId, arguments, false);	}	/**	  Method used by Cloudscape Network Server to get localized message (original call	  from jcc.	  @param sqlcode	sqlcode, not used.	  @param errmcLen	sqlerrmc length	  @param sqlerrmc	sql error message tokens, variable part of error message (ie.,						arguments) plus messageId, separated by separator.	  @param sqlerrp	not used	  @param errd0-5	not used	  @param warn		not used	  @param sqlState	5-char sql state	  @param file		not used	  @param localeStr	client locale in string	  @param msg		OUTPUT parameter, localized error message	  @param rc			OUTPUT parameter, return code -- 0 for success	 */	public static void getLocalizedMessage(int sqlcode, short errmcLen, String sqlerrmc,										String sqlerrp, int errd0, int errd1, int errd2,										int errd3, int errd4, int errd5, String warn,										String sqlState, String file, String localeStr,										String[] msg, int[] rc)	{		//figure out client locale from input locale string		int _pos1 = localeStr.indexOf("_");		// "_" position		int _pos2 = localeStr.lastIndexOf("_");		Locale locale = EN;		//default locale		if (_pos1 != -1)		{			String language = localeStr.substring(0, _pos1);			if (_pos2 == _pos1)			{				String country = localeStr.substring(_pos1 + 1);				locale = new Locale(language, country);			}			else			{				String country = localeStr.substring(_pos1 + 1, _pos2);				String variant = localeStr.substring(_pos2 + 1);				locale = new Locale(language, country, variant);			}		}		// get messageId and arguments, messageId is necessary for us to look up		// localized message from property file.  messageId was sent as the last		// token in the sqlerrmc.		String messageId = sqlState; 	//use sqlState if we don't have messageId		Object[] arguments = null;		if (sqlerrmc != null && sqlerrmc.length() > 0)		{			char [] sqlerrmc_chars = sqlerrmc.toCharArray();			int numArgs = 0, lastSepIdx = -1; // last separator index			for (int i = 0; i < sqlerrmc_chars.length; i++)			{				if (sqlerrmc_chars[i] == 20)	// separator				{					numArgs++;					lastSepIdx = i;				}			}			if (numArgs == 0)				messageId = new String(sqlerrmc_chars); //no args, only messageId then			else			{				messageId = new String(sqlerrmc_chars, lastSepIdx+1, sqlerrmc_chars.length-lastSepIdx-1);				arguments = new Object[numArgs];				for (int start = 0, arg = 0, i = 0; i < lastSepIdx + 1; i++)				{					if (i == lastSepIdx || sqlerrmc_chars[i] == 20)	// delimiter 					{						arguments[arg++] = new String(sqlerrmc_chars, start, i - start);						start = i + 1;					}				}			}		}		try {			msg[0] = formatMessage(getBundleForLocale(locale, messageId), messageId, arguments, true);			rc[0] = 0;			return;		} catch (MissingResourceException mre) {			// message does not exist in the requested locale			// most likely it does exist in our fake base class _en, so try that.		} catch (ShutdownException se) {		}		msg[0] = formatMessage(getBundleForLocale(EN, messageId), messageId, arguments, false);		rc[0] = 0;	}		/**	  Method used by Cloudscape Network Server to get localized message 	  @param locale		locale	  @param messageId	message id	  @param args		message arguments	 */	public static String getLocalizedMessage(Locale locale, String messageId, Object [] args)	{		String locMsg = null;		try {			locMsg = formatMessage(getBundleForLocale(locale, messageId), messageId, args, true);			return locMsg;		} catch (MissingResourceException mre) {			// message does not exist in the requested locale			// most likely it does exist in our fake base class _en, so try that.		} catch (ShutdownException se) {		}		locMsg = formatMessage(getBundleForLocale(EN, messageId), messageId, args, false);		return locMsg;	}	/**	 */	public static String getProperty(String messageId, String propertyName) {		ResourceBundle bundle = getBundle(messageId);		try {			if (bundle != null)				return bundle.getString(messageId.concat(".").concat(propertyName));		} catch (MissingResourceException mre) {		}		return null;	}	//	// class implementation	//	public static String formatMessage(ResourceBundle bundle, String messageId, Object[] arguments, boolean lastChance) {		if (arguments == null)			arguments = new Object[0];		if (bundle != null) {			try {				messageId = bundle.getString(messageId);				try {					return MessageFormat.format(messageId, arguments);				}				catch (IllegalArgumentException iae) {				}				catch (NullPointerException npe) {					//					//null arguments cause a NullPointerException. 					//This improves reporting.				}			} catch (MissingResourceException mre) {				// caller will try and handle the last chance				if (lastChance)					throw mre;			} 		}		if (messageId == null)			messageId = "UNKNOWN";				StringBuffer sb = new StringBuffer(messageId);		sb.append(" : ");		int len = arguments.length;		for (int i=0; i < len; i++) {		    // prepend a comma to all but the first			if (i > 0)				sb.append(", ");			sb.append('[');			sb.append(i);			sb.append("] ");			if (arguments[i] == null)				sb.append("null");			else				sb.append(arguments[i].toString());		}				return sb.toString();	}	private static ResourceBundle getBundle(String messageId) {		ResourceBundle bundle = null;		if (finder != null)			bundle = finder.getBundle(messageId);		if (bundle == null) {			bundle = MessageService.getBundleForLocale(Locale.getDefault(), messageId);		}		return bundle;	}	/**		Method to use instead of ResourceBundle.getBundle().		This method acts like ResourceBundle.getBundle() but if		the resource is not available in the requested locale,		default locale or base class the one for en_US is returned.	*/	public static ResourceBundle getBundleWithEnDefault(String resource, Locale locale) {		try {			return ResourceBundle.getBundle(resource, locale);		} catch (MissingResourceException mre) {			// This covers the case where neither the			// requested locale or the default locale			// have a resource.			return ResourceBundle.getBundle(resource, EN);		}	}	/**		Hash function to split messages into 50 files based		upon the message identifier or SQLState. We don't use		String.hashCode() as it varies between releases and		doesn't provide an even distribution across the 50 files.	*/	public static int hashString50(String key) {		int hash = 0;		int len = key.length();		if (len > 5)			len = 5;		for (int i = 0; i < len; i++) {			hash += key.charAt(i);		}		hash = hash % 50;		return hash;	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -