/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：物流管理システム
*   ソースファイル名：DKW00402SFLogic.java
*   作成者          ：富士通
*   日付            ：2011年08月09日
*＜機能概要＞
 * 商品状態選択画面を処理するロジッククラスです。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v1.00.00    2011/08/09   FJ          新規作成
*
**********************************************************************/
package eo.web.webview.DKW00402SF;

import static com.fujitsu.futurity.web.x31.X31SWebLog.DEBUG_LOG;
import static eo.common.constant.JPCModelConstant.FUNC_CD_1;
import static eo.web.webview.DKW00402SF.DKW00402SFConst.*;
import static eo.web.webview.common.JDKScreenConst.*;
import static eo.web.webview.common.JDKWebCommon.*;
import static eo.common.util.JDKCommonUtil.*;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import com.fujitsu.futurity.web.x31.X31CMessageResult;
import com.fujitsu.futurity.web.x31.X31CWebConst;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccess;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccessArray;

import eo.common.constant.JDKStrConst;
import eo.web.webview.JCCWebBusinessLogic;
import eo.web.webview.CommonInfoCF.CommonInfoCFConst;
import eo.web.webview.DKW00401SF.DKW00401SFConst;
import eo.web.webview.common.JCCScreenConst;
import eo.web.webview.common.JCCWebCommon;
import eo.web.webview.mapping.DKSV0090_DKSV0090OPDBMapper;


/**
 * 商品状態選択画面を処理するロジッククラスです。
 * @author 富士通
 */
public class DKW00402SFLogic extends JCCWebBusinessLogic
{
	/** シリアル番号 */
	private static final long serialVersionUID = 1L;

	/** 商品状態一覧照会 */
	private static final String DKSV0090 = "DKSV0090";
	
	/** 商品状態コードのセパレータ */
	private static final String GDS_STAT_SEPARATOR = ";";
	

	/**
	 * 初期化処理を行います。
	 * @return 処理実行結果
	 */
	@SuppressWarnings("unchecked")
	public boolean init() 
	{
		X31SDataBeanAccess bean = super.getServiceFormBean();
		setNextScreen(SCREEN_ID_DKW00402, SCREEN_NAME_DKW00402);
		
		X31SDataBeanAccess[] paramBean = {bean};
		
		HashMap paramMap = new HashMap();
		HashMap inputMap = new HashMap();
		HashMap outputMap = new HashMap();

		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, DKSV0090);
		DKSV0090_DKSV0090OPDBMapper mapper = new DKSV0090_DKSV0090OPDBMapper();
		mapper.setDKSV0090SC(paramBean, inputMap, JDKStrConst.ITEM_CONDITION, FUNC_CD_1);

		X31CMessageResult msgResult = invokeService(paramMap, inputMap, outputMap);
		
		if(msgResult != null)
		{
			JCCWebCommon.setMessageInfo(this, msgResult);
			return true;
		}

		mapper.getDKSV009001SC(paramBean, outputMap, GDS_STAT_LIST);
		editList();
		
		return true;
	}
	
	
	/**
	 * 初期化処理を行います。
	 * @return 処理実行結果
	 */
	@SuppressWarnings("unchecked")
	public boolean choice() 
	{
		HashMap paramMap = new HashMap();
		List selectedCodes = selectedCodes();
		paramMap.put(GDS_STAT_LIST, join(GDS_STAT_SEPARATOR, (String[])selectedCodes.toArray(new String [selectedCodes.size()])));
		
		String parentScreenId = JCCWebCommon.getScreenId(this); 
		JCCWebCommon.setScreenInfo(this, parentScreenId, paramMap);
		
		setNextScreen(JCCScreenConst.SCREEN_ID_CCW00105, JCCScreenConst.SCREEN_NAME_CCW00105);
		return true;
	}
	
	
	/**
	 * 一覧データを編集します。
	 */
	private void editList()
	{
		Set<String> codes = pickRelationDataFromSession();
		
		X31SDataBeanAccessArray list = getServiceFormBean().getDataBeanArray(GDS_STAT_LIST);
		int size = list.getCount();
		for (int i = 0 ; i < size ; i++) 
		{
			X31SDataBeanAccess data = list.getDataBean(i);

			setData(data, ((i + 1) % 2 == 0) ? "even" : "odd", L_COLOR_01);
			setData(data, codes.contains(getData(data, L_GDS_STAT_CD_01)), L_CHOICE_01);
		}
	}
	
	
	/**
	 * 選択したコード値を取得する
	 * @return コード値の一覧
	 */
	private List<String> selectedCodes()
	{
		List<String> selected = new ArrayList<String> ();
		
		X31SDataBeanAccessArray list = getServiceFormBean().getDataBeanArray(GDS_STAT_LIST);
		int size = list.getCount();
		for (int i = 0 ;i < size;i++)
		{
			X31SDataBeanAccess data = list.getDataBean(i);
			if (!getDataB(data, L_CHOICE_01)) 
			{
				continue;
			}
			
			selected.add(getData(data, L_GDS_STAT_CD_01));
		}
		
		return selected;
	}
	

	
	/**
	 * 他画面から初期表示データを受け取ります。
	 */
	private Set<String> pickRelationDataFromSession()
	{
		Set<String> codes = new HashSet<String>();
		
		HashMap<String, Object> map = JCCWebCommon.getScreenInfo(this);
		String codesStr = (String)map.get(DKW00401SFConst.I_GDS_STAT);
		
		if (isNull(codesStr))
		{
			return codes;
		}
		
		String [] dividedCodes = codesStr.split(GDS_STAT_SEPARATOR);
		for (String code : dividedCodes)
		{
			codes.add(code);
		}
		
		return codes;
	}
	
	/**
	 * 画面遷移先を設定します。
	 * @author 富士通
	 * @param nextScreenId 遷移先画面ＩＤ
	 * @param nextScreenName 遷移先画面名
	 */
	private void setNextScreen(String nextScreenId, String nextScreenName)
	{
		X31SDataBeanAccess  commoninfoBean = super.getCommonInfoBean();
	
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, nextScreenId);
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, nextScreenName);

		DEBUG_LOG.debug(String.format("遷移先 CD：%s NM：%s", nextScreenId, nextScreenName));
	}
}
