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

📄 msg.java

📁 Java写的ERP系统
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/******************************************************************************
 * The contents of this file are subject to the   Compiere License  Version 1.1
 * ("License"); You may not use this file except in compliance with the License
 * You may obtain a copy of the License at http://www.compiere.org/license.html
 * Software distributed under the License is distributed on an  "AS IS"  basis,
 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
 * the specific language governing rights and limitations under the License.
 * The Original Code is                  Compiere  ERP & CRM  Business Solution
 * The Initial Developer of the Original Code is Jorg Janke  and ComPiere, Inc.
 * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, parts
 * created by ComPiere are Copyright (C) ComPiere, Inc.;   All Rights Reserved.
 * Contributor(s): ______________________________________.
 *****************************************************************************/
package org.compiere.util;

import java.sql.*;
import java.util.*;
import java.text.*;
import java.io.*;
import org.apache.log4j.Logger;

import org.compiere.Compiere;

/**
 *	Reads all Messages and stores them in a HashMap
 *
 *  @author     Jorg Janke
 *  @version    $Id: Msg.java,v 1.4 2003/05/04 06:46:24 jjanke Exp $
 */
public final class Msg
{
	/** Initial size of HashMap     */
	private static final int MAP_SIZE = 600;
	/**  The Map                    */
	private static HashMap s_languages = null;
	/**  Separator between Msg and optional Tip     */
	private static final String     SEPARATOR = "\n\n";
	/**	Logger							*/
	private static Logger			s_log = Logger.getLogger (Msg.class);

	/**
	 *  Get Language specific Message Map
	 *  @param ad_language Language Key
	 *  @return HashMap of Language
	 */
	private static HashMap getMsgMap (String ad_language)
	{
		String AD_Language = ad_language;
		if (AD_Language == null || AD_Language.length() == 0)
			AD_Language = Language.getBaseAD_Language();
		if (s_languages == null)
		{
			s_languages = new HashMap (4);
			HashMap lang = initMsg(AD_Language);
			if (lang != null)
				s_languages.put(AD_Language, lang);
		}
		//  Do we have the language ?
		HashMap retValue = (HashMap)s_languages.get(AD_Language);
		if (retValue != null)
			return retValue;

		//  Load additional Language
		retValue = initMsg(AD_Language);
		if (retValue != null)
		{
			s_languages.put(AD_Language, retValue);
			return retValue;
		}
		//	Language not loaded successfully - load English
		if (s_languages.size() == 0)
			s_languages.put(Language.getBaseAD_Language(), initMsg(Language.getBaseAD_Language()));
		return null;
	}   //  getMsgMap


	/**
	 *	Init message HashMap
	 *  @param AD_Language Language
	 *  @return HashMap
	 */
	private static HashMap initMsg (String AD_Language)
	{
		HashMap msg = new HashMap (MAP_SIZE);
		//
		if (!DB.isConnected())
		{
			s_log.error("initMsg - no DB Connection");
			return null;
		}
		try
		{
			PreparedStatement pstmt = null;
			if (AD_Language == null || AD_Language.length() == 0 || Env.isBaseLanguage(AD_Language, "AD_Language"))
				pstmt = DB.prepareStatement("SELECT Value, MsgText, MsgTip FROM AD_Message");
			else
			{
				pstmt = DB.prepareStatement("SELECT m.Value, t.MsgText, t.MsgTip "
					+ "FROM AD_Message_Trl t, AD_Message m "
					+ "WHERE m.AD_Message_ID=t.AD_Message_ID"
					+ " AND t.AD_Language=?");
				pstmt.setString(1, AD_Language);
			}
			ResultSet rs = pstmt.executeQuery();

			//	get values
			while (rs.next())
			{
				String AD_Message = rs.getString(1);
				StringBuffer MsgText = new StringBuffer();
				MsgText.append(rs.getString(2));
				String MsgTip = rs.getString(3);
				//
				if (MsgTip != null)			//	messageTip on next line, if exists
					MsgText.append(SEPARATOR).append(MsgTip);
				msg.put(AD_Message, MsgText.toString());
			}

			rs.close();
			pstmt.close();
		}
		catch (SQLException e)
		{
			s_log.error("initMsg", e);
			return null;
		}
		//
		if (msg.size() < 100)
		{
			s_log.error("initMsg - Too few (" + msg.size() + ") Records found for " + AD_Language);
			return null;
		}
		s_log.info("initMsg records=" + msg.size() + " - " + AD_Language);
		return msg;
	}	//	initMsg

	/**
	 *  Reset Message cache
	 */
	public static void reset()
	{
		if (s_languages == null)
			return;

		//  clear all languages
		Iterator iterator = s_languages.values().iterator();
		while (iterator.hasNext())
		{
			HashMap hm = (HashMap)iterator.next();
			hm.clear();
		}
		s_languages.clear();
		s_languages = null;
	}   //  reset

	/**
	 *  Return an array of the installed Languages
	 *  @return Array of loaded Languages or null
	 */
	public static String[] getLanguages()
	{
		if (s_languages == null)
			return null;
		String[] retValue = new String[s_languages.size()];
		s_languages.keySet().toArray(retValue);
		return retValue;
	}   //  getLanguages

	/**
	 *  Check if Language is loaded
	 *  @param language Language code
	 *  @return true, if language is loaded
	 */
	public static boolean isLoaded (String language)
	{
		if (s_languages == null)
			return false;
		return s_languages.containsKey(language);
	}   //  isLoaded

	/**
	 *  Lookup term
	 *  @param AD_Language language
	 *  @param text text
	 *  @return translated term or null
	 */
	private static String lookup (String AD_Language, String text)
	{
		if (text == null)
			return null;
		if (AD_Language == null || AD_Language.length() == 0)
			return text;
		//  hardcoded trl
		if (text.equals("/") || text.equals("\\"))
			return File.separator;
		if (text.equals(";") || text.equals(":"))
			return File.pathSeparator;
		if (text.equals("COMPIERE_HOME"))
			return Compiere.getCompiereHome();
		if (text.equals("bat") || text.equals("sh"))
		{
			if (System.getProperty("os.name").startsWith("Win"))
				return "bat";
			return "sh";
		}
		if (text.equals("CopyRight"))
			return Compiere.COPYRIGHT;
		//
		HashMap langMap = getMsgMap(AD_Language);
		if (langMap == null)
			return null;
		return (String)langMap.get(text);
	}   //  lookup

	/*************************************************************************/

	/**
	 *	Get translated text for AD_Message
	 *  @param  ad_language - Language
	 *  @param	AD_Message - Message Key
	 *  @return translated text
	 */
	public static String getMsg (String ad_language, String AD_Message)
	{
		if (AD_Message == null || AD_Message.length() == 0)
			return "";
		//
		String AD_Language = ad_language;
		if (AD_Language == null || AD_Language.length() == 0)
			AD_Language = Language.getBaseAD_Language();
		//
		String retStr = lookup (AD_Language, AD_Message);
		//
		if (retStr == null || retStr.length() == 0)
		{
			if (Log.isTraceLevel(Log.l6_Database))
			{
				s_log.error("getMsg - NOT found: " + AD_Message);
			//	Trace.printStack();
			}
			return AD_Message;
		}

		return retStr;
	}	//	getMsg

	/**
	 *  Get translated text message for AD_Message
	 *  @param  ctx Context to retrieve language
	 *  @param	AD_Message - Message Key
	 *  @return translated text
	 */
	public static String getMsg (Properties ctx, String AD_Message)
	{
		return getMsg (Env.getAD_Language(ctx), AD_Message);
	}   //  getMeg

	/**
	 *  Get translated text message for AD_Message
	 *  @param  language Language
	 *  @param	AD_Message - Message Key
	 *  @return translated text
	 */
	public static String getMsg (Language language, String AD_Message)
	{
		return getMsg (language.getAD_Language(), AD_Message);
	}   //  getMeg

	/**
	 *  Get translated text message for AD_Message
	 *  @param  ad_language - Language
	 *  @param	AD_Message - Message Key
	 *  @param  getText if true only return Text, if false only return Tip
	 *  @return translated text
	 */
	public static String getMsg (String ad_language, String AD_Message, boolean getText)
	{
		String retStr = getMsg (ad_language, AD_Message);
		int pos = retStr.indexOf(SEPARATOR);
		//  No Tip
		if (pos == -1)
		{
			if (getText)
				return retStr;
			else
				return "";
		}
		else    //  with Tip
		{
			if (getText)
				retStr = retStr.substring (0, pos);
			else
			{
				int start = pos + SEPARATOR.length();
				int end = retStr.length();
				retStr = retStr.substring (start);
			}
		}
		return retStr;
	}	//	getMsg

	/**
	 *  Get translated text message for AD_Message

⌨️ 快捷键说明

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