package com.taobao.tddl.config.impl.holder; import java.util.HashMap; import java.util.List; import java.util.Map; import com.google.common.collect.Maps; import com.taobao.tddl.common.model.lifecycle.AbstractLifecycle; import com.taobao.tddl.common.utils.extension.ExtensionLoader; public abstract class AbstractConfigDataHolder extends AbstractLifecycle implements ConfigDataHolder { protected Map<String, String> configHouse = new HashMap<String, String>(); protected AbstractConfigDataHolder delegateDataHolder = null; protected ConfigDataHolder sonConfigDataHolder = null; protected void loadDelegateExtension() { this.delegateDataHolder = ExtensionLoader.load(AbstractConfigDataHolder.class); this.delegateDataHolder.sonConfigDataHolder = sonConfigDataHolder; } @Override public String getData(String dataId) { return configHouse.containsKey(dataId) ? configHouse.get(dataId) : delegateDataHolder.getData(dataId); } @Override public Map<String, String> getData(List<String> dataIds) { Map<String, String> result = new HashMap<String, String>(); for (String dataId : dataIds) { result.put(dataId, getData(dataId)); } return result; } protected Map<String, String> queryAndHold(List<String> dataIds, String unitName) { if (dataIds.isEmpty()) { return Maps.newHashMap(); } return delegateDataHolder.queryAndHold(dataIds, unitName); } protected void addDatas(Map<String, String> confMap) { configHouse.putAll(confMap); } protected String getDataFromSonHolder(String dataId) { return sonConfigDataHolder == null ? null : sonConfigDataHolder.getData(dataId); } public void setSonConfigDataHolder(ConfigDataHolder sonConfigDataHolder) { this.sonConfigDataHolder = sonConfigDataHolder; } }