/////////////////////////////////////////////////////////////////
//Copyright (C) 2005 NTT CORPORATION.
//
//	ロールアサイン更新画面表示Actionクラス
//
//		変更履歴
//			2005.02.16  新規作成  氏名 石崎賢太郎
//
//	機能
//
//	ロールアサイン更新画面表示Actionクラスです。
//
/////////////////////////////////////////////////////////////////
package jp.co.ntt.lms.xmf.actions.xmo.RoleAssignments;

import java.net.URLEncoder;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import jp.co.ntt.lms.xmf.xmo.RoleAssignments.RoleAssignmentsConstants;
import jp.co.ntt.lms.xmo.Groups.GroupsClient;
import jp.co.ntt.lms.xmo.People.PeopleClient;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.util.MessageResources;

/**
 * ロールアサイン更新画面表示Actionクラスです。
 * 
 * @author Kentaro Ishizaki (UNITEC)
 * @version 1.0
 */
public class RoleAssignmentsUpdateAction extends Action
{
	/**
	 * strutsフレームワークから呼ばれるメソッドです。
	 * 
	 * @param mapping マッピングオブジェクト。
	 * @param form アクションフォームオブジェクト。
	 * @param request リクエストオブジェクト。
	 * @param response レスポンスオブジェクト。
	 * @return ActionForward アクションフォワードオブジェクト。
	 * @throws Exception
	 */
	public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception
	{
		// キャッシュ無効処理
		response.setHeader( "cache-control", "no-cache" );

		///////////////////////////////////////////
		// パラメータ取得
		// 	・selectparentID	選択されたグループ or 人の親ＩＤ	必須
		// 	・selectID			選択されたグループ or 人のＩＤ		必須
		// 	・returnURL			戻りページ							必須
		// 	・xmo_id			XMOID							必須
		///////////////////////////////////////////
		String strParentID = request.getParameter("parentID");
		String strSelectID = request.getParameter("selectID");
		String strReturnURL = request.getParameter("returnURL");
		String strXmoID_o = request.getParameter( "xmo_id" );

		// メッセージリソース取得
		MessageResources resources = getResources(request, "msg.xmf.xmo.RoleAssignments.MessageResources");

		///////////////////////////////////////////
		// パラメータチェック
		///////////////////////////////////////////
		if( strParentID == null || strParentID.equals( "" ) ) {
			Exception e = new Exception();
			e.printStackTrace();
			String strMessage = resources.getMessage("M092001");
			String strDetail = resources.getMessage("D092001");
			request.setAttribute("message", strMessage);
			request.setAttribute("detail", strDetail);
			request.setAttribute("close", "on");
			request.setAttribute("errorurl", "");
			return mapping.findForward("error");
		}
		if( strSelectID == null || strSelectID.equals( "" ) ) {
			Exception e = new Exception();
			e.printStackTrace();
			String strMessage = resources.getMessage("M092002");
			String strDetail = resources.getMessage("D092002");
			request.setAttribute("message", strMessage);
			request.setAttribute("detail", strDetail);
			request.setAttribute("close", "on");
			request.setAttribute("errorurl", "");
			return mapping.findForward("error");
		}
		if( strReturnURL == null || strReturnURL.equals( "" ) ) {
			Exception e = new Exception();
			e.printStackTrace();
			request.setAttribute("message", "");
			request.setAttribute("detail", "");
			request.setAttribute("close", "on");
			request.setAttribute("errorurl", "../Com/ComSystemErr.vm");
			return mapping.findForward("error");
		}
		if( strXmoID_o == null || strXmoID_o.equals( "" ) ) {
			String strMessage = resources.getMessage("M092009");
			String strDetail = resources.getMessage("D092009");
			request.setAttribute("message", strMessage);
			request.setAttribute("detail", strDetail);
			request.setAttribute("close", "on");
			request.setAttribute("errorurl", "");
			return mapping.findForward("error");
		}

		
		strReturnURL = URLEncoder.encode( strReturnURL, "UTF-8" );

		
		// XMOIDをセッションに格納する
		request.getSession().setAttribute( RoleAssignmentsConstants.ASSIGN_XMO_ID, strXmoID_o );

		//////////////////////////////////
		// 人またはグループの存在チェック
		//////////////////////////////////
		// グループデータ取得
		if( strSelectID.substring( 0,2 ).equals( "GR" ) )
		{
			// グループオブジェクト作成

			GroupsClient objGroups = new GroupsClient();

			//検索条件の設定
			objGroups.setWhereGroupID( strSelectID );
			if( !objGroups.select() )
			{
				// 検索がうまくいかなかった場合
				if( objGroups.isErr() )
				{
					// エラーの場合
					request.setAttribute("message", "");
					request.setAttribute("detail", "");
					request.setAttribute("close", "on");
					request.setAttribute("errorurl", objGroups.getURL());
					return mapping.findForward("error");
				}
				else
				{
					String strMessage =  objGroups.getMessage();
					request.setAttribute("message", strMessage);
					request.setAttribute("detail", "");
					request.setAttribute("close", "on");
					request.setAttribute("errorurl", "");
					return mapping.findForward("error");
				}
			}

			// データ存在チェック
			if( !objGroups.next() )
			{
				//グループ名が存在しない場合エラーを出力する
				String strMessage = resources.getMessage("M092007");
				String strDetail = resources.getMessage("D092007");
				request.setAttribute("message", strMessage);
				request.setAttribute("detail", strDetail);
				request.setAttribute("close", "on");
				request.setAttribute("errorurl", "");
				return mapping.findForward("error");
			}
			
		}
		// ユーザデータ取得
		else if( strSelectID.substring( 0,2 ).equals( "PE" ) )
		{
			// 人オブジェクト作成

			PeopleClient objPeople = new PeopleClient();

			//検索条件の設定
			objPeople.setWhereUserID( strSelectID );
			if( !objPeople.select() )
			{
				// 検索がうまくいかなかった場合
				if( objPeople.isErr() )
				{
					// エラーの場合
					request.setAttribute("message", "");
					request.setAttribute("detail", "");
					request.setAttribute("close", "on");
					request.setAttribute("errorurl", objPeople.getURL());
					return mapping.findForward("error");
				}
				else
				{
					String strMessage =  objPeople.getMessage();
					request.setAttribute("message", strMessage);
					request.setAttribute("detail", "");
					request.setAttribute("close", "on");
					request.setAttribute("errorurl", "");
					return mapping.findForward("error");
				}
			}

			// データ存在チェック
			if( !objPeople.next() )
			{
				//ユーザー名が存在しない場合エラーを出力する
				String strMessage = resources.getMessage("M092004");
				String strDetail = resources.getMessage("D092004");
				request.setAttribute("message", strMessage);
				request.setAttribute("detail", strDetail);
				request.setAttribute("close", "on");
				request.setAttribute("errorurl", "");
				return mapping.findForward("error");
			}
		}
		
		
		// リクエストに変数をセット
		request.setAttribute("strParentID", strParentID);
		request.setAttribute("strSelectID", strSelectID);
		request.setAttribute("strReturnURL", strReturnURL);
		
		return mapping.findForward("success");
	}

}
