package com.baidu.disconf.client.core.impl;
import java.util.ArrayList;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.baidu.disconf.client.core.DisconfCoreMgr;
import com.baidu.disconf.client.core.processor.DisconfCoreProcessor;
import com.baidu.disconf.client.core.processor.DisconfCoreProcessorFactory;
import com.baidu.disconf.client.fetcher.FetcherMgr;
import com.baidu.disconf.client.support.registry.Registry;
import com.baidu.disconf.client.watch.WatchMgr;
/**
* 核心处理器
*
* @author liaoqiqi
* @version 2014-6-10
*/
public class DisconfCoreMgrImpl implements DisconfCoreMgr {
protected static final Logger LOGGER = LoggerFactory.getLogger(DisconfCoreMgrImpl.class);
private List<DisconfCoreProcessor> disconfCoreProcessorList = new ArrayList<DisconfCoreProcessor>();
// 监控器
private WatchMgr watchMgr = null;
// 抓取器
private FetcherMgr fetcherMgr = null;
// registry
private Registry registry = null;
public DisconfCoreMgrImpl(WatchMgr watchMgr, FetcherMgr fetcherMgr, Registry registry) {
this.watchMgr = watchMgr;
this.fetcherMgr = fetcherMgr;
this.registry = registry;
//
// 在这里添加好配置项、配置文件的处理器
//
DisconfCoreProcessor disconfCoreProcessorFile =
DisconfCoreProcessorFactory.getDisconfCoreProcessorFile(watchMgr, fetcherMgr, registry);
disconfCoreProcessorList.add(disconfCoreProcessorFile);
DisconfCoreProcessor disconfCoreProcessorItem =
DisconfCoreProcessorFactory.getDisconfCoreProcessorItem(watchMgr, fetcherMgr, registry);
disconfCoreProcessorList.add(disconfCoreProcessorItem);
}
/**
* 1. 获取远程的所有配置数据<br/>
* 2. 注入到仓库中<br/>
* 3. Watch 配置 <br/>
* <p/>
* 更新 所有配置数据
*/
public void process() {
//
// 处理
//
for (DisconfCoreProcessor disconfCoreProcessor : disconfCoreProcessorList) {
disconfCoreProcessor.processAllItems();
}
}
/**
* 只处理某一个
*/
@Override
public void processFile(String fileName) {
DisconfCoreProcessor disconfCoreProcessorFile =
DisconfCoreProcessorFactory.getDisconfCoreProcessorFile(watchMgr, fetcherMgr, registry);
disconfCoreProcessorFile.processOneItem(fileName);
}
/**
* 特殊的,将仓库里的数据注入到 配置项、配置文件 的实体中
*/
public void inject2DisconfInstance() {
//
// 处理
//
for (DisconfCoreProcessor disconfCoreProcessor : disconfCoreProcessorList) {
disconfCoreProcessor.inject2Conf();
}
}
@Override
public void release() {
if (fetcherMgr != null) {
fetcherMgr.release();
}
if (watchMgr != null) {
watchMgr.release();
}
}
}