/////////////////////////////////////////////////////////////////
//Copyright (C) 2005 NTT CORPORATION.
//
//	PerceptionLO「結果一覧」画面表示Actionクラス
//
//		変更履歴
//			2005.02.16  新規作成  氏名 石崎賢太郎
//
//	機能
//
//	PerceptionLO「結果一覧」画面表示Actionクラスです。
//
/////////////////////////////////////////////////////////////////
package jp.co.ntt.lms.xmf.actions.lo.Perception;

import java.util.Vector;

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

import jp.co.ntt.lms.lo.LoTopClient;
import jp.co.ntt.lms.lo.Perception.PerceptionLoData;
import jp.co.ntt.lms.lo.Perception.PerceptionPropertyDef;
import jp.co.ntt.lms.lo.Perception.PerceptionResponseResultData;
import jp.co.ntt.lms.xmo.Environment;
import jp.co.ntt.lms.xmo.MessageData;
import jp.co.ntt.lms.xmo.Lo.LoClient;
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;

/**
 * PerceptionLO「結果一覧」画面表示Actionクラスです。
 * 
 * @author Kentaro Ishizaki (UNITEC)
 * @version 1.0
 */
public class PerceptionIndividualLogMenuAction 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
	{
		// URLパラメータの取得
		String strUserID = request.getParameter( "userId" );
		String strLoID = request.getParameter( "LoID" );
		String strLoType = request.getParameter( "LoType" );
		String strReturnURL = request.getParameter( "returnURL" );
		
		
		// 「結果一覧」情報の取得
		Environment objEnv = new Environment();
		String strLoServerName = objEnv.getLoServerName();

		// エラー画面表示内容格納バッファ
		StringBuffer sb = new StringBuffer();

		// RealLOIDを取得します。
		LoClient objLo = new LoClient();
		String strRealLOID = null;
		if(!objLo.getRealLOIDFromLOID( strLoID )){
			// 検索がうまくいかなかった場合
			MessageData objMessage = objLo.getMessageData();
			request.setAttribute("message", "");
			request.setAttribute("detail", "");
			request.setAttribute("close", "on");
			request.setAttribute("errorurl", objMessage.getURL());
			return mapping.findForward("error");
		}else{
			strRealLOID = objLo.getRealLOIDResult();
		}
		
	    // Perceptionとの新しい連携キーとして外部IDを取得
		PeopleClient objPeople = new PeopleClient();
		String strUserForeignID = null;
		objPeople.setWhereUserID(strUserID);
		if(!objPeople.select()){
			// 検索がうまくいかなかった場合
			MessageData objMessage = objPeople.getMessageData();
			request.setAttribute("message", "");
			request.setAttribute("detail", "");
			request.setAttribute("close", "on");
			request.setAttribute("errorurl", objMessage.getURL());
			return mapping.findForward("error");
		}else{
			while(objPeople.next()){
				strUserForeignID = objPeople.getForeignID();
			}
		}


		LoTopClient objLoTop = new LoTopClient(strLoServerName, strLoType);
		//------------------------------
		// PerceptionLOテーブル検索処理
		//------------------------------
		// 検索条件の設定
		objLoTop.setValue(PerceptionPropertyDef.LOID, strRealLOID);
		if( !objLoTop.execute( "selectPerceptionData" ) ) {
			// 検索がうまくいかなかった場合
			MessageData objMessage = objLoTop.getMessageData();
			request.setAttribute("message", "");
			request.setAttribute("detail", "");
			request.setAttribute("close", "on");
			request.setAttribute("errorurl", objMessage.getURL());
			return mapping.findForward("error");
		}

		// 検索がうまくいった場合はデータを取得する
		PerceptionLoData[] objList = (PerceptionLoData[])objLoTop.getExecute();
		
		String strAssessmentID = "";
		String strSessionName = "";
		for(int i=0; i<objList.length; i++){
			PerceptionLoData objLoData = objList[i];
			strAssessmentID = objLoData.getAssessmentID();
			strSessionName = objLoData.getSessionName();
		}
		
		//------------------------------
		// 「結果一覧」情報の取得
		//------------------------------
		// 検索条件の設定
		objLoTop.setValue(PerceptionPropertyDef.ASSESSMENT_ID, strAssessmentID);
		objLoTop.setValue(PerceptionPropertyDef.PARTICIPANT_NAME, strUserForeignID);	
		
		// 検索処理
		if( !objLoTop.execute( "getResultByParticipant" ) ) {
			// 検索がうまくいかなかった場合
			MessageData objMessage = objLoTop.getMessageData();
			request.setAttribute("message", "");
			request.setAttribute("detail", "");
			request.setAttribute("close", "on");
			request.setAttribute("errorurl", objMessage.getURL());
			return mapping.findForward("error");
		}
		
		// 検索がうまくいった場合はデータを取得する
		Vector vecResultList = (Vector)objLoTop.getExecute();
		
		// 配列にコピー
		String[][] arrayData = new String[vecResultList.size()][8];
		
		for( int i = 0; i < vecResultList.size(); i++ ) {
			PerceptionResponseResultData objResult = (PerceptionResponseResultData)vecResultList.get(i);

			// SOAPFaultの場合の処理、エラー内容を出力
			if( objResult.getFault() != null && !objResult.getFault().equals("")) {
				// 結果IDには空文字を設定（エラーフラグ代わり）
				arrayData[i][0] = "";
				
				arrayData[i][1] = objResult.getFault();
				arrayData[i][2] = objResult.getFaultDescription();
			}
			// 結果取得に成功した場合、結果内容を出力
			else{
				arrayData[i][0] = objResult.getResultID();
				arrayData[i][1] = objResult.getWhenStarted();
				arrayData[i][2] = objResult.getWhenFinished();
				arrayData[i][3] = objResult.getTotalScore();
				if(arrayData[i][3] == null || arrayData[i][3].equals("")){
					arrayData[i][3] = "0";
				}
				arrayData[i][4] = objResult.getMaxScore();
				arrayData[i][5] = objResult.getPercentageScore();
				arrayData[i][6] = objResult.getScoreBandTitle();
				arrayData[i][7] = objResult.getTimeTaken();
			}
		}
		
		
		// リクエストに変数をセット
		request.setAttribute("arrayData", arrayData);
		request.setAttribute("strSessionName", strSessionName);
		request.setAttribute("strAssessmentID", strAssessmentID);
		request.setAttribute("strLoType", strLoType);
		
		return mapping.findForward("success");

	}

}
