/////////////////////////////////////////////////////////////////
//Copyright (C) 2005 NTT CORPORATION.
//
//	未所属一括削除画面表示Actionクラス
//
//		変更履歴
//			2005.02.16  新規作成  氏名 石崎賢太郎
//
//	機能
//
//	未所属一括削除画面表示Actionクラスです。
//
/////////////////////////////////////////////////////////////////
package jp.co.ntt.lms.xmf.actions.xmo.People;

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

import jp.co.ntt.lms.xmo.GroupAndPeople.GroupAndPeopleClient;
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 AllPeopleDeleteAction extends Action {
	private final String SUPER_USER = "PE000000"; //rootの人

	private final String IS_LOGIN = "isLogin"; // ログイン情報のセッションキ-

	private final String LOGIN_ID = "loginId"; // ログインIDのセッションキー

	private final String USER_ID = "userId"; // ユーザIDセッションの取得キーです

	/**
	 * 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 {
		////////////////////////////////////////////////////
		// パラメータ取得
		// 	・parentID 親グループのID 必須
		// 	・returnURL 戻りページ 必須?
		// 	・act アクションフラグ
		////////////////////////////////////////////////////
		String strParentID_o = request.getParameter("parentID"); // 親グループのID
		String strReturnURL_o = request.getParameter("returnURL"); // 戻りページ
		String strAction = request.getParameter("act"); // アクションフラグ
		String strIsLogin = (String) request.getSession().getAttribute(IS_LOGIN); // ログインセッションのキー
		String strLoginID = (String) request.getSession().getAttribute(LOGIN_ID); // ログイン名
		String strUserID = (String) request.getSession().getAttribute(USER_ID); //ユーザーID

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

		GroupAndPeopleClient objXMO = new GroupAndPeopleClient(); // 内部リストを取得
		PeopleClient objPeople = new PeopleClient(); //ユーザーを削除するためのオブジェクト

		///////////////////////////////////////////////////////
		//  この２つを満たさないと「未所属一括削除」はできない。
		//      セッションが確立しているか。
		//      SUPER_USERかどうか。
		///////////////////////////////////////////////////////
		if (strIsLogin == null) {
			// セッションが切れている場合はログイン画面にリダイレクト
			request.setAttribute("message", "");
			request.setAttribute("detail", "");
			request.setAttribute("close", "on");
			request.setAttribute("errorurl", "../Base/LoginRedirector.vm");
			return mapping.findForward("error");
		}

		if (!strUserID.equals(SUPER_USER)) {
			return mapping.findForward("success");
		}

		///////////////////////////////////////////
		// パラメータチェック
		///////////////////////////////////////////
		if (strParentID_o == null || strParentID_o.equals("")) {
			String strMessage = resources.getMessage("M032001");
			String strDetail = resources.getMessage("D032001");
			request.setAttribute("message", strMessage);
			request.setAttribute("detail", strDetail);
			request.setAttribute("close", "on");
			request.setAttribute("errorurl", "");
			return mapping.findForward("error");
		}

		if (strAction != null && strAction.equals("on")) {

			///////////////////////////////////////////////
			// アクションフラグがONの時（「はい」を選択した時）、
			// 未所属全員の内部IDのリストを取得します。
			///////////////////////////////////////////////

			try {
				objXMO.setParentID(strParentID_o);

				// *************** 検索失敗
				if (!objXMO.select()) {
					throw new Exception("グループと人検索失敗 " + objXMO.getMessage());

				} else {
					// *************** 検索成功

					while (objXMO.next()) //この中でグループだけ一件ずつ削除していく
					{

						//********** childIDの取得
						String strChildID = objXMO.getChildID();

						//********** childIDがグループIDなら削除 かつ 人は未所属の下に移動します。
						if (strChildID.substring(0, 2).equals("GR")) {
							// childIDがグループIDの場合

							GroupsClient objGroups = new GroupsClient();

							// 削除条件の設定
							objGroups.setDeleteSelectID(strChildID); // グループID
							objGroups.setDeleteParentID(strParentID_o); // 親ID

							// 削除メソッド実行
							if (!objGroups.delete()) {

								// 削除がうまくいかなかった場合
								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 childIDが人IDかグループIDかというif

					} //while レコードがある間

					objXMO.setParentID(strParentID_o);
					// *************** 検索失敗
					if (!objXMO.select()) {
						throw new Exception("グループと人検索失敗 " + objXMO.getMessage());
					} else {
						// *************** 検索成功
						while (objXMO.next()) //人を一件ずつ削除していきます。
						{

							//********** childIDの取得
							String strChildID = objXMO.getChildID();

							//********** childIDが人IDならそのまま削除します。
							if (strChildID.substring(0, 2).equals("PE")) {
								//削除条件の設定
								objPeople.setDeleteUserID(strChildID); // 子ID
								objPeople.setDeleteParentID(strParentID_o); // 親ID

								if (!objPeople.delete()) {

									// 削除がうまくいかなかった場合
									if (objPeople.isErr()) {

										//      response.sendRedirect(
										// objPeople.getURL() );
									} else {
										String strMessage = objPeople
												.getMessage();
										request.setAttribute("message",
												strMessage);
										request.setAttribute("detail", "");
										request.setAttribute("close", "on");
										request.setAttribute("errorurl", "");
										return mapping.findForward("error");
									} //if 削除失敗

								}
							} else {
								// GRやPE以外のIDがあるケース
							}

						} // 2回目のwhile

					} // 2回目検索のif
				} // 検索のif

			} catch (Exception e) {
				e.printStackTrace();
				request.setAttribute("message", "");
				request.setAttribute("detail", "");
				request.setAttribute("close", "on");
				request.setAttribute("errorurl", "../Com/ComSystemErr.vm");
				return mapping.findForward("error");
			}

		} else {

		}
		
		// リクエストに変数をセット
		request.setAttribute("strAction", strAction);

		return mapping.findForward("success");
	}
}