/*
 * $Id: ConcreteInterfaceFactory.java,v 1.5 2005/10/27 15:51:05 rampil Exp $
 * Copyright (c) 2004 LOGICAL-PARADOX.ORG
 */
package org.logical_paradox.koike.core;

import java.util.Iterator;

import org.logical_paradox.koike.core.document.DocumentAccessor;
import org.logical_paradox.koike.core.indexer.IndexAccessor;
import org.logical_paradox.koike.core.search.SearchConditionOptimizer;

/**
 * 具象インターフェースファクトリ
 * 設定ファイルを元にして，各種インターフェースの具象クラスを実体化して返します．
 * 
 * @author satoshi akabane@logical-paradox.org
 * @version $Revision: 1.5 $
 */
public abstract class ConcreteInterfaceFactory {
	private String initparam;
	/**
	 * コンストラクタ
	 * @param param 初期化パラメータ
	 * @throws Exception 例外
	 */
	public ConcreteInterfaceFactory(String param) throws Exception {
		initparam = param;
		setup();
	}
	/**
	 * 初期化パラメータを返す
	 * @return 初期化パラメータ
	 */
	protected String getInitparam() {
		return initparam;
	}
	/**
	 * ファクトリを初期化します
	 * @throws Exception 初期化処理中に
	 */
	public abstract void setup() throws Exception;
	/**
	 * 初期化されたドキュメントアクセサを生成して返す
	 * @return 生成されたドキュメントアクセサ
	 * @throws Exception 生成または初期化に失敗した場合に発生する例外
	 */
	public abstract DocumentAccessor getDocumentAccessor() throws Exception;
	/**
	 * 初期化されたインデックスアクセサを生成して返す
	 * @return 生成されたインデックスアクセサ
	 * @throws Exception 生成または初期化に失敗した場合に発生する例外
	 */
	public abstract IndexAccessor getIndexAccessor() throws Exception;
	/**
	 * リモートキューにシーケンシャルにアクセスする方法を生成して返す
	 * @return イテレータ
	 */
	public abstract Iterator getRemoteQueueIterator() throws Exception;
	/**
	 * 検索条件オプティマイザーを生成して返す
	 * @return 検索条件オプティマイザー
	 * @throws Exception 生成中に発生した例外
	 */
	public abstract SearchConditionOptimizer getOptimizer() throws Exception;
}
