/////////////////////////////////////////////////////////////////
//Copyright (C) 2005 NTT CORPORATION.
//
//	LOリストChild取得ツールクラス
//
//		変更履歴
//			2005.02.16  新規作成  梅原 浩司
//
//	機能
//
//	このクラスはLOリストChild取得ツールのクラスです。
//
////////////////////////////////////////////////////////////////

package jp.co.ntt.lms.xmf.tools.com.lolist;

import java.util.*;

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

import jp.co.ntt.lms.xmf.tools.ToolBase;
import jp.co.ntt.lms.xmf.common.CommonFunction;
import jp.co.ntt.lms.xmo.LoRelation.LoRelationClient;
import jp.co.ntt.lms.xmo.Lo.LoClient;
import jp.co.ntt.lms.xmo.util.HtmlEscape;
import jp.co.ntt.lms.xmo.Environment;
import jp.co.ntt.lms.xmo.Base.XMSBaseClient;
import jp.co.ntt.lms.xmo.Lo.LoData;

/**
 *  LOリストChild取得ツールクラス
 * 
 *  このクラスはLOリストChild取得ツールのクラスです。
 * 
 *  @author 梅原 浩司
 *  @version 1.0
 */
public class LoListGetChildLoTool extends ToolBase {
	
	/**
	 * ChildLO文字列を取得する。
	 * @param request リクエストオブジェクト(パラメータとしてParentIDを取得)
	 * @param response レスポンスオブジェクト
	 * @return String ChildLO文字列
	 * @throws Exception
	 */
	public String getChildLoString(HttpServletRequest request, HttpServletResponse response)
	throws Exception 
	{
		// パラメータ取得
		String strParentID = request.getParameter( "ParentID" );

		LoRelationClient objXMO = null;
		int intLRResult = 0;
		// Loサーバ名を取得する
		Environment objEnv = new Environment();
		String strLoServerName = objEnv.getLoServerName();

		try {
			// 送信文字列格納StringBuffer
			StringBuffer strGetLine = new StringBuffer();
			strGetLine.append( "<childlenlist>\n" );

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

				XMSBaseClient objXms = new XMSBaseClient();

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

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

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

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

					String strConclusionFlg = "off";
					String strPropagateFlg  = "off";

					// 出力文字列の作成
					strGetLine.append( "<child title=\"" );
					strGetLine.append( HtmlEscape.escape(objLoData.getLoTytle()) );
					strGetLine.append( "\" iconid=\"group\" id=\"" );
					strGetLine.append( strLoID );
					strGetLine.append( "\" type=\"" );
					if(j == objLoList.length - 1){
						strGetLine.append( "L" + objLoData.getLoType() );
					}
					else{
						strGetLine.append( objLoData.getLoType() );
					}
					strGetLine.append( "\" conclusion=\"" );
					strGetLine.append( strConclusionFlg );
					strGetLine.append( "\" propagate=\"" );
					strGetLine.append( strPropagateFlg );
					strGetLine.append( "\" />\n" );
				}
			}
			else{

				// グループと人管理XMOの取得
				objXMO = new LoRelationClient();
				objXMO.setParentID( strParentID );

				if( !objXMO.select() ) {
					// 検索がうまくいかなかった場合
					if( objXMO.isErr() ) {
						// エラーの場合
						response.sendRedirect( objXMO.getURL() );
					}
					else {
						String strMessage =  objXMO.getMessage();
						response.sendRedirect( CommonFunction.getParamErrURL( strMessage, null, null ) );
					}
				}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 = "";
						String strConclusionFlg = "off";
						String strPropagateFlg  = "off";
						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( "\" conclusion=\"" );
						strGetLine.append( strConclusionFlg );
						strGetLine.append( "\" propagate=\"" );
						strGetLine.append( strPropagateFlg );
						strGetLine.append( "\" />\n" );
					}
					else {
						// 検索がうまくいかなかった場合
						if( objLo.isErr() ) {
							// エラーの場合
							response.sendRedirect( objLo.getURL() );
						}
						else {
							String strMessage =  objLo.getMessage();
							response.sendRedirect( CommonFunction.getParamErrURL( strMessage, null, null ) );
						}
					}
				}
			}

			strGetLine.append( "</childlenlist>\n" );
			return strGetLine.toString();
		}
		catch( Exception e ) {
			e.printStackTrace();
			return "err";
		}
	}
}
