/*
* 文件名称: UConfigHelper.java
* 版权信息: Copyright 2001-2011 ZheJiang Collaboration Data System Co., LTD. All right reserved.
* ----------------------------------------------------------------------------------------------
* 修改历史:
* ----------------------------------------------------------------------------------------------
* 修改原因: 新增
* 修改人员: LuoJingtian
* 修改日期: 2011-12-21
* 修改内容:
*/
package com.mfh.comna.comn.cfg;
import java.io.File;
import java.net.URL;
import java.util.List;
import com.mfh.comn.config.ConfigClass;
import com.mfh.comn.config.ConfigItem;
import com.mfh.comn.config.ConfigLocationItem;
import com.mfh.comn.config.ConfigsParseHelper;
import com.mfh.comn.config.UConfig;
/**
* 统一配置助手类, 非缓存的方式返回统一配置接口. <BR>
* 使用示例:
*
* <pre>
* UConfig uc = UConfigHelper.getUConfig("SHK.DB.UPGRADE");
* System.out.println(uc.getString("upgrade-config.domain"));
* System.out.println(uc.getString("upgrade-config(0).domain"));
* System.out.println(uc.getString("upgrade-config(1).description"));
* System.out.println(uc.getString("upgrade-config(2).versin"));
*
* System.out.println(uc.getList("upgrade-config.domain"));
*
* Document doc = uc.getMergeDocument();
* NodeList nodeList = doc.getDocumentElement().getElementsByTagName("upgrade-config");
* for (int i = 0; i < nodeList.getLength(); i++) {
* System.out.println(W3cDomUtils.getStringValueByXPath(nodeList.item(i), "domain"));
* System.out.println(W3cDomUtils.getStringValueByXPath(nodeList.item(i), "versin"));
* System.out.println(W3cDomUtils.getStringValueByXPath(nodeList.item(i), "datasource-id"));
* }
* </pre>
*
* @author <a href="mailto:luojt@zjcds.com">LuoJingtian</a> created on 2011-12-21
* @since chch Framework 1.0
*/
public final class UConfigHelper extends UConfigWrapper{
private static UConfigHelper configCache = null;
public UConfigHelper() {
super();
}
public UConfigHelper(String configAlias) {
super(configAlias);
}
/**
* 直接获取app配置域
* @return
*/
public static UConfig getAppConfig() {
return getConfig().getDomain(UConfig.CONFIG_APP);
}
public static UConfigHelper getConfig(){
if (configCache == null) {
synchronized (UConfigCache.class) {
if (configCache == null)
configCache = new UConfigHelper();
}
}
return configCache;
}
public static UConfigHelper getConfig(String configAlias){
if (configCache == null) {
synchronized (UConfigCache.class) {
if (configCache == null) {
configCache = new UConfigHelper();
configCache.configAlias = configAlias;
}
}
}
return configCache;
}
/**
* UConfig 助手类, 获取指定domian的UConfig配置;
* 此接口无缓存;若需要缓存,调用UConfigCache类
* @param domain 配置所属域
* @return UConfig配置接口
* @author LuoJingtian created on 2011-12-21
* @since chch Framework 1.0
*/
public UConfig getDomain(String domain) {
ConfigItem configItem = ConfigsParseHelper.getConfig(domain, configAlias);
ConfigClass configClass = ConfigsParseHelper.getConfigClass(configAlias);
UConfig uConfigImpl;
try {
uConfigImpl = configClass.getUconfigClass().newInstance();
uConfigImpl.init(configItem, configClass.getConfigDomainClass());
}
catch (Exception e) {
throw new RuntimeException("构造统一配置对象失败:" + e.getMessage(), e);
}
return uConfigImpl;
}
/**
* 获取配置项的配置路径,若存在多个,取最后一个
* @param domain
* @return
* @author zhangyz created on 2012-3-27
*/
public URL getUConfigFilePath(String domain){
ConfigItem configItem = ConfigsParseHelper.getConfig(domain, configAlias);
ConfigLocationItem item = configItem.getLastConfigLocationItem();
if (item == null)
return null;
return getConfigUrl(item.getLocation());
}
public File getUConfigFile(String domain) {
ConfigItem configItem = ConfigsParseHelper.getConfig(domain, configAlias);
ConfigLocationItem item = configItem.getLastConfigLocationItem();
if (item == null)
return null;
return getConfigFile(item.getLocation());
}
/**
* 获取所有配置路径
* @param domain
* @return
* @author zhangyz created on 2012-3-22
*/
public URL[] getConfigLocations(String domain){
ConfigItem configItem = ConfigsParseHelper.getConfig(domain, configAlias);
ConfigLocationItem dc = configItem.getDefaultLocation();
if (dc == null)
return new URL[0];
List<ConfigLocationItem> configs = configItem.getExtendsLocations();
URL[] ret = new URL[1 + configs.size()];
URL url = getConfigUrl(configItem.getDefaultLocation().getLocation());
ret[0] = url;
int index = 1;
for (ConfigLocationItem item:configs){
url = getConfigUrl(item.getLocation());
ret[index ++] = url;
}
return ret;
}
}