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

import java.net.URLEncoder;

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

import jp.co.ntt.lms.lo.LoConstant;
import jp.co.ntt.lms.xmo.Ad.ADCorpClient;
import jp.co.ntt.lms.xmo.Ad.ADCorpEnv;
import jp.co.ntt.lms.xmo.Ad.ADCorpSetupData;
import jp.co.ntt.lms.xmo.Lo.LoClient;

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

/**
 * メンテナンス画面表示Actionクラスです。
 * 
 * @author Kentaro Ishizaki (UNITEC)
 * @version 1.0
 */
public class MaintenanceAction extends Action
{
	/**
	 * 戻り先URLのセッションキー
	 */
	private static final String MAINTE_RURL = "maintenance_returnURL";

	/**
	 * 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
	{
		String strUserID = (String)request.getSession().getAttribute("userId");	//ユーザID
		// 戻り先URL管理
		String strReturnURL_o = request.getParameter("returnURL");	// 戻り先URL

		// パラメータ未設定時はセッション情報参照
		if((strReturnURL_o==null) || (strReturnURL_o.length()==0)){
			strReturnURL_o = (String)request.getSession().getAttribute(MAINTE_RURL);
			if((strReturnURL_o==null) || (strReturnURL_o.length()==0)){
				Exception e = new Exception();
				e.printStackTrace();
				request.setAttribute("message", "戻りURLを指定してください。");
				request.setAttribute("detail", "");
				request.setAttribute("close", "on");
				request.setAttribute("errorurl", "");
				return mapping.findForward("error");
			}
		}
		// セッション情報に再設定
		request.getSession().setAttribute(MAINTE_RURL, strReturnURL_o);
		String strReturnURL = URLEncoder.encode(strReturnURL_o);
		
		// WBT及びSCORMのLOタイプが存在するかを検索する。
		// LOタイプが存在しない場合、「サーバ使用状況一覧」の
		// アンカーを表示しない。
		
		boolean isWbtLoType = false;
		boolean isScormLoType = false;
		
		LoClient objLo = new LoClient();
		// WBTのLOタイプ「１」の検索
		objLo.setWhereLoType(LoConstant.LO_TYPE_WBT);
		objLo.selectLoType();
		if (objLo.next()) {
			// WBTのLOタイプは存在する
			isWbtLoType = true;
		}
		
		objLo.clear();
		// SCORMのLOタイプ「２０」の検索
		objLo.setWhereLoType(LoConstant.LO_TYPE_SCORM);
		objLo.selectLoType();
		if (objLo.next()) {
			// SCORMのLOタイプは存在する
			isScormLoType = true;
		}
		
		// AD同期設定情報を取得
		ADCorpClient objADClient = new ADCorpClient();
		ADCorpEnv objEnv =  objADClient.getSetupEnv();
		ADCorpSetupData[] objSetupList = objEnv.getSetupDataList();

		// 不整合があった場合
		ADCorpSetupData[] objInvalidDataList = objEnv.getInvalidSetupDataList();

		
		// リクエストに変数をセット
		request.setAttribute("strReturnURL_o", strReturnURL_o);
		request.setAttribute("strUserID", strUserID);
		request.setAttribute("isWbtLoType", new Boolean(isWbtLoType));
		request.setAttribute("isScormLoType", new Boolean(isScormLoType));
		request.setAttribute("strReturnURL", strReturnURL);
		request.setAttribute("objSetupList", objSetupList);
		request.setAttribute("objEnv", objEnv);
		request.setAttribute("objInvalidDataList", objInvalidDataList);
		
		return mapping.findForward("success");
	}
}
