/////////////////////////////////////////////////////////////
//
//	未所属全ユーザーの削除画面表示
//
//            変更履歴
//              2005.03.21    新規作成     石崎賢太郎
//
//		
//	機能
//
//	この画面は、未所属全ユーザーの削除をする前に確認の
//      メッセージを表示します。
////////////////////////////////////////////////////////////////
package jp.co.ntt.lms.xmf.actions.xmo.lo;

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

import jp.co.ntt.lms.xmo.Lo.LoClient;
import jp.co.ntt.lms.xmo.LoRelation.LoRelationClient;

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 AllLoDeleteAction extends Action {
	private final String IS_LOGIN    =    "isLogin";         // ログイン情報のセッションキ-
	private final String LOGIN_ID    =    "loginId";         // ログインIDのセッションキー
	private final String USER_ID     =    "userId";          // ユーザIDセッションの取得キーです
	private final String SUPER_USER  =    "PE000000";       //rootの人

	/**
	 * 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 {
		// URLパラメータの取得
		String strParentID_o = request.getParameter("parentID");
		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.Lo.MessageResources");
		
		// セッションが確立しているか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");
		}

		// アクションフラグが設定されていた場合は未整理配下の全IDリストを取得する。
		if (strAction != null && strAction.equals("on")) {
			try {
				LoRelationClient objLoRelation = new LoRelationClient();
				LoClient objLo = new LoClient();

				// 親ID（未整理）をセットする。
				objLoRelation.setParentID(strParentID_o);

				// 未整理配下のLOのIDリストを取得する。
				if (!objLoRelation.select()) {
					throw new Exception("LOIDリスト取得失敗"
							+ objLoRelation.getMessage());
				} else {
					while (objLoRelation.next()) {
						//childIDの取得
						String strLoID = objLoRelation.getChildID();
						objLo.setWhereLoID(strLoID);

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

						// LOデータの取得
						objLo.setWhereLoID(strLoID); // LOID
						objLo.setDeleteParentID(strParentID_o); // 親ID
						objLo.setDeleteLOID(strLoID);

						// 削除処理の実行
						if (!objLo.delete()) {
							// 削除がうまくいかなかった場合
							if (objLo.isErr()) {
								// エラーの場合
								request.setAttribute("message", "");
								request.setAttribute("detail", "");
								request.setAttribute("close", "on");
								request.setAttribute("errorurl", objLo.getURL());
								return mapping.findForward("error");
							} else {
								String strMessage = objLo.getMessage();
								request.setAttribute("message", strMessage);
								request.setAttribute("detail", "");
								request.setAttribute("close", "on");
								request.setAttribute("errorurl", "");
								return mapping.findForward("error");
							}
						}
					}
				}

				// 未整理配下のLOのIDリストを取得する。
				if (!objLoRelation.select()) {
					throw new Exception("LOIDリスト取得失敗 "
							+ objLoRelation.getMessage());
				} else {
					while (objLoRelation.next()) {
						//childIDの取得
						String strLoID = objLoRelation.getChildID();
						objLo.setWhereLoID(strLoID);

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

						// LOデータの取得
						objLo.setWhereLoID(strLoID); // LOID
						objLo.setDeleteParentID(strParentID_o); // 親ID
						objLo.setDeleteLOID(strLoID);

						// 削除処理の実行
						if (!objLo.delete()) {
							// 削除がうまくいかなかった場合
							if (objLo.isErr()) {
								// エラーの場合
								request.setAttribute("message", "");
								request.setAttribute("detail", "");
								request.setAttribute("close", "on");
								request.setAttribute("errorurl", objLo.getURL());
								return mapping.findForward("error");
							} else {
								String strMessage = objLo.getMessage();
								request.setAttribute("message", strMessage);
								request.setAttribute("detail", "");
								request.setAttribute("close", "on");
								request.setAttribute("errorurl", "");
								return mapping.findForward("error");
							}
						}
					}
				}
			} 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");
	}
}