/**
 * LOGICAL-PARADOX.ORG
 * Copyright (C)2004 satoshi akabane(akabane@logical-paradox.org)
 *
 */
package org.logical_paradox.rss.rcm.accessor.simple;

import java.util.Iterator;

import org.logical_paradox.common.vrm.Record;

/**
 * コンテンツレコード
 * 複数のレコードが格納されている場合がありえる
 * 
 * @author satoshi akabane@logical-paradox.org
 * @version $Revision: 1.2 $
 */
public class ContentsRecord extends Record {
	/**
	 * コンストラクタ
	 *
	 */
	public ContentsRecord() {
		o = new ContentsArrayListByteStream();
	}
	/**
	 * コンストラクタ
	 * @param bstream バイト列
	 */
	public ContentsRecord(byte[] bstream) {
		super(bstream);
	}
	/**
	 * コンストラクタ
	 * @param locations コンテンツの配列
	 */
	public ContentsRecord(ContentsByteStream[] contents) {
		add(contents);
	}
	/**
	 * リストにコンテンツを追加する
	 * @param location コンテンツ
	 */
	public void add(ContentsByteStream contents) {
		((ContentsArrayListByteStream)o).add(contents);
	}
	/**
	 * リストにコンテンツを追加する
	 * 配列の内容を全て追加する
	 * @param locations 追加するコンテンツの配列
	 */
	public void add(ContentsByteStream[] contents) {
		for(int i = 0; i < contents.length; i++) {
			add(contents[i]);
		}
	}
	/**
	 * 格納されているコンテンツのイテレータを返す
	 * @return イテレータ
	 */
	public Iterator iterator() {
		return ((ContentsArrayListByteStream)o).iterator();
	}
	/**
	 * 格納されているコンテンツを配列で返す
	 * @return 配列
	 */
	public ContentsByteStream[] toArray() {
		return (ContentsByteStream[])((ContentsArrayListByteStream)o).toArray(new ContentsByteStream[0]);
	}
	/* (非 Javadoc)
	 * @see org.logical_paradox.common.vrm.Record#getRecordSize()
	 */
	public int getRecordSize() {
		// TODO 自動生成されたメソッド・スタブ
		return 0;
	}

	/**
	 * レコード値を比較する
	 * @param o 比較対象
	 * @return true:同じ / false:違う
	 */
	public boolean equals(Object o) {
		// 引数インスタンスの確認
		if(o instanceof ContentsRecord == false) {
			return false;
		}

		ContentsByteStream[] given = ((ContentsRecord)o).toArray();
		ContentsByteStream[] gives = toArray();

		// 配列サイズの比較
		if(given.length != gives.length) {
			return false;
		}

		// 全要素の比較
		for(int i = 0; i < given.length; i++) {
			if(gives[i].equals(given[i]) == false) {
				return false;
			}
		}
		return true;
	}

	/**
	 * バイト列から値オブジェクトを復元する
	 * 
	 * @param bstream バイト列
	 * @throws IllegalArgumentException バイト列からの値オブジェクトの復元に失敗した
	 */
	protected void createObjectFromByteStream(byte[] bstream) throws IllegalArgumentException {
		o = new ContentsArrayListByteStream(bstream);
	}

}
