/////////////////////////////////////////////////////////////////
//Copyright (C) 2005 NTT CORPORATION.
//
//	PerceptionLOuʈꗗvʕ\ActionNX
//
//		ύX
//			2005.02.16  VK쐬   ΍茫Y
//
//	@\
//
//	PerceptionLOuʈꗗvʕ\ActionNXłB
//
/////////////////////////////////////////////////////////////////
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;

/**
 * PerceptionLOuʈꗗvʕ\ActionNXłB
 * 
 * @author Kentaro Ishizaki (UNITEC)
 * @version 1.0
 */
public class PerceptionIndividualLogMenuAction extends Action
{
	/**
	 * strutst[[NĂ΂郁\bhłB
	 * 
	 * @param mapping }bsOIuWFNgB
	 * @param form ANVtH[IuWFNgB
	 * @param request NGXgIuWFNgB
	 * @param response X|XIuWFNgB
	 * @return ActionForward ANVtH[hIuWFNgB
	 * @throws Exception
	 */
	public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception
	{
		// URLp[^̎擾
		String strUserID = request.getParameter( "userId" );
		String strLoID = request.getParameter( "LoID" );
		String strLoType = request.getParameter( "LoType" );
		String strReturnURL = request.getParameter( "returnURL" );
		
		
		// uʈꗗv̎擾
		Environment objEnv = new Environment();
		String strLoServerName = objEnv.getLoServerName();

		// G[ʕ\ei[obt@
		StringBuffer sb = new StringBuffer();

		// RealLOID擾܂B
		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Ƃ̐VAgL[ƂĊOID擾
		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);
		//------------------------------
		// PerceptionLOe[u
		//------------------------------
		// ̐ݒ
		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");
		}

		// ܂ꍇ̓f[^擾
		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();
		}
		
		//------------------------------
		// uʈꗗv̎擾
		//------------------------------
		// ̐ݒ
		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");
		}
		
		// ܂ꍇ̓f[^擾
		Vector vecResultList = (Vector)objLoTop.getExecute();
		
		// zɃRs[
		String[][] arrayData = new String[vecResultList.size()][8];
		
		for( int i = 0; i < vecResultList.size(); i++ ) {
			PerceptionResponseResultData objResult = (PerceptionResponseResultData)vecResultList.get(i);

			// SOAPFault̏ꍇ̏AG[eo
			if( objResult.getFault() != null && !objResult.getFault().equals("")) {
				// IDɂ͋󕶎ݒiG[tOj
				arrayData[i][0] = "";
				
				arrayData[i][1] = objResult.getFault();
				arrayData[i][2] = objResult.getFaultDescription();
			}
			// ʎ擾ɐꍇAʓeo
			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();
			}
		}
		
		
		// NGXgɕϐZbg
		request.setAttribute("arrayData", arrayData);
		request.setAttribute("strSessionName", strSessionName);
		request.setAttribute("strAssessmentID", strAssessmentID);
		request.setAttribute("strLoType", strLoType);
		
		return mapping.findForward("success");

	}

}
