/////////////////////////////////////////////////////////////////
//Copyright (C) 2005 NTT CORPORATION.
//
//	ATCXV@LÕATCʂ̃ATCc[\ActionNX
//
//		ύX
//			2005.02.10  VK쐬  ΍茫YiUNITECj
//
//	@\
//
//	LÕATCʂ̃ATCc[\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.Groups.GroupsClient;
import jp.co.ntt.lms.xmo.Lo.LoClient;
import jp.co.ntt.lms.xmo.Lo.LoData;
import jp.co.ntt.lms.xmo.LoRelation.LoRelationClient;
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;
import org.apache.struts.util.MessageResources;

/**
 * LOATCʂ̃ATCc[\ActionNXłB
 * 
 * @author Kentaro Ishizaki (UNITEC)
 * @version 1.0
 */
public class Assignmentsframe_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");

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

		// bZ[W\[X擾
		MessageResources resources = getResources(request, "msg.xmf.xmo.Assignments.MessageResources");
		
		///////////////////////////////////////////
		// O[v^[U擾
		///////////////////////////////////////////
		String strSelectName_o = "";

		if (strSelectID.substring(0, 2).equals("GR"))
		{
			// O[v擾
			GroupsClient objGroups = new GroupsClient();

			//̐ݒ
			objGroups.setWhereGroupID(strSelectID);
			//s
			if (!objGroups.select())
			{
				// ܂Ȃꍇ
				if (objGroups.isErr())
				{
					// G[̏ꍇ
					request.setAttribute("message", "");
					request.setAttribute("detail", "");
					request.setAttribute("close", "on");
					request.setAttribute("errorurl", objGroups.getURL());
					return mapping.findForward("error");
				}
				else
				{
					request.setAttribute("message", objGroups.getMessage());
					request.setAttribute("detail", "");
					request.setAttribute("close", "on");
					return mapping.findForward("error");
				}
			}

			// \O[v̎擾
			if (objGroups.next())
			{
				//O[v
				strSelectName_o = objGroups.getGroupName();
			}
			else
			{
				//O[v݂ȂꍇG[o͂
				request.setAttribute("message", resources.getMessage("M022007"));
				request.setAttribute("detail", "");
				request.setAttribute("close", "on");
				return mapping.findForward("error");
			}
		}
		else
		{
			// [U[擾
			PeopleClient objPeople = new PeopleClient();

			//̐ݒ
			objPeople.setWhereUserID(strSelectID);
			//s
			if (!objPeople.select())
			{
				// ܂Ȃꍇ
				if (objPeople.isErr())
				{
					// G[̏ꍇ
					request.setAttribute("message", "");
					request.setAttribute("detail", "");
					request.setAttribute("close", "on");
					request.setAttribute("errorurl", objPeople.getURL());
					return mapping.findForward("error");
				}
				else
				{
					request.setAttribute("message", objPeople.getMessage());
					request.setAttribute("detail", "");
					request.setAttribute("close", "on");
					request.setAttribute("errorurl", "");
					return mapping.findForward("error");
				}
			}

			// \郆[U[̎擾
			if (objPeople.next())
			{
				//[U[
				strSelectName_o = objPeople.getUserName();
			}
			else
			{
				//[U[݂ȂꍇG[o͂
				request.setAttribute("message", resources.getMessage("M032010"));
				request.setAttribute("detail", "");
				request.setAttribute("close", "on");
				request.setAttribute("errorurl", "");
				return mapping.findForward("error");
			}
		}

		///////////////////////////////////////////
		// c[f[^擾
		// Assignmentse[u擾
		///////////////////////////////////////////
		AssignmentsClient objAssignmentsXMO = null;
		LoRelationClient objLoRelationXMO = null;
		LoClient objLoXMO = 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.setWhereMemberShipID( strParentID + strSelectID );
		objAssignmentsXMO.setWhereMethodFlag(false);
		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");
			}
		}
		String strMaterialID = "";
		while (objAssignmentsXMO.next())
		{
			// R|[lghc̎擾
			strMaterialID = objAssignmentsXMO.getMaterialID();
			// LORelation̎qhciknhcj擾
			objLoRelationXMO = new LoRelationClient();
			objLoRelationXMO.setmaterialID( strMaterialID );
			if (!objLoRelationXMO.select())
			{
				// ܂Ȃꍇ
				if (objLoRelationXMO.isErr())
				{
					// G[̏ꍇ
					request.setAttribute("message", "");
					request.setAttribute("detail", "");
					request.setAttribute("close", "on");
					request.setAttribute("errorurl", objLoRelationXMO.getURL());
					return mapping.findForward("error");
				}
				else
				{
					request.setAttribute("message", objLoRelationXMO.getMessage());
					request.setAttribute("detail", "");
					request.setAttribute("close", "on");
					request.setAttribute("errorurl", "");
					return mapping.findForward("error");
				}
			}

			while (objLoRelationXMO.next())
			{
				String[] strInfo = new String[3];
				// wKAǗ̎擾
				strInfo[0] = objAssignmentsXMO.getLearnAuthority();
				strInfo[1] = objAssignmentsXMO.getManagementAuthority();

				// ehc̎擾
				strInfo[2]= objLoRelationXMO.getParentID();
				// qhc̎擾
				String strChildID = objLoRelationXMO.getChildID();

				vecIDList.add(strChildID);
				htbParentList.put(strChildID, 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))
		{
			// OC[UɊĂO[v擾܂
			XMSBaseClient objXmoBase = new XMSBaseClient();
			if (!objXmoBase.searchRootLoList(strUserID, XMSBaseClient.MANAGE_TYPE))
			{
				// ܂Ȃꍇ
				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");
				}
			}


			// ܂ꍇ
			LoData[] objLoList = objXmoBase.getRootLoList();
			for (int i = 0; i < objLoList.length; i++)
			{
				vecFilterIDList.add(objLoList[i].getLoID());
			}

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

		for (int i = 0; i < vecIDList.size(); i++)
		{
			String strChildID = (String)vecIDList.get(i);
			String[] strInfo = (String[])htbParentList.get(strChildID);
			String strLearnAuthority = strInfo[0];
			String strManagementAuthority = strInfo[1];
			String strLOParentID = strInfo[2];

			//XVLof[^x[X擾B
			objLoXMO = new LoClient();
			// ̐ݒ
			objLoXMO.setWhereLoID(strChildID);
			if (!objLoXMO.select())
			{
				// ܂Ȃꍇ
				if( objLoXMO.isErr() ) {
					// G[̏ꍇ
					request.setAttribute("message", "");
					request.setAttribute("detail", "");
					request.setAttribute("close", "on");
					request.setAttribute("errorurl", objLoXMO.getURL());
					return mapping.findForward("error");
				}
				else
				{
					request.setAttribute("message", objLoXMO.getMessage());
					request.setAttribute("detail", "");
					request.setAttribute("close", "on");
					request.setAttribute("errorurl", "");
					return mapping.findForward("error");
				}
			}
			String strLoTytle = "";
			String strLoType = "";
			if (objLoXMO.next())
			{
				// kn^Cg̎擾
				strLoTytle = objLoXMO.getLoTytle();
				// kn^Cv̎擾
				strLoType = objLoXMO.getLoType();
			}
			else
			{
				request.setAttribute("message", "kn^Cg擾ł܂B");
				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ĂLOƓ̏ꍇ
				// LO_TREE_ROOTɒu
				strAssignmentsInfo[0] = AssignmentsConstants.LO_TREE_ROOT;
			}
			else
			{
				strAssignmentsInfo[0] = strLOParentID;
			}
			strAssignmentsInfo[1] = strChildID;
			strAssignmentsInfo[2] = strLoTytle;
			strAssignmentsInfo[3] = strLoType;
			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);
		// I
		request.setAttribute("strSelectName_o", strSelectName_o);
		// LOf[^Xg
		request.setAttribute("strAssignmentsCopy_o", strAssignmentsCopy_o);
		
		return mapping.findForward("success");
	}
}
