📄 msg.java
字号:
/******************************************************************************
* 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 + -