/*******************************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
********************************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JECC0041D010TPMA
*	ソースファイル名：JECC0041D010TPMA.java
*	作成者			：EKek0070
*	日付			：2011年04月14日
*＜機能概要＞
*	電子ファイル管理登録独自処理部品
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	ｖ1.00.00
*
********************************************************************************/

package eo.ejb.cbs.mainproc;

import java.util.HashMap;

import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.base.CAANRuntimeException;
import com.fujitsu.futurity.model.ejb.common.StatusCodes;
import com.fujitsu.futurity.model.ejb.common.fw.AgentDispatchContext;
import com.fujitsu.futurity.model.ejb.common.fw.TemplateMainHandler;
import eo.common.util.JCCFrameworkException;
import eo.ejb.common.EventIDList;
import eo.ejb.common.JCCejbEFile;
import eo.ejb.cbm.entity.CC0041ETMsg;
import eo.ejb.cbs.cbsmsg.ECC0041D010CBSMsg;
import eo.ejb.common.JCCModelCommon;

/**
 * 主処理部品（共通）.
 * <p>
 * 電子ファイル管理登録独自処理部品です。
 * </p>
 * @author 富士通
 */
public class JECC0041D010TPMA implements TemplateMainHandler
{

	/**
	 * 電子ファイル管理登録独自処理部
	 * @param inCBSMsg CBSMsg
	 * @param inContext AgentDispatchContext
	 * @throws Throwable
	 */
	public void invoke(CAANMsg inCBSMsg, AgentDispatchContext inContext)
	{
		try 
		{
			// 変数定義
			//圧縮後電子ファイルパス
			String asshukuFilePath;
			//圧縮後ファイル名
			String butsuriFileName;
			//圧縮後ファイルサイズ
			String assukuFileSize;
			//圧縮前ファイルサイズ
			String fileSize ;
			//ファイル削除年月日
			String fileDelYmd;
			//作業用ディレクトリパス
			String removeTmpDir;  
			//電子ファイル管理番号
			String eFileKanriNo;
			//電子ファイル情報チェック部品
			JCCejbEFile jCCejbEFile = new JCCejbEFile();
			//電子ファイル情報チェック部品の結果
			HashMap<String, String> eFileInfo;
			
			final String ASSHUKU_FILE_PATH = "ASSHUKU_FILE_PATH";
			final String BUTSURI_FILE_NM = "BUTSURI_FILE_NM";
			final String ASSHUKU_FILE_SIZE = "ASSHUKU_FILE_SIZE";
			final String FILE_SIZE = "FILE_SIZE";
			final String FILE_DEL_YMD = "FILE_DEL_YMD";
			final String REMOVE_TEMP_DIR = "REMOVE_TEMP_DIR";  
			
//			try
//			{
				
				//@ 電子ファイル情報チェック部品の呼び出しを行い、圧縮後電子ファイルパス、
				//圧縮後ファイル名、圧縮後ファイルサイズ、圧縮前ファイルサイズ、
				//ファイル削除年月日、作業用ディレクトリパスを取得する。
				eFileInfo = jCCejbEFile.eFileInfoCheck((byte[])inCBSMsg.getObject(ECC0041D010CBSMsg.EFILE),
						inCBSMsg.getString(ECC0041D010CBSMsg.FILE_DEL_YMD));
				//A 部品からの返却値がnullの場合、CBSMsgに以下の値を設定し、処理を終了する。
				if(eFileInfo == null) {
					// ファイルサイズエラーに"E5"を設定
					inCBSMsg.set(ECC0041D010CBSMsg.EFILE_ERR, "E5");  
					// ステータスに「単項目でチェックエラー」を設定
					inCBSMsg.set(ECC0041D010CBSMsg.STATUS, StatusCodes.ITEM_RELATION_ERR);
					
					return;
				}
				
				asshukuFilePath = eFileInfo.get(ASSHUKU_FILE_PATH);
				butsuriFileName = eFileInfo.get(BUTSURI_FILE_NM);
				assukuFileSize = eFileInfo.get(ASSHUKU_FILE_SIZE);
				//fileSize = inCBSMsg.getString(ECC0041D010CBSMsg.FILE_SIZE);
				fileSize = eFileInfo.get(FILE_SIZE);
				//fileDelYmd = inCBSMsg.getString(ECC0041D010CBSMsg.FILE_DEL_YMD);
				fileDelYmd = eFileInfo.get(FILE_DEL_YMD);
				removeTmpDir = eFileInfo.get(REMOVE_TEMP_DIR);  
				
//			}
//			catch(Exception e)
//			{
//				throw new CAANRuntimeException(e);
//			}
			
			// B 上記以外の場合
			// CBSMsg物理ファイル名へ圧縮後ファイル名を設定
			inCBSMsg.set(ECC0041D010CBSMsg.BUTSURI_FILE_NM, butsuriFileName);
			// CBSMsg圧縮ファイルサイズへ圧縮後ファイルサイズを設定
			inCBSMsg.set(ECC0041D010CBSMsg.ASSHUKU_FILE_SIZE, assukuFileSize);
			// CBSMsgファイルサイズへ圧縮前ファイルサイズを設定
			inCBSMsg.set(ECC0041D010CBSMsg.FILE_SIZE, fileSize);
			// CBSMsgファイル削除年月日へファイル削除年月日を設定
			inCBSMsg.set(ECC0041D010CBSMsg.FILE_DEL_YMD, fileDelYmd);
			//CBSMsg(世代登録年月日時分秒)へオンラインシステム日付取得部品より取得できるシステム日付を設定する。
			inCBSMsg.set(ECC0041D010CBSMsg.GENE_ADD_DTM, JCCModelCommon.getSysDateTimeStamp());
			
			// CBSMsg(ファイルコード)がnullまたは空白の場合「0000」を設定する。
			
			if(null == inCBSMsg.getString(ECC0041D010CBSMsg.FILE_CD) || (inCBSMsg.getString(ECC0041D010CBSMsg.FILE_CD).isEmpty()))
			{
				inCBSMsg.set(ECC0041D010CBSMsg.FILE_CD, "0000");
			}
	
			//(2) 電子ファイル管理番号取得(機能コードが"2"の場合は呼び出しは行わない。)
			if (inCBSMsg.getString(ECC0041D010CBSMsg.FUNC_CODE).equals("1"))
			{
				//@ 電子ファイル管理番号取得部品の呼び出しを行い、電子ファイル管理番号を取得する。（引数：コネクションオブジェクト）
				//A 部品からJCCFrameworkExceptionが返却された場合、CBSMsgに以下の値を設定し、JCCFrameworkExceptionをスローし、処理を終了する。
				//ステータス：「検索時DBエラー」
				
				try
				{
					//B 部品より返却された電子ファイル管理番号がnullの場合、CBSMsgに以下の値を設定し、処理を終了する。
					//また、(1)で取得した作業用ディレクトリの削除を行う。
					//電子ファイル管理番号エラーに"EA"を付与
					//ステータス：「関連チェックでエラー」
					eFileKanriNo = jCCejbEFile.getEFileKanriNo();
					if(eFileKanriNo == null)
					{
// 20110425 FST START 関連チェックエラーが返却されない。
//						inCBSMsg.set(ECC0041D010CBSMsg.EFILE_ERR, "EA");
//						inCBSMsg.set(ECC0041D010CBSMsg.STATUS, StatusCodes.RELATION_ERR);
// 20110425 FST END 関連チェックエラーが返却されない。
						//また、(1)で取得した作業用ディレクトリの削除を行う。
						try
						{
							JCCejbEFile.removeDir(removeTmpDir);
						}
						catch(JCCFrameworkException e)
						{
						}
					}
					else
					{
						//C AまたはB以外の場合、CBSMsg(電子ファイル管理番号)へ電子ファイル管理番号を設定する。
						inCBSMsg.set(ECC0041D010CBSMsg.EFILE_KANRI_NO, eFileKanriNo);
					}
				
				}
				catch(JCCFrameworkException e)
				{
// 20110425 FST START 関連チェックエラーが返却されない。
//					inCBSMsg.set(ECC0041D010CBSMsg.STATUS, StatusCodes.FIND_DB_ERR);
// 20110425 FST END 関連チェックエラーが返却されない。
					try
					{
						JCCejbEFile.removeDir(removeTmpDir);
					}
					catch(JCCFrameworkException ex)
					{
					}
					throw e;
				}
	
				//(3) 電子ファイル情報の登録(機能コードが"2"の場合は呼び出しは行わない。)
				//@ 電子ファイル登録部品を呼び出し、電子ファイル管理テーブルへ電子ファイルの登録を行う。
				//（引数：コネクションオブジェクト、圧縮後電子ファイルパス、作業用ディレクトリパス、CBSMsg(電子ファイル管理番号)、CBSMsg(世代登録年月日時分秒)、
				//CBSMsg(システムコード)、CBSMsg(ファイルコード)、CBSMsg(物理ファイル名)、CBSMsg(ファイルサイズ)、CBSMsg(圧縮ファイルサイズ)、CBSMsg(ファイル削除年月日時分秒）
				//A 部品からJCCFrameworkExceptionが返却された場合、CBSMsgに以下の値を設定し、JCCFrameworkExceptionをスローし、処理を終了する。
				//ステータス：「更新時DBエラー」
				
				try
				{
					String eventId = EventIDList.ICC0041D001;
					String templateId = inCBSMsg.getString(ECC0041D010CBSMsg.TEMPLATEID);
					String identifyCd = inCBSMsg.getString(ECC0041D010CBSMsg.IDENTIFYCD);
					int status = inCBSMsg.getInt(ECC0041D010CBSMsg.STATUS);
					String operatorId = inCBSMsg.getString(ECC0041D010CBSMsg.OPERATORID);
					String operatedate = inCBSMsg.getString(ECC0041D010CBSMsg.OPERATEDATE);
					String operateDtm = inCBSMsg.getString(ECC0041D010CBSMsg.OPERATEDATETIME);
					String acGroupCd = inCBSMsg.getString(ECC0041D010CBSMsg.AC_GROUP_CD);
					String functionCd = inCBSMsg.getString(ECC0041D010CBSMsg.FUNC_CODE);
					String eFilePath = asshukuFilePath;
					String geneAddDtm =inCBSMsg.getString(ECC0041D010CBSMsg.GENE_ADD_DTM);
					String sysCd = inCBSMsg.getString(ECC0041D010CBSMsg.SYS_CD);
					String fileCd = inCBSMsg.getString(ECC0041D010CBSMsg.FILE_CD);
					String butsuriFileNm = inCBSMsg.getString(ECC0041D010CBSMsg.BUTSURI_FILE_NM);
					//String fileSize = inCBSMsg.getString(ECC0041D010CBSMsg.FILE_SIZE);
					String asshukuFileSize = inCBSMsg.getString(ECC0041D010CBSMsg.ASSHUKU_FILE_SIZE);
					
					CAANMsg cAANMsg = jCCejbEFile.createEFileInfo(eventId, templateId, identifyCd, status, operatorId, operatedate,
							operateDtm, acGroupCd, functionCd, eFilePath, removeTmpDir, eFileKanriNo, geneAddDtm, sysCd,
							fileCd, butsuriFileNm, fileSize, asshukuFileSize, fileDelYmd);
					
					//B A以外の場合、CBSMsgに以下の値を設定し、処理を終了する。
					//CBSMsg（更新年月日時分秒）へ部品より返却された更新日時を設定する。
					//CBSMsg（登録年月日時分秒）へ部品より返却された更新日時を設定する。
					//CBSMsg（更新オペレータアカウント）へCBSMsgの共通部へ設定されているオペレータアカウントを設定する。
					//CBSMsg（登録オペレータアカウント）へCBSMsgの共通部へ設定されているオペレータアカウントを設定する。
					//CBSMsg（無効フラグ）へ"0:有効"を設定する。
					
					inCBSMsg.set(ECC0041D010CBSMsg.UPD_DTM,cAANMsg.getString(CC0041ETMsg.UPD_DTM));
					inCBSMsg.set(ECC0041D010CBSMsg.ADD_DTM,cAANMsg.getString(CC0041ETMsg.ADD_DTM));
					inCBSMsg.set(ECC0041D010CBSMsg.UPD_OPEACNT, cAANMsg.getString(CC0041ETMsg.UPD_OPEACNT));
					inCBSMsg.set(ECC0041D010CBSMsg.ADD_OPEACNT, cAANMsg.getString(CC0041ETMsg.ADD_OPEACNT));
					inCBSMsg.set(ECC0041D010CBSMsg.MK_FLG, "0");
					/*
					inCBSMsg.set(ECC0041D010CBSMsg.UPD_DTM, updDtm);
					inCBSMsg.set(ECC0041D010CBSMsg.ADD_DTM, updDtm);
					inCBSMsg.set(ECC0041D010CBSMsg.UPD_OPEACNT, inCBSMsg.getString(ECC0041D010CBSMsg.OPERATORID));
					inCBSMsg.set(ECC0041D010CBSMsg.ADD_OPEACNT, inCBSMsg.getString(ECC0041D010CBSMsg.OPERATORID));
					inCBSMsg.set(ECC0041D010CBSMsg.MK_FLG, "0");
					*/
					
				}
				catch(JCCFrameworkException e)
				{
					inCBSMsg.set(ECC0041D010CBSMsg.STATUS, StatusCodes.UPDATE_DB_ERR);
					throw e;
				}
			}
			else if (inCBSMsg.getString(ECC0041D010CBSMsg.FUNC_CODE).equals("2"))
			{
				try
				{
					JCCejbEFile.removeDir(eFileInfo.get(REMOVE_TEMP_DIR));
				}
				catch (Exception func2_e)
				{
				}
				inCBSMsg.setNull(ECC0041D010CBSMsg.BUTSURI_FILE_NM);
				inCBSMsg.setNull(ECC0041D010CBSMsg.GENE_ADD_DTM);
			}
			
		}
		catch(Exception e)
		{
			
			throw new CAANRuntimeException(e);
		}
	}
}
