2015年7月19日日曜日

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

メタデータのリポジトリクラス。
データベース上のメタデータの複数行に対する操作を記述する。

package domain;

import java.util.ArrayList;
import java.util.List;

import util.CopyUtil;
import br.CreateMetaDataBusinessRule;
import dao.MetaDataDao;
import entity.MetaData;

/**
 * メタデータリポジトリ
 */
public class MetaDataRepository {

    /** メタデータDAO */
    private MetaDataDao metaDataDao = null;

    public MetaDataDao getMetaDataDao() {
        return metaDataDao;
    }

    public void setMetaDataDao(MetaDataDao metaDataDao) {
        this.metaDataDao = metaDataDao;
    }

    /** メタデータドメイン */
    private MetaDataDomain metaDataDomain = null;

    public MetaDataDomain getMetaDataDomain() {
        return metaDataDomain;
    }

    public void setMetaDataDomain(MetaDataDomain metaDataDomain) {
        this.metaDataDomain = metaDataDomain;
    }

    /**
     * ドメインを生成します。
     *
     * @return 生成したドメイン
     */
    public MetaDataDomain createDomain(MetaData metaData) {

        // メタデータ新規作成ビジネスルールにより、チェックを行う
        CreateMetaDataBusinessRule createMetaDataBusinessRule = new CreateMetaDataBusinessRule(
                metaDataDao);
        createMetaDataBusinessRule.check(metaData);

        // 指定されたデータで登録を行う
        metaDataDao.insert(metaData);

        // ドメインを取得し、呼び出し側に戻す
        return getDomain(metaData.getMetaDataId());
    }

    /**
     * ドメインを取得します。
     *
     * @param metaDataId
     *            メタデータID
     * @return 取得したドメイン
     */
    public MetaDataDomain getDomain(Integer metaDataId) {

        // 引数をキーとして、データベースから該当データを取得する
        MetaData entity = metaDataDao.get(metaDataId);

        // データが見つからなかった場合は、戻り値nullで呼び出し側に復帰する
        if (entity == null) {
            return null;
        }

        // ドメインを生成し、エンティティを設定する
        MetaDataDomain metaDataDomain = new MetaDataDomain();
        CopyUtil.copy(this.metaDataDomain, metaDataDomain);
        metaDataDomain.setEntity(entity);

        // 生成したドメインを呼び出し側に戻す
        return metaDataDomain;
    }

    /**
     * ルートメタを検索します。
     *
     * @return ルートメタドメインのリスト
     */
    public List<MetaDataDomain> findRootMeta() {

        // DAOクラスのルートメタ検索を実行する
        List<MetaData> metaDataList = metaDataDao.findRootMeta();

        // エンティティのリストをドメインのリストに変換する
        List<MetaDataDomain> metaDataDomainList = new ArrayList<MetaDataDomain>();
        for (MetaData entity : metaDataList) {
            metaDataDomainList.add(getDomain(entity.getMetaDataId()));
        }

        // 作成したドメインのリストを呼び出し側に戻す
        return metaDataDomainList;
    }

    /**
     * 子メタを検索します。
     *
     * @return 子メタドメインのリスト
     */
    public List<MetaDataDomain> findChildMeta(Integer metaDataId) {

        // DAOクラスの子メタ検索を実行する
        List<MetaData> metaDataList = metaDataDao.findChildMeta(metaDataId);

        // エンティティのリストをドメインのリストに変換する
        List<MetaDataDomain> metaDataDomainList = new ArrayList<MetaDataDomain>();
        for (MetaData entity : metaDataList) {
            metaDataDomainList.add(getDomain(entity.getMetaDataId()));
        }

        // 作成したドメインのリストを呼び出し側に戻す
        return metaDataDomainList;
    }

    /**
     * 全ての子メタデータを削除します。
     *
     * @param parent
     *            親のメタデータドメイン
     */
    public void deleteWithAllChild(MetaDataDomain parent) {

        // 子メタを検索する
        List<MetaDataDomain> metaDataDomainList = findChildMeta(parent
                .getEntity().getMetaDataId());

        // 子メタが1つもない場合は自分自身を削除して終了する
        if (metaDataDomainList.size() == 0) {
            parent.delete();
            return;
        }

        // 検索結果の全ての子メタを処理するまでループ
        for (MetaDataDomain metaDataDomain : metaDataDomainList) {

            // 当該メタデータドメインの全ての子メタを削除する
            deleteWithAllChild(metaDataDomain);
        }

        // 全ての子メタを削除した後、自分自身も削除する
        parent.delete();
    }

    /**
     * データベースの内容を、ファイルに保存します。
     *
     * @param fileName
     *            ファイル名
     */
    public void saveFile(String fileName) {

        // DAOのsaveを呼び出す
        metaDataDao.save(fileName);
    }
}

0 件のコメント:

コメントを投稿