/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JZMJudgeAuthority
*   ソースファイル名：JZMJudgeAuthority.java
*   作成者          ：富士通
*   日付            ：2012年03月12日
*＜機能概要＞
*   組織権限情報編集部品です。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v3.00       2012/05/22   FJ) 宮前    新規作成
*   v3.00       2012/05/22   FJ) 宮前    【SGY-2012-000006】統合認証対応
*	v4.00		2012/06/05   FJ) 宮前    【ANK-0494-01-00】ICSWEB対応(Spri対応)
*
**********************************************************************/
package eo.web.webview.common;

import java.util.ArrayList;
import java.util.HashMap;

import com.fujitsu.futurity.web.x31.X31BWebBusinessLogic;
import com.fujitsu.futurity.web.x31.X31CWebConst;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccess;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccessArray;

import eo.web.webview.CommonInfoCF.CommonInfoCFConst;

/**
 * 組織権限情報編集部品です。
 * @author FJ
 *
 */
public class JZMJudgeAuthority
{

	/** 引数不正エラーメッセージ */
	private static final String ERR_ILLEGAL_ARGUMENT = "引数にNULLが指定されました。";
	
	/** 特別権限組織 種別 1:SPRi */
	private static final int KIND_SPCL_SPRI = 1;
	
	/** アプリケーションプロパティ Key SPRi 特別権限組織コード判別用 */
	private static final String KEY_ZM_SPCL_AUTH_ORG_SPRI = "ZM_SPCL_AUTHORITY_ORG_FOR_SPRI";
	
	/**
	 * 権限チェック 
	 * 権限プロパティに存在し、そこに設定されている権限コードが権限リストに存在するかチェックする。
	 * @param vl ビューロジック
	 * @param auth_list 権限リスト
	 * @param prp_map 権限プロパティマップ
	 * @param key 対象となる画面ID
	 * @return true:権限あり false:権限なし
	 */
	public static boolean judgeAuthorityCd(X31BWebBusinessLogic vl, HashMap<String, String> auth_list, HashMap<String, String> prp_map, String key)
	{
		boolean retValue = false;
		// (1) パラメータチェック処理
		if(auth_list == null)
		{
			throw new IllegalArgumentException(ERR_ILLEGAL_ARGUMENT);
		}
		if(prp_map == null)
		{
			throw new IllegalArgumentException(ERR_ILLEGAL_ARGUMENT);
		}
		if(key == null && "".equals(key))
		{
			throw new IllegalArgumentException(ERR_ILLEGAL_ARGUMENT);
		}
		
		// (2) 権限コード比較処理
		if(!"".equals(key))
		{
			if(prp_map.size() != 0)
			{
				
				// 権限プロパティに設定があるか？
				if(prp_map.containsKey(key))
				{
					
					// プロパティにセットされている権限コードを取得
					String authCode = prp_map.get(key);
					
					// 権限リストに存在するか？
					if(auth_list.size() != 0)
					{
						retValue = JCCWebCommon.judgeStatus(vl, auth_list, authCode);
					}
					
				}
			}
		}
		return retValue;
	}
	
	/**
	 * 共有フォームBeanにセットされた特別権限組織コードを取得する。
	 * @param cf_bean 共有フォームBean
	 * @param kind 種別 1:SPRi
	 * @return ArrayList<String> 特別権限組織コード
	 */
	public static ArrayList<String> getSpclAuthOrgCd(X31SDataBeanAccess cf_bean, int kind)
	{
		
		// (1) パラメータチェック処理
		//    ・共有フォームBeanにNullがセットされている場合、例外をスローする。
		if(cf_bean == null)
		{
			throw new IllegalArgumentException(ERR_ILLEGAL_ARGUMENT);
		}
		
		//    ・プロパティファイルからSPRi用特別権限組織コードの固定部を取得する。
		//          プロパティファイル名：APLConst.properties
		//          Key名：ZM_SPCL_AUTHORITY_ORG_FOR_SPRI
		String key = JCCWebCommon.getApplicationConst(KEY_ZM_SPCL_AUTH_ORG_SPRI);
		if("".equals(key))
		{
			throw new IllegalArgumentException(ERR_ILLEGAL_ARGUMENT);
		}
		ArrayList<String> spclList = new ArrayList<String>();
		
		// (2) 種別の判定
		//    ・SPRiの場合			
		if(kind == KIND_SPCL_SPRI)
		{
		
			// (a) 共有フォームBeanから「権限リスト(KGGRP_CD_LIST)」を取得する。
			X31SDataBeanAccessArray orgList = cf_bean.getDataBeanArray(CommonInfoCFConst.KGGRP_CD_LIST);
			
			//          権限リスト[0] : 実組織情報
			//          権限リスト[1] : ワークグループ情報
			//          権限リスト[2] : 中間組織情報
			//          権限リスト[3〜n] : 特別権限組織情報
			//          要素数が3以降が特別権限組織情報を取得し、組織コード(ORG_CD)を取得する。
			for(int iCnt = 3; iCnt < orgList.getCount(); iCnt++)
			{
				X31SDataBeanAccess subBean = orgList.getDataBean(iCnt);
		
				// (b) 特別権限組織コードと(1)で取得したSPRi用特別権限組織コードの固定部を比較する。
				String spclOrgCd = subBean.sendMessageString(CommonInfoCFConst.ORG_CD_01, X31CWebConst.DATABEAN_GET_VALUE);
		
				// ・SPRi用特別権限組織コードの固定部から始まる特別権限組織コードの場合、ArrayListへ特別権限組織コードを格納する。
				if(spclOrgCd.startsWith(key))
				{
					spclList.add(spclOrgCd);
				}
			}
		}
		else
		{
			throw new IllegalArgumentException(ERR_ILLEGAL_ARGUMENT);
		}
		return spclList;
	}
}
