package jef.database.datasource;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.lang.StringUtils;
/**
* 默认的DataSourceInfoLookup实现之一。
* 所有的数据源信息都被存放在Map中。
* @author jiyi
*
*/
public class MapDataSourceInfoLookup implements DataSourceInfoLookup{
private Map<String,DataSourceInfo> datasources;
private PasswordDecryptor passwordDecryptor=PasswordDecryptor.DUMMY;
private String defaultKey;
public void setDatasources(Map<String, DataSourceInfo> datasources) {
this.datasources = datasources;
}
public DataSourceInfo getDataSourceInfo(String dataSourceName) {
if(datasources==null)return null;
DataSourceInfo dsi=datasources.get(dataSourceName);
if(dsi!=null){
return decrypt(dsi);
}else{
return null;
}
}
public void add(String key,DataSourceInfo dsi){
if(this.datasources==null){
datasources=new HashMap<String,DataSourceInfo>();
datasources.put(key, dsi);
}
}
private DataSourceInfo decrypt(DataSourceInfo dsi) {
String newpass=passwordDecryptor.decrypt(dsi.getPassword());
if(!StringUtils.equals(dsi.getPassword(), newpass)){
dsi.setPassword(newpass);
}
return dsi;
}
public void setPasswordDecryptor(PasswordDecryptor passwordDecryptor) {
this.passwordDecryptor=passwordDecryptor;
}
public String getDefaultKey() {
if(datasources!=null && datasources.size()==1){
return datasources.keySet().iterator().next();
}
return defaultKey;
}
public void setDefaultKey(String defaultKey) {
this.defaultKey = defaultKey;
}
public Collection<String> getAvailableKeys() {
return Collections.unmodifiableCollection(datasources.keySet());
}
}