//
//Lo 管理XMO クライアントクラス
//		変更履歴
//			2005.03.28	新規作成　梅原 浩司
//
package jp.co.ntt.lms.xmo.Method;

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

import org.apache.commons.lang.StringEscapeUtils;

import jp.co.ntt.lms.xmo.Method.MethodTable;
import jp.co.ntt.lms.xmo.MessageData;
import jp.co.ntt.lms.xmo.XMOBasicClient;

/**
 * メソッド 管理XMO クライアントクラスです。<BR>
 * このクラスはメソッド XMO サーバクラスとの接続および、
 * 登録、更新、削除、検索処理に必要なパラメータの設定、検索後の
 * 検索結果の取得メソッドを提供します。<BR>
 * @author 梅原 浩司
 * @version 0.0.0.1 2005.03.28
 */
public class MethodClient extends XMOBasicClient implements MethodTable {

	/** 接続先サーバクラス名です */
	private static final String CLASS_NAME = "jp.co.ntt.lms.xmo.Method.Method";
	
	/**
	 * コンストラクタです。<BR>
	 * 親クラスのコンストラクタを呼び出し、接続先サーバクラス名を
	 * 設定します。
	 */
	public MethodClient() throws Exception {
		super( CLASS_NAME );
	}

	/**
	 * メソッドデータを取得します
	 */
	public MethodData getMethodData() {
		return (MethodData)getResult();
	}
	
	/**
	 * アサインフラグをセットします
	 * @param blnAssignFlag
	 */
	public void setAssignFlag( boolean blnAssignFlag ) {
		htParams.put( ASSIGNFLAG_KEY, new Boolean(blnAssignFlag) );
	}
	
	/**
	 * アサインタイプをセットします
	 * @param intAssignType
	 */
	public void setAssignType( int intAssignType ) {
		htParams.put( ASSIGNTYPE_KEY, new Integer(intAssignType) );
	}
	
	/**
	 * アサインユーザーIDをセットします
	 * @param strUserID
	 */
	public void setUserID( String strUserID ) {
		htParams.put( USERID_KEY, strUserID );
	}
	
	/**
	 * LOIDを検索条件に付与します
	 * デフォルトで"="条件をつけます
	 * @param strLOID	LOID
	 */
	public void setWhereLoID( String strLoID ) {
		String strCondition = TABLE_NAME + "." + LO_ID + SEARCH_EQUALS + "'" + StringEscapeUtils.escapeSql(strLoID) + "' ";
		setCondition( strCondition );
	}

	/**
	 * 文字列型フィールドの検索条件を追加します
	 * @param strFieldName フィールド名
	 * @param strOperator  演算子
	 * @param strValue     比較する値
	 */
	public void setWhereString( String strFieldName, String strOperator, String strValue ) {
		String strCondition = strFieldName + strOperator + "'" + StringEscapeUtils.escapeSql(strValue) + "' ";
		setCondition( strCondition );
	}

	/**
	 * 日付型フィールドの検索条件を追加します
	 * @param strFieldName フィールド名
	 * @param strOperator  演算子
	 * @param strValue     比較する値
	 */
	public void setWhereDate( String strFieldName, String strOperator, String strValue ) {
		String strCondition = strFieldName + strOperator + "'" + StringEscapeUtils.escapeSql(strValue) + "' ";
		setCondition( strCondition );
	}

	/**
	 * boolean型フィールドの検索条件を追加します
	 * @param strFieldName フィールド名
	 * @param strValue     比較する値
	 */
	public void setWhereBoolean( String strFieldName, boolean blnValue ) {
		String strCondition;
		if( blnValue ) {
			strCondition = strFieldName + SEARCH_EQUALS + "'1' ";
		} else {
			strCondition = strFieldName + " is null " + "or " + strFieldName + "<>" + "'1' ";
		}
		setCondition( strCondition );
	}

	/**
	 * 数値型フィールドの検索条件を追加します
	 * @param strFieldName フィールド名
	 * @param strOperator  演算子
	 * @param strValue     比較する値
	 */
	public void setWhereInt( String strFieldName, String strOperator, int intValue ) {
		String strCondition = strFieldName + strOperator + new Integer(intValue).toString() + " ";
		setCondition( strCondition );
	}
	
	/**
	 * フィールド名をソート条件に追加します
	 * @param strFieldName フィールド名
	 * @param blnDescFlag 降順フラグ
	 */
	public void setOrderBy( String strFieldName, boolean blnDescFlag ) {
		String strOrderField = strFieldName;
		if( blnDescFlag ) {
			strOrderField += " DESC ";
		}
		setOrderBy( strOrderField );
	}
	
	/**
	 * 結果リストを戻します。
	 * @return MethodData[] 結果リスト(MethodDataのリスト)
	 */
	public MethodData[] getResultList() {
		if( vecResults.size() == 0 ) {
			return null;
		}
		MethodData[] methodList = new MethodData[vecResults.size() - 1];
		for( int i = 0; i < methodList.length; i++ ) {
			methodList[i] = (MethodData)vecResults.get(i + 1);
		}
		return methodList;
	}

//	ADD 2005/05/16 START Koji Umehara [toeic650]
	/**
	 * 検索処理
	 * 
	 * @deprecated
	 * 
	 * @return Hashtable 結果リスト
	 * @exception Exception RMI接続に失敗した場合
	 */
	public Hashtable[] getCounselSchedule()
		throws Exception
	{
		// 結果インデックスを初期化します
		intResultIndex = 0;
		Vector vecResultTemp = (Vector)execute( METHOD_GETCOUNSELSCHEDULE, htParams );
		MessageData objMessage = (MessageData)vecResultTemp.get(0);
		mobjMessage = objMessage;

		if( isErr( objMessage ) || isWarning( objMessage ) ) {
			return null;
		}

		vecResults = vecResultTemp;

		if( vecResults.size() == 0 ) {
			return null;
		}
		Hashtable[] listHt = new Hashtable[vecResults.size() - 1];
		for( int i = 0; i < listHt.length; i++ ) {
			listHt[i] = (Hashtable)vecResults.get(i + 1);
		}
		return listHt;
	}

	/**
	 * 指定したメソッド配下のメソッド一覧を取得。
	 * @return boolean 正常時はtrue　エラー時はfalse
	 * @exception Exception RMI接続に失敗した場合
	 */
	public boolean getChildMethodList()
		throws Exception
	{
		// 結果インデックスを初期化します
		intResultIndex = 0;
		Vector vecResultTemp = (Vector)execute( METHOD_GETCHILDMETHODLIST, htParams );
		MessageData objMessage = (MessageData)vecResultTemp.get(0);
		mobjMessage = objMessage;

		if( isErr( objMessage ) || isWarning( objMessage ) ) {
			return false;
		}

		vecResults = vecResultTemp;
		return true;
	}
	
	/**
	 * パラメータにLOIDをセットします
	 * @param strLoID
	 */
	public void setLoID(String strLoID) {
		htParams.put( LO_ID, strLoID );
	}
	//	ADD 2005/05/16 END Koji Umehara [toeic650]

}
