/////////////////////////////////////////////////////////////////
//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.Lo.LoClient;
import jp.co.ntt.lms.xmo.Lo.LoData;
import jp.co.ntt.lms.xmo.LoRelation.LoRelationClient;
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 AssignmentsGetChildLoAction 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" );

		LoRelationClient objXMO = null;
		int intLRResult = 0;
		try {
			// 送信文字列格納StringBuffer
			StringBuffer strGetLine = new StringBuffer();
			strGetLine.append( "<childlenlist>\n" );
			// 選択された親IDがLO_TREE_ROOTの場合
			if( strParentID.equals(AssignmentsConstants.LO_TREE_ROOT) ) {

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

				XMSBaseClient objXms = new XMSBaseClient();

				// ルートLOリスト検索処理(管理アサインされているものを検索)
				if( !objXms.searchRootLoList(strUserID, XMSBaseClient.MANAGE_TYPE ) ) {
					request.setAttribute("strChildLo", "err");
					return mapping.findForward("success");
				}

				// 検索がうまくいった場合
				LoData[] objLoList = objXms.getRootLoList();

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

					String strLoID = objLoData.getLoID();
					String strParentLoID = objLoData.getParentID();
					// セッション情報にLOIDをキーにして、MemberShipIDを格納します
					htbRootInfo.put( strLoID, strParentLoID );

					// 出力文字列の作成
					strGetLine.append( "<child title=\"" );
					strGetLine.append( HtmlEscape.escape(objLoData.getLoTytle()) );
					strGetLine.append( "\" iconid=\"group\" id=\"" );
					strGetLine.append( strLoID );
					strGetLine.append( "\" type=\"" );
					if( i == objLoList.length - 1 ) {
						strGetLine.append( "L" + objLoData.getLoType() );
					}
					else {
						strGetLine.append( objLoData.getLoType() );
					}
					strGetLine.append( "\" />\n" );
				}
			}
			else {
				// LOリレーション管理XMOの取得
				objXMO = new LoRelationClient();
				objXMO.setParentID( strParentID );

				if( !objXMO.select() ) {
					// エラーの場合
					request.setAttribute("strChildLo", "err");
					return mapping.findForward("success");
				}
				else {
					intLRResult = objXMO.getResultCount();
				}
				// グループ管理XMOの取得
				LoClient objLo = new LoClient();
				String strLoType ="";

				int intCounter = 0;
				while( objXMO.next() ) {
					intCounter++;
					// グループIDの取得
					String strChildID = objXMO.getChildID();
					// グループIDを元にグループ名称を取得する
					objLo.clear();
					objLo.setWhereLoID( strChildID );
					if( objLo.select() ) {
						String strLoName = "";
						if( objLo.next() ) {
							strLoType = objLo.getLoType();
							strLoName = objLo.getLoTytle();

						}

							//同階層の最終レコードの場合
							if(intCounter==intLRResult){
								strLoType = "L" + strLoType;
							}

							//コンテナとその他LOを区別するためstrLoTypeを追加
						strGetLine.append( "<child title=\"" );
						strGetLine.append( HtmlEscape.escape(strLoName) );
						strGetLine.append( "\" iconid=\"group\" id=\"" );
						strGetLine.append( strChildID );
						strGetLine.append( "\" type=\"" );
						strGetLine.append( strLoType );
						strGetLine.append( "\" />\n" );
					}
					else {
						// 検索がうまくいかなかった場合
						if( objLo.isErr() ) {
							// エラーの場合
							request.setAttribute("message", "");
							request.setAttribute("detail", "");
							request.setAttribute("close", "on");
							request.setAttribute("errorurl", objLo.getURL());
							return mapping.findForward("error");
						}
						else {
							String strMessage =  objLo.getMessage();
							request.setAttribute("message", strMessage);
							request.setAttribute("detail", "");
							request.setAttribute("close", "on");
							request.setAttribute("errorurl", "");
							return mapping.findForward("error");
						}
					}
				}
			}

			strGetLine.append( "</childlenlist>\n" );
			
			request.setAttribute("strChildLo", strGetLine.toString());
			return mapping.findForward("success");
		}
		catch( Exception e ) {
			e.printStackTrace();
			request.setAttribute("strChildLo", "err");
			return mapping.findForward("success");
		}
	}

}
