From fb2da487fccf9674ef054e43e1c30e9ebdd55de1 Mon Sep 17 00:00:00 2001 From: Takayuki Uchida Date: Thu, 9 Nov 2023 09:52:19 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20ZipCodeFileReader=E3=82=92DataBindRecor?= =?UTF-8?q?dReader=E3=81=A7=E7=BD=AE=E6=8F=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../batch/action/ImportZipCodeFileAction.java | 40 ++++++-- .../app/batch/reader/ZipCodeFileReader.java | 91 ------------------- 2 files changed, 30 insertions(+), 101 deletions(-) delete mode 100644 src/main/java/com/nablarch/example/app/batch/reader/ZipCodeFileReader.java diff --git a/src/main/java/com/nablarch/example/app/batch/action/ImportZipCodeFileAction.java b/src/main/java/com/nablarch/example/app/batch/action/ImportZipCodeFileAction.java index 49467a4..3512869 100644 --- a/src/main/java/com/nablarch/example/app/batch/action/ImportZipCodeFileAction.java +++ b/src/main/java/com/nablarch/example/app/batch/action/ImportZipCodeFileAction.java @@ -2,26 +2,24 @@ import com.nablarch.example.app.batch.form.ZipCodeForm; import com.nablarch.example.app.batch.interceptor.ValidateData; -import com.nablarch.example.app.batch.reader.ZipCodeFileReader; import com.nablarch.example.app.entity.ZipCodeData; import nablarch.common.dao.UniversalDao; import nablarch.core.beans.BeanUtil; import nablarch.core.util.annotation.Published; -import nablarch.fw.DataReader; import nablarch.fw.ExecutionContext; import nablarch.fw.Result; -import nablarch.fw.action.BatchAction; +import nablarch.fw.action.DataBindBatchAction; /** * 住所ファイルをDBに登録するバッチクラス。 * @author Nabu Rakutaro */ @Published -public class ImportZipCodeFileAction extends BatchAction { +public class ImportZipCodeFileAction extends DataBindBatchAction { /** - * {@link ZipCodeFileReader} から渡された一行分の情報をDBに登録する。 + * 一行分の情報をDBに登録する。 *

* メソッド実行時に{@link ValidateData} がインターセプトされるため、 * このメソッドには常にバリデーション済みの {@code inputData} が引き渡される。 @@ -41,13 +39,35 @@ public Result handle(ZipCodeForm inputData, ExecutionContext ctx) { } /** - * リーダを作成する。 + * このメソッドを入力データ型を返却するようにオーバーライドすることで、 + * FWによって自動的にDataReaderが作成される。 * - * @param ctx 実行コンテキスト - * @return リーダーオブジェクト + * @return 入力データの型 */ @Override - public DataReader createReader(ExecutionContext ctx) { - return new ZipCodeFileReader(); + public Class getInputDataType() { + return ZipCodeForm.class; + } + + /** + * このメソッドを入力ファイルの名称を返却するようにオーバーライドすることで、 + * FWによって自動的にDataReaderが作成される。 + * + * @return 入力ファイル名 + */ + @Override + public String getDataFileName() { + return "importZipCode"; + } + + /** + * 入力ファイル配置先のベースパスが{@code "input"}でない場合は、 + * このメソッドをオーバーライドして、適切なベースパスを返却するようにする。 + * + * @return 入力ファイル配置先のベースパス + */ + @Override + public String getDataFileDirName() { + return "csv-input"; } } diff --git a/src/main/java/com/nablarch/example/app/batch/reader/ZipCodeFileReader.java b/src/main/java/com/nablarch/example/app/batch/reader/ZipCodeFileReader.java deleted file mode 100644 index 3326270..0000000 --- a/src/main/java/com/nablarch/example/app/batch/reader/ZipCodeFileReader.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.nablarch.example.app.batch.reader; - -import com.nablarch.example.app.batch.form.ZipCodeForm; -import com.nablarch.example.app.batch.reader.iterator.ObjectMapperIterator; -import nablarch.common.databind.ObjectMapperFactory; -import nablarch.core.util.FilePathSetting; -import nablarch.core.util.annotation.Published; -import nablarch.fw.DataReader; -import nablarch.fw.ExecutionContext; - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; - -/** - * 住所ファイルを読み込むためのデータリーダクラス。 - *

- * @author Nabu Rakutaro - */ -@Published -public class ZipCodeFileReader implements DataReader { - - /** - * 読み込むファイルの名称 - */ - private static final String FILE_NAME = "importZipCode"; - - /** - * 処理対象のデータを返すイテレータ - */ - private ObjectMapperIterator iterator; - - /** - * 業務ハンドラが処理する一行分のデータを返却する。 - * - * @param ctx 実行コンテキスト - * @return 一行分のデータ - */ - @Override - public ZipCodeForm read(ExecutionContext ctx) { - if (iterator == null) { - initialize(); - } - return iterator.next(); - } - - /** - * 次行があるかどうかを返す。 - * - * @param ctx 実行コンテキスト - * @return 次行がある場合は {@code true} 、ない場合は {@code false} - */ - @Override - public boolean hasNext(ExecutionContext ctx) { - if (iterator == null) { - initialize(); - } - return iterator.hasNext(); - } - - /** - * 終了処理。 - *

- * {@link ObjectMapperIterator#close()} を呼び出す。 - * @param ctx 実行コンテキスト - */ - @Override - public void close(ExecutionContext ctx) { - iterator.close(); - } - - /** - * 初期化処理。 - *

- * イテレータを生成する。 - * @throws RuntimeException ファイルの読み込みに失敗した場合 - */ - private void initialize() { - FilePathSetting filePathSetting = FilePathSetting.getInstance(); - File zipCodeFile = filePathSetting.getFileWithoutCreate("csv-input", FILE_NAME); - - // ファイルの読み出しに利用するイテレータを生成 - try { - iterator = new ObjectMapperIterator<>(ObjectMapperFactory.create(ZipCodeForm.class, - new FileInputStream(zipCodeFile))); - } catch (FileNotFoundException e) { - throw new IllegalStateException(e); - } - } - -}