/*
 * SNodeDSyncEventListener
 * 探索ノードで動作させるための遅延同期イベントリスナー
 */
package org.logical_paradox.rss.robot.event;

import java.net.MalformedURLException;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.logical_paradox.rss.dsync.event.DelayedSyncEvent;
import org.logical_paradox.rss.dsync.event.DelayedSyncEventAdapter;
import org.logical_paradox.rss.robot.RSSWebNavigator;
import org.logical_paradox.rss.router.RNodeDSyncMngr;
import org.logical_paradox.rss.router.SiteLock;

public class SNodeDSyncEventListener extends DelayedSyncEventAdapter {
	/** ロガー */
	private static final Log log = LogFactory.getLog(SNodeDSyncEventListener.class);
	/** 経路ナビゲーター */
	private final RSSWebNavigator navigator;
	/**
	 * コンストラクタ．
	 * @param navi 経路ナビゲーター
	 */
	public SNodeDSyncEventListener(RSSWebNavigator navi) {
		navigator = navi;
	}

	// 相手先からロックコマンドが送信されてきた場合
	public void onLock(DelayedSyncEvent e) {
		log.trace("ロックコマンドを受信しました");
	}
	// 相手先からロック解除コマンドが送信されてきた場合
	public void onUnlock(DelayedSyncEvent e) {
		log.trace("ロック解除コマンドを受信しました");

		// URLプールから，ロック解除されたドメインのURLを全て削除する
		SiteLock slock = (SiteLock)e.getCommand().getObject();
		RNodeDSyncMngr daemon = (RNodeDSyncMngr)e.getSource();
		daemon.getPool().removeDomain(slock.getSiteName());
	}
	// 相手先から未処理URLが送信されてきた場合
	public void onForwardURL(DelayedSyncEvent e) {
		String receivedURL = (String)e.getCommand().getObject();
		log.trace("URLが送信されてきました: " + receivedURL);

		RNodeDSyncMngr daemon = (RNodeDSyncMngr)e.getSource();
		try {
			daemon.getPool().add(receivedURL);
		} catch(MalformedURLException ue) {
		}
	}

	// 相手先から無効化する必要のあるURLが送信されてきた場合
	public void onUnforwardURL(DelayedSyncEvent e) {
		String receivedURL = (String)e.getCommand().getObject();
		log.trace("URL無効化コマンドを受信しました: " + receivedURL);

		RNodeDSyncMngr daemon = (RNodeDSyncMngr)e.getSource();
		try {
			daemon.getPool().remove(receivedURL);
		} catch(MalformedURLException ue) {
		}
	}
	/**
	 * 相手先からシャットダウンが指示された場合
	 * @param e イベントオブジェクト
	 */
	public void onShutdown(DelayedSyncEvent e) {
		navigator.shutdown();
	}
}

// end of SNodeDSyncEventListener.java
