/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*	モジュール名	：JCCComExecUtil
*	ソースファイル名：JCCComExecUtil.java
*	作成者			：富士通
*	日付			：2011年06月27日
*＜機能概要＞
*	コマンドを実行する。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	ｖ1.00.00	2011.06.27  FST			新規作成
*	ｖ1.01.00   2011/08/11  FJ)藤田     Windows対応
*
********************************************************************************/
package eo.common.util;

import java.util.HashMap;

import com.fujitsu.futurity.common.JCCSuperComExecUtil;
import com.fujitsu.futurity.model.base.CAANRuntimeException;


/**
 * システムログ出力部品です。<p>
 * 業務サービスのアクセサから呼び出されます。<p>
 * <BR>
 * @author 富士通
 */
public class JCCComExecUtil extends JCCSuperComExecUtil{
	
	/**
	 * アクセサから受け取ったコマンドを実行する
	 * @param cmd			実行するコマンド
	 * @param waitFlg		true : 同期実行、false：非同期実行
	 * @param cmdTimeOut	同期実行の時の、コマンド実行タイムアウト時間（秒）
	 * @param logFileName	コマンド実行結果を保存するファイル名
	 * @param propertyMap	コマンド実行内容を切り替えるオプション
	 * @param outStrBuff	コマンドの出力結果
	 * @return 結果コード（コマンド実行のリターンコード "0":正常終了、"0"以外：エラー）
	 * @exception JCCFrameworkExceptionがスローされます。
	 *      getResult()で取得した値が"100"であった場合、メモリ空き容量が不足したことを示します。
	 *      getResult()で取得した値が"200"であった場合、コマンド実行がタイムアウトしたことを示します。
	 */
	public String exec(String[] cmd, boolean waitFlg, int cmdTimeOut, String logFileName,
			HashMap<String, Object> propertyMap, StringBuffer outStrBuff)
	{
		try
		{
			return super.exec(cmd, waitFlg, cmdTimeOut, logFileName, propertyMap, outStrBuff);
		}
		catch(CAANRuntimeException e)
		{
			if(e.getMessage() != null)
			{
				if(e.getMessage().indexOf("result=" + APL_ERRCD_MEMOVER) != -1)
				{
					String msg = "システムの空きメモリが、アプリケーションプロパティファイルで指定した、" +
					"「コマンドの実行を許可するシステムの空きメモリサイズ（EXEC_PERMIT_MEMORY）」" +
					"を下回っています。";
					JCCFrameworkException ex = new JCCFrameworkException(msg);
					ex.setResult(APL_ERRCD_MEMOVER);
					throw ex;
				}
				else if(e.getMessage().indexOf("result=" + APL_ERRCD_TIMEOUT) != -1)
				{
					JCCFrameworkException ex = new JCCFrameworkException(
					"コマンド実行時間がタイムアウト時間を超えました。");
					ex.setResult(APL_ERRCD_TIMEOUT);
					throw ex;
				}
			}
			
			throw new JCCFrameworkException(e);
		}
	}
}
