package zj.message.util;
import java.io.Serializable;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.ResourceBundle;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import org.apache.log4j.Logger;
import zj.java.util.JavaUtil;
/**
* 资源文件工具类<br>
*
* @version 1.00 (2011.12.02)
* @author SHNKCS 张军 {@link <a target=_blank href="http://www.zhangjunbk.com">张军个人网站</a> <a target=_blank href="http://user.qzone.qq.com/360901061/">张军QQ空间</a>}
* @see zj.message.util.MessageConstantsUtil
* @see zj.message.util.MessageI18nUtil
*/
@Deprecated
public class MessageUtil implements Serializable {
private static final long serialVersionUID = 1L;
private transient static final Logger log = Logger.getLogger(MessageUtil.class);
public static String AJAX_SUCCESS;
public static String AJAX_FAIL;
public static String AJAX_MSG;
/** 是否重新获取配置文件值 **/
public static boolean RELOAD_READ;
/** 资源键值对 **/
public static final Map<String, String> CONSTANT_KEY_VALUE = new ConcurrentHashMap<String, String>();
/** 国际化资源文件键值对 **/
public static final Map<String, String> I18N_RESOURCE_KEY_VALUE = new ConcurrentHashMap<String, String>();
/** 资源键值对临时集合 **/
public static final Map<String, String> TEMP_CONSTANT_KEY_VALUE = new ConcurrentHashMap<String, String>();
/** 国际化资源文件临时集合 **/
public static final Map<String, String> TEMP_I18N_RESOURCE_KEY_VALUE = new ConcurrentHashMap<String, String>();
/** 国际化资源文件名以,隔开 */
private static String I18N_RESOURCE;
/** 国际化资源文件地址集合,无序 **/
public static Set<String> I18N_RESOURCES = new HashSet<String>();
/** 资源文件地址 */
private static String CONFIG;
/** 资源文件地址集合,无序 **/
public static List<String> CONFIGS = new ArrayList<String>();
/** 资源文件地址 */
private static final String I18N_RESOURCE_KEY = "cons.global.i18n.resouces";
/** 资源文件地址 */
private static final String CONFIG_KEY = "cons.global.config";
/** 国际化资源文件/资源文件内容初使化 **/
static {
AJAX_SUCCESS = "success";
AJAX_FAIL = "fail";
AJAX_MSG = "msg";
// 默认注册资源文件地址
CONFIGS.add("./constant.properties");
CONFIGS.add("./systemConfig.properties");
CONFIGS.add("./app.properties");
I18N_RESOURCES.add("i18n.page");
I18N_RESOURCES.add("i18n.info");
I18N_RESOURCES.add("i18n.error");
I18N_RESOURCES.add("i18n.app.page");
I18N_RESOURCES.add("i18n.app.info");
I18N_RESOURCES.add("i18n.app.error");
// 添加新的国际化资源文件地址
I18N_RESOURCE = getConstant(I18N_RESOURCE_KEY, true);
String[] i18n_resources = JavaUtil.split(I18N_RESOURCE, ",");
for (String s : i18n_resources) {
if (s == null || s.equals("") || s.equals(I18N_RESOURCE_KEY))
continue;
I18N_RESOURCES.add(s);
}
// 添加新的资源文件地址
CONFIG = getConstant(CONFIG_KEY, true);
String[] configs = JavaUtil.split(CONFIG, ",");
for (String s : configs) {
if (s == null || s.equals("") || s.equals(CONFIG_KEY))
continue;
CONFIGS.add(s);
}
}
// 国际化资源文件
/**
* 获取资源文件值
*
* @param key
* 资源文件key
* @param notExistIsNull
* <p>
* true:如果资源文件键不存在,则返回null
* </p>
* <p>
* false:如果资源文件键不存在,则返回资源文件key
* </p>
* @return 资源文件值
*/
public static String getString(String key, boolean notExistIsNull) {
return getString(key, I18N_RESOURCES, notExistIsNull);
}
/**
* 获取资源文件值
*
* @param key
* 资源文件key
* @return 资源文件值
*/
public static String getString(String key) {
return getString(key, false);
}
/**
* 通过key,action类获取资源文件值
*
* @param key
* 资源文件key
* @param action
* action对应的类
* @param notExistIsNull
* <p>
* true:如果资源文件键不存在,则返回null
* </p>
* <p>
* false:如果资源文件键不存在,则返回资源文件key
* </p>
* @return 资源文件值
*/
public static String getStringByClass(String key, Class<?> action, boolean notExistIsNull) {
// 添加后会去重
I18N_RESOURCES.add(action.getName());
return getString(key, notExistIsNull);
}
/**
* 通过key,action类获取资源文件值
*
* @param key
* 资源文件key
* @param action
* action对应的类
* @return 资源文件值
*/
public static String getStringByClass(String key, Class<?> action) {
return getStringByClass(key, action, false);
}
/**
* 获取资源文件值
*
* @param key
* 资源文件key
* @param notExistIsNull
* <p>
* true:如果资源文件键不存在,则返回null
* </p>
* <p>
* false:如果资源文件键不存在,则返回资源文件key
* </p>
* @param arguments
* 资源文件参数
* @return 资源文件值
*/
public static String getStringByMemoryParams(String key, boolean notExistIsNull, Object... arguments) {
return getValueByParams(getStringByMemory(key), arguments);
}
/**
* 获取资源文件值
*
* @param key
* 资源文件key
* @param arguments
* 资源文件参数
* @return 资源文件值
*/
public static String getStringByMemoryParams(String key, Object... arguments) {
return getStringByMemoryParams(key, false, arguments);
}
/**
* 获取资源文件值
*
* @param key
* 资源文件key
* @param baseNames
* 国际化资源文件地址集合,无序
* @param notExistIsNull
* <p>
* true:如果资源文件键不存在,则返回null
* </p>
* <p>
* false:如果资源文件键不存在,则返回资源文件key
* </p>
* @param arguments
* 资源文件参数
* @return 资源文件值
*/
public static String getStringBySetParams(String key, Set<String> baseNames, boolean notExistIsNull, Object... arguments) {
try {
return getValueByParams(getString(key, baseNames, notExistIsNull), arguments);
} catch (Exception e) {
e.printStackTrace();
return key;
}
}
/**
* 获取资源文件值
*
* @param key
* 资源文件key
* @param baseNames
* 国际化资源文件地址集合,无序
* @param arguments
* 资源文件参数
* @return 资源文件值
*/
public static String getStringBySetParams(String key, Set<String> baseNames, Object... arguments) {
return getStringBySetParams(key, baseNames, false, arguments);
}
/**
* 获取资源文件值
*
* @param key
* 资源文件key
* @param notExistIsNull
* <p>
* true:如果资源文件键不存在,则返回null
* </p>
* <p>
* false:如果资源文件键不存在,则返回资源文件key
* </p>
* @param arguments
* 资源文件参数
* @return 资源文件值
*/
public static String getStringByParams(String key, boolean notExistIsNull, Object... arguments) {
return getStringBySetParams(key, I18N_RESOURCES, notExistIsNull, arguments);
}
/**
* 获取资源文件值
*
* @param key
* 资源文件key
* @param arguments
* 资源文件参数
* @return 资源文件值
*/
public static String getStringByParams(String key, Object... arguments) {
return getStringByParams(key, false, arguments);
}
/**
* 获取资源文件值
*
* @param key
* 资源文件key
* @param action
* action对应的类
* @param notExistIsNull
* <p>
* true:如果资源文件键不存在,则返回null
* </p>
* <p>
* false:如果资源文件键不存在,则返回资源文件key
* </p>
* @param arguments
* 资源文件参数
* @return 资源文件值
*/
public static String getStringByClassParams(String key, Class<?> action, boolean notExistIsNull, Object... arguments) {
I18N_RESOURCES.add(action.getName());
return getStringByParams(key, notExistIsNull, arguments);
}
/**
* 获取资源文件值
*
* @param key
* 资源文件key
* @param action
* action对应的类
* @param arguments
* 资源文件参数
* @return 资源文件值
*/
public static String getStringByClassParams(String key, Class<?> action, Object... arguments) {
return getStringByClassParams(key, action, false, arguments);
}
// 资源文件
/**
* 获取资源文件值
*
* @param key
* 资源文件key
* @param notExistIsNull
* <p>
* true:如果资源文件键不存在,则返回null
* </p>
* <p>
* false:如果资源文件键不存在,则返回资源文件key
* </p>
* @return 资源文件值
*/
public static String getConstant(String key, boolean notExistIsNull) {
String value = null;
if (RELOAD_READ || (value = TEMP_CONSTANT_KEY_VALUE.get(key)) == null) {
boolean exists = false;
for (String path : CONFIGS) {
value = ConfigUtil.getConfig(path, key);
if (value != null && !value.equals(key)) {
exists = true;
break;
}
}
if (!exists) {
if (notExistIsNull) {
value = null;
} else {
value = key;
}
}
if (value != null) {
TEMP_CONSTANT_KEY_VALUE.put(key, value);
}
} else {
}
return value;
}
/**
* 获取资源文件值
*
* @param key
* 资源文件key
* @return 资源文件值
*/
public static String getConstant(String key) {
return getConstant(key, false);
}
/**
* 获取资源文件值
*
* @param key
* 资源文件key
* @param notExistIsNull
* <p>
* true:如果资源文件键不存在,则返回null
* </p>
* <p>
* false:如果资源文件键不存在,则返回资源文件key
* </p>
* @param arguments
* 资源文件参数
* @return 资源文件值
*/
public static String getConstantByParams(String key, boolean notExistIsNull, Object... arguments) {
return getValueByParams(getConstant(key, notExistIsNull), arguments);
}
/**
* 获取资源文件值
*
* @param key
* 资源文件key
* @param arguments
* 资源文件参数
* @return 资源文件值
*/
public static String getConstantByParams(String key, Object... arguments) {
return getConstantByParams(key, false, arguments);
}
/**
* 获取资源文件值
*
* @param key
* 资源文件key
* @param paths
* 资源文件路径集合
* @param notExistIsNull
* <p>
* true:如果资源文件键不存在,则返回null
* </p>
* <p>
* false:如果资源文件键不存在,则返回资源文件key
* </p>
* @return 资源文件值
*/
public static String getConstantValueByMemory(String key, List<String> paths, boolean notExistIsNull) {
String value = null;
if (key == null || "".equals(key)) {
// 先清除缓存
CONSTANT_KEY_VALUE.clear();
TEMP_CONSTANT_KEY_VALUE.clear();
// 最好只调用一次
CONSTANT_KEY_VALUE.putAll(ConfigUtil.getConstantKeyValues(paths));
} else {
if (RELOAD_READ || (value = CONSTANT_KEY_VALUE.get(key)) == null) {
value = getConstant(key, notExistIsNull);
CONSTANT_KEY_VALUE.put(key, value);
}
}
return value;
}
/**
* 获取资源文件值
*
* @param key
* 资源文件key
* @param paths
* 资源文件路径集合
* @return 资源文件值
*/
public static String getConstantValueByMemory(String key, List<String> paths) {
return getConstantValueByMemory(key, paths, false);
}
/**
* 设置所有资源文件键值到内存中
*
* @param config
*/
public static void setConstantKeyValueToMemory(List<String> config) {
getConstantValueByMemory(null, CONFIGS);
}
/**
* 设置所有资源键值
*/
public static void setConstantKeyValueToMemory() {
setConstantKeyValueToMemory(CONFIGS);
}
/**
* 获取资源文件值
*
* @param key
* 资源文件key
* @param notExistIsNull
* <p>
* true:如果资源文件键不存在,则返回null
* </p>
* <p>
* false:如果资源文件键不存在,则返回资源文件key
* </p>
* @return 资源文件值
*/
public static String getConstantValueByMemory(String key, boolean notExistIsNull) {
return getConstantValueByMemory(key, CONFIGS, notExistIsNull);
}
/**
* 获取资源文件值
*
* @param key
* 资源文件key
* @return 资源文件值
*/
public static String getConstantValueByMemory(String key) {
return getConstantValueByMemory(key, false);
}
/**
* 获取资源文件值
*
* @param key
* 资源文件key
* @param notExistIsNull
* <p>
* true:如果资源文件键不存在,则返回null
* </p>
* <p>
* false:如果资源文件键不存在,则返回资源文件key
* </p>
* @param arguments
* 资源文件参数
* @return 资源文件值
*/
public static String getConstantValueByMemoryParams(String key, boolean notExistIsNull, Object... arguments) {
return getValueByParams(getConstantValueByMemory(key, notExistIsNull), arguments);
}
/**
* 获取资源文件值
*
* @param key
* 资源文件key
* @param arguments
* 资源文件参数
* @return 资源文件值
*/
public static String getConstantValueByMemoryParams(String key, Object... arguments) {
return getConstantValueByMemoryParams(key, false, arguments);
}
/**
* 配置文件内容取得带参数
*
* @param value
* @param arguments
* @return
*/
public static String getValueByParams(String value, Object... arguments) {
try {
return MessageFormat.format(value, arguments);
} catch (Exception e) {
e.printStackTrace();
return value;
}
}
/**
* 通过key获取资源文件值
*
* @param key
* @return
*/
public static String getStringByMemory(String key) {
String value = null;
if (key == null || "".equals(key)) {
// 最好只调用一次
setStringKeyValuesToMemory();
} else {
if (RELOAD_READ || (value = I18N_RESOURCE_KEY_VALUE.get(key)) == null) {
value = getString(key);
I18N_RESOURCE_KEY_VALUE.put(key, value);
}
}
return value == null ? key : value;
}
/**
* 打印debug信息
*
* @return
*/
public static void debugString() {
log.debug("国际化资源文件列表如下:");
for (String s : I18N_RESOURCES) {
log.debug("I18N_RESOURCES:" + s);
}
log.debug("资源文件列表如下:");
for (String s : CONFIGS) {
log.debug("CONFIGS:" + s);
}
log.debug("CONSTANT_KEY_VALUE:" + CONSTANT_KEY_VALUE.entrySet());
log.debug("I18N_RESOURCE_KEY_VALUE:" + I18N_RESOURCE_KEY_VALUE.entrySet());
log.debug("TEMP_CONSTANT_KEY_VALUE:" + TEMP_CONSTANT_KEY_VALUE.entrySet());
log.debug("TEMP_I18N_RESOURCE_KEY_VALUE:" + TEMP_I18N_RESOURCE_KEY_VALUE.entrySet());
}
/**
* 通过resources设置所有资源文件键值到内存中
*
* @param resources
*/
public static void setStringKeyValuesToMemory(Set<String> resources) {
setStringKeyValuesToMemory(resources, Locale.getDefault());
}
/**
* 设置所有资源文件键值到内存中
*/
public static void setStringKeyValuesToMemory() {
setStringKeyValuesToMemory(I18N_RESOURCES);
}
/**
* 通过resources设置所有资源文件键值到内存中
*
* @param resources
* @param locale
*/
public static void setStringKeyValuesToMemory(Set<String> resources, Locale locale) {
try {
// 先清除缓存
I18N_RESOURCE_KEY_VALUE.clear();
TEMP_I18N_RESOURCE_KEY_VALUE.clear();
ResourceBundle.clearCache();
if (locale == null) {
locale = new Locale("zh_CN");
}
ResourceBundle rb = null;
Iterator<String> it = resources.iterator();
while (it.hasNext()) {
String resource = it.next();
try {
rb = ResourceBundle.getBundle(resource, locale);
Enumeration<String> keys = rb.getKeys();
while (keys.hasMoreElements()) {
String key = keys.nextElement();
String value = rb.getString(key);
I18N_RESOURCE_KEY_VALUE.put(key, value);
}
} catch (Exception e) {
log.warn("设置资源文件警告:" + e.getMessage());
}
}
} catch (Exception e) {
log.error("获取资源值失败:" + e.getMessage());
}
}
/**
* 通过key,baseNames获取资源文件值
*
* @param key
* 资源文件key
* @param baseNames
* 国际化资源文件地址集合,无序
* @param locale
* 特定的地理、政治和文化地区
* @param notExistIsNull
* <p>
* true:如果资源文件键不存在,则返回null
* </p>
* <p>
* false:如果资源文件键不存在,则返回资源文件key
* </p>
* @return 资源文件值
*/
public static String getString(String key, Set<String> baseNames, Locale locale, boolean notExistIsNull) {
String value = null;
key = JavaUtil.trim(key);
if (RELOAD_READ || (value = TEMP_I18N_RESOURCE_KEY_VALUE.get(key)) == null) {
try {
// 清除缓存
ResourceBundle.clearCache();
if (locale == null) {
locale = new Locale("zh_CN");
}
ResourceBundle rb = null;
Iterator<String> it = baseNames.iterator();
boolean exists = false;
while (it.hasNext()) {
String baseName = it.next();
try {
rb = ResourceBundle.getBundle(baseName, locale);
value = rb.getString(key);
} catch (Exception e) {
if (notExistIsNull) {
value = null;
} else {
value = key;
}
}
if (value != null && !value.equals(key)) {
exists = true;
break;
}
}
if (!exists) {
if (notExistIsNull) {
value = null;
} else {
value = key;
}
}
} catch (Exception e) {
log.error("获取资源值失败:" + e.getMessage());
if (notExistIsNull) {
value = null;
} else {
value = key;
}
}
TEMP_I18N_RESOURCE_KEY_VALUE.put(key, value);
} else {
}
return value;
}
/**
* 获取资源文件值
*
* @param key
* 资源文件key
* @param baseNames
* 国际化资源文件地址集合,无序
* @return 资源文件值
*/
public static String getString(String key, Set<String> baseNames) {
return getString(key, baseNames, Locale.getDefault(), false);
}
/**
* 通过key,baseNames获取资源文件值
*
* @param key
* 资源文件key
* @param baseNames
* 国际化资源文件地址集合,无序
* @param locale
* 特定的地理、政治和文化地区
* @return 资源文件值
*/
public static String getString(String key, Set<String> baseNames, Locale locale) {
return getString(key, baseNames, locale, false);
}
/**
* 获取资源文件值
*
* @param key
* 资源文件key
* @param baseNames
* 国际化资源文件地址集合,无序
* @param notExistIsNull
* <p>
* true:如果资源文件键不存在,则返回null
* </p>
* <p>
* false:如果资源文件键不存在,则返回资源文件key
* </p>
* @return 资源文件值
*/
public static String getString(String key, Set<String> baseNames, boolean notExistIsNull) {
return getString(key, baseNames, Locale.getDefault(), notExistIsNull);
}
}
本文为张军原创文章,转载无需和我联系,但请注明来自张军的军军小站,个人博客http://www.zhangjunbk.com

