package guang.crawler.centerConfig.siteManagers; import guang.crawler.centerConfig.CenterConfigElement; import guang.crawler.commons.GenericState; import guang.crawler.connector.ZookeeperConnector; import guang.crawler.util.PathHelper; import java.io.IOException; import org.apache.zookeeper.KeeperException; /** * 该类代表某个站点管理器的配置信息. * * @author sun * */ public class SiteManagerInfo extends CenterConfigElement { /** * 当前站点管理器的ID */ private final String siteManagerId; /** * 属性的key,对应当前站点管理器管理的采集点的ID */ public static final String KEY_SITE_TOHANDLE = "site.toHandle"; /** * 属性的key,对应当前站点管理器所处的状态,暂时没有真正的使用 */ public static final String KEY_MANAGER_STATE = "manager.state"; /** * 属性的key,对应当前站点管理器是否被分配了采集点 */ public static final String KEY_DISPATCHED = "manager.dispatched"; /** * 属性的key,对应当前站点管理器的访问地址 */ public static final String KEY_MANAGER_ADDRESS = "manager.address"; /** * 创建一个站点管理器信息对象 * * @param path * 当前节点的路径 * @param connector * Zookeeper连接器 */ public SiteManagerInfo(final String path, final ZookeeperConnector connector) { super(path, connector); this.siteManagerId = PathHelper.getName(path); } /** * 获取当前节点对应的站点管理器的连接地址 * * @return */ public String getManagerAddress() { return this.getProperty(SiteManagerInfo.KEY_MANAGER_ADDRESS); } /** * 获取当前站点管理器的状态 * * @return */ public GenericState getManagerState() { String managerState = this.getProperty(SiteManagerInfo.KEY_MANAGER_STATE); if (managerState == null) { return GenericState.registed; } return GenericState.valueOf(managerState); } /** * 获取当前站点管理器的ID * * @return */ public String getSiteManagerId() { return this.siteManagerId; } /** * 获取当前站点管理器所管理的采集点. * * @return */ public String getSiteToHandle() { return this.getProperty(SiteManagerInfo.KEY_SITE_TOHANDLE); } /** * 当前站点管理器是否被分配了采集点 * * @return */ public boolean isDispatched() { String dispatched = this.getProperty(SiteManagerInfo.KEY_DISPATCHED); if (dispatched == null) { return false; } return Boolean.parseBoolean(dispatched); } /** * 设置当前站点管理器是否被分配了采集点. * * @param dispatched * 当前站点管理器是否被分配了采集点. * @param refreshNow * 是否立刻刷新 * @return * @throws InterruptedException * @throws IOException * @throws KeeperException */ public SiteManagerInfo setDispatched(final boolean dispatched, final boolean refreshNow) throws InterruptedException, IOException, KeeperException { this.setProperty(SiteManagerInfo.KEY_DISPATCHED, String.valueOf(dispatched), refreshNow); return this; } /** * 设置当前站点管理器的连接地址 * * @param managerAddress * 站点管理器的连接地址,其格式为:IP:PORT的形式. * @param refreshNow * 是否立刻刷新 * @throws InterruptedException * @throws IOException * @throws KeeperException */ public void setManagerAddress(final String managerAddress, final boolean refreshNow) throws InterruptedException, IOException, KeeperException { this.setProperty(SiteManagerInfo.KEY_MANAGER_ADDRESS, managerAddress, refreshNow); } /** * 设置当前站点管理器的状态,当前方法并没有被真正的使用到. * * @param managerState * 状态的枚举 * @param refreshNow * 是否立刻刷新属性到Zookeeper中. * @throws InterruptedException * @throws IOException * @throws KeeperException */ public void setManagerState(final GenericState managerState, final boolean refreshNow) throws InterruptedException, IOException, KeeperException { this.setProperty(SiteManagerInfo.KEY_MANAGER_STATE, managerState.toString(), refreshNow); } /** * 设置当前站点管理器管理的采集点. * * @param siteToHandle * 采集点的ID * @param refreshNow * 是否立刻刷新. * @return * @throws InterruptedException * @throws IOException * @throws KeeperException */ public SiteManagerInfo setSiteToHandle(final String siteToHandle, final boolean refreshNow) throws InterruptedException, IOException, KeeperException { this.setProperty(SiteManagerInfo.KEY_SITE_TOHANDLE, siteToHandle, refreshNow); return this; } }