/**
 * LOGICAL-PARADOX.ORG variable record manager library
 * Copyright (C)2004 satoshi akabane(akabane@logical-paradox.org)
 *
 * Release 1.0
 * ・初期パージョン
 */
package org.logical_paradox.common.vrm;

import java.io.IOException;
import java.util.Collection;
import java.util.LinkedList;

import org.logical_paradox.common.io.MemoryMappedRandomAccessFile;

/**
 * メモリ上で実行可能なVariableRecordManager
 * 
 * @author satoshi akabane@logical-paradox.org
 * @version 1.0
 */
public class VariableRecordManagerMoc extends VariableRecordManager {
	private LinkedList records = new LinkedList();

	/**
	 * コンストラクタ
	 * @param filename 管理対象のファイル名
	 * @throws IOException ファイルアクセスに失敗した
	 */
	public VariableRecordManagerMoc(String filename, RecordFactory factory) throws IOException {
		super(filename, factory);
	}

	/**
	 * ファイルをオープンする
	 * ※派生クラスで別のタイプのファイルをオープンしたい場合，このメソッドをオーバーライドする
	 * @throws IOException オープンに失敗した
	 */
	public void open() throws IOException {
		// 読み書きモードでRandomAccessFileをオープンする
		file = new MemoryMappedRandomAccessFile();
		availableList = new VRMAvailableListMoc(filename + ".vra");
	}

	// データ削除処理
	public void delete(long rno) throws IOException {
		super.delete(rno);
		records.remove(new Long(rno));
	}

	// データ登録処理
	public long insert(Record r) throws IOException {
		long rno = super.insert(r);
		records.add(new Long(rno));
		return rno;
	}

	// データ更新処理
	public void update(long rno, Record r) throws IOException {
		super.update(rno, r);
	}
	// 有効レコードのリストを返す
	public Collection getRecordNumbers() {
		return records;
	}
}
