/*
 * FlatFileRecordReader.java
 * Copyright (C) 2008 Cyber Beans Corporation. All rights reserved.
 */
package jp.co.cybec.cb3.accessor.fileaccess.flat;

import jp.co.cybec.cb3.accessor.Accessor;
import jp.co.cybec.cb3.exception.AccessorAlreadyOpenedException;
import jp.co.cybec.cb3.exception.AccessorNotOpenException;
import jp.co.cybec.cb3.exception.DataFileIOException;
import jp.co.cybec.cb3.exception.DataFileNotFoundException;
import jp.co.cybec.cb3.exception.DataFormatException;

/**
 * ファイルのレコードを読み込むためのインタフェース。
 * @author Jianming Guo
 */
public interface FlatFileRecordReader extends Accessor {

	/**
	 * ファイルをオープンします。
	 *
	 * @throws AccessorAlreadyOpenedException ファイルがすでにオープンされている場合に発生します。
	 * @throws DataFileNotFoundException ファイルが存在しない時に発生します。
	 * @throws DataFileIOException  レコードの読み込み時のIOエラーにより発生します。
	 */
	void open() throws AccessorAlreadyOpenedException, DataFileNotFoundException, DataFileIOException ;

	/**
	 * ファイルをオープンします。
	 *
	 * @param filepath データファイルのパス
	 * @throws AccessorAlreadyOpenedException ファイルがすでにオープンされている場合に発生します。
	 * @throws DataFileNotFoundException ファイルが存在しない時に発生します。
	 * @throws DataFileIOException  レコードの読み込み時のIOエラーにより発生します。
	 */
	void open(String filepath) throws AccessorAlreadyOpenedException, DataFileNotFoundException, DataFileIOException ;

	/**
	 * 次のレコードを返却します
	 *
	 * @return 次のレコード
	 * @throws AccessorNotOpenException ファイルがオープンされていない場合に発生します。
	 * @throws DataFileIOException  レコードの読み込み時のIOエラーにより発生します。
	 * @throws DataFormatException レコード項目のフォーマットに失敗した場合に発生します。
	 */
	FlatFileRecord nextRecord() throws AccessorNotOpenException, DataFileIOException, DataFormatException ;

	/**
	 * ファイルをクローズします。
	 *
	 * @throws DataFileIOException ファイルクローズ時のIOエラーにより発生します。
	 */
	void close() throws DataFileIOException;

}
