jp.terasoluna.fw.file.dao.standard
クラス AbstractFileLineIterator<T>

java.lang.Object
  上位を拡張 jp.terasoluna.fw.file.dao.standard.AbstractFileLineIterator<T>
型パラメータ:
T - ファイル行オブジェクト。
すべての実装されたインタフェース:
java.util.Iterator, FileLineIterator<T>
直系の既知のサブクラス:
CSVFileLineIterator, FixedFileLineIterator, PlainFileLineIterator, VariableFileLineIterator

public abstract class AbstractFileLineIterator<T>
extends java.lang.Object
implements FileLineIterator<T>

ファイルアクセス(データ取得)用の共通クラス。

ファイルアクセス(データ取得)を行う3つのクラス(CSV、固定長、可変長) に共通する処理をまとめた抽象クラス。 ファイルの種類に対応するサブクラスが処理を行う。
使用例はFileLineIteratorを参照のこと。

ファイル取得処理は下記の手順で呼び出されるように実装すること。
上記の順番でのみ正確にデータ取得できる。上記の順位外で処理を実行するとIllegalStateExceptionが発生する。
ジョブ再実行までにファイルを更新するとリスタート機能が正常に動作しない。

関連項目:
FileLineIterator, CSVFileLineIterator, FixedFileLineIterator, VariableFileLineIterator, PlainFileLineIterator

フィールドの概要
private  java.lang.Class<T> clazz
          結果クラス。
private  int columnCount
          ファイル行オブジェクトで定義されているカラム数(@InputFileColumnが付いている属性の数)を格納する。
private  java.util.Map<java.lang.String,ColumnParser> columnParserMap
          カラムパーザーを格納するマップ。
private  int currentLineCount
          ファイル入力処理済みのデータ部の行数。
private  java.lang.String currentLineString
          現在のデータ部の1行分の文字列。
private  java.lang.reflect.Field[] fields
          ファイル行オブジェクトのField情報(Annotation)を格納する変数。
private  java.lang.String fileEncoding
          ファイルエンコーディング。
private  java.lang.String fileName
          ファイル名。
private  java.util.List<java.lang.String> header
          ヘッダ部の文字列リスト。
private  int headerLineCount
          ヘッダ行数。
private  java.lang.String lineFeedChar
          行区切り文字。
private  LineReader lineReader
          1行分の文字列を読み込むオブジェクト
private  java.lang.reflect.Method[] methods
          ファイル行オブジェクトのFieldに対応するsetterメソッドを格納する。
private  boolean readData
          データ部処理確認用フラグ。
private  java.io.Reader reader
          ファイルアクセス用の文字ストリーム。
private  boolean readHeader
          ヘッダ部処理確認用フラグ。
private  boolean readTrailer
          トレイラ部処理確認用フラグ。
private  java.util.List<java.lang.String> trailer
          トレイラ部の文字列リスト。
private  int trailerLineCount
          トレイラ行数。
private  java.util.Queue<java.lang.String> trailerQueue
          トレイラ部の一時格納用のキュー。
 
コンストラクタの概要
AbstractFileLineIterator(java.lang.String fileName, java.lang.Class<T> clazz, java.util.Map<java.lang.String,ColumnParser> columnParserMap)
          コンストラクタ。
 
メソッドの概要
private  void buildFields()
          ファイル行オブジェクトの属性のフィールドオブジェクトの配列を生成する。
private  void buildMethods()
          ファイル行オブジェクトの属性のsetterメソッドのメソッドオブジェクトの配列を生成する。
 void closeFile()
          ファイル閉塞処理。
 int getCurrentLineCount()
          ファイル入力処理済みのデータ部の行数を取得する。
protected abstract  char getDelimiter()
          区切り文字を取得する。
protected abstract  char getEncloseChar()
          囲み文字を取得する。
protected  java.lang.reflect.Field[] getFields()
          ファイル行オブジェクトのField情報(Annotation)を格納する変数を取得する。
protected  java.lang.String getFileEncoding()
          ファイルエンコーディング取得する。
protected  java.lang.String getFileName()
          ファイル名を取得する。
 java.util.List<java.lang.String> getHeader()
          ヘッダ部のデータを取得するメソッド。
protected  int getHeaderLineCount()
          ヘッダ行数を取得する。
protected  java.lang.String getLineFeedChar()
          行区切り文字を取得する。
 java.util.List<java.lang.String> getTrailer()
          トレイラ部のデータを取得するメソッド.
protected  int getTrailerLineCount()
          トレイラ行数を取得する。
 boolean hasNext()
          次の行のレコードがあるかどうか確認するためのメソッド。
protected  void init()
          初期化処理。
 T next()
          繰り返し処理でファイル行オブジェクトを返却する。
protected  java.lang.String readLine()
          ファイルからデータ部のデータを1行分読み取り、文字列として呼出元に返却する.
 void remove()
          Iteratorで定義されているメソッド。
protected abstract  java.lang.String[] separateColumns(java.lang.String fileLineString)
          文字列分割処理.
 void skip(int skipLines)
          リスタート時に処理済のデータ部のデータを読み飛ばす処理を実行する。
 
クラス java.lang.Object から継承されたメソッド
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

フィールドの詳細

fileName

private java.lang.String fileName
ファイル名。


clazz

private java.lang.Class<T> clazz
結果クラス。


lineFeedChar

private java.lang.String lineFeedChar
行区切り文字。


fileEncoding

private java.lang.String fileEncoding
ファイルエンコーディング。


headerLineCount

private int headerLineCount
ヘッダ行数。


trailerLineCount

private int trailerLineCount
トレイラ行数。


currentLineString

private java.lang.String currentLineString
現在のデータ部の1行分の文字列。


currentLineCount

private int currentLineCount
ファイル入力処理済みのデータ部の行数。


reader

private java.io.Reader reader
ファイルアクセス用の文字ストリーム。


fields

private java.lang.reflect.Field[] fields
ファイル行オブジェクトのField情報(Annotation)を格納する変数。


methods

private java.lang.reflect.Method[] methods
ファイル行オブジェクトのFieldに対応するsetterメソッドを格納する。


columnParserMap

private java.util.Map<java.lang.String,ColumnParser> columnParserMap
カラムパーザーを格納するマップ。


header

private java.util.List<java.lang.String> header
ヘッダ部の文字列リスト。


trailer

private java.util.List<java.lang.String> trailer
トレイラ部の文字列リスト。


readHeader

private boolean readHeader
ヘッダ部処理確認用フラグ。


readData

private boolean readData
データ部処理確認用フラグ。


readTrailer

private boolean readTrailer
トレイラ部処理確認用フラグ。


trailerQueue

private java.util.Queue<java.lang.String> trailerQueue
トレイラ部の一時格納用のキュー。


lineReader

private LineReader lineReader
1行分の文字列を読み込むオブジェクト


columnCount

private int columnCount
ファイル行オブジェクトで定義されているカラム数(@InputFileColumnが付いている属性の数)を格納する。

コンストラクタの詳細

AbstractFileLineIterator

public AbstractFileLineIterator(java.lang.String fileName,
                                java.lang.Class<T> clazz,
                                java.util.Map<java.lang.String,ColumnParser> columnParserMap)
コンストラクタ。

パラメータ:
fileName - ファイル名
clazz - 結果クラス
columnParserMap - フォーマット処理リスト
メソッドの詳細

hasNext

public boolean hasNext()
次の行のレコードがあるかどうか確認するためのメソッド。
繰り返し処理でさらに要素がある場合に true を返します。

定義:
インタフェース java.util.Iterator 内の hasNext
定義:
インタフェース FileLineIterator<T> 内の hasNext
戻り値:
繰り返し処理でさらに要素がある場合に true

next

public T next()
繰り返し処理でファイル行オブジェクトを返却する。

次の行のレコードの情報をファイル行オブジェクトに格納して返却します。
繰り返し処理で次の要素を返します。

定義:
インタフェース java.util.Iterator 内の next
定義:
インタフェース FileLineIterator<T> 内の next
戻り値:
ファイル行オブジェクト

remove

public void remove()
Iteratorで定義されているメソッド。 FileQueryDAOでは実装しないので、他のクラスから呼び出した場合、 UnsupportedOperationExceptionをスローする。

定義:
インタフェース java.util.Iterator 内の remove

init

protected void init()
初期化処理。
初期化処理で行うのは以下の3つ。
  • ファイル行オブジェクトの属性(Field)の取得
  • トレイラキューの初期化
  • ファイルオープン処理


buildFields

private void buildFields()
ファイル行オブジェクトの属性のフィールドオブジェクトの配列を生成する。


buildMethods

private void buildMethods()
ファイル行オブジェクトの属性のsetterメソッドのメソッドオブジェクトの配列を生成する。


closeFile

public void closeFile()
ファイル閉塞処理。

定義:
インタフェース FileLineIterator<T> 内の closeFile

getHeader

public java.util.List<java.lang.String> getHeader()
ヘッダ部のデータを取得するメソッド。

定義:
インタフェース FileLineIterator<T> 内の getHeader
戻り値:
header ヘッダ部の文字列リスト

getTrailer

public java.util.List<java.lang.String> getTrailer()
トレイラ部のデータを取得するメソッド.

定義:
インタフェース FileLineIterator<T> 内の getTrailer
戻り値:
トレイラ部の文字列リスト

readLine

protected java.lang.String readLine()
ファイルからデータ部のデータを1行分読み取り、文字列として呼出元に返却する.

戻り値:
データ部の1行分の文字列

skip

public void skip(int skipLines)
リスタート時に処理済のデータ部のデータを読み飛ばす処理を実行する。

定義:
インタフェース FileLineIterator<T> 内の skip
パラメータ:
skipLines - 読み飛ばす行数。

getDelimiter

protected abstract char getDelimiter()
区切り文字を取得する。

戻り値:
行区切り文字。

getEncloseChar

protected abstract char getEncloseChar()
囲み文字を取得する。

戻り値:
囲み文字。

separateColumns

protected abstract java.lang.String[] separateColumns(java.lang.String fileLineString)
文字列分割処理.

データ部のデータ1行分をファイル行オブジェクトのアノテーションの記述に 従いカラムに分割する。

パラメータ:
fileLineString - データ部のデータ1行分
戻り値:
データ部1行の文字列を分解した文字配列

getLineFeedChar

protected java.lang.String getLineFeedChar()
行区切り文字を取得する。

戻り値:
行区切り文字

getFileEncoding

protected java.lang.String getFileEncoding()
ファイルエンコーディング取得する。

戻り値:
ファイルエンコーディング

getHeaderLineCount

protected int getHeaderLineCount()
ヘッダ行数を取得する。

戻り値:
ヘッダ行数

getTrailerLineCount

protected int getTrailerLineCount()
トレイラ行数を取得する。

戻り値:
トレイラ行数

getCurrentLineCount

public int getCurrentLineCount()
ファイル入力処理済みのデータ部の行数を取得する。

戻り値:
ファイル入力処理済みのデータ部の行数。

getFields

protected java.lang.reflect.Field[] getFields()
ファイル行オブジェクトのField情報(Annotation)を格納する変数を取得する。

戻り値:
ファイル行オブジェクトのField情報(Annotation)を格納する変数

getFileName

protected java.lang.String getFileName()
ファイル名を取得する。

戻り値:
fileName ファイル名