All Downloads are FREE. Search and download functionalities are using the official Maven repository.

nablarch.test.core.db.MasterDataSetUpper Maven / Gradle / Ivy

The newest version!
package nablarch.test.core.db;

import nablarch.core.db.connection.TransactionManagerConnection;
import nablarch.core.repository.SystemRepository;
import nablarch.core.repository.di.ComponentDefinitionLoader;
import nablarch.core.repository.di.DiContainer;
import nablarch.core.repository.di.config.xml.XmlComponentDefinitionLoader;
import nablarch.core.util.StringUtil;
import nablarch.test.NablarchTestUtils;
import nablarch.test.core.reader.PoiXlsReader;
import nablarch.test.core.reader.TestDataParser;

import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import static nablarch.core.util.Builder.concat;

/**
 * マスタデータ投入クラス。
 * 

* 最初に、処理対象テーブルのデータ削除(DELETE)を行う。 * その後、処理対象テーブルのデータ投入(INSERT)を行う。 * 同一のテーブルのデータが複数含まれる場合は、 * 先のデータが投入され、後のデータが追加される(一意性制約違反が無い場合)。 *

* * @author T.Kawasaki */ public class MasterDataSetUpper { /** マスタデータファイルのパスのList */ private final List masterDataFiles; /** バックアップスキーマ名 */ private final String backUpSchemaName; /** セットアップ完了テーブル */ private Set tablesFinished = new HashSet(); /** * コンストラクタ * @param masterDataFiles マスタデータファイルパス * @param backUpSchema バックアップスキーマ名 */ public MasterDataSetUpper(List masterDataFiles, String backUpSchema) { this.masterDataFiles = masterDataFiles; this.backUpSchemaName = backUpSchema; } /** * メインメソッド *
    *
  1. コンポーネント設定ファイルのパス(任意) *
  2. マスターデータファイルのパス(任意) *
* * @param args プログラム引数 */ @SuppressWarnings("fallthrough") public static void main(String... args) { if (args.length < 2) { throw new IllegalArgumentException( "program arguments must be greater than two. but was " + Arrays.toString(args)); } // コンポーネント設定ファイル String configFilePath = args[0]; // 2番目以降の起動引数をマスタデータファイルとして扱う List masterDataFiles = new ArrayList(); String backUpSchema = null; for (int i = 1; i < args.length; i++) { if (args[i].startsWith("--backUpSchema:")) { backUpSchema = args[i].substring("--backUpSchema:".length()); break; } File file = new File(args[i]); if (!file.exists()) { throw new IllegalArgumentException("master data file was not found. specified master data file = [" + args[i] + "]"); } masterDataFiles.add(file); } initializeRepository(configFilePath); // 自動テスト全実行用 MasterDataSetUpper masterDataSetUpper = new MasterDataSetUpper(masterDataFiles, backUpSchema); masterDataSetUpper.setUpMasterData(); } /** * リポジトリの初期化を行う。 * @param configFilePath コンポーネント設定ファイル */ private static void initializeRepository(String configFilePath) { ComponentDefinitionLoader loader = new XmlComponentDefinitionLoader(configFilePath); SystemRepository.clear(); SystemRepository.load(new DiContainer(loader)); } /** マスタデータ投入を行う。 */ public void setUpMasterData() { List all = getAllTableDataInFiles(masterDataFiles); replaceAll(all); for (TableData table : all) { tablesFinished.add(table.getTableName()); } if (!StringUtil.isNullOrEmpty(backUpSchemaName)) { copyDataToBackUpSchema(backUpSchemaName); } } private List getAllTableDataInFiles(List files) { List all = new ArrayList(); for (File file : files) { all.addAll(getAllTableData(file)); } return all; } /** * バックアップ用スキーマにデータをコピーする * @param backUpSchemaName コピー先のバックアップスキーマ名 */ private void copyDataToBackUpSchema(String backUpSchemaName) { String defaultSchema = ""; MasterDataRestorer.TableDuplicator duplicator = new MasterDataRestorer.TableDuplicator(tablesFinished, defaultSchema, backUpSchemaName); duplicator.restoreAll(); } /** * テーブルデータの置き換えを行う。 * * @param allTables 置き換えるテーブル */ void replaceAll(final List allTables) { new TransactionTemplateInternal(DbAccessTestSupport.DB_TRANSACTION_FOR_TEST_FW) { @Override protected void doInTransaction(TransactionManagerConnection conn) { deleteAll(allTables, conn); insertAll(allTables, conn); } }.execute(); } /** * テーブルデータを投入する。 * * @param allTables 置き換えるテーブル */ private void insertAll(List allTables, TransactionManagerConnection tranConn) { final List sorted = TableDataSorter.sort(allTables, tranConn); for (TableData table : sorted) { table.insertData(tranConn); } } /** * テーブルのデータを削除する。 * * @param allTables 置き換えるテーブル */ private void deleteAll(List allTables, TransactionManagerConnection tranConn) { List reversed = TableDataSorter.reversed(allTables, tranConn); for (TableData table : reversed) { table.deleteData(tranConn); } } /** * 全テーブルデータを取得する。
* マスタデータファイルから、全シートを走査しテーブルデータを取得する。 * * @param masterDataFile マスタデータファイル * @return マスタデータファイル内の全テーブルデータ */ List getAllTableData(File masterDataFile) { Set sheets = PoiXlsReader.getSheetNames(masterDataFile); List allTables = new ArrayList(); String dir = getMasterDataDir(masterDataFile); TestDataParser parser = SystemRepository.get("testDataParser"); for (String sheet : sheets) { String resourceName = concat(getMasterFileNameWithoutSuffix(masterDataFile), "/", sheet); List tables = parser.getSetupTableData(dir, resourceName); allTables.addAll(tables); } return allTables; } /** * 拡張子なしのマスタデータファイル名を取得する。 * * @param masterDataFile ファイル名 * @return 拡張子なしのマスタデータファイル名 */ private String getMasterFileNameWithoutSuffix(File masterDataFile) { String masterFileName = masterDataFile.getName(); return NablarchTestUtils.getFileNameWithoutSuffix(masterFileName); } /** * マスタデータファイルの存在するディレクトリを取得する。 * * @param masterDataFile ファイル名 * @return マスタデータファイルの存在するディレクトリ */ private String getMasterDataDir(File masterDataFile) { return masterDataFile.getAbsoluteFile().getParent(); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy