📄 textfilemessagepropertyhandler.java
字号:
/*
* 嶌惉擔: 2003/08/07
*
* 偙偺惗惉偝傟偨僐儊儞僩偺憓擖偝傟傞僥儞僾儗乕僩傪曄峏偡傞偨傔
* 僂傿儞僪僂 > 愝掕 > Java > 僐乕僪惗惉 > 僐乕僪偲僐儊儞僩
*/
package jp.co.intra_mart.framework.base.message;
import java.io.File;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
import java.util.MissingResourceException;
import java.util.ResourceBundle;
import jp.co.intra_mart.framework.system.property.PropertyHandlerException;
import jp.co.intra_mart.framework.system.property.PropertyParam;
import jp.co.intra_mart.framework.util.FileResourceBundle;
/**
* 巜掕偝傟偨僼傽僀儖偐傜僾儘僷僥傿忣曬傪庢摼偡傞儊僢僙乕僕僾儘僷僥傿僴儞僪儔偱偡丅
* 僼傽僀儖偺彂幃偼{@link DefaultMessagePropertyHandler}偱帵偝傟傞傕偺偲摨偠偱偡丅<BR>
* 僼傽僀儖偑懚嵼偡傞僨傿儗僋僩儕柤偼{@link #PARAM_FILE_DIR}偱帵偝傟傞僷儔儊乕僞柤偱巜掕偟傑偡丅<BR>
* {@link #PARAM_DYNAMIC}偱帵偝傟傞僷儔儊乕僞偵true傪巜掕偟偨応崌
* 傾僾儕働乕僔儑儞幚峴帪偵傕僾儘僷僥傿偺曄峏傪摦揑偵斀塮偝偣傞偙偲偑壜擻偲側傝傑偡偑丄
* 僷儔儊乕僞偺庢摼帪偵枅夞僼傽僀儖憖嶌傪峴偆偨傔僷僼僅乕儅儞僗偵埆塭嬁傪梌偊傞壜擻惈偑偁傝傑偡丅
* 偙偺僆僾僔儑儞偼丄奐敪帪傗僨僶僢僌帪偺傛偆偵僷儔儊乕僞傪昿斏偵曄峏偡傞昁梫偑偁傞応崌偺傒true偲偟丄
* 捠忢偼false偵愝掕偟偰偍偄偰偔偩偝偄丅
*
* @author INTRAMART
* @since 4.2
*/
public class TextFileMessagePropertyHandler implements MessagePropertyHandler {
/**
* 僾儘僷僥傿僼傽僀儖偺僼傽僀儖僷僗偺僷儔儊乕僞柤
*/
public static final String PARAM_FILE_DIR = "file_dir";
/**
* 僾儘僷僥傿僼傽僀儖偺嵞撉傒崬傒壜擻偺僷儔儊乕僞柤
*/
public static final String PARAM_DYNAMIC = "dynamic";
/**
* 僨乕僞儕僜乕僗忣曬偑愝掕偝傟偰偄傞儕僜乕僗僶儞僪儖偺僾儗僼傿僢僋僗
*/
private String bundlePrefix;
/**
* 儊僢僙乕僕忣曬偑愝掕偝傟偰偄傞儕僜乕僗僶儞僪儖
*/
private Map bundles;
/**
* 僒乕價僗僾儘僷僥傿偺僼傽僀儖偑偁傞僨傿儗僋僩儕
*/
private String propertyFileDir;
/**
* 嵞愝掕壜擻僼儔僌
*/
private boolean dynamic;
public TextFileMessagePropertyHandler() {
this.bundles = new HashMap();
setPropertyFileDir(null);
setDynamic(false);
}
/**
* 傾僾儕働乕僔儑儞ID偲儘働乕儖偱巜掕偝傟偨儕僜乕僗僶儞僪儖傪庢摼偟傑偡丅
*
* @param application 傾僾儕働乕僔儑儞ID
* @param locale 儘働乕儖
* @return 傾僾儕働乕僔儑儞ID偲儘働乕儖偵奩摉偡傞儕僜乕僗僶儞僪儖
* @throws MessagePropertyException 儕僜乕僗僶儞僪儖偺庢摼帪偵椺奜偑敪惗
*/
private ResourceBundle getResourceBundle(String application, Locale locale)
throws MessagePropertyException {
Locale realLocale = locale;
if (realLocale == null) {
realLocale = new Locale("", "");
}
if (isDynamic()) {
return createResourceBundle(application, realLocale);
} else {
ResourceBundle result = null;
Map bundle = null;
synchronized (this.bundles) {
bundle = (Map)this.bundles.get(realLocale);
if (bundle == null) {
bundle = new HashMap();
this.bundles.put(realLocale, bundle);
}
}
synchronized (bundle) {
result = (ResourceBundle)bundle.get(application);
if (result == null) {
result = createResourceBundle(application, realLocale);
bundle.put(application, result);
}
}
return result;
}
}
/**
* 傾僾儕働乕僔儑儞ID偱巜掕偝傟偨儕僜乕僗僶儞僪儖傪惗惉偟傑偡丅
*
* @param application 傾僾儕働乕僔儑儞ID
* @param locale 儘働乕儖
* @return 傾僾儕働乕僔儑儞ID偵奩摉偡傞儕僜乕僗僶儞僪儖
* @throws MessagePropertyException 儕僜乕僗僶儞僪儖偺庢摼帪偵椺奜偑敪惗
*/
private ResourceBundle createResourceBundle(
String application,
Locale locale)
throws MessagePropertyException {
try {
return new FileResourceBundle(
getPropertyFileDir()
+ File.separator
+ getBundlePrefix()
+ "_"
+ application,
locale);
} catch (Exception e) {
throw new MessagePropertyException(e.getMessage(), e);
}
}
/**
* 僾儘僷僥傿僼傽僀儖偑偁傞僨傿儗僋僩儕傪愝掕偟傑偡丅
*
* @param propertyFileDir 僾儘僷僥傿僼傽僀儖偑偁傞僨傿儗僋僩儕
*/
private void setPropertyFileDir(String propertyFileDir) {
this.propertyFileDir = propertyFileDir;
}
/**
* 僾儘僷僥傿僼傽僀儖偑偁傞僨傿儗僋僩儕傪庢摼偟傑偡丅
*
* @return 僾儘僷僥傿僼傽僀儖偑偁傞僨傿儗僋僩儕
*/
private String getPropertyFileDir() {
return this.propertyFileDir;
}
/**
* 嵞愝掕壜擻乛晄壜擻傪愝掕偟傑偡丅
*
* @param dynamic true 嵞愝掕壜擻丄false 嵞愝掕晄壜
*/
private void setDynamic(boolean dynamic) {
this.dynamic = dynamic;
}
/**
* 僾儘僷僥傿偺摦揑撉傒崬傒偑壜擻偐偳偆偐挷傋傑偡丅
*
* @return true 嵞愝掕壜擻丄false 嵞愝掕晄壜
*/
public boolean isDynamic() throws MessagePropertyException {
return this.dynamic;
}
/**
* 儊僢僙乕僕傪庢摼偟傑偡丅
* <code>application</code>偱巜掕偝傟傞傾僾儕働乕僔儑儞屌桳偺僾儘僷僥傿偐傜
* <code>key</code>偵奩摉偡傞儊僢僙乕僕傪庢摼偟傑偡丅
* 僔僗僥儉偑壱摦偟偰偄傞儘働乕儖傪僸儞僩偵儊僢僙乕僕傪庢摼偟傑偡丅
*
* @param application 傾僾儕働乕僔儑儞ID
* @param key 儊僢僙乕僕偺僉乕
* @return 儊僢僙乕僕
* @throws MessagePropertyException 儊僢僙乕僕庢摼帪偵椺奜偑敪惗
*/
public String getMessage(String application, String key)
throws MessagePropertyException {
return getMessage(application, key, Locale.getDefault());
}
/**
* 儊僢僙乕僕傪庢摼偟傑偡丅
* <code>application</code>偱巜掕偝傟傞傾僾儕働乕僔儑儞屌桳偺僾儘僷僥傿偐傜
* <code>key</code>偵奩摉偡傞儊僢僙乕僕傪庢摼偟傑偡丅
* <code>locale</code>偱巜掕偝傟偨儘働乕儖傪僸儞僩偵儊僢僙乕僕傪庢摼偟傑偡丅
*
* @param application 傾僾儕働乕僔儑儞ID
* @param key 儊僢僙乕僕偺僉乕
* @param locale 儘働乕儖
* @return 儊僢僙乕僕
* @throws MessagePropertyException 儊僢僙乕僕庢摼帪偵椺奜偑敪惗
*/
public String getMessage(String application, String key, Locale locale)
throws MessagePropertyException {
ResourceBundle bundle = getResourceBundle(application, locale);
return ResourceBundleMessagePropertyHandlerUtil.getMessage(
bundle,
application,
key,
locale);
}
/**
* 僾儘僷僥傿僴儞僪儔傪弶婜壔偟傑偡丅
*
* @param params 弶婜僷儔儊乕僞
* @throws PropertyHandlerException 僾儘僷僥傿僴儞僪儔偺弶婜壔帪偵椺奜偑敪惗
*/
public void init(PropertyParam[] params) throws PropertyHandlerException {
String bundleName = null;
String fileDir = null;
String dynamic = null;
// 僷儔儊乕僞偺僷乕僗
for (int i = 0; i < params.length; i++) {
if (params[i]
.getName()
.equals(
DefaultMessagePropertyHandler.DEFAULT_BUNDLE_NAME_PARAM)) {
// 儕僜乕僗僶儞僪儖偺僼傽僀儖柤偺応崌
bundleName = params[i].getValue();
} else if (params[i].getName().equals(PARAM_FILE_DIR)) {
// 僼傽僀儖僨傿儗僋僩儕偺応崌
fileDir = params[i].getValue();
} else if (params[i].getName().equals(PARAM_DYNAMIC)) {
// 嵞愝掕壜擻僼儔僌偺応崌
dynamic = params[i].getValue();
}
}
// 儕僜乕僗僶儞僪儖僾儗僼傿僢僋僗偺愝掕
if (bundleName == null) {
bundleName = DefaultMessagePropertyHandler.DEFAULT_BUNDLE_NAME;
}
setBundlePrefix(bundleName);
// 嵞愝掕壜擻僼儔僌偺愝掕
Boolean dummyDynamic = new Boolean(dynamic);
setDynamic(dummyDynamic.booleanValue());
// 僾儘僷僥傿僼傽僀儖僨傿儗僋僩儕偺昁恵僠僃僢僋
if (fileDir == null) {
String message = null;
try {
message =
ResourceBundle
.getBundle("jp.co.intra_mart.framework.base.message.i18n")
.getString("TextFileMessagePropertyHandler.param.FileDirNotFound");
} catch (MissingResourceException e) {
}
throw new PropertyHandlerException(
message + " : " + PARAM_FILE_DIR);
}
this.propertyFileDir = fileDir;
}
/**
* 儕僜乕僗僶儞僪儖偺僾儗僼傿僢僋僗傪愝掕偟傑偡丅
*
* @param bundlePrefix 儕僜乕僗僶儞僪儖偺僾儗僼傿僢僋僗
*/
private void setBundlePrefix(String bundlePrefix) {
this.bundlePrefix = bundlePrefix;
}
/**
* 儕僜乕僗僶儞僪儖偺僾儗僼傿僢僋僗傪庢摼偟傑偡丅
*
* @return 儕僜乕僗僶儞僪儖偺僾儗僼傿僢僋僗
*/
private String getBundlePrefix() {
return this.bundlePrefix;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -