package org.xforth.config.client;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.FileReader;
import java.io.IOException;
import java.net.URISyntaxException;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Properties;
public class ConfigBundleFactory {
private static final Logger logger = LoggerFactory.getLogger(ConfigBundleFactory.class);
private static final String CONFIG_PROJECT_KEY = "config.project";
private static final String CONFIG_FILE_KEY = "config.file";
private static final String CONFIG_FILE_VALUE = "config.properties";
private static final String CONFIG_REMOTE_CENTER_KEY = "config.zookeeper";
private static final String CONFIG_SUPPORT_DYNAMIC_KEY = "config.support.dynamic";
private static ConfigBundle configBundle;
public ConfigBundleFactory() {
try {
Path file = Paths.get(this.getClass().getClassLoader().getResource(CONFIG_FILE_VALUE).toURI());
FileReader fr = null;
fr = new FileReader(file.toFile().getPath());
Properties properties = new Properties();
properties.load(fr);//load()方法可通过字符流直接加载文件
String project = properties.getProperty(CONFIG_PROJECT_KEY);
String configRemoteHost = properties.getProperty(CONFIG_REMOTE_CENTER_KEY);
String configSupportDynamic = properties.getProperty(CONFIG_SUPPORT_DYNAMIC_KEY);
logger.info("xforth config configSupportDynamic load:"+configSupportDynamic);
if(StringUtils.isBlank(configSupportDynamic))
configSupportDynamic = "false";
checkValueNotNull(CONFIG_PROJECT_KEY, project);
checkValueNotNull(CONFIG_REMOTE_CENTER_KEY, configRemoteHost);
configBundle = new ConfigBundle(project, CONFIG_FILE_VALUE, configRemoteHost, Boolean.valueOf(configSupportDynamic));
} catch (IOException|URISyntaxException e) {
logger.error("initConfigBundle error:{}",e);
}
}
protected void checkValueNotNull(String key, String value) {
if (StringUtils.isBlank(value)) {
throw new RuntimeException("properties load key is null:" + key);
}
}
/**
* factory method
* @return
*/
public ConfigBundle getConfigBundle() {
return configBundle;
}
}