/*
 * Copyright (c) 2007 NTT DATA Corporation
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package jp.terasoluna.thin.functionsample.messageex.web.action;

import java.util.Map;

import jp.terasoluna.thin.functionsample.messageex.bean.MessageExScopeParam;
import jp.terasoluna.thin.functionsample.messageex.service.MessageExScopeService;
import jp.terasoluna.fw.service.thin.BLogicMessage;
import jp.terasoluna.fw.service.thin.BLogicMessages;
import jp.terasoluna.fw.service.thin.BLogicResult;
import jp.terasoluna.fw.web.struts.actions.AbstractBLogicAction;

/**
 * セッションスコープメッセージアクションクラス
 *
 */
public class MessageExSessionScopeAction 
            extends AbstractBLogicAction<MessageExScopeParam>{
    
    /**
     * スコープメッセージ順序格納クラス宣言
     */
    private MessageExScopeService scopeService ;
    
    /**
     * １．順序によってメッセージを入力<br>
     * ２．順序によってエラーメッセージを入力
     *
     * @param param 格納順序パラメータークラス
     * @return メッセージとエラーメッセージ
     */
    @Override
    public BLogicResult doExecuteBLogic(MessageExScopeParam param) 
                                                    throws Exception {

    	BLogicResult result = new BLogicResult();
    	BLogicMessages error = new BLogicMessages();
    	BLogicMessages mess = new BLogicMessages();
        Map<Integer, String> messKey = scopeService.execute(param);
        
        for (int i=0;i<4;i++) {
            String msg = null;
            String err = null;
            
            // 4番目のメッセージはmsg0とerr0に格納する。
            if (i == 3) {
                msg = "msg0";
                err = "err0";
            } else {
                msg = "msg" + i;
                err = "err" + i;
            }
            
            if (messKey.get(i+4) != null) {
                // 不正な入力時エラーメッセージだけ設定する。
                if (messKey.get(i) != null) {
                    mess.add(msg, new BLogicMessage(messKey.get(i)));                    
                }
                error.add(err, new BLogicMessage(messKey.get(i+4)));
            }
        }
        
        result.setErrors(error);
        result.setMessages(mess);
        result.setResultString("success");
        return result;
    }

    /**
     * スコープメッセージ順序格納クラスを取得する。
     * @return スコープメッセージ順序格納クラス
     */
    public MessageExScopeService getScopeService() {
        return scopeService;
    }

    /**
     * スコープメッセージ順序格納クラスを設定する。
     * @param scopeService スコープメッセージ順序格納クラス
     */
    public void setScopeService(MessageExScopeService scopeService) {
        this.scopeService = scopeService;
    }
}