/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JKKejbEditCommon
*	ソースファイル名：JKKejbEditCommon.java
*	作成者			：富士通
*	日付			：2012年01月11日
*＜機能概要＞
*	編集部品共通処理
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2012/01/11	富士通		新規作成
*   v5.00.01    2013/07/03  FJ）沖田    KT1-2013-0000691
*   v5.00.02    2013/08/09  FJ）阿武    IT2-2013-0000733
*   v6.00.00    2013/12/10  FJ）寺園    OM-2013-0004841
*   v6.00.01    2014/01/06  FJ）寺園    OM-2014-0000033
*   v8.00.00    2014/01/17  FJ）松枝    ANK-1586-00-00
**********************************************************************/

package eo.ejb.common.edit;

import java.util.ArrayList;

import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.ejb.common.fw.AgentDispatchContext;

import eo.ejb.common.JKKModelCommon;

/**
 * <p>
 * 編集部品の共通編集クラスです。
 * </p>
 * @author 富士通
 */
public class JKKejbEditCommon
{

	/**
	 * <p>
	 * 指定された入力値が未入力の場合、指定された初期値を返却します。
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext ディスパッチコンテキスト
	 * @param input 入力値
	 * @param dfValue 初期値
	 * @return 入力値が入力されている場合は入力値、未入力の場合は初期値。
	 */
	public Object setDefaultValueAsInNull(CAANMsg inMsg, AgentDispatchContext inContext, String input, String dfValue)
	{
		// 入力値がnull、または未設定の場合は初期値を返却する
		if (null == input || "".equals(input))
		{
			return dfValue;
		}

		// それ以外の場合は入力値を返却する
		return input;
	}

	/**
	 * <p>
	 * 指定された入力値をIN句用にカンマで分割した数分OR条件にて設定し返却します。
	 * </p>
	 * @param input 入力値
	 * @return IN句値、未入力の場合は未設定。
	 */
	public String setSqlIn(String input)
	{
		// 入力値がnull、または未設定の場合は空を返却する
		if (null == input || "".equals(input))
		{
			return "";
		}

		String[] value = input.split(",");
		StringBuffer sbBind = new StringBuffer();
		for (int i = 0; i < value.length; i++)
		{
			sbBind.append(" , ? ");
		}
			
		// 最初のカンマを取り除いて返却する
		return sbBind.toString().substring(2);
	}

	/**
	 * <p>
	 * 指定された入力値をIN句用にカンマで分割した数分のバインド変数を返却します。
	 * </p>
	 * @param input 入力値
	 * @return バインド変数、未入力の場合は未設定。
	 */
	public ArrayList<Object> setInBind(String input)
	{
		ArrayList<Object> alBind = new ArrayList<Object>();
		// 入力値がnull、または未設定の場合は空を返却する
		if (null == input || "".equals(input))
		{
			return alBind;
		}

		String[] value = input.split(",");
		for (int i = 0; i < value.length; i++)
		{
			// バインド変数設定
			alBind.add(value[i].replace("'", ""));
		}
			
		return alBind;
	}

	/**
	 * <p>
	 * バッチ運用日付＋１日を設定するか入力値を設定するかを決定し、条件に合う値を設定する。<br>
	 * バッチ運用日付＋１日を設定する条件：呼出元が強制解約(EO2270210J0)の場合<br>
	 * 
	 * 基準年月日にはプラン終了年月日、プラン課金終了年月日、サービス終了年月日、<br>
	 * サービス解約起算年月日、サービス解約年月日のいずれかを設定すること。
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext ディスパッチコンテキスト
	 * @param baseYmd 基準年月日
	 * @return 処理結果の年月日
	 */
	public Object getYmdDslFix(CAANMsg inMsg, AgentDispatchContext inContext, Object baseYmd)
	{
		// 解約日を設定する
		String retYmd = (String) baseYmd;

		// サービスの呼出元がバッチで異動が「強制解約」の場合
		if (JKKModelCommon.isBatOpeDateJobDsl())
		{
			// バッチ運用日付＋１日を設定する
			retYmd = JKKModelCommon.addDay(JKKModelCommon.getOpeDate(inMsg), 1);
		}
		return retYmd;
	}

	/**
	 * <p>
	 * 入力値と固定値を比較します
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext ディスパッチコンテキスト
	 * @param inItemValue 入力値
	 * @param refValue 固定値
	 * @return 入力値と固定値が同じであればtrue、nullおよびそれ以外の場合false
	 */
	public boolean isValueChk(CAANMsg inMsg, AgentDispatchContext inContext, Object inItemValue, Object refValue)
	{
		if (inItemValue == null || refValue == null)
		{
			return false;
		}

		if (inItemValue.equals(refValue))
		{
			return true;
		}
		return false;
	}

	/**
	 * <p>
	 * 入力の日付が設定されていれば入力値を設定、未設定であれば運用年月日時分秒を編集する。
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext ディスパッチコンテキスト
	 * @param inputDtm 入力の年月日時分秒
	 * @return 処理結果の年月日時分秒
	 */
	public Object getOpeDateAsInNull(CAANMsg inMsg, AgentDispatchContext inContext, Object inputDtm)
	{
		Object retDtm = null;
		
		if (inputDtm == null)
		{
			// 入力の日付が未設定であれば運用年月日時分秒を編集する。
			retDtm = JKKModelCommon.getOpeDtmForNextDateBaseJob(inMsg, inContext);
		}
		else
		{
			// 入力の日付が設定されていれば入力値を編集する。
			retDtm = inputDtm;
		}
		return retDtm;
	}
	
	/**
	 * <p>
	 * 入力の日付が設定されていれば入力値を設定、未設定であれば運用年月日を編集する。
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext ディスパッチコンテキスト
	 * @param inputDtm 入力の年月日
	 * @return 処理結果の年月日
	 */
	public Object getOpeDateYmdAsInNull(CAANMsg inMsg, AgentDispatchContext inContext, Object inputDtm)
	{
		Object retDtm = null;
		
		if (inputDtm == null)
		{
			// 入力の日付が未設定であれば運用年月日を編集する。
			retDtm = JKKModelCommon.getOpeDate(inMsg, inContext);
		}
		else
		{
			// 入力の日付が設定されていれば入力値を編集する。
			retDtm = inputDtm;
		}
		return retDtm;
	}

}
