/*
 * MosP - Mind Open Source Project    http://www.mosp.jp/
 * Copyright (C) MIND Co., Ltd.       http://www.e-mind.co.jp/
 * 
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.
 * 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 */
package jp.mosp.kintai.report.action;

import java.util.List;

import jp.mosp.common.CommonConst;
import jp.mosp.common.common.BaseVo;
import jp.mosp.common.common.MospConst;
import jp.mosp.common.common.MospException;
import jp.mosp.common.utils.StringUtil;
import jp.mosp.common.utils.VariousUtil;
import jp.mosp.kintai.common.action.KintaiCommonAction;
import jp.mosp.kintai.report.dao.MExportDao;
import jp.mosp.kintai.report.dto.MExportDto;
import jp.mosp.kintai.report.vo.ExportMasterCardVo;

/**
 * @author yoshida
 *
 */
public class ExportMasterCardAction extends KintaiCommonAction {
	
	// コマンド
	private static final String	CMD_EXPORT_MASTER_CARD_SHOW		= "S1215";	// 表示(追加)
	private static final String	CMD_EXPORT_MASTER_CARD_SELECT	= "S1216";	// 表示(選択)
	private static final String	CMD_EXPORT_MASTER_CARD_INSERT	= "S1217";	// 登録
	private static final String	CMD_EXPORT_MASTER_CARD_UPDATE	= "S1218";	// 更新
	private static final String	CMD_EXPORT_MASTER_CARD_DELETE	= "S1219";	// 削除
																			
	
	/**
	 * コンストラクタ
	 */
	public ExportMasterCardAction() {
		super();
	}
	
	/**
	 * アクション
	 */
	public void action() throws Exception {
		// VOの取得
		prepareVo();
		// 初期処理
		init();
		// コマンド毎の処理
		if (cmd.equals(CMD_EXPORT_MASTER_CARD_SHOW)) {
			// 表示
			show();
		} else if (cmd.equals(CMD_EXPORT_MASTER_CARD_SELECT)) {
			// 表示(キーで情報を検索)
			select();
		} else if (cmd.equals(CMD_EXPORT_MASTER_CARD_INSERT)) {
			// 新規登録
			regist();
		} else if (cmd.equals(CMD_EXPORT_MASTER_CARD_UPDATE)) {
			// 更新
			regist();
		} else if (cmd.equals(CMD_EXPORT_MASTER_CARD_DELETE)) {
			// 削除
			delete();
		} else {
			throw new MospException(MospConst.EX_CMD_INVALID);
		}
	}
	
	@Override
	protected BaseVo getSpecificVo() {
		return new ExportMasterCardVo();
	}
	
	@Override
	protected void init() throws Exception {
		// DBコネクション取得
		getConnection();
		// 計算管理権限確認
		confirmCalculateAuth();
		ExportMasterCardVo vo = (ExportMasterCardVo)getVo();
		vo.aryTargetTable = getArrayTargetTable();
	}
	
	@Override
	protected void show() throws Exception {
		ExportMasterCardVo vo = (ExportMasterCardVo)getVo();
		// VOに情報をセット
		vo.setTxtEName("");
		vo.setHidEFile(key1);
		vo.setLblEFile(StringUtil.getCodeName(vo.getHidEFile(), vo.aryTargetTable));
		// 人事情報項目設定
		vo.aryPltKintaiDataItem = getKintaiDataItem(vo.getHidEFile());
		vo.aryPltSelectDataItem = new String[0][2];
		// モード設定
		vo.setMode(ExportMasterCardVo.MODE_INSERT);
	}
	
	@Override
	protected void select() throws Exception {
		ExportMasterCardVo vo = (ExportMasterCardVo)getVo();
		// VOに情報をセット
		vo.setTxtEName(key1);
		vo.setHidEFile(key2);
		vo.setLblEFile(StringUtil.getCodeName(vo.getHidEFile(), vo.aryTargetTable));
		// 人事情報項目設定
		vo.aryPltKintaiDataItem = getKintaiDataItem(vo.getHidEFile());
		// データの取得
		chkExist(part().export().getMExportDao().findForKey(vo.getTxtEName(), vo.getHidEFile(), 0));
		// 人事情報項目設定
		crtDataItem();
		// モード設定
		vo.setMode(ExportMasterCardVo.MODE_UPDATE);
	}
	
	/**
	 * データ挿入
	 * @throws Exception 	例外処理が発生した場合
	 */
	protected void regist() throws Exception {
		ExportMasterCardVo vo = (ExportMasterCardVo)getVo();
		vo.setParams(request);
		// パラメータの妥当性確認
		vo.validate();
		// DAOの準備
		MExportDao dao = part().export().getMExportDao();
		/*						
		 *  	2009/02/20	m.yoshida	エラー対応
		 */
		List<MExportDto> exportlist = dao.findForCondition(vo.getTxtEName(), vo.getHidEFile());
		if (cmd.equals(CMD_EXPORT_MASTER_CARD_INSERT)) {
			if (exportlist.size() > 0) {
				vo.addErrMessage(getMessage(MospConst.MSG_DUPLICATE, ""));
				return;
			}
		} else if (cmd.equals(CMD_EXPORT_MASTER_CARD_UPDATE)) {
			if (exportlist.size() > 0) {
				dao.delete(vo.getTxtEName(), vo.getHidEFile());
			}
		}
		String[] arySelected = vo.getPltSelected();
		for (int i = 0; i < arySelected.length; i++) {
			MExportDto dto = new MExportDto();
			dto.setEName(vo.getTxtEName());
			dto.setEFile(vo.getHidEFile());
			dto.setELine(i);
			dto.setEFName(arySelected[i]);
			// 登録
			dao.insert(dto);
		}
		// コミット
		commit();
		// モード設定
		vo.setMode(ExportMasterCardVo.MODE_UPDATE);
		// メッセージ設定
		vo.setMessage(getMessage(MospConst.MSG_UPDATE, ""));
		// 人事情報項目設定
		crtDataItem();
	}
	
	/**
	 * データ削除
	 * @throws Exception 	例外処理が発生した場合
	 */
	protected void delete() throws Exception {
		ExportMasterCardVo vo = (ExportMasterCardVo)getVo();
		vo.setParams(request);
		// パラメータの妥当性確認
		vo.validate();
		// データの更新
		part().export().getMExportDao().delete(vo.getTxtEName(), vo.getHidEFile());
		// コミット
		commit();
		// メッセージ設定
		vo.setMessage(getMessage(MospConst.MSG_DELETE, ""));
		// 人事情報項目設定
		vo.aryPltKintaiDataItem = new String[0][2];
		vo.aryPltSelectDataItem = new String[0][2];
		// モード設定
		vo.setMode(ExportMasterCardVo.MODE_UPDATE);
	}
	
	/**
	 * 選択項目のリスト作成
	 * @throws Exception 	例外処理が発生した場合
	 */
	protected void crtDataItem() throws Exception {
		ExportMasterCardVo vo = (ExportMasterCardVo)getVo();
		// 人事情報項目設定
		List<MExportDto> mExportList = part().export().getMExportDao().findForCondition(vo.getTxtEName(),
				vo.getHidEFile());
		String[][] aryKintaiDataItem = getKintaiDataItem(vo.getHidEFile());
		// 項目の選択
		vo.aryPltSelectDataItem = new String[mExportList.size()][2];
		int t = 0;
		for (int i = 0; i < mExportList.size(); i++) {
			MExportDto dto = mExportList.get(i);
			for (int j = 0; j < aryKintaiDataItem.length; j++) {
				if (aryKintaiDataItem[j][0].equals(dto.getEFName())) {
					vo.aryPltSelectDataItem[i][0] = aryKintaiDataItem[j][0];
					vo.aryPltSelectDataItem[i][1] = aryKintaiDataItem[j][1];
					aryKintaiDataItem[j][0] = "";
					t++;
				} else if (StringUtil.isNotNull(aryKintaiDataItem[j][0])) {
					vo.aryPltSelectDataItem[i][0] = dto.getEFName();
					vo.aryPltSelectDataItem[i][1] = VariousUtil.getCsvSplitInfo(dto.getEFName(), 3);
				}
			}
		}
		String[][] aryPltDataItem = new String[aryKintaiDataItem.length - t][2];
		int n = 0;
		for (String[] element : aryKintaiDataItem) {
			if (StringUtil.isNotNull(element[0])) {
				aryPltDataItem[n][0] = element[0];
				aryPltDataItem[n][1] = element[1];
				n++;
			}
		}
		vo.aryPltKintaiDataItem = aryPltDataItem;
	}
	
	/**
	 * 対象テーブル名称配列
	 * @return	String[][]	対象テーブル名称配列
	 */
	protected String[][] getArrayTargetTable() {
		return new String[][]{ { CommonConst.CODE_TABLE_M_KIHON, CommonConst.NAM_TABLE_M_KIHON },
			{ CommonConst.CODE_TABLE_M_KINTAI, CommonConst.NAM_TABLE_M_KINTAI },
			{ CommonConst.CODE_TABLE_M_SYUKKINBO, CommonConst.NAM_TABLE_M_SYUKKINBO },
			{ CommonConst.CODE_TABLE_M_YUKYU, CommonConst.NAM_TABLE_M_YUKYU }, };
	}
	
	/**
	 * エクスポート情報項目設定
	 * @param strFLID	対象テーブルコード
	 * @return	String[][]	エクスポート情報項目配列
	 * @throws Exception 	例外処理が発生した場合
	 */
	protected String[][] getKintaiDataItem(String strFLID) throws Exception {
		return part().export().getKintaiDataItem(strFLID);
	}
	
}
