📄 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 Smart Business Solution. The Initial
* Developer of the Original Code is Jorg Janke. Portions created by Jorg Janke
* are Copyright (C) 1999-2005 Jorg Janke.
* All parts are Copyright (C) 1999-2005 ComPiere, Inc. All Rights Reserved.
* Contributor(s): ______________________________________.
*****************************************************************************/
package org.compiere.util;
import java.io.*;
import java.sql.*;
import java.text.*;
import java.util.*;
import java.util.logging.*;
import org.compiere.*;
/**
* Reads all Messages and stores them in a HashMap
*
* @author Jorg Janke
* @version $Id: Msg.java,v 1.25 2005/10/26 00:38:20 jjanke Exp $
*/
public final class Msg
{
/** Initial size of HashMap */
private static final int MAP_SIZE = 750;
/** Separator between Msg and optional Tip */
private static final String SEPARATOR = Env.NL + Env.NL;
/** Singleton */
private static Msg s_msg = null;
/** Logger */
private static CLogger s_log = CLogger.getCLogger (Msg.class);
/**
* Get Message Object
* @return Mag
*/
private static Msg get()
{
if (s_msg == null)
s_msg = new Msg();
return s_msg;
} // get
/**************************************************************************
* Constructor
*/
private Msg()
{
} // Mag
/** The Map */
private CCache<String,CCache<String,String>> m_languages
= new CCache<String,CCache<String,String>>("msg_lang", 2, 0);
/**
* Get Language specific Message Map
* @param ad_language Language Key
* @return HashMap of Language
*/
private CCache<String,String> getMsgMap (String ad_language)
{
String AD_Language = ad_language;
if (AD_Language == null || AD_Language.length() == 0)
AD_Language = Language.getBaseAD_Language();
// Do we have the language ?
CCache<String,String> retValue = (CCache<String,String>)m_languages.get(AD_Language);
if (retValue != null && retValue.size() > 0)
return retValue;
// Load Language
retValue = initMsg(AD_Language);
if (retValue != null)
{
m_languages.put(AD_Language, retValue);
return retValue;
}
return retValue;
} // getMsgMap
/**
* Init message HashMap.
* The initial call is from ALogin (ConfirmPanel init).
* The second from Env.verifyLanguage.
* @param AD_Language Language
* @return Cache HashMap
*/
private CCache<String,String> initMsg (String AD_Language)
{
// Trace.printStack();
CCache<String,String> msg = new CCache<String,String>("AD_Message", MAP_SIZE, 0);
//
if (!DB.isConnected())
{
s_log.log(Level.SEVERE, "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", null);
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=?", null);
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(" ").append(SEPARATOR).append(MsgTip);
msg.put(AD_Message, MsgText.toString());
}
rs.close();
pstmt.close();
}
catch (SQLException e)
{
s_log.log(Level.SEVERE, "initMsg", e);
return null;
}
//
if (msg.size() < 100)
{
s_log.log(Level.SEVERE, "Too few (" + msg.size() + ") Records found for " + AD_Language);
return null;
}
s_log.info("Records=" + msg.size() + " - " + AD_Language);
return msg;
} // initMsg
/**
* Reset Message cache
*/
public void reset()
{
if (m_languages == null)
return;
// clear all languages
Iterator iterator = m_languages.values().iterator();
while (iterator.hasNext())
{
HashMap hm = (HashMap)iterator.next();
hm.clear();
}
m_languages.clear();
} // reset
/**
* Return an array of the installed Languages
* @return Array of loaded Languages or null
*/
public String[] getLanguages()
{
if (m_languages == null)
return null;
String[] retValue = new String[m_languages.size()];
m_languages.keySet().toArray(retValue);
return retValue;
} // getLanguages
/**
* Check if Language is loaded
* @param language Language code
* @return true, if language is loaded
*/
public boolean isLoaded (String language)
{
if (m_languages == null)
return false;
return m_languages.containsKey(language);
} // isLoaded
/**
* Lookup term
* @param AD_Language language
* @param text text
* @return translated term or null
*/
private 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 = get().lookup (AD_Language, AD_Message);
//
if (retStr == null || retStr.length() == 0)
{
s_log.warning("NOT found: " + AD_Message);
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
* @param ctx Context to retrieve 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 (Properties ctx, String AD_Message, boolean getText)
{
return getMsg (Env.getAD_Language(ctx), AD_Message, getText);
} // getMsg
/**
* Get translated text message for AD_Message
* @param language Language
* @param AD_Message Message Key
* @param getText if true only return Text, if false only return Tip
* @return translated text
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -