/////////////////////////////////////////////////////////////////
//Copyright (C) 2005 NTT CORPORATION.
//
//	ATCXV@LÕATCʂ̃O[vc[\ActionNX
//
//		ύX
//			2005.02.16  VK쐬   ΍茫Y
//
//	@\
//
//	LÕATCʂ̃O[vc[\ActionNXłB
//
/////////////////////////////////////////////////////////////////
package jp.co.ntt.lms.xmf.actions.xmo.Assignments;

import java.util.Hashtable;
import java.util.Vector;

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

import jp.co.ntt.lms.xmf.xmo.Assignments.AssignmentsConstants;
import jp.co.ntt.lms.xmo.Assignments.AssignmentsClient;
import jp.co.ntt.lms.xmo.Base.XMSBaseClient;
import jp.co.ntt.lms.xmo.GroupAndPeople.GroupAndPeopleClient;
import jp.co.ntt.lms.xmo.Groups.GroupsClient;
import jp.co.ntt.lms.xmo.Groups.GroupsData;
import jp.co.ntt.lms.xmo.Lo.LoClient;
import jp.co.ntt.lms.xmo.People.PeopleClient;
import jp.co.ntt.lms.xmo.util.DuplicateFilter;

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

/**
 * LÕATCʂ̃O[vc[\ActionNXłB
 * 
 * @author Kentaro Ishizaki (UNITEC)
 * @version 1.0
 */
public class Assignmentsframe_lo_assignAction 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
	{
		///////////////////////////////////////////
		// p[^擾
		// 	EparentID	ehc	K{
		// 	EselectID	qhc	K{
		///////////////////////////////////////////
		String strParentID = request.getParameter("parentID");
		String strSelectID = request.getParameter("selectID");

		///////////////////////////////////////////
		// p[^`FbN
		///////////////////////////////////////////

		//IꂽLÕ^Cg擾܂B
		String strLoTytle_o = "";
		LoClient objLo = new LoClient();
		objLo.setWhereLoID( strSelectID );
		if( !objLo.select() ) {
			// ܂Ȃꍇ
			if( objLo.isErr() ) {
				// G[̏ꍇ
				request.setAttribute("message", "");
				request.setAttribute("detail", "");
				request.setAttribute("close", "on");
				request.setAttribute("errorurl", objLo.getURL());
				return mapping.findForward("error");
			}
			else {
				request.setAttribute("message", objLo.getMessage());
				request.setAttribute("detail", "");
				request.setAttribute("close", "on");
				return mapping.findForward("error");
			}
		}

		// ILo̎擾
		if( objLo.next() ) {
			//LO
			strLoTytle_o = objLo.getLoTytle();
		}
		else {
			//Lo݂ȂꍇG[o͂
			String strMessage =  "LO݂܂B";
			request.setAttribute("message", strMessage);
			request.setAttribute("detail", "");
			request.setAttribute("close", "on");
			return mapping.findForward("error");
		}


		// c[f[^擾p̃Avbg
		String strServerName_o = request.getServerName();
		int intServerPort_o = request.getServerPort();
		String strContextPath_o = request.getContextPath();

		// c[f[^擾
		// Assignmentse[u擾
		AssignmentsClient objAssignmentsXMO = null;
		GroupAndPeopleClient objGroupAndPeopleXMO = null;
		GroupsClient objGroupsXMO = null;
		PeopleClient objPeopleXMO = null;

		// \擾GA
		Vector vecAssignmentsList = new Vector();
		Vector vecIDList = new Vector();
		Vector vecFilterIDList = new Vector();
		Hashtable htbParentList = new Hashtable();


		// Assignments̃R|[lghc̎擾
		objAssignmentsXMO = new AssignmentsClient();
		objAssignmentsXMO.setWhereMaterialID( strParentID + strSelectID );
		objAssignmentsXMO.setOrderByAssignmentsID();

		if( !objAssignmentsXMO.select() ) {
			// ܂Ȃꍇ
			if( objAssignmentsXMO.isErr() ) {
				// G[̏ꍇ
				request.setAttribute("message", "");
				request.setAttribute("detail", "");
				request.setAttribute("close", "on");
				request.setAttribute("errorurl", objAssignmentsXMO.getURL());
				return mapping.findForward("error");
			}
			else {
				request.setAttribute("message", objAssignmentsXMO.getMessage());
				request.setAttribute("detail", "");
				request.setAttribute("close", "on");
				request.setAttribute("errorurl", "");
				return mapping.findForward("error");
			}
		}
		while( objAssignmentsXMO.next() ) {
			// o[Vbvhc̎擾
			String strMemberShipID = objAssignmentsXMO.getMemberShipID();
			// GroupAndPeople̎qhc擾
			objGroupAndPeopleXMO = new GroupAndPeopleClient();
			objGroupAndPeopleXMO.setMemberShipID( strMemberShipID );
			if( !objGroupAndPeopleXMO.select() ) {
				// ܂Ȃꍇ
				if( objGroupAndPeopleXMO.isErr() ) {
					// G[̏ꍇ
					request.setAttribute("message", "");
					request.setAttribute("detail", "");
					request.setAttribute("close", "on");
					request.setAttribute("errorurl", objGroupAndPeopleXMO.getURL());
					return mapping.findForward("error");
				}
				else {
					request.setAttribute("message", objGroupAndPeopleXMO.getMessage());
					request.setAttribute("detail", "");
					request.setAttribute("close", "on");
					request.setAttribute("errorurl", "");
					return mapping.findForward("error");
				}
			}

			if( objGroupAndPeopleXMO.next() ) {
				String[] strInfo = new String[4];
				// wKAǗ̎擾
				strInfo[0] = objAssignmentsXMO.getLearnAuthority();
				strInfo[1] = objAssignmentsXMO.getManagementAuthority();

				// ehc̎擾
				strInfo[2] = objGroupAndPeopleXMO.getParentID();
				// qhc̎擾
				strInfo[3] = objGroupAndPeopleXMO.getChildID();
				String strFilterMemberShipID = strInfo[2] + "^" + strInfo[3];
				vecIDList.add( strFilterMemberShipID );
				// o[VbvIDL[ɂăATCnbVɊi[B
				htbParentList.put( strFilterMemberShipID, strInfo );
			}
		}

		// OCĂ郆[UŃATĈO[v擾܂B
		// OC[UID̎擾
		String strUserID = (String)request.getSession().getAttribute( AssignmentsConstants.USER_ID );
		if( strUserID == null ) {
			// ZbV؂Ăꍇ̓OCʂɃ_CNg
			request.setAttribute("message", "");
			request.setAttribute("detail", "");
			request.setAttribute("close", "on");
			request.setAttribute("errorurl", AssignmentsConstants.LOGIN_REDIRECT);
			return mapping.findForward("error");
		}

		if( !strUserID.equals(AssignmentsConstants.SUPER_USER) ) {
			// ZbVXMOID擾
			String strXmoID = (String)request.getSession().getAttribute( AssignmentsConstants.ASSIGN_XMO_ID );
			if( strXmoID == null ) {
				// ZbV؂Ăꍇ̓OCʂɃ_CNg
				request.setAttribute("message", "");
				request.setAttribute("detail", "");
				request.setAttribute("close", "on");
				request.setAttribute("errorurl", AssignmentsConstants.LOGIN_REDIRECT);
				return mapping.findForward("error");
			}

			// OC[UɊĂO[v擾܂
			XMSBaseClient objXmoBase = new XMSBaseClient();
			if( !objXmoBase.searchRootGroupList(strUserID, strXmoID) ) {
				// ܂Ȃꍇ
				if( objXmoBase.isErr() ) {
					// G[̏ꍇ
					request.setAttribute("message", "");
					request.setAttribute("detail", "");
					request.setAttribute("close", "on");
					request.setAttribute("errorurl", objXmoBase.getURL());
					return mapping.findForward("error");
				}
				else {
					request.setAttribute("message", objXmoBase.getMessage());
					request.setAttribute("detail", "");
					request.setAttribute("close", "on");
					request.setAttribute("errorurl", "");
					return mapping.findForward("error");
				}
			}


			// ܂ꍇ
			GroupsData[] objGroupsList = objXmoBase.getRootGroupList();
			for( int i = 0; i < objGroupsList.length; i++ ) {
				vecFilterIDList.add( objGroupsList[i].getGroupID() );
			}

			// \̍i
			DuplicateFilter objFilter = new DuplicateFilter(vecIDList, vecFilterIDList, false );
			objFilter.filterDuplicateMemberShip();
		}

		for( int i = 0; i < vecIDList.size(); i++ ) {
			String strMemberShipID = (String)vecIDList.get(i);
			String[] strInfo = (String[])htbParentList.get(strMemberShipID);
			String strLearnAuthority = strInfo[0];
			String strManagementAuthority = strInfo[1];
			String strGRParentID = strInfo[2];
			String strChildID = strInfo[3];
			if( strChildID.substring( 0, 2 ).equals( "GR" ) ) {
				//XVO[vf[^x[X擾
				objGroupsXMO = new GroupsClient();
				// ̐ݒ
				objGroupsXMO.setWhereGroupID( strChildID );
				if( !objGroupsXMO.select() ) {
					// ܂Ȃꍇ
					if( objGroupsXMO.isErr() ) {
						// G[̏ꍇ
						request.setAttribute("message", "");
						request.setAttribute("detail", "");
						request.setAttribute("close", "on");
						request.setAttribute("errorurl", objGroupsXMO.getURL());
						return mapping.findForward("error");
					}
					else {
						request.setAttribute("message", objGroupsXMO.getMessage());
						request.setAttribute("detail", "");
						request.setAttribute("close", "on");
						request.setAttribute("errorurl", "");
						return mapping.findForward("error");
					}
				}
				String strGroupName = "";
				String strGroupType = "";
				if( objGroupsXMO.next() ) {
					// O[v̎擾
					strGroupName = objGroupsXMO.getGroupName();
					strGroupType = objGroupsXMO.getGroupType();
				}else{
					String strMessage =  "O[v擾ł܂B";
					request.setAttribute("message", strMessage);
					request.setAttribute("detail", "");
					request.setAttribute("close", "on");
					request.setAttribute("errorurl", "");
					return mapping.findForward("error");
				}
				// 擾f[^Z[u
				String[] strAssignmentsInfo = new String[6];
				if( vecFilterIDList.contains( strChildID ) ) {
					// qIDOC[UɃATCĂO[vƓ̏ꍇ
					// GROUP_TREE_ROOTɒu
					strAssignmentsInfo[0] = AssignmentsConstants.GROUP_TREE_ROOT;
				}
				else {
					strAssignmentsInfo[0] = strGRParentID;
				}
				strAssignmentsInfo[1] = strChildID;
				strAssignmentsInfo[2] = strGroupName;
				strAssignmentsInfo[3] = strGroupType;
				strAssignmentsInfo[4] = strLearnAuthority;
				strAssignmentsInfo[5] = strManagementAuthority;
				vecAssignmentsList.add(strAssignmentsInfo);
			} else {
				//XV郆[Uf[^x[X擾
				objPeopleXMO = new PeopleClient();
				// ̐ݒ
				objPeopleXMO.setWhereUserID( strChildID );
				if( !objPeopleXMO.select() ) {
					// ܂Ȃꍇ
					if( objPeopleXMO.isErr() ) {
						// G[̏ꍇ
						request.setAttribute("message", "");
						request.setAttribute("detail", "");
						request.setAttribute("close", "on");
						request.setAttribute("errorurl", objPeopleXMO.getURL());
						return mapping.findForward("error");
					}
					else {
						request.setAttribute("message", objPeopleXMO.getMessage());
						request.setAttribute("detail", "");
						request.setAttribute("close", "on");
						request.setAttribute("errorurl", "");
						return mapping.findForward("error");
					}
				}
				String strUserName = "";
				String strType = "";
				if( objPeopleXMO.next() ) {
					// [U̎擾
					strUserName = objPeopleXMO.getUserName();
					strType = objPeopleXMO.getSex() + "^" + objPeopleXMO.getUserType();
				}else{
					String strMessage =  "O[v擾ł܂B";
					request.setAttribute("message", strMessage);
					request.setAttribute("detail", "");
					request.setAttribute("close", "on");
					request.setAttribute("errorurl", "");
					return mapping.findForward("error");
				}
				// 擾f[^Z[u
				String[] strAssignmentsInfo = new String[6];
				strAssignmentsInfo[0] = strGRParentID;
				strAssignmentsInfo[1] = strChildID;
				strAssignmentsInfo[2] = strUserName;
				strAssignmentsInfo[3] = strType;
				strAssignmentsInfo[4] = strLearnAuthority;
				strAssignmentsInfo[5] = strManagementAuthority;
				vecAssignmentsList.add(strAssignmentsInfo);
			}
		}


		//LOf[^XgxN^[zɃRs[܂B
		String[][] strAssignmentsCopy_o = new String[vecAssignmentsList.size()][6];
		vecAssignmentsList.copyInto( strAssignmentsCopy_o );

		
		// NGXgɕϐZbg
		request.setAttribute("strServerName_o", strServerName_o);
		request.setAttribute("intServerPort_o", new Integer(intServerPort_o));
		request.setAttribute("strContextPath_o", strContextPath_o);
		// LO
		request.setAttribute("strLoTytle_o", strLoTytle_o);
		// LOf[^Xg
		request.setAttribute("strAssignmentsCopy_o", strAssignmentsCopy_o);
		
		return mapping.findForward("success");
	}
}
