2015年7月19日日曜日

[メタデータエディタ]SvFileDb

SVファイル(カンマやタブなど、特定のデリミタでデータを区切る形式のファイル)のクラス。

package dao.impl;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.List;

import util.PropUtil;
import util.SvFile;
import exception.ApplicationInternalException;

/**
 * セパレーテッドバリューファイルDAO(実装)
 */
public class SvFileDb {

    /** シングルトンのインスタンス */
    private static SvFileDb svFileDb = null;

    /**
     * シングルトンのインスタンスを取得します。
     *
     * @return インスタンス
     */
    public static SvFileDb getInstance() {
        if (svFileDb == null) {
            svFileDb = new SvFileDb();
        }
        return svFileDb;
    }

    /**
     * コンストラクタ
     */
    private SvFileDb() {
        try {
            loadDb();
        } catch (IOException e) {
            throw new ApplicationInternalException(
                    PropUtil.get("msg.err.dbLoad"));
        }
    }

    /** データベース */
    private SvFile db = null;

    /**
     * データベースのインスタンスを取得します。
     *
     * @return データベースのインスタンス
     */
    public SvFile getDb() {
        if (db == null) {
            db = new SvFile();
        }
        return db;
    }

    /**
     * SV行データリストを取得します。
     *
     * @return 行データリスト
     */
    public List<List<String>> getSvLineList() {

        // SV行データリストを取得する
        List<List<String>> svLineList;
        svLineList = getDb().getSvLineList();

        // SV行データリストを呼び出し側に戻す
        return svLineList;
    }

    /**
     * データベースをコミットします。
     */
    public void commit() {
        try {
            getDb().save(PropUtil.get("db.sv.fileName"),
                    getDb().getSvLineList());
        } catch (IOException e) {
            throw new ApplicationInternalException(
                    PropUtil.get("msg.err.dbSave"));
        }
    }

    /**
     * データベースをロールバックします。
     */
    public void rollback() {
        try {
            getDb().loadFile(PropUtil.get("db.sv.fileName"));
        } catch (IOException e) {
            throw new ApplicationInternalException(
                    PropUtil.get("msg.err.dbLoad"));
        }
    }

    /**
     * データベースからデータをロードします。
     */
    private void loadDb() throws IOException {

        // ファイルを開いてみる
        String fileName = PropUtil.get("db.sv.fileName");
        File f = new File(fileName);

        // ファイルが存在しない場合は新規作成する
        if (!f.exists()) {
            FileWriter fw = new FileWriter(f);
            fw.close();
        }

        // データベースファイルを開く
        getDb().loadFile(PropUtil.get("db.sv.fileName"));
    }
}

0 件のコメント:

コメントを投稿