/*
このファイルの中身は、NTT オープンソースライセンス　バージョン 1.0（「本
契約」という）の適用を受けます。
本契約を遵守しない限り、このファイルを使用してはなりません。
本契約のコピーは、次のＵＲＬから入手できます。
【配布サイトのURL】 http://www.oss.ecl.ntt.co.jp/lms/

本契約に基づき頒布されるソフトウェアは、現状のまま、明示又は黙示のあらゆ
る種類の保証なしで、頒布されます。本契約に基づく権利及び制限を律する特定
の文言については、本契約を参照してください。

「オリジナルコード」は、 NTT Cyber Space Laboratories Code です。 
「オリジナルコード」の「初期開発者」は、日本電信電話株式会社です。  
日本電信電話株式会社により創作された部分は、Copyright (C) 2004 
日本電信電話株式会社 です。
全ての権利が留保されます。 
「コントリビュータ」：_____________________________________ 


The contents of this file are subject to the NTT Opensource License
Version 1.0 (the License); you may not use this file except in
compliance with the License. You may obtain a copy of the License at
【配布サイトのURL】 http://www.oss.ecl.ntt.co.jp/lms/

Software distributed under the License is distributed on an AS IS
basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
License for the specific language governing rights and limitations
under the License.

The Original Code is NTT Cyber Space Laboratories Code .

The Initial Developer of the Original Code is NIPPON TELEGRAPH AND 
TELEPHONE CORPORATION.
Portions created by the NIPPON TELEGRAPH AND TELEPHONE CORPORATION 
are Copyright (C) 2004 NIPPON TELEGRAPH AND TELEPHONE CORPORATION. 
All Rights Reserved.

Contributor(s) ______________________________________.
*/

//
//	People 管理XMO クライアントクラス
//			変更履歴
//				2004.01.08	新規作成	　　　　　　二條智文
//
package jp.co.ntt.lms.xmo.People;

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

import org.apache.commons.lang.StringEscapeUtils;

import jp.co.ntt.lms.xmo.MessageData;
import jp.co.ntt.lms.xmo.XMOBasicClient;
import jp.co.ntt.lms.xmo.util.SqlEscape;
import jp.co.ntt.lms.xmo.Environment;

/**
 * People 管理XMO クライアントクラスです。<BR>
 * このクラスはPeople XMO サーバクラスとの接続および、
 * 登録、更新、削除、検索処理に必要なパラメータの設定、検索後の
 * 検索結果の取得メソッドを提供します。<BR>
 * <p>
 * <table border="1">
 * 	<tr>
 *   <td rowspan="16">登録</td>
 *   <td>PeopleClientインスタンスを生成する</td>
 *   <td>PeopleClient client = new PeopleClient()</td>
 *  </tr>
 * 	<tr>
 *   <td rowspan="13">登録するデータの各項目の値を設定する</td>
 *   <td>client.setParentID(String);</td>
 *  </tr>
 *  <tr>
 *    <td>client.setLoginID(String);</td>
 *  </tr>
 *  <tr>
 *    <td>client.setForeignID(String);</td>
 *  </tr>
 *  <tr>
 *    <td>client.setEncryptPassword(String);</td>
 *  </tr>
 *  <tr>
 *    <td>client.setUserName(String);</td>
 *  </tr>
 *  <tr>
 *    <td>client.setReadingName(String);</td>
 *  </tr>
 *  <tr>
 *    <td>client.setContactAddress(String);</td>
 *  </tr>
 *  <tr>
 *    <td>client.setSex(String);</td>
 *  </tr>
 *  <tr>
 *    <td>client.setContactEmail(String);</td>
 *  </tr>
 *  <tr>
 *    <td>client.setContactEmail2(String);</td>
 *  </tr>
 *  <tr>
 *    <td>client.setBirthday(String);</td>
 *  </tr>
 *  <tr>
 *    <td>client.setContactTel(String);</td>
 *  </tr>
 *  <tr>
 *    <td>client.setCustomMsgDir(String);</td>
 *  </tr>
 * 	<tr>
 *   <td>データ挿入（登録）を実行する</td>
 *   <td>boolean insertFlag = client.insert()</td>
 *  </tr>
 * 	<tr>
 *   <td>エラーとなった理由を取得する</td>
 *   <td>
 *     if (insertFlag == false ) {<br>
 *     &nbsp;&nbsp;&nbsp;&nbsp;String strMessage = client.getMessage();<br>
 *     }
 *   </td>
 *  </tr>
 * 	<tr>
 *   <td rowspan="5">削除</td>
 *   <td>PeopleClientインスタンスを生成する</td>
 *   <td>PeopleClient client = new PeopleClient()</td>
 *  </tr>
 * 	<tr>
 *   <td rowspan="2">削除対象の条件を設定する</td>
 *   <td>client.setDeleteUserID(String)</td>
 *  </tr>
 * 	<tr>
 *   <td>client.setDeleteParentID(String)</td>
 *  </tr>
 * 	<tr>
 *   <td>データ削除を実行する</td>
 *   <td>boolean deleteFlag = client.delete()</td>
 *  </tr>
 * 	<tr>
 *   <td>エラーとなった理由を取得する</td>
 *   <td>
 *     if (deleteFlag == false ) {<br>
 *     &nbsp;&nbsp;&nbsp;&nbsp;String strMessage = client.getMessage();<br>
 *     }
 *   </td>
 *  </tr>
 * </table>
 * </p>
 * @author T.Nijou
 * @version 0.0.0.1 2004.01.08
 */
public class PeopleClient extends XMOBasicClient
	implements PeopleTable
{

	private static final String CLASS_NAME = "jp.co.ntt.lms.xmo.People.People";

	/** 教材（ＬＯＩＤ）リストの取得メソッド名です */
	private static final String METHOD5 = "getLoidList";

	private Vector vecResult = null;

	/** ユーザー階層（パス）取得メソッド名です */
	private static final String METHOD6 = "searchReferenceList";

	/** 参照リストを保持します */
	private String[][] mstrReferenceList = null;

	/**
	 * コンストラクタです。<BR>
	 * 親クラスのコンストラクタを呼び出し、接続先サーバクラス名を
	 * 設定します。
	 */
	public PeopleClient() throws Exception {
		super( CLASS_NAME );
	}

	/**
	 * パラメータにユーザIDをセットします
	 */
	public void setUserID( String strUserID ) {
		putData( USER_ID, "PE" + strUserID );
	}

	/**
	 * 検索結果のインデックスを指定してユーザIDを取得します
	 */
	public String getUserID() {
		PeopleData objData = (PeopleData)getResult();
		return objData.getUserID();
	}

	/**
	 * 追加・更新するユーザのユーザ名称を設定します。<br>
	 * 引数で渡された文字列は、内部で文字コードを変換してからデータとして格納されます。
	 * 変換は、setEncodeメソッドを呼んだ場合は、指定した文字コードから、
	 * 呼んでいない場合は&quot;8859-1&quot;から&quot;Shift_JIS&quot;への変換になります。
	 * @param strUserName 追加・更新するユーザのユーザ名称。
	 * @see XMOBasicClient#setEncode(String)
	 */
	public void setUserName( String strUserName ) {
		putData( USER_NAME, strUserName );
	}

	/**
	 * 検索結果のインデックスを指定してユーザ名を取得します
	 */
	public String getUserName() {
		PeopleData objData = (PeopleData)getResult();
		return objData.getUserName();
	}

	/**
	 * 追加・更新するユーザのパスワードを設定します。<br>
	 * 引数で渡された文字列は、内部で文字コードを変換してからデータとして格納されます。
	 * 変換は、setEncodeメソッドを呼んだ場合は、指定した文字コードから、
	 * 呼んでいない場合は&quot;8859-1&quot;から&quot;Shift_JIS&quot;への変換になります。
	 * @param strEncryptPassword 追加・更新するユーザのパスワード。
	 * @see XMOBasicClient#setEncode(String)
	 */
	public void setEncryptPassword( String strEncryptPassword ) {
		putData( ENCRYPT_PASSWORD, strEncryptPassword );
	}

	/**
	 * 検索結果から現在のインデックスのパスワードを取得します
	 */
	public String getEncryptPassword() {
		PeopleData objData = (PeopleData)getResult();
		return objData.getEncryptPassword();
	}

	/**
	 * 追加・更新するユーザの住所を設定します。<br>
	 * 引数で渡された文字列は、内部で文字コードを変換してからデータとして格納されます。
	 * 変換は、setEncodeメソッドを呼んだ場合は、指定した文字コードから、
	 * 呼んでいない場合は&quot;8859-1&quot;から&quot;Shift_JIS&quot;への変換になります。
	 * @param strContactAddress 追加・更新するユーザの住所。
	 * @see XMOBasicClient#setEncode(String)
	 */
	public void setContactAddress( String strContactAddress ) {
		putData( CONTACT_ADDRESSS, strContactAddress );
	}

	/**
	 * 検索結果から現在のインデックスの住所を取得します
	 */
	public String getContactAddress() {
		PeopleData objData = (PeopleData)getResult();
		return objData.getContactAddress();
	}

	/**
	 * 追加・更新するユーザの性別を設定します。<br>
	 * 引数で渡された文字列は、内部で文字コードを変換してからデータとして格納されます。
	 * 変換は、setEncodeメソッドを呼んだ場合は、指定した文字コードから、
	 * 呼んでいない場合は&quot;8859-1&quot;から&quot;Shift_JIS&quot;への変換になります。
	 * @param strSex 追加・更新するユーザが男性の場合&quot;1&quot;を、
	 *                女性の場合&quot;2&quot;を渡します。
	 * @see XMOBasicClient#setEncode(String)
	 */
	public void setSex( String strSex ) {
		putData( SEX, strSex );
	}

	/**
	 * 検索結果から現在のインデックスの性別を取得します
	 */
	public String getSex() {
		PeopleData objData = (PeopleData)getResult();
		return objData.getSex();
	}

	/**
	 * 追加・更新するユーザのメールアドレスを設定します。<br>
	 * 引数で渡された文字列は、内部で文字コードを変換してからデータとして格納されます。
	 * 変換は、setEncodeメソッドを呼んだ場合は、指定した文字コードから、
	 * 呼んでいない場合は&quot;8859-1&quot;から&quot;Shift_JIS&quot;への変換になります。
	 * @param strContactEmail 追加・更新するユーザのメールアドレス。
	 * @see XMOBasicClient#setEncode(String)
	 */
	public void setContactEmail( String strContactEmail ) {
		putData( CONTACT_EMAIL, strContactEmail );
	}

	/**
	 * 検索結果から現在のインデックスのメールアドレス1を取得します
	 */
	public String getContactEmail() {
		PeopleData objData = (PeopleData)getResult();
		return objData.getContactEmail();
	}

	/**
	 * 追加・更新するユーザのメールアドレス（予備）を設定します。<br>
	 * 引数で渡された文字列は、内部で文字コードを変換してからデータとして格納されます。
	 * 変換は、setEncodeメソッドを呼んだ場合は、指定した文字コードから、
	 * 呼んでいない場合は&quot;8859-1&quot;から&quot;Shift_JIS&quot;への変換になります。
	 * @param strContactEmail2 追加・更新するユーザのメールアドレス（予備）。
	 * @see XMOBasicClient#setEncode(String)
	 */
	public void setContactEmail2( String strContactEmail2 ) {
		putData( CONTACT_EMAIL2, strContactEmail2 );
	}

	/**
	 * 検索結果から現在のインデックスのメールアドレス2を取得します
	 */
	public String getContactEmail2() {
		PeopleData objData = (PeopleData)getResult();
		return objData.getContactEmail2();
	}

	/**
	 * 追加・更新するユーザのユーザ名称（読みカナ）を設定します。<br>
	 * 引数で渡された文字列は、内部で文字コードを変換してからデータとして格納されます。
	 * 変換は、setEncodeメソッドを呼んだ場合は、指定した文字コードから、
	 * 呼んでいない場合は&quot;8859-1&quot;から&quot;Shift_JIS&quot;への変換になります。
	 * @param strReadingName 追加・更新するユーザのユーザ名称（読みカナ）。
	 * @see XMOBasicClient#setEncode(String)
	 */
	public void setReadingName( String strReadingName ) {
		putData( READING_NAME, strReadingName );
	}

	/**
	 * 検索結果から現在のインデックスのカナを取得します
	 */
	public String getReadingName() {
		PeopleData objData = (PeopleData)getResult();
		return objData.getReadingName();
	}

	/**
	 * 追加・更新するユーザの誕生日を設定します。<br>
	 * 引数で渡された文字列は、内部で文字コードを変換してからデータとして格納されます。
	 * 変換は、setEncodeメソッドを呼んだ場合は、指定した文字コードから、
	 * 呼んでいない場合は&quot;8859-1&quot;から&quot;Shift_JIS&quot;への変換になります。
	 * @param strBirthday 追加・更新するユーザの誕生日（YYYY/MM/DD形式）。
	 * @see XMOBasicClient#setEncode(String)
	 */
	public void setBirthday( String strBirthday ) {
		putData( BIRTHDAY, strBirthday );
	}

	/**
	 * 検索結果から現在のインデックスの誕生日を取得します
	 */
	public String getBirthday() {
		PeopleData objData = (PeopleData)getResult();
		return objData.getBirthday();
	}

	/**
	 * 追加・更新するユーザの電話番号を設定します。<br>
	 * 引数で渡された文字列は、内部で文字コードを変換してからデータとして格納されます。
	 * 変換は、setEncodeメソッドを呼んだ場合は、指定した文字コードから、
	 * 呼んでいない場合は&quot;8859-1&quot;から&quot;Shift_JIS&quot;への変換になります。
	 * @param strContactTel 追加・更新するユーザの電話番号。
	 * @see XMOBasicClient#setEncode(String)
	 */
	public void setContactTel( String strContactTel ) {
		putData( CONTACT_TEL, strContactTel );
	}

	/**
	 * 検索結果から現在のインデックスの電話番号を取得します
	 */
	public String getContactTel() {
		PeopleData objData = (PeopleData)getResult();
		return objData.getContactTel();
	}

	/**
	 * 追加・更新するユーザのコメントを設定します。<br>
	 * 引数で渡された文字列は、内部で文字コードを変換してからデータとして格納されます。
	 * 変換は、setEncodeメソッドを呼んだ場合は、指定した文字コードから、
	 * 呼んでいない場合は&quot;8859-1&quot;から&quot;Shift_JIS&quot;への変換になります。
	 * @param strCustomMsgDir 追加・更新するユーザのコメント。
	 * @see XMOBasicClient#setEncode(String)
	 */
	public void setCustomMsgDir( String strCustomMsgDir ) {
		putData( CUSTOM_MSG_DIR, strCustomMsgDir );
	}

	/**
	 * 検索結果から現在のインデックスのコメントを取得します
	 */
	public String getCustomMsgDir() {
		PeopleData objData = (PeopleData)getResult();
		return objData.getCustomMsgDir();
	}

	/**
	 * 追加・更新するユーザの削除フラグを設定します。<br>
	 * 通常、有効データに対して処理しますので、削除フラグ無効を表す&quot;0&quot;である指定をします。
	 * 引数で渡された文字列は、内部で文字コードを変換してからデータとして格納されます。
	 * 変換は、setEncodeメソッドを呼んだ場合は、指定した文字コードから、
	 * 呼んでいない場合は&quot;8859-1&quot;から&quot;Shift_JIS&quot;への変換になります。
	 * @param strDeleteFlag 追加・更新するユーザの削除フラグ。
	 * @see XMOBasicClient#setEncode(String)
	 */
	public void setDeleteFlag( String strDeleteFlag ) {
		putData( DELETE_FLAG, strDeleteFlag );
	}

	/**
	 * 検索結果から現在のインデックスの削除フラグを取得します
	 */
	public String getDeleteFlag() {
		PeopleData objData = (PeopleData)getResult();
		return objData.getDeleteFlag();
	}

	/**
	 * 追加・更新するユーザの外部IDを設定します。<br>
	 * 引数で渡された文字列は、内部で文字コードを変換してからデータとして格納されます。
	 * 変換は、setEncodeメソッドを呼んだ場合は、指定した文字コードから、
	 * 呼んでいない場合は&quot;8859-1&quot;から&quot;Shift_JIS&quot;への変換になります。
	 * @param strForeignID 追加・更新するユーザの外部ID。
	 * @see XMOBasicClient#setEncode(String)
	 */
	public void setForeignID( String strForeignID ) {
		putData( FOREIGN_ID, strForeignID );
	}

	/**
	 * 検索結果の現在のインデックスの外部キーを取得します
	 */
	public String getForeignID() {
		PeopleData objData = (PeopleData)getResult();
		return objData.getForeignID();
	}

	/**
	 * 追加・更新するユーザのログインIDを設定します。<br>
	 * 引数で渡された文字列は、内部で文字コードを変換してからデータとして格納されます。
	 * 変換は、setEncodeメソッドを呼んだ場合は、指定した文字コードから、
	 * 呼んでいない場合は&quot;8859-1&quot;から&quot;Shift_JIS&quot;への変換になります。
	 * @param strLoginID 追加・更新するユーザのログインID。
	 * @see XMOBasicClient#setEncode(String)
	 */
	public void setLoginID( String strLoginID ) {
		putData( LOGIN_ID, strLoginID );
	}

	/**
	 * 検索結果の現在のインデックスのログインIDを取得します
	 */
	public String getLoginID() {
		PeopleData objData = (PeopleData)getResult();
		return objData.getLoginID();
	}

	/**
	 * 追加・更新するユーザの親グループIDを設定します。<br>
	 * 引数で渡された文字列は、内部で文字コードを変換してからデータとして格納されます。
	 * 変換は、setEncodeメソッドを呼んだ場合は、指定した文字コードから、
	 * 呼んでいない場合は&quot;8859-1&quot;から&quot;Shift_JIS&quot;への変換になります。
	 * @param strParentID 追加・更新するユーザの親グループID。
	 * @see XMOBasicClient#setEncode(String)
	 */
	public void setParentID( String strParentID ) {
		putData( PARENT_ID, strParentID );
	}

	/**
	 * パラメータにＡＤユーザＩＤをセットします
	 */
	public void setAdUserId( String strAdUserId ) {
		putData( AD_USER_ID, strAdUserId );
	}

	/**
	 * 検索結果から現在のインデックスのＡＤユーザＩＤを取得します
	 */
	public String getAdUserId() {
		PeopleData objData = (PeopleData)getResult();
		return objData.getAdUserId();
	}

	/**
	 * パラメータにＡＤ識別名をセットします
	 */
	public void setAdDn( String strAdDn ) {
		putData( AD_DN, strAdDn );
	}

	/**
	 * 検索結果から現在のインデックスのＡＤ識別名を取得します
	 */
	public String getAdDn() {
		PeopleData objData = (PeopleData)getResult();
		return objData.getAdDn();
	}
	/**
	 * 追加・更新するユーザのユーザタイプを設定します。<br>
	 * 通常、固定値&quot;1&quot;である指定をします。
	 * 引数で渡された文字列は、内部で文字コードを変換してからデータとして格納されます。
	 * 変換は、setEncodeメソッドを呼んだ場合は、指定した文字コードから、
	 * 呼んでいない場合は&quot;8859-1&quot;から&quot;Shift_JIS&quot;への変換になります。
	 * @param strUserType 追加・更新するユーザのユーザタイプ。
	 * @see XMOBasicClient#setEncode(String)
	 */
	public void setUserType( String strUserType ) {
		putData( USER_TYPE, strUserType );
	}

	/**
	 * 検索結果から現在のインデックスのユーザタイプを取得します
	 */
	public String getUserType() {
		PeopleData objData = (PeopleData)getResult();
		return objData.getUserType();
	}

	/**
	 * パラメータにオブジェクトIDをセットします
	 */
	public void setOid( String strOid ) {
		putData( OID, strOid );
	}

	/**
	 * 検索結果から現在のインデックスのオブジェクトIDを取得します
	 */
	public String getOid() {
		PeopleData objData = (PeopleData)getResult();
		return objData.getOid();
	}

	/**
	 * ユーザIDを検索条件に付与します
	 * デフォルトで"="条件をつけます
	 * @param strUserID	ユーザID
	 */
	public void setWhereUserID( String strUserID ) {
		String strCondition = USER_ID + SEARCH_EQUALS + "'" + StringEscapeUtils.escapeSql(strUserID) + "' ";
		setCondition( strCondition );
	}

	/**
	 * ユーザIDを検索条件に付与します
	 * @param strUserID	ユーザID
	 * @param strSearchCondition 検索条件
	 */
	public void setWhereUserID( String strUserID, String strSearchCondition ) {
		String strCondition = USER_ID + strSearchCondition + "'" + StringEscapeUtils.escapeSql(strUserID) + "' ";
		setCondition( strCondition );
	}

	/**
	 * ユーザNameを検索条件に付与します
	 * デフォルトで"="条件をつけます
	 * @param strUserName	ユーザName
	 */
	public void setWhereUserName( String strUserName ) {
		String strCondition = USER_NAME + SEARCH_EQUALS + "'" + SqlEscape.escape(strUserName) + "' ";
		setCondition( strCondition );
	}

	/**
	 * ユーザNameを検索条件に付与します
	 * @param strUserName	ユーザName
	 * @param strSearchCondition 検索条件
	 */
	public void setWhereUserName( String strUserName, String strSearchCondition ) {
		String strCondition = USER_NAME + strSearchCondition + "'" + SqlEscape.escape(strUserName) + "' ";
		setCondition( strCondition );
	}

	/**
	 * ログインIDを検索条件に付与します
	 * デフォルトで"="条件をつけます
	 * @param strLoginID ログインID
	 */
	public void setWhereLoginID( String strLoginID ) {
		String strCondition = LOGIN_ID + SEARCH_EQUALS + "'" + SqlEscape.escape(strLoginID) + "' ";
		setCondition( strCondition );
	}

	/**
	 * ログインIDを検索条件に付与します
	 * @param strLoginID	ログインID
	 * @param strSearchCondition 検索条件
	 */
	public void setWhereLoginID( String strLoginID, String strSearchCondition ) {
		String strCondition = LOGIN_ID + strSearchCondition + "'" + SqlEscape.escape(strLoginID) + "' ";
		setCondition( strCondition );
	}

	/**
	 * 外部IDを検索条件に付与します
	 * デフォルトで"="条件をつけます
	 * @param strForeignID	外部ID
	 */
	public void setWhereForeignID( String strForeignID ) {
		String strCondition = FOREIGN_ID + SEARCH_EQUALS + "'" + SqlEscape.escape(strForeignID) + "' ";
		setCondition( strCondition );
	}

	/**
	 * 外部IDを検索条件に付与します
	 * @param strForeignID	外部ID
	 * @param strSearchCondition 検索条件
	 */
	public void setWhereForeignID( String strForeignID, String strSearchCondition ) {
		String strCondition = FOREIGN_ID + strSearchCondition + "'" + SqlEscape.escape(strForeignID) + "' ";
		setCondition( strCondition );
	}

	/**
	 * ＡＤユーザＩＤを検索条件に付与します
	 * デフォルトで"="条件をつけます
	 * @param strAdUserId	ＡＤユーザＩＤ
	 */
	public void setWhereAdUserId( String strAdUserId ) {
		String strCondition = AD_USER_ID + SEARCH_EQUALS + "'" + SqlEscape.escape(strAdUserId) + "' ";
		setCondition( strCondition );
	}

	/**
	 * ＡＤユーザＩＤを検索条件に付与します
	 * @param strAdUserId	ＡＤユーザＩＤ
	 * @param strSearchCondition 検索条件
	 */
	public void setWhereAdUserId( String strAdUserId, String strSearchCondition ) {
		String strCondition = AD_USER_ID + strSearchCondition + "'" + SqlEscape.escape(strAdUserId) + "' ";
		setCondition( strCondition );
	}

	/**
	 * ＡＤ識別名を検索条件に付与します
	 * デフォルトで"="条件をつけます
	 * @param strAdDn	ＡＤ識別名
	 */
	public void setWhereAdDn( String strAdDn ) {
		String strCondition = AD_DN + SEARCH_EQUALS + "'" + SqlEscape.escape(strAdDn) + "' ";
		setCondition( strCondition );
	}

	/**
	 * ＡＤ識別名を検索条件に付与します
	 * @param strAdDn	ＡＤ識別名
	 * @param strSearchCondition 検索条件
	 */
	public void setWhereAdDn( String strAdDn, String strSearchCondition ) {
		String strCondition = AD_DN + strSearchCondition + "'" + SqlEscape.escape(strAdDn) + "' ";
		setCondition( strCondition );
	}
	/**
	 * ユーザタイプを検索条件に付与します
	 * デフォルトで"="条件をつけます
	 * @param strUserType	ユーザタイプ
	 */
	public void setWhereUserType( String strUserType ) {
		String strCondition = USER_TYPE + SEARCH_EQUALS + "'" + SqlEscape.escape(strUserType) + "' ";
		setCondition( strCondition );
	}

	/**
	 * ユーザタイプを検索条件に付与します
	 * @param strUserType	ユーザタイプ
	 * @param strSearchCondition 検索条件
	 */
	public void setWhereUserType( String strUserType, String strSearchCondition ) {
		String strCondition = USER_TYPE + strSearchCondition + "'" + SqlEscape.escape(strUserType) + "' ";
		setCondition( strCondition );
	}

	/**
	 * オブジェクトIDを検索条件に付与します
	 * デフォルトで"="条件をつけます
	 * @param strOid	オブジェクトID
	 */
	public void setWhereOid( String strOid ) {
		
		try {
			Environment objEnv = new Environment();
			
			String strCondition = OID + SEARCH_EQUALS + "'" + SqlEscape.escape(strOid) + "' ";
			//PostgreSQLの場合
			if (objEnv.getDBType().equals( objEnv.DB_POSTGRE )){
				strCondition = "\"" + OID.toUpperCase() + "\"" + SEARCH_EQUALS + "'" + SqlEscape.escape(strOid) + "' ";
			}
			setCondition( strCondition );
		}catch(Exception ex){
			ex.printStackTrace();
		}
	}

	/**
	 * オブジェクトIDを検索条件に付与します
	 * @param strOid	オブジェクトID
	 * @param strSearchCondition 検索条件
	 */
	public void setWhereOid( String strOid, String strSearchCondition ) {
		
		try {
			Environment objEnv = new Environment();
			
			String strCondition = OID + strSearchCondition + "'" + SqlEscape.escape(strOid) + "' ";
			//PostgreSQLの場合
			if (objEnv.getDBType().equals( objEnv.DB_POSTGRE )){
				strCondition = "\"" + OID.toUpperCase() + "\"" + strSearchCondition + "'" + SqlEscape.escape(strOid) + "' ";
			}
			setCondition( strCondition );
		}catch(Exception ex){
			ex.printStackTrace();
		}
	}

	/**
	 * ユーザＩＤからＬＯＩＤリストを取得します
	 * @param strUserId		ユーザＩＤ
	 */
	public Vector getLoidList( String strUserId ) {

		try {
			Hashtable htParam = new Hashtable();
			htParam.put( METHOD5, strUserId );
			vecResult = (Vector)execute( METHOD5, htParam );
		}
		catch( Exception e ) {
			return new Vector();
		}

		return vecResult;

	}

	/**
	 * 削除対象ユーザのユーザIDを設定します。<BR>
	 * ユーザの削除を実行するdeleteメソッドを呼び出すと、
	 * このメソッドで指定したユーザID、setDeleteParentIDメソッドで指定した親グループIDを
	 * 条件にしてユーザの削除を実施します。
	 * 
	 * @param strID 削除対象ユーザのユーザID。
	 * @see #setDeleteParentID(String)
	 * @see XMOBasicClient#delete()
	 */
	public void setDeleteUserID( String strID ) {
		putData( DELETE_USERID, strID );
	}

	/**
	 * 削除対象ユーザのユーザの親グループのIDを設定します。<BR>
	 * ユーザの削除を実行するdeleteメソッドを呼び出すと、
	 * このメソッドで指定した親グループID、setDeleteUserIDメソッドで指定したユーザIDを
	 * 条件にしてユーザの削除を実施します。
	 * 
	 * @param strID 削除対象ユーザの親グループID。
	 * @see #setDeleteUserID(String)
	 * @see XMOBasicClient#delete()
	 */
	public void setDeleteParentID( String strID ) {
		putData( DELETE_PARENTID, strID );
	}

	/**
	 * 検索画面用の検索条件を設定します。
	 * @param strKey	検索キーワード
	 * @param strTopCnt 取得TOP件数
	 * @param strLimitUid 境界ユーザID
	 */
	public void setWhereSearchCondition( String strKey ) {

		String strKeyCondition = "(";
		
		try {
			//XMS.iniファイルロードクラスのインスタンス
			Environment objEnv = new Environment();

			//PostgreSQLの場合
			if (objEnv.getDBType().equals( objEnv.DB_POSTGRE )){
				strKeyCondition = strKeyCondition + USER_NAME + SEARCH_LIKE + "'%" + SqlEscape.escapeSearch(strKey) + "%' ESCAPE('\\\\') OR " +
				FOREIGN_ID + SEARCH_LIKE + "'%" + SqlEscape.escapeSearch(strKey) + "%' ESCAPE('\\\\') OR " +
				CONTACT_EMAIL + SEARCH_LIKE + "'%" + SqlEscape.escapeSearch(strKey) + "%' ESCAPE('\\\\') OR " +
				CONTACT_EMAIL2 + SEARCH_LIKE + "'%" + SqlEscape.escapeSearch(strKey) + "%' ESCAPE('\\\\') OR " +
				CUSTOM_MSG_DIR + SEARCH_LIKE + "'%" + SqlEscape.escapeSearch(strKey) + "%' ESCAPE('\\\\') )";
			//SQLServerの場合 OR Oracleの場合
			} else if (objEnv.getDBType().equals( objEnv.DB_SQLSERVER ) || objEnv.getDBType().equals( objEnv.DB_ORACLE )){
				strKeyCondition = strKeyCondition + USER_NAME + SEARCH_LIKE + "'%" + SqlEscape.escapeSearch(strKey) + "%' ESCAPE('\\') OR " +
				FOREIGN_ID + SEARCH_LIKE + "'%" + SqlEscape.escapeSearch(strKey) + "%' ESCAPE('\\') OR " +
				CONTACT_EMAIL + SEARCH_LIKE + "'%" + SqlEscape.escapeSearch(strKey) + "%' ESCAPE('\\') OR " +
				CONTACT_EMAIL2 + SEARCH_LIKE + "'%" + SqlEscape.escapeSearch(strKey) + "%' ESCAPE('\\') OR " +
				CUSTOM_MSG_DIR + SEARCH_LIKE + "'%" + SqlEscape.escapeSearch(strKey) + "%' ESCAPE('\\') )";
			}
		}catch(Exception ex){
			ex.printStackTrace();
		}

		String strGidCondition = " ORDER BY " + READING_NAME;

		setCondition( strKeyCondition+strGidCondition );
	}

	/**
	 * ユーザIDからユーザ参照リストを検索します。
	 * @param strUserId		ユーザID
	 * @param strUserName	ユーザ名
	 * @param strLoginUserID ログインユーザID
	 * @return boolean true: 検索成功 false: 検索失敗
	 */
	public boolean searchReferenceList( String strUserId, String strUserName, String strLoginUserID )
		throws Exception
	{
		Hashtable htParam = new Hashtable();

		htParam.put( USER_ID, strUserId );
		htParam.put( USER_NAME, strUserName );
		htParam.put( LOGIN_USER_ID, strLoginUserID );
		vecResult = (Vector)execute( METHOD6, htParam );

		// メッセージデータを取得します
		mobjMessage = (MessageData)vecResult.get(0);
		if( isErr( mobjMessage ) || isWarning( mobjMessage ) ) {
			return false;
		}

		mstrReferenceList = (String[][])vecResult.get(1);

		return true;
	}

	/**
	 * ユーザ参照リストを取得します。
	 * 参照検索メソッド(searchReferenceList)を実行していない場合、または
	 * 参照検索メソッド処理が失敗した場合はnullを返します。
	 * @return String[][] ユーザ参照リスト String[0][n] にIDパス String[1][n]に名前パスを格納
	 */
	public String[][] getReferenceList() {
		return mstrReferenceList;
	}

}

