intra-mart Accel Kaiden! / プログラミングガイド

«  Formクラスの作成   ::   コンテンツ   ::   Actionクラスの作成  »

Logicクラスの作成

ノート

申請書ガジェットのLogicクラスの詳細は「申請書ガジェットLogicクラスプログラミング」を参照下さい。

申請書ガジェットのLogicクラスについて

「業務基底ロジッククラス」と「業務ロジッククラス」を作成することを推奨します。

業務基底ロジッククラス

jp.co.slcs.kaiden2.product_workflow.foundation.gadget.AbstractExpensePluginGadgetLogicを継承して業務基底ロジッククラスを作成します。
業務基底ロジッククラスには、ガジェットバリエーションを問わないガジェットクラス共通の処理を実装します。
クラス名は「”Abstract” + “業務名” + “LogicBase”」として下さい。
本チュートリアルでは、AbstractGadgetTutorialLogicBaseクラスを作成します。
package jp.co.slcs.kaiden2.tutorial.feature.logic.kaiden.gadget.tutorial;

import static jp.co.slcs.kaiden2.base.foundation.util.StringUtil.isEmpty;
import static jp.co.slcs.kaiden2.base.foundation.util.StringUtil.isNotEmpty;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import javax.annotation.Resource;
import jp.co.slcs.kaiden2.base.foundation.conf.BaseProp;
import jp.co.slcs.kaiden2.base.foundation.event.GadgetMediatorParams;
import jp.co.slcs.kaiden2.base.foundation.exception.KaidenApplicationException;
import jp.co.slcs.kaiden2.base.foundation.exception.KaidenSystemException;
import jp.co.slcs.kaiden2.base.foundation.helper.CurrencyHelper;
import jp.co.slcs.kaiden2.base.foundation.model.dto.ErrorDetailDto;
import jp.co.slcs.kaiden2.base.foundation.model.dto.KaidenDto;
import jp.co.slcs.kaiden2.base.foundation.util.BeanUtil;
import jp.co.slcs.kaiden2.base.foundation.util.CollectionUtil;
import jp.co.slcs.kaiden2.base.foundation.util.ConvertForJsonSource;
import jp.co.slcs.kaiden2.base.foundation.util.JsonUtil;
import jp.co.slcs.kaiden2.base.foundation.util.StringUtil;
import jp.co.slcs.kaiden2.base.foundation.util.validate.KaidenValidateResult;
import jp.co.slcs.kaiden2.extension_imw.foundation.manager.CriteriaForSqlDto;
import jp.co.slcs.kaiden2.extension_imw.foundation.manager.PluginGadgetManager;
import jp.co.slcs.kaiden2.extension_imw.foundation.model.dto.PluginGadgetDTO;
import jp.co.slcs.kaiden2.product_workflow.foundation.conf.ProductWorkflowProp;
import jp.co.slcs.kaiden2.product_workflow.foundation.gadget.AbstractExpensePluginGadgetLogic;
import jp.co.slcs.kaiden2.tutorial.foundation.manager.tutorial.GadgetTutorialManager;
import jp.co.slcs.kaiden2.tutorial.foundation.manager.tutorial.GadgetTutorialManagerDto;
import org.seasar.framework.beans.util.Beans;

/**
 * チュートリアルガジェット基底クラス(Logic).
 */
public abstract class AbstractGadgetTutorialLogicBase extends AbstractExpensePluginGadgetLogic {
    
    /** ガジェットブロックキー: チュートリアルガジェット. */
    protected static final String BLOCK_KEY_TUTORIAL_TABLE = "tutorialTable";
    
    /** GadgetTutorialManager. */
    @Resource
    protected GadgetTutorialManager gadgetTutorialManager;
    
    /** CurrencyHelper. */
    @Resource
    protected CurrencyHelper currencyHelper;
    
    /** コンストラクタ. */
    public AbstractGadgetTutorialLogicBase() {
        super();
    }
    
    /** 申請処理時に実行されるメソッド. */
    @Override
    public int apply(KaidenDto dto) throws KaidenSystemException, KaidenApplicationException {
        return insertTable();
    }
    
    /** 一時保存案件の申請処理時に実行されるメソッド. */
    @Override
    public int applyFromTempSave(KaidenDto dto) throws KaidenSystemException, KaidenApplicationException {
        deleteTable(true);
        return insertTable();
    }
    
    /** 未申請案件の申請処理時に実行されるメソッド. */
    @Override
    public int applyFromUnapply(KaidenDto dto) throws KaidenSystemException, KaidenApplicationException {
        return insertTable();
    }
    
    /** 承認処理時に実行されるメソッド. */
    @Override
    public int approve(KaidenDto dto) throws KaidenSystemException, KaidenApplicationException {
        int rv = 0;
        if (isNotEmpty(super.getGadgetDto().beforeUserDataId)) {
            rv = insertTable();
        }
        return rv;
    }
    
    /** 承認終了処理時に実行されるメソッド. */
    @Override
    public int approveEnd(KaidenDto dto) throws KaidenSystemException, KaidenApplicationException {
        int rv = 0;
        if (isNotEmpty(super.getGadgetDto().beforeUserDataId)) {
            rv = insertTable();
            
        }
        return rv;
    }
    
    /** 否認処理時に実行されるメソッド. */
    @Override
    public int deny(KaidenDto dto) throws KaidenSystemException, KaidenApplicationException {
        return 0;
    }
    
    /** 取止め処理時に実行されるメソッド. */
    @Override
    public int discontinue(KaidenDto dto) throws KaidenSystemException, KaidenApplicationException {
        return 0;
    }
    
    /** 案件操作処理時に実行されるメソッド. */
    @Override
    public int matterHandle(KaidenDto dto) {
        return 0;
    }
    
    /** 引戻し処理時に実行されるメソッド. */
    @Override
    public int pullBack(KaidenDto dto) throws KaidenSystemException, KaidenApplicationException {
        return 0;
    }
    
    /** 再申請処理時に実行されるメソッド. */
    @Override
    public int reapply(KaidenDto dto) throws KaidenSystemException, KaidenApplicationException {
        return insertTable();
    }
    
    /** 保留処理時に実行されるメソッド. */
    @Override
    public int reserve(KaidenDto dto) throws KaidenSystemException, KaidenApplicationException {
        return 0;
    }
    
    /** 保留解除処理時に実行されるメソッド. */
    @Override
    public int reserveCancel(KaidenDto dto) throws KaidenSystemException, KaidenApplicationException {
        return 0;
    }
    
    /** 差戻し処理時に実行されるメソッド. */
    @Override
    public int sendBack(KaidenDto dto) throws KaidenSystemException, KaidenApplicationException {
        return 0;
    }
    
    /** 差戻し後の引戻し処理時に実行されるメソッド. */
    @Override
    public int sendBackToPullBack(KaidenDto dto) throws KaidenSystemException, KaidenApplicationException {
        return 0;
    }
    
    /** 一時保存(新規登録)処理時に実行されるメソッド. */
    @Override
    public int tempSaveCreate(KaidenDto dto) throws KaidenSystemException, KaidenApplicationException {
        return insertTable();
    }
    
    /** 一時保存(削除)処理時に実行されるメソッド. */
    @Override
    public int tempSaveDelete(KaidenDto dto) throws KaidenSystemException, KaidenApplicationException {
        return deleteTable(true);
    }
    
    /** 一時保存(更新)処理時に実行されるメソッド. */
    @Override
    public int tempSaveUpdate(KaidenDto dto) throws KaidenSystemException, KaidenApplicationException {
        deleteTable(true);
        return insertTable();
    }
    
    /** 案件開始処理時に実行されるメソッド. */
    @Override
    public int matterStart(KaidenDto dto) throws KaidenSystemException, KaidenApplicationException {
        return 0;
    }
    
    /** 案件終了処理時に実行されるメソッド. */
    @Override
    public int matterEnd(KaidenDto dto) throws KaidenSystemException, KaidenApplicationException {
        return 0;
    }
    
    /** 到達処理時に実行されるメソッド. */
    @Override
    public int arrive(KaidenDto dto) throws KaidenSystemException, KaidenApplicationException {
        return 0;
    }
    
    /** 未完了案件削除処理時に実行されるメソッド. */
    @Override
    public int actvMatterDelete(KaidenDto dto) throws KaidenSystemException, KaidenApplicationException {
        return deleteTableIncludeBackground();
    }
    
    /** 過去案件削除処理時に実行されるメソッド. */
    @Override
    public int arcMatterDelete(KaidenDto dto) throws KaidenSystemException, KaidenApplicationException {
        // アーカイブは考慮しない
        return 0;
    }
    
    /** 完了案件削除処理時に実行されるメソッド. */
    @Override
    public int cplMatterDelete(KaidenDto dto) throws KaidenSystemException, KaidenApplicationException {
        return deleteTableIncludeBackground();
    }
    
    /** データ取得メソッド. */
    @Override
    protected LinkedHashMap<String, Object> viewMap(PluginGadgetDTO conditionDto) throws KaidenSystemException {
        GadgetTutorialManagerDto dto = Beans.createAndCopy(GadgetTutorialManagerDto.class, conditionDto).execute();
        List<GadgetTutorialManagerDto> listSelect = gadgetTutorialManager.selectList(dto);
        LinkedHashMap<String, Object> rv = new LinkedHashMap<String, Object>();
        Map<String, Object> dtoMap = new HashMap<String, Object>();
        if (!listSelect.isEmpty()) {
            dtoMap = BeanUtil.toMap(listSelect.get(0), true);
        }
        rv.put(BLOCK_KEY_TUTORIAL_TABLE, dtoMap);
        return rv;
    }
    
    /** データ取得メソッド. */
    @Override
    protected Map<String, Object> viewMapFormated(PluginGadgetDTO conditionDto, ConvertForJsonSource converter)
            throws KaidenSystemException {
        return null;
    }
    
    /** データ登録処理. */
    protected int insertTable() throws KaidenSystemException {
        GadgetTutorialManagerDto mngDto = JsonUtil.getDto(GadgetTutorialManagerDto.class,
                super.getJsonDataNormalBlock(BLOCK_KEY_TUTORIAL_TABLE));
        return gadgetTutorialManager.entry(makeSingleInsertList(mngDto));
    }
    
    /** データ削除処理. */
    protected int deleteTable(boolean tempFlg) throws KaidenSystemException {
        GadgetTutorialManagerDto mngDto = new GadgetTutorialManagerDto();
        mngDto.systemMatterId = super.getGadgetDto().systemMatterId;
        mngDto.userDataId = super.getGadgetDto().userDataId;
        mngDto.gadgetClass = super.getGadgetDto().gadgetClass;
        mngDto.gadgetInstance = super.getGadgetDto().gadgetInstance;
        if (tempFlg) {
            mngDto.systemMatterId = "temporary";
        }
        return gadgetTutorialManager.remove(mngDto);
    }
    
    /** データ削除処理(履歴を含む). */
    protected int deleteTableIncludeBackground() throws KaidenSystemException {
        GadgetTutorialManagerDto mngDto = new GadgetTutorialManagerDto();
        mngDto.systemMatterId = super.getGadgetDto().systemMatterId;
        mngDto.userDataId = null;
        mngDto.gadgetClass = super.getGadgetDto().gadgetClass;
        mngDto.gadgetInstance = super.getGadgetDto().gadgetInstance;
        return gadgetTutorialManager.removeAll(mngDto);
    }
    
    /** 申請アクション時バリデート定義処理. */
    @Override
    protected void defineValidateForApply(GadgetMediatorParams params) throws KaidenSystemException,
            KaidenApplicationException {
        defineValidateForNormal(params, false);
    }
    
    /** 一時保存案件の申請アクション時バリデート定義処理. */
    @Override
    protected void defineValidateForApplyFromTempSave(GadgetMediatorParams params) throws KaidenSystemException,
            KaidenApplicationException {
        defineValidateForNormal(params, false);
    }
    
    /** 未申請案件の申請アクション時バリデート定義処理. */
    @Override
    protected void defineValidateForApplyFromUnapply(GadgetMediatorParams params) throws KaidenSystemException,
            KaidenApplicationException {
        defineValidateForNormal(params, false);
    }
    
    /** 承認アクション時バリデート定義処理. */
    @Override
    protected void defineValidateForApprove(GadgetMediatorParams params) throws KaidenSystemException,
            KaidenApplicationException {
        defineValidateForNormal(params, false);
    }
    
    /** 承認終了アクション時バリデート定義処理. */
    @Override
    protected void defineValidateForApproveEnd(GadgetMediatorParams params) throws KaidenSystemException,
            KaidenApplicationException {
        defineValidateForNormal(params, false);
    }
    
    /** 再申請アクション時バリデート定義処理. */
    @Override
    protected void defineValidateForReapply(GadgetMediatorParams params) throws KaidenSystemException,
            KaidenApplicationException {
        defineValidateForNormal(params, false);
    }
    
    /** 一時保存(新規登録)アクション時バリデート定義処理. */
    @Override
    protected void defineValidateForTempSaveCreate(GadgetMediatorParams params) throws KaidenSystemException,
            KaidenApplicationException {
        defineValidateForNormal(params, true);
    }
    
    /** 一時保存(更新)アクション時バリデート定義処理. */
    @Override
    protected void defineValidateForTempSaveUpdate(GadgetMediatorParams params) throws KaidenSystemException,
            KaidenApplicationException {
        defineValidateForNormal(params, true);
    }
    
    /** フィールドバリデート定義. */
    protected void defineValidateForNormal(GadgetMediatorParams params, boolean tmpFlg) throws KaidenSystemException,
            KaidenApplicationException {
        // 本機能ではサブクラスで実装します
    }
    
    /** ガジェット内個別バリデート処理. */
    @Override
    protected List<KaidenValidateResult> postSingleValidate(String eventKey, GadgetMediatorParams params,
            boolean isAuto, boolean isLump) throws KaidenSystemException, KaidenApplicationException {
        return new ArrayList<KaidenValidateResult>();
    }
    
    /** 大域バリデート処理. */
    @Override
    protected List<KaidenValidateResult> globalValidateMain(String eventKey, GadgetMediatorParams params,
            boolean isAuto, boolean isLump) throws KaidenSystemException, KaidenApplicationException {
        return new ArrayList<KaidenValidateResult>();
    }
    
    /** 初期表示用検索詳細処理. */
    @Override
    protected Map<String, Object> selectBlockDatasForView(CriteriaForSqlDto criteria) {
        Map<String, Object> result = new HashMap<String, Object>();
        
        if (StringUtil.isEmpty(criteria.systemMatterId)
                || (StringUtil.isEmpty(criteria.userDataId) && !criteria.searchFromArchiveFlag)) {
            // 新規申請の場合
            result.put(BLOCK_KEY_TUTORIAL_TABLE, new ArrayList<GadgetTutorialManagerDto>());
        } else {
            // 新規申請でない場合
            result.put(BLOCK_KEY_TUTORIAL_TABLE, gadgetTutorialManager.selectView(criteria));
        }
        return result;
    }
    
    /** 申請書コピー用検索詳細処理. */
    @Override
    protected Map<String, Object> selectBlockDatasForCopy(CriteriaForSqlDto criteria) {
        Map<String, Object> result = new HashMap<String, Object>();
        result.put(BLOCK_KEY_TUTORIAL_TABLE, gadgetTutorialManager.selectViewForCopy(criteria));
        return result;
    }
    
    /** 過去案件用検索詳細処理. */
    @Override
    protected Map<String, Object> selectBlockDatasForArchive(CriteriaForSqlDto criteria) {
        // アーカイブは考慮しない
        return new HashMap<String, Object>();
    }
    
    /** 検索結果のマスタ整合性チェック. */
    @Override
    protected List<ErrorDetailDto> checkSelectedData(Map<String, Object> dataMap, ProcessType processType) {
        List<ErrorDetailDto> result = new ArrayList<ErrorDetailDto>();
        for (Entry<String, Object> dataEs : dataMap.entrySet()) {
            if (BLOCK_KEY_TUTORIAL_TABLE.equals(dataEs.getKey())) {
                @SuppressWarnings("unchecked")
                List<GadgetTutorialManagerDto> sqlResultList = CollectionUtil.castListContent(
                        (List<? extends KaidenDto>) dataEs.getValue(), GadgetTutorialManagerDto.class);
                for (GadgetTutorialManagerDto sqlResult : sqlResultList) {
                    if (isNotEmpty(sqlResult.tutorialCurrencyCd) && isEmpty(sqlResult.tutorialCurrencyName)) {
                        String[] fieldId = getArgs("tutorialCurrencyCd", "tutorialCurrencyName");
                        String masterName = propertyHelper.getSurface(contextHelper.getLoginUserLocale(),
                                BaseProp.S.CURRENCY);
                        String[] values = getArgs(sqlResult.tutorialCurrencyCd, sqlResult.tutorialCurrencyName);
                        String message = propertyHelper.getMessage(ProductWorkflowProp.M.W0005, masterName);
                        result.add(new ErrorDetailDto(BLOCK_KEY_TUTORIAL_TABLE, fieldId, null, masterName, values,
                                message));
                    }
                }
            }
        }
        return result;
    }
    
    /** データ補完処理. */
    @Override
    protected void complementJsonData(GadgetMediatorParams params) {
        // サブクラスで実装するため基底では何も行わない
        return;
    }
    
    /** 案件退避処理時の登録処理. */
    @Override
    protected int matterArchiveRegister(KaidenDto dto, CriteriaForSqlDto criteria, Map<String, Object> dataMap) {
        // アーカイブは考慮しない
        return 0;
    }
    
    /** 退避済完了案件削除対象マネージャリストを返却. */
    @Override
    protected List<PluginGadgetManager<? extends KaidenDto>> getDeleteTargetsForArchiveManagers() {
        // アーカイブは考慮しない
        return new ArrayList();
    }
    
    /** JSON出力用の形式に変換し同時に書式も設定. */
    @Override
    protected Map<String, Object> mapConvert(Map<String, Object> dataMap, ConvertForJsonSource converter,
            ProcessType processType) {
        
        @SuppressWarnings("unchecked")
        List<GadgetTutorialManagerDto> listDto = (List<GadgetTutorialManagerDto>) dataMap.get(BLOCK_KEY_TUTORIAL_TABLE);
        if (CollectionUtil.isNotEmpty(listDto)) {
            dataMap.put(BLOCK_KEY_TUTORIAL_TABLE, BeanUtil.toMap(listDto.get(0), true));
        } else {
            dataMap.put(BLOCK_KEY_TUTORIAL_TABLE, new HashMap<String, Object>());
        }
        
        return converter.mapConvert(dataMap);
    }
}

業務ロジッククラス

業務基底ロジッククラスを継承して業務ロジッククラスを作成します。
業務ロジッククラスには、ガジェットバリエーションごとに異なる処理を実装します。
クラス名は「”業務名” + “ガジェットバリエーション” + “Logic”」として下さい。
本チュートリアルでは、GadgetTutorialV01Logicクラスを作成します。
package jp.co.slcs.kaiden2.tutorial.feature.logic.kaiden.gadget.tutorial;

import static jp.co.slcs.kaiden2.base.foundation.util.StringUtil.isEmpty;
import java.util.Map;
import jp.co.slcs.kaiden2.base.foundation.event.GadgetMediatorParams;
import jp.co.slcs.kaiden2.base.foundation.exception.KaidenApplicationException;
import jp.co.slcs.kaiden2.base.foundation.exception.KaidenSystemException;
import jp.co.slcs.kaiden2.base.foundation.util.StringUtil;

/**
 * チュートリアルv01ガジェット(Logic).
 * 
 * @author Sumitomo Life Information Systems Co.,Ltd.
 */
public class GadgetTutorialV01Logic extends AbstractGadgetTutorialLogicBase {
    
    /** チュートリアルガジェット.金額の最小値. */
    public static final int TUTORIAL_AMOUNT_NUMERIC_MIN = 0;
    
    /** チュートリアルガジェット.テキストの最大長. */
    public static final int TUTORIAL_TEXT_LEN = 250;
    
    /** コンストラクタ. */
    public GadgetTutorialV01Logic() {
        super();
    }
    
    /** フィールドバリデート定義. */
    @Override
    protected void defineValidateForNormal(GadgetMediatorParams params, boolean tmpFlg) throws KaidenSystemException,
            KaidenApplicationException {
        
        if (fieldDefsMap.containsKey(BLOCK_KEY_TUTORIAL_TABLE)) {
            addValidateDefsRequired(BLOCK_KEY_TUTORIAL_TABLE, tmpFlg);
            addValidateDefsMapOnlyInput(BLOCK_KEY_TUTORIAL_TABLE, "tutorialText", "maxLength",
                    StringUtil.toString(TUTORIAL_TEXT_LEN));
            addValidateDefsMap(BLOCK_KEY_TUTORIAL_TABLE, "tutorialCurrencyCd", "immCurrencyExists",
                    "tutorialCurrencyCd", "searchCriteriaCompany");
            addValidateDefsMapOnlyInput(BLOCK_KEY_TUTORIAL_TABLE, "tutorialAmount", "currencyAmnt",
                    "tutorialCurrencyCd", "searchCriteriaCompany");
            addValidateDefsMapOnlyInput(BLOCK_KEY_TUTORIAL_TABLE, "tutorialAmount", "numericMin",
                    StringUtil.toString(TUTORIAL_AMOUNT_NUMERIC_MIN));
        }
    }
    
    /** データ補完処理. */
    @Override
    protected void complementJsonData(GadgetMediatorParams params) {
        Map<String, Object> blockDat = getJsonDataNormalBlock(BLOCK_KEY_TUTORIAL_TABLE);
        String currencyCd1 = StringUtil.toString(blockDat.get("tutorialCurrencyCd"));
        
        if (isEmpty(currencyCd1)) {
            blockDat.put("tutorialCurrencyCd",
                    currencyHelper.getCompanyCurrencyCd((String) blockDat.get("searchCriteriaCompany")));
        }
    }
}

«  Formクラスの作成   ::   コンテンツ   ::   Actionクラスの作成  »