2015年7月19日日曜日

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

メタデータIDによるルートメタ検索サービスの実装クラス。

package service.impl;

import service.DomainDrivenService;
import service.FindRootMetaByMetaDataIdService;
import service.param.ServiceInputParameter;
import service.param.ServiceOutputParameter;
import service.param.SipFindRootMetaByMetaDataIdService;
import service.param.SopFindRootMetaByMetaDataIdService;
import util.CopyUtil;
import domain.MetaDataDomain;
import domain.MetaDataRepository;
import dto.MetaDataDto;

/**
 * メタデータIDによるルートメタ検索サービス(実装)
 */
public class FindRootMetaByMetaDataIdServiceImpl implements
        DomainDrivenService, FindRootMetaByMetaDataIdService {

    /** メタデータリポジトリ */
    private MetaDataRepository metaDataRepository = null;

    public MetaDataRepository getMetaDataRepository() {
        return metaDataRepository;
    }

    public void setMetaDataRepository(MetaDataRepository metaDataRepository) {
        this.metaDataRepository = metaDataRepository;
    }

    /*
     * (非 Javadoc)
     *
     * @see
     * service.DomainDrivenService#doService(service.param.ServiceInputParameter
     * )
     */
    @Override
    public ServiceOutputParameter doService(ServiceInputParameter sip) {

        // 入力パラメータからメタデータIDを取得する
        Integer metaDataId = ((SipFindRootMetaByMetaDataIdService) sip)
                .getMetaDataId();

        // サービスを実行する
        MetaDataDto metaDataDto = doService(metaDataId);

        // サービス出力パラメータを作成する
        SopFindRootMetaByMetaDataIdService sop = new SopFindRootMetaByMetaDataIdService(
                metaDataDto);

        // 出力パラメータを作成し、呼び出し側に戻す
        return sop;
    }

    /*
     * (非 Javadoc)
     *
     * @see service.FindRootMetaByMetaDataIdService#doService(java.lang.Integer)
     */
    @Override
    public MetaDataDto doService(Integer metaDataId) {

        // 指定されたメタデータIDのルートメタを求める
        MetaDataDomain domain = metaDataRepository.getDomain(metaDataId);
        while (domain.getEntity().getParentMetaDataId() != null) {
            domain = metaDataRepository.getDomain(domain.getEntity()
                    .getParentMetaDataId());
        }

        // メタデータドメインをメタデータDTOに変換する
        MetaDataDto dto = new MetaDataDto();
        CopyUtil.copy(domain.getEntity(), dto);

        // ルートメタのメタデータDTOを呼び出し側に戻す
        return dto;
    }
}

0 件のコメント:

コメントを投稿