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

第2版 2014-08-01

«  3.3.2.1.2.7. Logicクラスの作成   ::   コンテンツ   ::   3.3.2.1.2.9. JSPの作成  »

3.3.2.1.2.8. Actionクラスの作成

コラム

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

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

申請書ガジェットのActionクラスはガジェットバリエーションを問わない共通した処理を実装する「業務基底アクションクラス」と、
ガジェットバリエーションごとに異なる処理を実装する「業務アクションクラス」を作成することを推奨します。

3.3.2.1.2.8.1.1. 業務基底アクションクラス

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

import java.math.BigDecimal;
import java.util.HashMap;
import java.util.Map;
import java.util.Stack;
import jp.co.slcs.kaiden2.base.foundation.helper.NumberHelper;
import jp.co.slcs.kaiden2.base.foundation.model.dto.LogicResultDto;
import jp.co.slcs.kaiden2.base.foundation.util.ConvertForJsonSource;
import jp.co.slcs.kaiden2.base.foundation.util.ResponseWriter;
import jp.co.slcs.kaiden2.extension_imw.foundation.imw_page.AbstractImwPageForm;
import jp.co.slcs.kaiden2.product_workflow.foundation.gadget.GadgetActionIF;
import net.arnx.jsonic.JSON;
import org.seasar.framework.container.SingletonS2Container;
import org.seasar.struts.annotation.Execute;

/**
 * チュートリアルガジェット基底クラス(Action).
 */
public abstract class AbstractGadgetTutorialActionBase implements GadgetActionIF {
    
    /** 申請画面のデータロード. */
    @Override
    @Execute(validator = false)
    public String loadApply() {
        ResponseWriter.writeJSon(JSON.encode(getViewData()));
        return null;
    }
    
    /** 再申請画面のデータロード. */
    @Override
    @Execute(validator = false)
    public String loadReapply() {
        ResponseWriter.writeJSon(JSON.encode(getViewData()));
        return null;
    }
    
    /** 一時保存画面のデータロード. */
    @Override
    @Execute(validator = false)
    public String loadTempsave() {
        ResponseWriter.writeJSon(JSON.encode(getViewData()));
        return null;
    }
    
    /** 処理画面のデータロード. */
    @Override
    @Execute(validator = false)
    public String loadProcess() {
        ResponseWriter.writeJSon(JSON.encode(getViewData()));
        return null;
    }
    
    /** 確認画面のデータロード. */
    @Override
    @Execute(validator = false)
    public String loadConfirm() {
        ResponseWriter.writeJSon(JSON.encode(getViewData()));
        return null;
    }
    
    /**
     * 処理詳細画面のデータロード.
     * 
     * @return Ajaxアクセスのため、常にnullを返却
     */
    @Override
    @Execute(validator = false)
    public String loadProcessDetail() {
        ResponseWriter.writeJSon(JSON.encode(getViewData()));
        return null;
    }
    
    /** 画面表示用データを返却. */
    @Override
    public LogicResultDto getViewData() {
        return getLogic().view(getForm(), new ConvertForJsonSource());
    }
    
    /** 参照詳細画面のデータロード. */
    @Override
    @Execute(validator = false)
    public String loadReferenceDetail() {
        ResponseWriter.writeJSon(JSON.encode(getViewData()));
        return null;
    }
    
    /** 確認詳細画面のデータロード. */
    @Override
    @Execute(validator = false)
    public String loadConfirmDetail() {
        ResponseWriter.writeJSon(JSON.encode(getViewData()));
        return null;
    }
    
    /** 申請書コピーのデータロード. */
    @Override
    @Execute(validator = false)
    public String loadCopy() {
        ResponseWriter.writeJSon(JSON.encode(getLogic().viewForCopy(getForm(), getConvertor())));
        return null;
    }
    
    /** 過去案件詳細画面のデータロード. */
    @Override
    @Execute(validator = false)
    public String loadArchiveMatterDetail() {
        ResponseWriter.writeJSon(JSON.encode(getLogic().viewArchive(getForm(), getConvertor())));
        return null;
    }
    
    /** 書式変換設定を返却. */
    protected TutorialConvertor getConvertor() {
        return new TutorialConvertor(getForm());
    }
    
    /** チュートリアルガジェットの書式変換. */
    private class TutorialConvertor extends ConvertForJsonSource {
        
        /** リクエストパラメータ. */
        private final AbstractImwPageForm frm;
        
        /** NumberHelper. */
        private final NumberHelper numberHelper;
        
        /** コンストラクタ. */
        public TutorialConvertor(AbstractImwPageForm frm) {
            this.frm = frm;
            numberHelper = SingletonS2Container.getComponent(NumberHelper.class);
        }
        
        /** 入力項目用書式変換. */
        @Override
        protected Map<String, Object> formatPlainValue(Map<String, Object> map, Stack<String> fldNameStack) {
            
            Map<String, Object> result = new HashMap<String, Object>(map);
            
            // 金額の書式変換
            if (result.containsKey("tutorialAmount")) {
                BigDecimal amount = (BigDecimal) result.get("tutorialAmount");
                
                Object currencyCd = result.get("tutorialCurrencyCd");
                result.put("tutorialAmount",
                        numberHelper.formatCurrencyAmount4Input(amount, frm.searchCriteriaCompany, (String) currencyCd));
            }
            
            return result;
        }
        
        /** 表示項目用書式変換. */
        @Override
        protected Map<String, String> formatFormatedValue(Map<String, Object> map, Stack<String> fldNameStack) {
            Map<String, String> result = super.formatFormatedValue(map, fldNameStack);
            
            // 金額の書式変換
            if (map.containsKey("tutorialAmount")) {
                BigDecimal amount = (BigDecimal) map.get("tutorialAmount");
                Object currencyCd = map.get("tutorialCurrencyCd");
                result.put("tutorialAmount",
                        numberHelper.formatCurrencyAmount4View(amount, frm.searchCriteriaCompany, (String) currencyCd));
            }
            
            return result;
        }
        
    }
}

3.3.2.1.2.8.1.2. 業務アクションクラス

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

import javax.annotation.Resource;
import jp.co.slcs.kaiden2.extension_imw.foundation.imw_page.AbstractImwPageForm;
import jp.co.slcs.kaiden2.extension_imw.foundation.manager.PluginLogicIF;
import jp.co.slcs.kaiden2.tutorial.feature.form.kaiden.gadget.GadgetTutorialV01Form;
import jp.co.slcs.kaiden2.tutorial.feature.logic.kaiden.gadget.tutorial.GadgetTutorialV01Logic;
import org.seasar.struts.annotation.ActionForm;

/**
 * チュートリアルv01ガジェット(Action).
 */
public class GadgetTutorialV01Action extends AbstractGadgetTutorialActionBase {
    
    /** Logic. */
    @Resource
    public GadgetTutorialV01Logic gadgetTutorialV01Logic;
    
    /** Form. */
    @ActionForm
    @Resource
    public GadgetTutorialV01Form gadgetTutorialV01Form;
    
    /** Logicを取得. */
    @Override
    public PluginLogicIF getLogic() {
        return gadgetTutorialV01Logic;
    }
    
    /** Formを取得. */
    @Override
    public AbstractImwPageForm getForm() {
        return gadgetTutorialV01Form;
    }
    
}

«  3.3.2.1.2.7. Logicクラスの作成   ::   コンテンツ   ::   3.3.2.1.2.9. JSPの作成  »