package org.dayatang.configuration;
import javax.sql.DataSource;
import java.io.File;
import java.io.InputStream;
import java.net.URL;
import java.util.Iterator;
import java.util.ServiceLoader;
/**
* 数据库工厂,用于隐藏配置类的具体实现
* @author yyang (<a href="mailto:gdyangyu@gmail.com">gdyangyu@gmail.com</a>)
*
*/
public class ConfigurationFactory {
private static ConfigurationFactory instance = getInstance();
private static ConfigurationFactory getInstance() {
Iterator<ConfigurationFactory> iterator = ServiceLoader.load(ConfigurationFactory.class).iterator();
if (iterator.hasNext()) {
return iterator.next();
}
throw new IllegalStateException("ConfigurationFactory implement class not found!");
}
public static ConfigurationFactory singleton() {
return instance;
}
/**
* 从JDBC数据源中读取配置
* @param dataSource 数据源
* @return 可写的配置
*/
public WritableConfiguration fromDatabase(DataSource dataSource) {
return instance.fromDatabase(dataSource);
}
/**
* 从JDBC数据源中读取配置
* @param dataSource 数据源
* @param tableName 存放配置信息的数据表名
* @param keyColumn 存放配置键的列名
* @param valueColumn 存放配置值的列名
* @return 可写的配置
*/
public WritableConfiguration fromDatabase(DataSource dataSource, String tableName, String keyColumn, String valueColumn) {
return instance.fromDatabase(dataSource, tableName, keyColumn, valueColumn);
}
/**
* 从类路径文件中读取配置
* @param fileName 类路径资源文件名
* @return 可写的配置
*/
public Configuration fromClasspath(String fileName) {
return instance.fromClasspath(fileName);
}
/**
* 从磁盘文件中读取配置
* @param fileName 磁盘文件名
* @return 可写的配置
*/
public WritableConfiguration fromFileSystem(String fileName) {
return instance.fromFileSystem(fileName);
}
/**
* 从磁盘文件中读取配置
* @param dirPath 文件所属的目录
* @param fileName 文件名
* @return 可写的配置
*/
public WritableConfiguration fromFileSystem(String dirPath, String fileName) {
return instance.fromFileSystem(dirPath, fileName);
}
/**
* 从磁盘文件中读取配置
* @param file 包含配置信息的文件
* @return 可写的配置
*/
public WritableConfiguration fromFileSystem(File file) {
return instance.fromFileSystem(file);
}
/**
* 从远程url读取配置
* @param url 包含配置信息的url
* @return 只读的配置
*/
public Configuration fromUrl(String url) {
return instance.fromUrl(url);
}
/**
* 从远程url读取配置
* @param url 包含配置信息的url
* @return 只读的配置
*/
public Configuration fromUrl(URL url) {
return instance.fromUrl(url);
}
/**
* 从输入流中读取配置信息
* @param in 输入流
* @return 只读的配置
*/
public Configuration fromInputStream(InputStream in) {
return instance.fromInputStream(in);
}
}