/*
 * $Id: RemoteQueueCollection.java,v 1.4 2005/06/07 14:57:31 rampil Exp $
 * Copyright (c) 2004 LOGICAL-PARADOX.ORG
 */
package org.logical_paradox.koike.rss.document;

import java.util.Iterator;

import org.logical_paradox.rss.oqs4r.OQSConnection;

/**
 * リモートキューを制限つきのコレクションのごとく使用可能たらしめるユーティリティ
 * @author satoshi akabane@logical-paradox.org
 * @version $Revision: 1.4 $
 */
public class RemoteQueueCollection {
	// リモートキューサーバー
	private OQSConnection dataSource;

	/**
	 * コンストラクタ
	 * @param q リモートキューシステム
	 */
	public RemoteQueueCollection(OQSConnection q) {
		dataSource = q;
	}
	/**
	 * リモートキューにアクセスするためのイテレータを返す
	 * @return イテレータ(接続先はネットワークのどこかに配置されているキューシステム)
	 */
	public Iterator iterator() {
		return new DocumentIterator(dataSource);
	}

	/**
	 * キューから1件取得するイテレータ
	 * @author satoshi akabane@logical-paradox.org
	 * @version $Revision: 1.4 $
	 */
	protected class DocumentIterator implements Iterator {
		private OQSConnection connection;
		/**
		 * コンストラクタ
		 * @param q 接続先のキューサーバー
		 */
		protected DocumentIterator(OQSConnection q) {
			connection = q;
		}
		/**
		 * キューに蓄積されている次の要素が存在するかどうかを返す
		 * @return true:ある / false:ない
		 */
		public boolean hasNext() {
			return true;
		}
		/**
		 * キューに蓄積されている次の要素を取得して返す
		 * @return キューから取り出した要素
		 */
		public Object next() {
			Object o = null;
			try {
				o = connection.next();
			} catch(Exception e) {
				e.printStackTrace();
			}
			return o;
		}
		/**
		 * キューから削除する
		 * ただしリモートキューからは削除できないので，何もしないで例外を返す
		 */
		public void remove() {
			// このメソッドは呼ぶな
			throw new IllegalStateException();
		}

	}
}
