/////////////////////////////////////////////////////////////////
//Copyright (C) 2005 NTT CORPORATION.
//
//	アサイン更新処理　子グループ取得処理Actionクラス
//
//		変更履歴
//			2005.02.16  新規作成  氏名 石崎賢太郎
//
//	機能
//
//	子グループ取得処理Actionクラスです。
//
/////////////////////////////////////////////////////////////////
package jp.co.ntt.lms.xmf.actions.xmo.Assignments;

import java.util.Hashtable;

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.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.People.PeopleClient;
import jp.co.ntt.lms.xmo.util.HtmlEscape;

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 AssignmentsGetChildGroupsAction 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
	{
		// パラメータ取得
		String strParentID = request.getParameter( "ParentID" );

		GroupAndPeopleClient objXMO = null;
		int intGPResult = 0;
		try {
			StringBuffer strGetLine = new StringBuffer();
			strGetLine.append( "<childlenlist>\n" );

			// 選択された親IDがGROUP_TREE_ROOTの場合
			if( strParentID.equals(AssignmentsConstants.GROUP_TREE_ROOT) ) {

				// ログインしているユーザに管理アサインされているLOを取得します。
				// ログインユーザIDの取得
				String strUserID = (String)request.getSession().getAttribute( AssignmentsConstants.USER_ID );
				if( strUserID == null ) {
					request.setAttribute("strChildGroups", "ERR");
					return mapping.findForward("success");
				}

				// セッションからXMOIDを取得する
				String strXmoID = (String)request.getSession().getAttribute( AssignmentsConstants.ASSIGN_XMO_ID );
				if( strXmoID == null ) {
					request.setAttribute("strChildGroups", "ERR");
					return mapping.findForward("success");
				}
				XMSBaseClient objXms = new XMSBaseClient();

				// ルートGroupリスト検索処理(アサイン管理(LO)が割当たっているものを取得)
				if( !objXms.searchRootGroupList(strUserID, strXmoID ) ) {
					request.setAttribute("strChildGroups", "ERR");
					return mapping.findForward("success");
				}

				// 検索がうまくいった場合
				GroupsData[] objGroupsList = objXms.getRootGroupList();

				// ルート直下のMemberShipIDをセッションに格納するためのHashtableをインスタンス化
				Hashtable htbRootInfo = new Hashtable();
				// セッションに格納します
				request.getSession().setAttribute( AssignmentsConstants.ASSIGN_ROOT_INFO, htbRootInfo );
				for( int i = 0; i < objGroupsList.length; i++ ) {
					GroupsData objGroupsData = objGroupsList[i];

					String strGroupID = objGroupsData.getGroupID();
					String strParentGroupID = objGroupsData.getParentID();
					// セッション情報にLOIDをキーにして、MemberShipIDを格納します
					htbRootInfo.put( strGroupID, strParentGroupID );

					// 出力文字列の作成
					strGetLine.append( "<child title=\"" );
					strGetLine.append( HtmlEscape.escape(objGroupsData.getGroupName()) );
					strGetLine.append( "\" iconid=\"group\" id=\"" );
					strGetLine.append( strGroupID );
					strGetLine.append( "\" type=\"" );
					if( i == objGroupsList.length - 1 ) {
						strGetLine.append( objGroupsData.getGroupType() + "^L");
					}
					else {
						strGetLine.append( objGroupsData.getGroupType() );
					}
					strGetLine.append( "\" />\n" );
				}
			}
			else {
				// グループと人管理XMOの取得
				objXMO = new GroupAndPeopleClient();
				objXMO.setParentID( strParentID );

				if( !objXMO.select() ) {
					request.setAttribute("strChildGroups", "ERR");
					return mapping.findForward("success");
				}else{
					intGPResult = objXMO.getResultCount();
				}
				// グループ管理XMOの取得
				String strGroupflag = "";//人かグループか判断する
				GroupsClient objGroups = new GroupsClient();
				PeopleClient objPeople = new PeopleClient();

				int intCounter = 0;
				while( objXMO.next() ) {
					intCounter++;
					// グループIDの取得
					String strChildID = objXMO.getChildID();
					if(strChildID.substring( 0, 2 ).equals( "GR" ) ) {
						strGroupflag = "0";
					}
					else{
						strGroupflag = "1";
					}

					// グループIDを元にグループ名称を取得する
					if(strGroupflag.equals( "0" )){
						objGroups.clear();
						objGroups.setWhereGroupID( strChildID );
						if( objGroups.select() ) {
							String strGroupName = "";
							String strGroupType = "";
							if( objGroups.next() ) {
								strGroupName = objGroups.getGroupName();
								strGroupType = objGroups.getGroupType();
							}
							//同階層の最終レコードの場合
							if(intCounter==intGPResult){
								strGroupType = strGroupType + "^L";
							}
							strGetLine.append( "<child title=\"" );
							strGetLine.append( HtmlEscape.escape(strGroupName) );
							strGetLine.append( "\" iconid=\"group\" id=\"" );
							strGetLine.append( strChildID );
							strGetLine.append( "\" type=\"" );
							strGetLine.append( strGroupType );
							strGetLine.append( "\" />\n" );
						}
						else {
							request.setAttribute("strChildGroups", "ERR");
							return mapping.findForward("success");
						}
					}
					else{
						objPeople.clear();
						objPeople.setWhereUserID( strChildID );
						if( objPeople.select() ) {
							String strUserName = "";
							String strType = "";
							if( objPeople.next() ) {
								strUserName = objPeople.getUserName();
								strType = objPeople.getSex() + "^" + objPeople.getUserType();
							}
							//同階層の最終レコードの場合
							if(intCounter==intGPResult){
								strType = strType + "^L";
							}
							strGetLine.append( "<child title=\"" );
							strGetLine.append( HtmlEscape.escape(strUserName) );
							strGetLine.append( "\" iconid=\"people\" id=\"" );
							strGetLine.append( strChildID );
							strGetLine.append( "\" type=\"" );
							strGetLine.append( strType );
							strGetLine.append( "\" />\n" );
						}
						else {
							request.setAttribute("strChildGroups", "ERR");
							return mapping.findForward("success");
						}

					}
				}
			}
			strGetLine.append( "</childlenlist>\n" );

			request.setAttribute("strChildGroups", strGetLine.toString());
			return mapping.findForward("success");
		}
		catch( Exception e ) {
			e.printStackTrace();
			request.setAttribute("strChildGroups", "ERR");
			return mapping.findForward("success");
		}
	}
}
