package com.taobao.tddl.atom.config;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.Executors;
import com.taobao.tddl.atom.common.TAtomConstants;
import com.taobao.tddl.common.exception.TddlException;
import com.taobao.tddl.common.model.Atom;
import com.taobao.tddl.common.utils.logger.Logger;
import com.taobao.tddl.common.utils.logger.LoggerFactory;
import com.taobao.tddl.config.ConfigDataHandler;
import com.taobao.tddl.config.ConfigDataHandlerFactory;
import com.taobao.tddl.config.ConfigDataListener;
import com.taobao.tddl.config.impl.ConfigDataHandlerCity;
/**
* 密码管理器Diamond实现
*
* @author qihao
*/
public class AtomPasswdManager implements DbPasswdManager {
private static Logger logger = LoggerFactory.getLogger(AtomPasswdManager.class);
private String passwdConfDataId;
private String unitName;
private ConfigDataHandlerFactory configFactory;
private ConfigDataHandler passwdHandler;
private volatile List<ConfigDataListener> passwdConfListener = new ArrayList<ConfigDataListener>();
private Atom atom;
public void init(String appName) {
Map<String, String> localValues = null;
if (this.atom != null) {
localValues = atom.getProperties();
}
configFactory = ConfigDataHandlerCity.getFactory(appName, unitName, localValues);
Map<String, Object> config = new HashMap<String, Object>();
config.put("group", TAtomConstants.DEFAULT_DIAMOND_GROUP);
passwdHandler = configFactory.getConfigDataHandler(passwdConfDataId,
passwdConfListener,
Executors.newSingleThreadScheduledExecutor(),
config);
}
public String getPasswd() {
if (null != passwdHandler) {
String passwdStr = passwdHandler.getData(ConfigDataHandler.GET_DATA_TIMEOUT,
ConfigDataHandler.FIRST_CACHE_THEN_SERVER_STRATEGY);
if (passwdStr == null) {
logger.error("[getDataError] remote password string is empty !");
return null;
}
return TAtomConfParser.parserPasswd(passwdStr);
}
logger.error("[getDataError] passwdConfig not init !");
return null;
}
public void registerPasswdConfListener(ConfigDataListener Listener) {
passwdConfListener.add(Listener);
}
public void setPasswdConfDataId(String passwdConfDataId) {
this.passwdConfDataId = passwdConfDataId;
}
public void setUnitName(String unitName) {
this.unitName = unitName;
}
public void stopDbPasswdManager() throws TddlException {
if (null != this.passwdHandler) {
this.passwdHandler.destory();
}
}
public void setAtom(Atom atom) {
this.atom = atom;
}
}