/**
 * コンテンツ登録処理を行なうエージェント
 * このクラスはスレッドとして動作する
 */
package org.logical_paradox.rss.rcm;

import org.logical_paradox.rss.http.WebContents;
import org.logical_paradox.rss.rcm.accessor.ContentsAccessor;

public class ContentsStoreAgent extends Thread {
	private ContentsAccessor accessor = null;
	private RSSRCMConfig cfg = null;
	private ContentsQueue queue = null;

	/**
	 * コンストラクタ
	 */
	public ContentsStoreAgent(ContentsAccessor a, RSSRCMConfig conf) throws IllegalArgumentException {
		if(a == null || conf == null) {
			throw new IllegalArgumentException("ContentsStoreAgentの引数にnullがある");
		}

		accessor = a;
		cfg = conf;
		queue = cfg.getContentsQueue();

		setDaemon(true);
	}

	/**
	 * スレッドとして動作する部分
 	 */
	public void run() {
		try {
			while(true) {
				Thread.sleep(cfg.getContentsSendingInterval());
				store(cfg.getContentsSendingScale());
			}
		} catch(InterruptedException ie) {
			// 終了
		}
	}

	/**
	 * コンテンツを登録する
	 * 登録するコンテンツは，コンテンツキューから取得する
	 */
	protected void store(int numberOfContents) {
		while(numberOfContents > 0) {
			numberOfContents--;

			WebContents lc = queue.dequeue();
			if(lc == null) {
				// コンテンツキューに全然コンテンツが格納されていないので終了
				break;
			}

			// 登録処理
			accessor.regist(lc);
		}
	}

	/**
	 * 終了
	 */
	public void done() {
		this.interrupt();
	}
}

// end of ContentsStoreAgent.java
