/*
 * LOGICAL-PARADOX.ORG b-tree library
 * Copyright (C)2004,2005 satoshi akabane(akabane@logical-paradox.org)
 * $Id: BtreeSession.java,v 1.2 2005/05/16 15:36:45 rampil Exp $
 */
package org.logical_paradox.common.btree;

/**
 * B-treeデータ構造を操作するためのセッションオブジェクト<br>
 * アプリケーションは直接Btreeクラスを操作するのではなく，このセッションを媒介として操作する
 * @author satoshi akabane@logical-paradox.org
 * @version $Revision: 1.2 $
 */
public class BtreeSession {
	private final Btree _master;
	protected BtreeSession(Btree master) {
		_master = master;
	}
	/**
	 * セッションを開始する
	 * @param filename ファイル名
	 * @return 開始されたセッション
	 * @throws BtreeException セッションの開始に失敗した
	 */
	public BtreeSession open(String filename) throws BtreeException {
		_master.open(filename);
		return this;
	}
	/**
	 * セッションを開始する
	 * @param filename ファイル名
	 * @param cachesize キャッシュサイズ
	 * @return 開始されたセッション
	 * @throws BtreeException セッションの開始に失敗した
	 */
	public BtreeSession open(String filename, int cachesize) throws BtreeException {
		_master.open(filename, cachesize);
		return this;
	}
	/**
	 * セッションを閉じる
	 * @throws BtreeException クローズ中に何らかのエラーが発生した場合
	 */
	public void close() throws BtreeException {
		_master.close();
	}
	/**
	 * セッションが閉じているかどうかを返す
	 * @return true:閉じている / false:開いている
	 */
	public boolean isClosed() {
		return _master.isClosed();
	}
	/**
	 * 指定されたページをファイルから取得して返す
	 * @param pageno 取得対象ページ(-1: ルート)
	 * @return ページ
	 */
	public BtreePage getPage(long pageno) throws BtreeException {
		return _master.getPage(pageno);
	}
	/**
	 * ルートのページを取得して返す
	 * @return ページ
	 */
	public BtreePage getPage() throws BtreeException {
		return _master.getPage(-1);
	}
	/**
	 * 新しいキーを発行する
	 * @param o 引数オブジェクト
	 * @return 生成されたキー
	 */
	public BtreeKey newKey(Object o) throws BtreeException {
		return _master.newKey(o);
	}
	/**
	 * データを挿入する
	 *
	 * @param key キー
	 * @param o オブジェクト
	 * @exception BtreeException
	 */
	public void insert(BtreeKey key) throws BtreeException, BtreeManipulationException {
		_master.insert(key);
	}
	/**
	 * データを削除する
	 *
	 * @param key キー
	 */
	public void delete(BtreeKey key) throws BtreeException {
		_master.delete(key);
	}

	/**
	 * データを更新する
	 *
	 * @param o オブジェクト
	 * @exception BtreeException
	 */
	public void update(BtreeKey key) throws BtreeException {
		_master.update(key);
	}

	/**
	 * データとキーのペアを取得する
	 *
	 * @param key キー
	 * @return BtreeResultSet 結果セット
	 * @exception BtreeException
	 */
	public BtreeResultSet find(BtreeKey key) throws BtreeException {
		return _master.find(key);
	}
}
