/*
このファイルの中身は、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) ______________________________________.
*/

//
//	LampPeopleクラス
//			変更履歴
//				2004.01.08	新規作成	五木田 泰史
//
package jp.co.ntt.lms.xmo.LumpInsert;

import jp.co.ntt.lms.xmo.People.PeopleClient;
import jp.co.ntt.lms.xmo.People.PeopleTable;
import jp.co.ntt.lms.xmo.People.PeopleMessage;
import jp.co.ntt.lms.xmo.GroupAndPeople.GroupAndPeopleClient;
import jp.co.ntt.lms.xmo.XMOException;
import jp.co.ntt.lms.xmo.DataAccess;
import jp.co.ntt.lms.xmo.XMOPropertyDef;
import jp.co.ntt.lms.xmo.util.DebugLog;
import jp.co.ntt.lms.xmo.util.XMOString;

import java.util.Vector;

/**
 * LumpPeopleクラスです。<BR>
 * このクラスはXMLファイルから取得した<BR>
 * パーソナルデータをメンバに設定します。<BR>
 * 親クラスに親子関係を所有している<BR>
 * LumpGroupAndPeopleクラスを継承します。
 *
 * @author Y.Gokita
 * @version 0.0.0.1 2004/01/08
 */
public class LumpPeople extends LumpGroupAndPeople
	implements LumpInsertMessage
{

	/** ユーザIDを保持します */
	private String mstrUserID          = null;

	/** ユーザ名を保持します */
	private String mstrUserName        = null;

	/** パスワードを保持します */
	private String mstrEncryptPassword = null;

	/** 住所を保持します */
	private String mstrContactAddress  = null;

	/** 性別を保持します */
	private String mstrSex             = null;

	/** メールアドレス1を保持します */
	private String mstrContactEmail    = null;

	/** メールアドレス2を保持します */
	private String mstrContactEmail2   = null;

	/** カナを保持します */
	private String mstrReadingName     = null;

	/** 誕生日を保持します */
	private String mstrBirthday        = null;

	/** コメントを保持します */
	private String mstrCustomMsgDir    = null;

	/** 隠しフラグを保持します */
	private String mstrDeleteFlag      = null;

	/** 電話番号を保持します */
	private String mstrContactTel      = null;

	/** 外部キーを保持します */
	private String mstrForeignID       = null;

	/** ログインIDを保持します */
	private String mstrLoginID         = null;

	/** ADユーザIDを保持します。 */
	private String mstrADUserID        = null;

	/** オブジェクトIDを保持します */
	private String mstrOid             = null;

	/** DNを保持します */
	private String mstrADDN            = null;

	/** ユーザ種別を保持します */
	private String mstrUserType        = null;

	/** ユーザ名更新フラグ */
	boolean mblUserNameUpFlag = true;
	/** パスワード更新フラグ */
	boolean mblPasswordUpFlag = true;
	/** 外部ID更新フラグ */
	boolean mblForeignIDUpFlag = true;
	/** ログインID更新フラグ */
	boolean mblLoginIDUpFlag = true;

	/** ユーザクライアントを保持します。 */
	private PeopleClient mobjPc = null;

	/** 外部ID重複番号を保持します */
	private int mintForeignIDCount = 1;

	/** ログインID重複番号を保持します */
	private int mintLoginIDCount = 1;

	/** メール送信フラグ */
	boolean mblMailFlag = false;

	/**
	 * ユーザIDを設定します
	 * @param String ユーザID
	 */
	public void setUserID(String strUserID)
	{
		mstrUserID = strUserID;
	}

	/**
	 * ユーザIDを取得します
	 * @return String ユーザID
	 */
	public String getUserID()
	{
		return mstrUserID;
	}

	/**
	 * ユーザ名を設定します
	 * @param String ユーザ名
	 */
	public void setUserName(String strUserName)
	{
		mstrUserName = strUserName;
	}

	/**
	 * ユーザ名を取得します
	 * @return String ユーザ名
	 */
	public String getUserName()
	{
		return mstrUserName;
	}

	/**
	 * パスワードを設定します
	 * @param String パスワード
	 */
	public void setEncryptPassword(String strEncryptPassword)
	{
		mstrEncryptPassword = strEncryptPassword;
	}

	/**
	 * パスワードを取得します
	 * @return String パスワード
	 */
	public String getEncryptPassword()
	{
		return mstrEncryptPassword;
	}

	/**
	 * 住所を設定します
	 * @param String 住所
	 */
	public void setContactAddress(String strContactAddress)
	{
		mstrContactAddress = strContactAddress;
	}

	/**
	 * 住所を取得します
	 * @return String 住所
	 */
	public String getContactAddress()
	{
		return mstrContactAddress;
	}

	/**
	 * 性別を設定します
	 * @param String 性別
	 */
	public void setSex(String strSex)
	{
		mstrSex = strSex;
	}

	/**
	 * 性別を取得します
	 * @return String 性別
	 */
	public String getSex()
	{
		return mstrSex;
	}

	/**
	 * メールアドレス1を設定します
	 * @param String メールアドレス1
	 */
	public void setContactEmail(String strContactEmail)
	{
		mstrContactEmail = strContactEmail;
	}

	/**
	 * メールアドレス1を取得します
	 * @return String メールアドレス1
	 */
	public String getContactEmail()
	{
		return mstrContactEmail;
	}

	/**
	 * メールアドレス2を設定します
	 * @param String メールアドレス2
	 */
	public void setContactEmail2(String strContactEmail2)
	{
		mstrContactEmail2 = strContactEmail2;
	}

	/**
	 * メールアドレス2を取得します
	 * @return String メールアドレス2
	 */
	public String getContactEmail2()
	{
		return mstrContactEmail2;
	}

	/**
	 * カナを設定します
	 * @param String カナ
	 */
	public void setReadingName(String strReadingName)
	{
		mstrReadingName = strReadingName;
	}

	/**
	 * カナを取得します
	 * @return String カナ
	 */
	public String getReadingName()
	{
		return mstrReadingName;
	}

	/**
	 * 誕生日を設定します
	 * @param String 誕生日
	 */
	public void setBirthday(String strBirthday)
	{
		mstrBirthday = strBirthday;
	}

	/**
	 * 誕生日を取得します
	 * @return String 誕生日
	 */
	public String getBirthday()
	{
		return mstrBirthday;
	}

	/**
	 * 電話番号を設定します
	 * @param String 電話番号
	 */
	public void setContactTel(String strContactTel)
	{
		mstrContactTel = strContactTel;
	}

	/**
	 * 電話番号を取得します
	 * @return String 電話番号
	 */
	public String getContactTel()
	{
		return mstrContactTel;
	}

	/**
	 * コメントを設定します
	 * @param String コメント
	 */
	public void setCustomMsgDir(String strCustomMsgDir)
	{
		mstrCustomMsgDir = strCustomMsgDir;
	}

	/**
	 * コメントを取得します
	 * @return String コメント
	 */
	public String getCustomMsgDir()
	{
		return mstrCustomMsgDir;
	}

	/**
	 * 隠しフラグを設定します
	 * @param astrDeleteFlag 隠しフラグ
	 */
	public void setDeleteFlag(String strDeleteFlag)
	{
		mstrDeleteFlag = strDeleteFlag;
	}

	/**
	 * 隠しフラグを取得します
	 * @return String 隠しフラグ
	 */
	public String getDeleteFlag()
	{
		return mstrDeleteFlag;
	}

	/**
	 * 外部キーを設定します
	 * @param String 外部キー
	 */
	public void setForeignID(String strForeignID )
	{
		mstrForeignID = strForeignID;
	}

	/**
	 * 外部キーを取得します
	 * @return String 外部キー
	 */
	public String getForeignID()
	{
		return mstrForeignID;
	}

	/**
	 * ログインIDを設定します
	 * @param astrLoginID ログインID
	 */
	public void setLoginID(String strLoginID )
	{
		mstrLoginID = strLoginID;
	}

	/**
	 * ログインIDを取得します
	 * @return String ログインID
	 */
	public String getLoginID()
	{
		return mstrLoginID;
	}

	/**
	 * ADユーザIDを設定します
	 * @param astrADUserID ADユーザID
	 */
	public void setADUserID(String astrADUserID ) {
		mstrADUserID = astrADUserID;
	}

	/**
	 * ADユーザIDを取得します
	 * @return String ADユーザID
	 */
	public String getADUserID() {
		return mstrADUserID;
	}

	/**
	 * オブジェクトIDを設定します。
	 * @param astrOid オブジェクトID
	 */
	public void setOid( String astrOid ) {
		mstrOid = astrOid;
	}

	/**
	 * オブジェクトIDを取得します。
	 * oid が未設定の場合は外部IDと同値とします。
	 * @return String オブジェクトID
	 */
	public String getOid() {
		if( mstrOid == null ) {
			return mstrForeignID;
		}
		else {
			return mstrOid;
		}
	}

	/**
	 * DNを設定します。
	 * @param astrADDN DN
	 */
	public void setADDN( String astrADDN ) {
		mstrADDN = astrADDN;
	}

	/**
	 * DNを取得します。
	 * @return String DN
	 */
	public String getADDN( String astrADDN ) {
		return mstrADDN;
	}

	/**
	 * ユーザ種別を設定します。
	 * @param astrUserType ユーザ種別
	 */
	public void setUserType( String astrUserType ) {
		mstrUserType = astrUserType;
	}

	/**
	 * ユーザ種別を取得します。
	 * @return String ユーザ種別
	 */
	public String getUserType() {
		return mstrUserType;
	}

	/**
	 * LumpPeopleを追加します
	 * インタフェースはLumpGroupAndPeopleにあります
	 * @param DataAccess データアクセスクラス
	 * @param Vector 一括登録ユーザリスト
	 * @param String 開始グループ
	 * @param String メール送信フラグ
	 * @return void
	 */
	public void insert(DataAccess objDa, Vector vctUserList,
						String strStartGroup)
		throws XMOException
	{
		// @LOG >info >5 一括登録：ユーザの登録を開始します。 >info >5
		DebugLog.write( this.getClass(), "一括登録：ユーザの登録を開始します。" + mstrUserName, DebugLog.MID );

		try
		{

			// 親グループ取得
			LumpGroup objGroup = (LumpGroup)super.getParent();
			if(objGroup == null)
			{
				//登録失敗ログ出力
				// @LOG >err >1
				String strLog = "一括登録結果:" + mstrUserID + mstrUserName + "ＤＢ登録失敗";
				DebugLog.write(this.getClass(), strLog, DebugLog.HIGHT);
				boolFailFlag = true;
				return;
			}

			// 親のグループID取得
			String strParentID = objGroup.getGroupID();

			// キー項目であるオブジェクトID、外部IDの設定確認
			if(!LumpUtil.checkExistKey(mstrOid,mstrForeignID))
			{
				// @LOG >err >1
				DebugLog.write(
				this.getClass(),
				"入力内容が不正のため登録しません UserName : " +
				mstrUserName, DebugLog.HIGHT);
				boolFailFlag = true;
				return;
			}

			// オブジェクトID未設定時は外部IDと同値とする。
			if( mstrOid == null || mstrOid.equals("") ) {
				mstrOid = mstrForeignID;
			}

			// DB登録用クライアント生成
			mobjPc = new PeopleClient();
			mobjPc.setEncode("Windows-31J");						// エンコード設定
			// オブジェクトIDとグループ種別で存在チェック
			mobjPc.setWhereUserType(mstrUserType);
			mobjPc.setWhereOid(mstrOid);
			// トランザクションの共有
			mobjPc.setConnectionIndex( objDa.getConnectionIndex() );

			if(!mobjPc.select())
			{
				//登録失敗ログ出力
				// @LOG >err >1
				String strLog = "一括登録結果:" + mstrUserID + mstrUserName + "ＤＢ登録失敗";
				DebugLog.write(this.getClass(), strLog, DebugLog.HIGHT);
				boolFailFlag = true;
				return;
			}

			if(mobjPc.next())
			{
				// 自身のIDを設定
				mstrUserID = mobjPc.getUserID();

				// 設定内容をクリアする。
				mobjPc.clear();
	
				// 更新用のパラメータチェックを実施する
				if(!checkUpdParameter())
				{
					// @LOG >err >1
					DebugLog.write(
					this.getClass(),
					"入力内容が不正のため登録しません UserName : " +
					mstrUserName, DebugLog.HIGHT);
					boolFailFlag = true;
					return;
				}

				// DB登録設定
				// 外部IDの設定（更新フラグがonのときのみ更新をする)
				if( mblForeignIDUpFlag ) {
					mobjPc.setForeignID(mstrForeignID);
				}
				// ログインIDの設定(更新フラグがonのときのみ更新する)
				if( mblLoginIDUpFlag ) {
					mobjPc.setLoginID(mstrLoginID);
				}
				// ユーザ名の設定(更新フラグがonのときのみ更新する)
				if( mblUserNameUpFlag ) {
					mobjPc.setUserName(mstrUserName);
				}
				// パスワードの設定(更新フラグがonのときのみ更新する)
				if( mblPasswordUpFlag ) {
					mobjPc.setEncryptPassword(mstrEncryptPassword);
				}
				// 住所(設定されているときのみ更新)
				if( mstrContactAddress != null ) {
					mobjPc.setContactAddress(mstrContactAddress);
				}
				// 性別(設定されているときのみ更新)
				if( mstrSex != null ) {
					mobjPc.setSex(mstrSex);
				}
				// Eメール(設定されているときのみ更新)
				if( mstrContactEmail != null ) {
					mobjPc.setContactEmail(mstrContactEmail);
				}
				// Eメール２(設定されているときのみ更新)
				if( mstrContactEmail2 != null ) {
					mobjPc.setContactEmail2(mstrContactEmail2);
				}
				// 読みかた(設定されているときのみ更新)
				if( mstrReadingName != null ) {
					mobjPc.setReadingName(mstrReadingName);
				}
				// 電話番号(設定されているときのみ更新)
				if( mstrContactTel != null ) {
					mobjPc.setContactTel(mstrContactTel);
				}
				// 誕生日(設定されているときのみ更新)
				if( mstrBirthday != null ) {
					mobjPc.setBirthday(mstrBirthday);
				}
				// コメント(設定されているときのみ更新)
				if( mstrCustomMsgDir != null ) {
					mobjPc.setCustomMsgDir(mstrCustomMsgDir);
				}
				// AD_DN(設定されているときのみ更新)
				if( mstrADDN  != null ) {
					mobjPc.setAdDn( mstrADDN );
				}
				// ADユーザID(設定されているときのみ更新)
				if( mstrADUserID  != null ) {
					mobjPc.setAdUserId( mstrADUserID );
				}

				//存在する場合は更新
				mobjPc.setWhereUserID( mstrUserID );				// 更新条件にユーザIDを指定
				// トランザクションの共有
				mobjPc.setConnectionIndex( objDa.getConnectionIndex() );

				if(!updateAction())
				{
					//登録失敗ログ出力
					// @LOG >err >1
					String strLog = "一括登録結果:" + mstrUserID + mstrUserName + "ＤＢ登録失敗";
					DebugLog.write(this.getClass(), strLog, DebugLog.HIGHT);
					boolFailFlag = true;
					return;
				}

				// ツリーの移動を行います。
				Vector vecParentIDList = getParentIDList( mstrUserID, objDa );

				// 親リストに自身の親IDが含まれていなかった場合
				if( vecParentIDList.size() > 0 && !vecParentIDList.contains( strParentID ) ) {

					// 未所属に所属していた場合は未所属から移動する。
					if( vecParentIDList.contains( XMOPropertyDef.WASTES_GROUPID ) ) {
						if( !moveTree(mstrUserID, objDa ) ) {
							//登録失敗ログ出力
							// @LOG >err >1
							String strLog = "一括登録結果:" + mstrUserID + mstrUserName + "ＤＢ登録失敗";
							DebugLog.write(this.getClass(), strLog, DebugLog.HIGHT);
							boolFailFlag = true;
							return;
						}
					}
					else {
						// 所属追加を行う。
						String strSendID = (String)vecParentIDList.get(0) + "^" + mstrUserID;
						if( !copy(strSendID, objDa) ) {
							//登録失敗ログ出力
							// @LOG >err >1
							String strLog = "一括登録結果:" + mstrUserID + mstrUserName + "ＤＢ登録失敗";
							DebugLog.write(this.getClass(), strLog, DebugLog.HIGHT);
							boolFailFlag = true;
							return;
						}
					}
				}

			}
			else
			{
				// 設定内容をクリアする。
				mobjPc.clear();

				// 新規登録用のパラメータチェックを実施する
				if(!checkInsParameter())
				{
					// @LOG >err >1
					DebugLog.write(
					this.getClass(),
					"入力内容が不正のため登録しません UserName : " +
					mstrUserName, DebugLog.HIGHT);
					boolFailFlag = true;
					return;
				}

				// DB登録設定
				mobjPc.setParentID(strParentID);					// 親ID
				mobjPc.setForeignID(mstrForeignID);					// 外部ID
				mobjPc.setLoginID(mstrLoginID);						// ログインID
				mobjPc.setUserName(mstrUserName);					// ユーザ名
				mobjPc.setEncryptPassword(mstrEncryptPassword);		// パスワード
				mobjPc.setContactAddress(mstrContactAddress);		// 住所
				mobjPc.setSex(mstrSex);								// 性別
				mobjPc.setContactEmail(mstrContactEmail);			// Eメール
				mobjPc.setContactEmail2(mstrContactEmail2);			// Eメール２
				mobjPc.setReadingName(mstrReadingName);				// 読みかた
				mobjPc.setContactTel(mstrContactTel);				// 電話番号
				mobjPc.setBirthday(mstrBirthday);					// 誕生日
				mobjPc.setDeleteFlag("0");							// 削除フラグ
				mobjPc.setCustomMsgDir(mstrCustomMsgDir);			// コメント
				mobjPc.setOid( mstrOid );							// オブジェクトID
				mobjPc.setAdDn( mstrADDN );							// AD_DN
				mobjPc.setAdUserId( mstrADUserID );					// ADユーザID
				mobjPc.setUserType( mstrUserType );				// ユーザタイプ

				// トランザクションの共有
				mobjPc.setConnectionIndex( objDa.getConnectionIndex() );

				//存在しない場合は登録
				if(!insertAction())
				{
					//登録失敗ログ出力
					// @LOG >err >1
					String strLog = "一括登録結果:" + mstrUserID + mstrUserName + "ＤＢ登録失敗";
					DebugLog.write(this.getClass(), strLog, DebugLog.HIGHT);
					boolFailFlag = true;
					return;
				}

				// 登録ユーザIDを取得し、登録ユーザリストにユーザIDを格納する
				if( mobjPc.next() ) {
					mstrUserID = mobjPc.getUserID();
					vctUserList.add(mstrUserID);
				}
			}

		}
		catch(XMOException ex)
		{
			//登録失敗ログ出力
			// @LOG >err >1
			String strLog = "一括登録結果:" + mstrUserID + mstrUserName + "ＤＢ登録失敗";
			DebugLog.write(this.getClass(), strLog, DebugLog.HIGHT);
			DebugLog.write(this.getClass(), ex, DebugLog.HIGHT);
			boolFailFlag = true;
			return;
		}
		catch(Exception e)
		{
			// 例外発生時はシステムエラーとする。
			// @LOG >err >1
			DebugLog.write(this.getClass(), e, DebugLog.HIGHT);
			throw new XMOException( SYSTEM_ERR );
		}

		// @LOG >info >10 一括登録：ユーザの登録を開始します。
		DebugLog.write( this.getClass(), "一括登録：ユーザの登録が終了しました。" + mstrUserName, DebugLog.MID );
	}

	/**
	 * 更新処理を行います。
	 * @return boolean true：正常 false: 異常
	 */
	private boolean updateAction()
		throws Exception
	{

		if(!mobjPc.update()) {

			String strMessageID = mobjPc.getMessageID();
			// 更新エラーが外部ID重複エラーの場合は重複対応を行い再更新
			if( strMessageID != null && strMessageID.equals(PeopleMessage.EXIT_FOREIGNID_WAR) ) {
				String strForeignID = XMOString.makeNoDupliString( mstrForeignID, mintForeignIDCount, PeopleTable.FOREIGNID_LENB );

				if( strForeignID == null ) {
					return false;
				}
				// 外部ID再設定
				mobjPc.setForeignID( strForeignID );

				// 再更新
				mintForeignIDCount++;
				return updateAction();
			}
			// 更新エラーがログインID重複エラーの場合は重複対応を行い再更新
			else if(  strMessageID != null && strMessageID.equals(PeopleMessage.EXIT_LOGINID_WAR) ) {
				String strLoginID = XMOString.makeNoDupliString( mstrLoginID, mintLoginIDCount, PeopleTable.FOREIGNID_LENB );

				if( strLoginID == null ) {
					return false;
				}
				// ログインID再設定
				mobjPc.setLoginID( strLoginID );

				// 再更新
				mintLoginIDCount++;
				return updateAction();
			}
			// データベースエラーの場合は例外を投げる
			else if( strMessageID != null && strMessageID.equals(PeopleMessage.DB_ERR) ) {
				throw new XMOException( DB_ERR );
			}
			else {
				return false;
			}

		}

		return true;
	}

	/**
	 * 登録処理を行います
	 * @return boolean true：正常 false: 異常
	 */
	private boolean insertAction()
		throws Exception
	{
		if(!mobjPc.insert()) {


			String strMessageID = mobjPc.getMessageID();
			// 更新エラーが外部ID重複エラーの場合は重複対応を行い再更新
			if( strMessageID != null && strMessageID.equals(PeopleMessage.EXIT_FOREIGNID_WAR) ) {
				String strForeignID = XMOString.makeNoDupliString( mstrForeignID, mintForeignIDCount, PeopleTable.FOREIGNID_LENB );

				if( strForeignID == null ) {
					return false;
				}
				// 外部ID再設定
				mobjPc.setForeignID( strForeignID );

				// 再登録
				mintForeignIDCount++;
				return insertAction();
			}
			// 更新エラーがログインID重複エラーの場合は重複対応を行い再更新
			else if(  strMessageID != null && strMessageID.equals(PeopleMessage.EXIT_LOGINID_WAR) ) {
				String strLoginID = XMOString.makeNoDupliString( mstrLoginID, mintLoginIDCount, PeopleTable.FOREIGNID_LENB );

				if( strLoginID == null ) {
					return false;
				}
				// ログインID再設定
				mobjPc.setLoginID( strLoginID );

				// 再登録
				mintLoginIDCount++;
				return insertAction();
			}
			// データベースエラーの場合は例外を投げる
			else if( strMessageID != null && strMessageID.equals(PeopleMessage.DB_ERR) ) {
				throw new XMOException( DB_ERR );
			}
			else {
				return false;
			}

		}
		else {
			return true;
		}
	}

	/**
	 * 新規登録時のパラメータをチェックします<BR>
	 * 更新フラグの状態に関わらずチェックはすべての項目に対し行われ、エラー内容はログに書き出されます。
	 * @return boolean 0:不正、1:正常
	 */
	private boolean checkInsParameter()
	{
		boolean boolRet = true;
		// ログインIDチェック(入力チェックはエラーとする)
		if(LumpUtil.checkLoginID(mstrLoginID) == false) {
			boolRet = false;
		}

		// 外部IDチェック(入力チェックはエラーとする)
		if(LumpUtil.checkForeignID(mstrForeignID) == false) {
			boolRet = false;
		}

		// 名前チェック(入力チェックはエラーとする)
		if(LumpUtil.checkUserName(mstrUserName) == false) {
			boolRet = false;
		}

		// パスワードチェック（入力チェックはエラーとする）
		if(LumpUtil.checkPassword(mstrEncryptPassword) == false) {
			boolRet = false;
		}

		// 必須以外チェック
		// フリガナチェック(入力チェックはエラーとしない)
		if(LumpUtil.checkReadingName(mstrReadingName) == false) {
			mstrReadingName = null;
		}

		// 生年月日チェック(入力チェックはエラーとしない)
		if(LumpUtil.checkBirthday(mstrBirthday) == false) {
			mstrBirthday = null;
		}

		// 住所チェック(入力チェックはエラーとしない)
		if(LumpUtil.checkContactAddress(mstrContactAddress) == false) {
			mstrContactAddress = null;
		}

		// メールアドレス１チェック(入力チェックはエラーとしない 但し、メール送信フラグがonの場合は入力チェックをエラーとする)
		if(LumpUtil.checkContactEmail(mstrContactEmail,mblMailFlag) == false) {
			mstrContactEmail = null;
			if (mblMailFlag) {
				boolRet = false;
			}
		}

		// メールアドレス２チェック(入力チェックはエラーとしない)
		if(LumpUtil.checkContactEmail2(mstrContactEmail2) == false) {
			mstrContactEmail2 = null;
		}

		// 電話番号チェック(入力チェックはエラーとしない)
		if(LumpUtil.checkContactTel(mstrContactTel) == false) {
			mstrContactTel = null;
		}

		// コメントチェック(入力チェックはエラーとしない)
		if(LumpUtil.checkCustomMsgDir(mstrCustomMsgDir) == false) {
			mstrCustomMsgDir = null;
		}

		// ADユーザIDチェック(入力チェックはエラーとしない)
		if(LumpUtil.checkADUserID(mstrADUserID) == false) {
			mstrADUserID = null;
		}

		// オブジェクトIDチェック(未入力はエラーとしない)
		if(LumpUtil.checkOid(mstrOid) == false) {
			if(mstrOid != null && !mstrOid.equals(""))
			{
				boolRet = false;
			}
			mstrOid = null;
		}

		// DNチェック(入力チェックはエラーとしない)
		if(LumpUtil.checkADDN(mstrADDN) == false) {
			mstrADDN = null;
		}

		// 性別が不正ならばデフォルト値を設定
		if(LumpUtil.checkSex(mstrSex) == false) {
			mstrSex = "3";
		}
		return boolRet;
	}

	/**
	 * 更新時のパラメータをチェックします<BR>
	 * 更新フラグがoffの項目を除いてチェックを行い、エラー内容はログに書き出されます。
	 * @return boolean 0:不正、1:正常
	 */
	private boolean checkUpdParameter()
	{
		boolean boolRet = true;
		// ログインIDチェック（更新フラグがONのときのみチェックする）
		if(mblLoginIDUpFlag) {
			// ログインIDチェック(入力チェックはエラーとする)
			if(LumpUtil.checkLoginID(mstrLoginID) == false) {
				boolRet = false;
			}
		}

		// 外部IDチェック（更新フラグがONのときのみチェックする）
		if(mblForeignIDUpFlag) {
			// 外部IDチェック(入力チェックはエラーとする)
			if(LumpUtil.checkForeignID(mstrForeignID) == false) {
				boolRet = false;
			}
		}

		// 名前チェック（更新フラグがONのときのみチェックする）
		if(mblUserNameUpFlag) {
			// 名前チェック(入力チェックはエラーとする)
			if(LumpUtil.checkUserName(mstrUserName) == false) {
				boolRet = false;
			}
		}

		// パスワードチェック（更新フラグがONのときのみチェックする）
		if(mblPasswordUpFlag) {
			// パスワードチェック（入力チェックはエラーとする）
			if(LumpUtil.checkPassword(mstrEncryptPassword) == false) {
				boolRet = false;
			}
		}

		// 必須以外チェック
		// フリガナチェック(入力チェックはエラーとしない)
		if(LumpUtil.checkReadingName(mstrReadingName) == false) {
			mstrReadingName = null;
		}

		// 生年月日チェック(入力チェックはエラーとしない)
		if(LumpUtil.checkBirthday(mstrBirthday) == false) {
			mstrBirthday = null;
		}

		// 住所チェック(入力チェックはエラーとしない)
		if(LumpUtil.checkContactAddress(mstrContactAddress) == false) {
			mstrContactAddress = null;
		}

		// メールアドレス１チェック(入力チェックはエラーとしない 但し、メール送信フラグがonの場合は入力チェックをエラーとする)
		if(LumpUtil.checkContactEmail(mstrContactEmail,mblMailFlag) == false) {
			mstrContactEmail = null;
			if (mblMailFlag) {
				boolRet = false;
			}
		}

		// メールアドレス２チェック(入力チェックはエラーとしない)
		if(LumpUtil.checkContactEmail2(mstrContactEmail2) == false) {
			mstrContactEmail2 = null;
		}

		// 電話番号チェック(入力チェックはエラーとしない)
		if(LumpUtil.checkContactTel(mstrContactTel) == false) {
			mstrContactTel = null;
		}

		// コメントチェック(入力チェックはエラーとしない)
		if(LumpUtil.checkCustomMsgDir(mstrCustomMsgDir) == false) {
			mstrCustomMsgDir = null;
		}

		// ADユーザIDチェック(入力チェックはエラーとしない)
		if(LumpUtil.checkADUserID(mstrADUserID) == false) {
			mstrADUserID = null;
		}

		// オブジェクトIDチェック(未入力はエラーとしない)
		if(LumpUtil.checkOid(mstrOid) == false) {
			if(mstrOid != null && !mstrOid.equals(""))
			{
				boolRet = false;
			}
			mstrOid = null;
		}

		// DNチェック(入力チェックはエラーとしない)
		if(LumpUtil.checkADDN(mstrADDN) == false) {
			mstrADDN = null;
		}

		// 性別が不正ならばデフォルト値を設定
		if(LumpUtil.checkSex(mstrSex) == false) {
			mstrSex = "3";
		}
		return boolRet;
	}

	/**
	 * 対象のパスに画面で選択したグループが含まれているかチェックします。<BR>
	 * @return boolean true:含まれている、false:含まれていない
	 */
	private boolean isContains(String strStartGID, String strTargetID)
		throws Exception{

		boolean result = false;

		GroupAndPeopleClient objGap = new GroupAndPeopleClient();
		objGap.searchPath(strTargetID);

		String strFullPath = "";
		if( objGap.next() ) {
			String[] strPath = objGap.getPath();
			for( int j = 0; j < strPath.length; j++ ) {
				strFullPath += "/" + strPath[j];
			}
			//System.out.println( "FULLPATH="+strFullPath );
			if ( strFullPath.indexOf(strStartGID) != -1 ){
				result = true;
			}
		}
		return result;

	}

	/**
	 * 子IDから親IDを取得します。
	 * @return Vector
	 * @exception Exception RMI通信エラー
	 */
	private Vector getParentIDList(String strChildID, DataAccess objDa)
		throws Exception
	{
		if( strChildID == null ) {
			return new Vector();
		}

		// ツリーの移動
		GroupAndPeopleClient objGandP = new GroupAndPeopleClient();
		// 子IDで検索する
		objGandP.setWhereChildID( strChildID );

		// トランザクションの共有
		objGandP.setConnectionIndex( objDa.getConnectionIndex() );

		// 検索処理
		if( !objGandP.select() ) {
			throw new XMOException( objGandP.getMessageData() );
		}

		Vector vecList = new Vector();
		while( objGandP.next() ) {
			vecList.add( objGandP.getParentID() );
		}

		return vecList;
	}

}