package org.dayatang.configuration.impl; import org.dayatang.configuration.Configuration; import org.dayatang.configuration.ConfigurationException; import org.dayatang.configuration.ConfigurationFactory; import org.dayatang.configuration.WritableConfiguration; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.sql.DataSource; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.net.MalformedURLException; import java.net.URL; /** * Created by yyang on 14-2-5. */ public class ConfigurationFactoryImpl extends ConfigurationFactory { private static final Logger LOGGER = LoggerFactory.getLogger(ConfigurationFactoryImpl.class); /** * 从JDBC数据源中读取配置 * @param dataSource 数据源 * @return 可写的配置 */ public WritableConfiguration fromDatabase(DataSource dataSource) { return new ConfigurationDbImpl(dataSource); } /** * 从JDBC数据源中读取配置 * @param dataSource 数据源 * @param tableName 存放配置信息的数据表名 * @param keyColumn 存放配置键的列名 * @param valueColumn 存放配置值的列名 * @return 可写的配置 */ public WritableConfiguration fromDatabase(DataSource dataSource, String tableName, String keyColumn, String valueColumn) { return new ConfigurationDbImpl(dataSource, tableName, keyColumn, valueColumn); } /** * 从类路径文件中读取配置 * @param fileName 类路径资源文件名 * @return 可写的配置 */ public Configuration fromClasspath(String fileName) { InputStream in = getClass().getResourceAsStream(fileName); return new ConfigurationInputStreamImpl(in); } /** * 从磁盘文件中读取配置 * @param fileName 磁盘文件名 * @return 可写的配置 */ public WritableConfiguration fromFileSystem(String fileName) { return new ConfigurationFileImpl(fileName); } /** * 从磁盘文件中读取配置 * @param dirPath 文件所属的目录 * @param fileName 文件名 * @return 可写的配置 */ public WritableConfiguration fromFileSystem(String dirPath, String fileName) { return new ConfigurationFileImpl(dirPath, fileName); } /** * 从磁盘文件中读取配置 * @param file 包含配置信息的文件 * @return 可写的配置 */ public WritableConfiguration fromFileSystem(File file) { return ConfigurationFileImpl.fromFile(file); } /** * 从远程url读取配置 * @param url 包含配置信息的url * @return 只读的配置 */ public Configuration fromUrl(String url) { try { return fromUrl(new URL(url)); } catch (MalformedURLException e) { LOGGER.error("url is not correct!"); throw new ConfigurationException("url is not correct!"); } } /** * 从远程url读取配置 * @param url 包含配置信息的url * @return 只读的配置 */ public Configuration fromUrl(URL url) { if (url == null) { throw new ConfigurationException("url is null!"); } try { return new ConfigurationInputStreamImpl(url.openStream()); } catch (IOException e) { LOGGER.error("read url failure!"); throw new ConfigurationException("read url failure!"); } } @Override public Configuration fromInputStream(InputStream in) { return new ConfigurationInputStreamImpl(in); } }