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

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

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

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

//ADD 2005/02/12 START Katsuhiko Kagami(UNITEC) [LO追加情報/追加/更新/削除メソッド追加]
import jp.co.ntt.lms.xmo.Lo.LoExtend.LoExtendRecord;
import jp.co.ntt.lms.xmo.Lo.LoExtend.LoExtendTable;
//ADD 2005/02/12 END Katsuhiko Kagami(UNITEC) [LO追加情報/追加/更新/削除メソッド追加]

//ADD 2005/02/14 START MASUDA [属性追加対応]
import jp.co.ntt.lms.xmo.Lo.lom.DisplayData;
import jp.co.ntt.lms.xmo.Lo.lom.DisplayValue;
import java.util.Iterator;

import org.apache.commons.lang.StringEscapeUtils;
//ADD 2005/02/14 END MASUDA

/**
 * Lo 管理XMO クライアントクラスです。<BR>
 * このクラスはLo XMO サーバクラスとの接続および、
 * 登録、更新、削除、検索処理に必要なパラメータの設定、検索後の
 * 検索結果の取得メソッドを提供します。<BR>
 * @author T.Nijou
 * @version 0.0.0.1 2004.01.08
 */
//ADD 2005/02/12 START Katsuhiko Kagami(UNITEC) [LO追加情報/追加/更新/削除メソッド追加]
public class LoClient extends XMOBasicClient
	implements LoTable, LoExtendTable
//	ADD 2005/02/12 END Katsuhiko Kagami(UNITEC) [LO追加情報/追加/更新/削除メソッド追加]
{

	/** 接続先サーバクラス名です */
	private static final String CLASS_NAME = "jp.co.ntt.lms.xmo.Lo.Lo";

	/**
	 * LOXMO独自のメソッドです。<BR>
	 * 指定した条件のLOのメニューリストを取得します
	 */
	private static final String METHOD_GETLOMENU = "getLoMenuList";

	/**
	 * LOXMO独自のメソッドです。<BR>
	 * LO種別テーブルの検索を行います。
	 */
	private static final String METHOD_SELECTLOTYPE = "selectLoType";

	/**
	 * LOXMO独自のメソッドです。<BR>
	 * LO種別テーブルの登録を行います。
	 */
	private static final String METHOD_INSERTLOTYPE = "insertLoType";

	/**
	 * LOXMO独自のメソッドです。<BR>
	 * LO種別テーブルの更新を行います。
	 */
	private static final String METHOD_UPDATELOTYPE = "updateLoType";

	/**
	 * LOXMO独自のメソッドです。<BR>
	 * LO種別テーブルの削除を行います。
	 */
	private static final String METHOD_DELETELOTYPE = "deleteLoType";

	/**
	 * LOXMO独自のメソッドです。<BR>
	 * 指定したLO種別の教材一覧を取得します。
	 */
	private static final String METHOD_GETMATERIALLIST = "getMaterialList";

	/**
	 * LOXMO独自のメソッドです。<BR>
	 * 指定したLOIDの学習を開始します。
	 */
	private static final String METHOD_STARTLEARN = "startLearn";

	/**
	 * LOXMO独自のメソッドです。<BR>
	 * 指定したLOIDの学習を終了します。
	 */
	private static final String METHOD_ENDLEARN = "endLearn";

	/**
	 * LOXMO独自のメソッドです。<BR>
	 * 指定したLOIDの属性を変更します。
	 */
	private static final String METHOD_CHANGETYPE = "changeType";

	/**
	 * LOXMO独自のメソッドです。<BR>
	 * LOIDからRealLOIDを取得します。
	 */
	private static final String METHOD_GET_REALLOID = "getRealLOID";

	/**
	 * LOXMO独自のメソッドです。<BR>
	 * LOIDから参照LOIDリストを取得します。
	 */
	private static final String METHOD_GET_REF_LIST_FROM_LOID = "getRefListFromLOID";

	/**
	 * LOXMO独自のメソッドです。<BR>
	 * RealLOIDから参照LOIDリストを取得します。
	 */
	private static final String METHOD_GET_REF_LIST_FROM_REALLOID = "getRefListFromRealLOID";

	/**
	 * LOXMO独自のメソッドです。<BR>
	 * 「LO更新」画面と「LO削除画面」に表示する登録内容を取得します。。
	 */
	private static final String METHOD_SELECT_HISTORY = "selectHistory";

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


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

	/**
	 * LOXMO独自のメソッドです。<BR>
	 * 前提条件の被設定チェックに使用します。
	 * 前提条件に設定されているLOIDから前提条件を設定しているLOIDのリストをString配列で返します。
	 */
	private static final String METHOD_LOID_FROM_PRERE = "selectLOIDFromPrere";

	/**
	 * LOXMO独自のメソッドです。<BR>
	 * 前提条件を満たしているかのチェックに使用します。
	 * 満たしている場合はtrueを、満たしていない場合はfalseを返します。
	 */
	private static final String METHOD_IS_PREREQUISITED = "isPrerequisited";

	/**
	 * LOXMO独自のメソッドです。<BR>
	 * ステータスの取得を行います。
	 * ステータスにより1〜5の数値を返します。
	 */
	private static final String METHOD_GET_STATUS = "getStatus";


   /**
	* AssignmentsXMO独自のメソッド。<BR>
	* メール送信の１回あたりの送信件数を取得するメソッド名称。
	*/
   private static final String METHOD_GET_SEND_MAIL_COUNT = "getSendMailCount";
   
   /**
    * ＲＭＩ戻り値Ｍａｐキー：エラーメッセージ。
    */
   private static final String KEY_ERROR_MESSAGE = "errormessage";

   /**
    * ＲＭＩ戻り値Ｍａｐキー：送信件数。
    */
   private static final String KEY_SEND_MAIL_COUNT = "sendMailCount";

// ADD 2005/02/10 START SUGAWARA [LOM情報取得]
	/** 選択項目付きでLOM情報取得する */
	private static final String KEY_LOM_DISPLAY_DATA = "getLomDisplayData";
// ADD 2005/02/10 END SUGAWARA
// ADD 2005/02/11 START SUGAWARA [LOM情報更新]
	/** LOM情報を更新する */
	private static final String KEY_UPDATE_LOM = "updateLomData";
// ADD 2005/02/11 END SUGAWARA
// ADD 2005/02/12 START Katsuhiko Kagami(UNITEC) [LO追加情報/追加/更新/削除メソッド追加]
	/** LO拡張情報を検索する */
	private static final String METHOD_SELECT_LOEXTEND = "selectLoExtend";
	/** LO拡張情報を追加する */
	private static final String METHOD_INSERT_LOEXTEND = "insertLoExtend";
	/** LO拡張情報を更新する */
	private static final String METHOD_UPDATE_LOEXTEND = "updateLoExtend";
	/** LO拡張情報を削除する */
	private static final String METHOD_DELETE_LOEXTEND = "deleteLoExtend";
// ADD 2005/02/12 END Katsuhiko Kagami(UNITEC) [LO追加情報/追加/更新/削除メソッド追加]
// ADD 2005/02/16 START SUGAWARA [LOM属性検索]
	/** DBに格納しているLOM情報（TextType)を検索する */
	private static final String KEY_SEARCH_LOM_TEXT = "searchLomText";
	/** DBに格納しているLOM情報（選択項目)を検索する */
	private static final String KEY_SEARCH_LOM = "searchLom";
// ADD 2005/02/16 END SUGAWARA [LOM属性検索]
// ADD 2005/02/23 START SUGAWARA [LOM学習時間取得]
	private static final String KEY_GET_TIMESPAN = "getTimeSpan";
// ADD 2005/02/23 START END [LOM学習時間取得]
	/**
	 * RealLOIDを保持します
	 */
	private String mstrRealLOIDResult;

	/**
	 * 参照LOIDリストを保持します
	 */
	private String[] mstrRefLOIDList;
	
	/**
	 * HistoryDataを保持します
	 */
	private HistoryData mobjHistoryData;

	/**
	 * 前提条件被設定LOIDリストを保持します
	 */
	private String[] mstrLOIDList;

	/**
	 * 前提条件の判定結果を保持します。
	 */
	private boolean mblPrere;

	/**
	 * コピー元LOIDを保持します。
	 */
	private String mstrCopyLOID;

	/**
	 * ステータス判定結果を保持します。
	 */
	private int mintStatus;

//  ADD 2005/02/10 START SUGAWARA [LOM情報取得]
	/**
	 * 選択項目つきLOM情報を保持します。
	 */
	private Vector lomDisplayData;
//  ADD 2005/02/10 END SUGAWARA

// ADD 2005/02/12 START Katsuhiko Kagami(UNITEC) [LO追加情報/追加/更新/削除メソッド追加]
	/**
	 * LoExtendテーブルの内容を保持します。
	 */
	private LoExtendRecord mLoExtendRecord = null;
	/**
	 * LoExtendテーブルの内容が取得できたかを保持します。
	 */
	private boolean mbLoExtendFound = false;
// ADD 2005/02/12 END Katsuhiko Kagami(UNITEC) [LO追加情報/追加/更新/削除メソッド追加]
// ADD 2005/02/16 START SUGAWARA [LO属性検索]
	private Vector searchLomResult = null;
// ADD 2005/02/16 END SUGAWARA

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

	/**
	 * パラメータにLOIDをセットします
	 */
	public void setLoID( String strLoID ) {
		putData( LO_ID, strLoID );
	}

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

	/**
	 * パラメータに章IDをセットします
	 */
	public void setAuID( String strAuID ) {
		putData( AU_ID, strAuID );
	}

	/**
	 * パラメータにLO実アドレスをセットします
	 */
	public void setLoAddress( String strLoAddress ) {
		putData( LO_ADDRESS, strLoAddress );
	}

	/**
	 * 検索結果から現在のインデックスのLO実アドレスを取得します
	 */
	public String getLoAddress() {
		LoData objData = (LoData)getResult();
		return objData.getLoAddress();
	}

	/**
	 * パラメータにLOタイプをセットします
	 */
	public void setLoType( String strLoType ) {
		putData( LO_TYPE, strLoType );
	}

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

	/**
	 * パラメータにLOタイトルをセットします
	 */
	public void setLoTytle( String strLoTytle ) {
		putData( LO_TYTLE, strLoTytle );
	}

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

	/**
	 * パラメータにLOの説明をセットします
	 */
	public void setLoExplanation( String strLoExplanation ) {
		putData( LO_EXPLANATION, strLoExplanation );
	}

	/**
	 * 検索結果から現在のインデックスのLOの説明を取得します
	 */
	public String getLoExplanation() {
		LoData objData = (LoData)getResult();
		return objData.getLoexplanation();
	}

	/**
	 * パラメータにLOのバージョンをセットします
	 */
	public void setLoVersion( String strLoVersion ) {
		putData( LO_VERSION, strLoVersion );
	}

	/**
	 * 検索結果から現在のインデックスのLOのバージョンを取得します
	 */
	public String getLoVersion() {
		LoData objData = (LoData)getResult();
		return objData.getLoVersion();
	}

	/**
	 * パラメータに作成日をセットします
	 */
	public void setLoCreateDate( String strLoCreateDate ) {
		putData( LO_CREATEDATE, strLoCreateDate );
	}

	/**
	 * 検索結果から現在のインデックスのLOの作成日を取得します
	 */
	public String getLoCreateDate() {
		LoData objData = (LoData)getResult();
		return objData.getLocreateDate();
	}

	/**
	 * パラメータに隠しフラグをセットします
	 */
	public void setDeleteFlag( String strDeleteFlag ) {
		putData( DELETE_FLAG, strDeleteFlag );
	}

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

	 /**
	  * パラメータにMentorEmailアドレスをセットします
	  */
	 public void setMentorEmail( String strMentorEmail ) {
		 putData( MENTOR_EMAIL_ADDRESS, strMentorEmail );
	 }

	 /**
	  * 検索結果から現在のMentorEmailアドレスを取得します
	  */
	 public String getMentorEmail() {
		 LoData objData = (LoData)getResult();
		 return objData.getMentorEmail();
	 }

	/**
	 * パラメータに教材IDをセットします
	 */
	public void setMaterialID( String strMaterialID ) {
		putData( MATERIAL_ID, strMaterialID );
	}

	/**
	 * 検索結果から現在のインデックスの教材IDを取得します
	 */
	public String getMaterialID() {
		LoData objData = (LoData)getResult();
		return objData.getMaterialID();
	}

	/**
	 * パラメータにキーワードをセットします
	 */
	public void setKeyWord( String strKeyWord ) {
		putData( KEYWORD, strKeyWord );
	}

	/**
	 * 検索結果から現在のインデックスのキーワードを取得します
	 */
	public String getKeyWord() {
		LoData objData = (LoData)getResult();
		return objData.getKeyWord();
	}
	/**
	 * パラメータに外部キーをセットします
	 */
	public void setForeignID( String strForeignID ) {
		putData( FOREIGN_ID, strForeignID );
	}

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

	/**
	 * パラメータにLO種別名をセットします
	 */
	public void setTypeName( String strTypeName ) {
		putData( TYPE_NAME, strTypeName );
	}

	/**
	 * LO種別名を取得します
	 */
	public String getTypeName() {
		LoData objData = (LoData)getResult();
		return objData.getTypeName();
	}

	/**
	 * パラメータにLOサブ種別をセットします
	 */
	public void setLoSubType( String strLoSubType ) {
		putData( TYPE_NAME, strLoSubType );
	}

	/**
	 * LOサブ種別を取得します
	 */
	public String getLoSubType() {
		LoData objData = (LoData)getResult();
		return objData.getLoSubType();
	}

	/**
	 * パラメータにOPTIONIDをセットします
	 */
	public void setOptionID( String strOptionID ) {
		putData( OPTION_ID, strOptionID );
	}

	/**
	 * オプション情報の長さを取得します
	 */
	public int getOptionInfoLength() {
		LoData objData = (LoData)getResult();
		return objData.getOptionInfoLength();
	}

	/**
	 * OPTION情報を取得します
	 * @param int インデックス
	 * @return String[] オプション情報
	 *         [0]: LoID
	 *         [1]: OptionID
	 */
	public String[] getOptionInfo( int index ) {
		LoData objData = (LoData)getResult();
		return objData.getOptionInfo(index);
	}

// ADD 2005/02/12 START Katsuhiko Kagami(UNITEC) [LO追加情報/追加/更新/削除メソッド追加]
	/**
	 * LoExtendテーブルの内容を返します。
	 * @return LoExtendRecord 取得したLoExtendテーブルの内容
	 */
	public LoExtendRecord getLoExtendRecord() {
		if (mbLoExtendFound) {
			// 取得できていた場合は取得できたレコードを返す
			return mLoExtendRecord;
		} else {
			// 未取得の場合は新規にレコードオブジェクトを作って返す
			mLoExtendRecord = new LoExtendRecord();
			return mLoExtendRecord;
		}
	}

	/**
	 * LoExtendテーブルが取得できたかを返します。
	 * @return boolean 取得した:true/取得できなかった:false
	 */
	public boolean isExistLoExtend() {
		return mbLoExtendFound;
	}
// ADD 2005/02/12 END Katsuhiko Kagami(UNITEC) [LO追加情報/追加/更新/削除メソッド追加]
	

	/**
	 * 親LOIDをセットします
	 */
	public void setParentID( String strParentID ) {
		putData( PARENT_ID, strParentID );
	}

	/**
	 * LOデータを取得します
	 */
	public LoData getLoData() {
		return (LoData)getResult();
	}
	/**
	 * LOIDを検索条件に付与します
	 * デフォルトで"="条件をつけます
	 * @param strLOID	LOID
	 */
	public void setWhereLoID( String strLoID ) {
		String strCondition = LO_ID + SEARCH_EQUALS + "'" + StringEscapeUtils.escapeSql(strLoID) + "' ";
		setCondition( strCondition );
		setLoID(strLoID);
		
	}

	/**
	 * LOIDを検索条件に付与します
	 * @param strLOID	LOID
	 * @param strSearchCondition 検索条件
	 */
	public void setWhereLoID( String strLoID, String strSearchCondition ) {
		String strCondition = LO_ID + strSearchCondition + "'" + StringEscapeUtils.escapeSql(strLoID) + "' ";
		setCondition( strCondition );
	}

	/**
	 * LOタイトルを検索条件に付与します
	 * デフォルトで"="条件をつけます
	 * @param strLOTytle	LOTytle
	 */
	public void setWhereLoTytle( String strLoTytle ) {
		String strCondition = LO_TYTLE + SEARCH_EQUALS + "'" + SqlEscape.escape(strLoTytle) + "' ";
		setCondition( strCondition );
	}

	/**
	 * LOタイトルを検索条件に付与します
	 * @param strLOTytle	LOTytle
	 * @param strSearchCondition 検索条件
	 */
	public void setWhereLoTytle( String strLoTytle, String strSearchCondition ) {
		String strCondition = LO_TYTLE + strSearchCondition + "'" + SqlEscape.escape(strLoTytle) + "' ";
		setCondition( strCondition );
	}

	/**
	 * LOTYPEを検索条件に付与します
	 * デフォルトで"="条件をつけます
	 * @param strLoType	LOTYPE
	 */
	public void setWhereLoType( String strLoType ) {
		String strCondition = LO_TYPE + SEARCH_EQUALS + "'" + StringEscapeUtils.escapeSql(strLoType) + "' ";
		setCondition( strCondition );
	}

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

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

	/**
	 * LOTYPEを検索条件に付与します
	 * @param strLoType	LOTYPE
	 * @param strSearchCondition 検索条件
	 */
	public void setWhereLoType( String strLoType, String strSearchCondition ) {
		String strCondition = LO_TYPE + strSearchCondition + "'" + StringEscapeUtils.escapeSql(strLoType) + "' ";
		setCondition( strCondition );
	}

	/**
	 * XMOの基本メソッド<BR>
	 * リモートメソッド起動メソッドです。
	 * @return boolean 正常時はtrue　エラー時はfalse
	 */
	public boolean selectLoType()
		throws Exception
	{
		return select_m( METHOD_SELECTLOTYPE );
	}

	/**
	 * LOXMO独自のメソッドです。<BR>
	 * 指定した条件のLOのメニューリストを取得します
	 * @param strLoID	LOID
	 * @param strAuID	章ID
	 * @param strUserID	ユーザID
	 * @param strUserType	ユーザタイプ
	 * @param strPassword	パスワード
	 * @param strReturnURL	戻りURL
	 * @return boolean true: メニュー取得成功 false: エラー
	 */
	public boolean getLoMenuList(	String strLoID,
									String strAuID,
									String strUserID,
									String strPassword,
									String strUserType,
									String strReturnURL )
		throws Exception
	{

		// LOIDを指定します
		setLoID( strLoID );
		// LOIDを指定します
		setAuID( strAuID );
		// ユーザID
		setUserID( strUserID );
		// パスワード
		setPassword( strPassword );
		// 戻りURL
		setReturnURL( strReturnURL );
		// ユーザタイプ(0: 管理者, 1: 学習者)
		setUserType( strUserType );

		// メニュー取得
		Vector vecLoMenuList = (Vector)super.execute( METHOD_GETLOMENU, htParams );

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

		vecResults = vecLoMenuList;

		return true;
	}

	/**
	 * LOXMO独自のメソッドです。<BR>
	 * 指定した条件のLOの学習開始を行います。
	 * @param strLoID	LOID
	 * @param strUserID	ユーザID
	 * @param strPassword	パスワード
	 * @param strReturnURL	戻りURL
	 * @return boolean true: 学習開始成功 false: エラー
	 */
	public boolean startLearn(	String strLoID,
								String strUserID,
								String strPassword,
								String strReturnURL )
		throws Exception
	{

		// LOIDを指定します
		setLoID( strLoID );
		// ユーザID
		setUserID( strUserID );
		// パスワード
		setPassword( strPassword );
		// 戻りURL
		setReturnURL( strReturnURL );

		Vector vecStartURL = (Vector)super.execute( METHOD_STARTLEARN, htParams );

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

		vecResults = vecStartURL;
		return true;
	}

	/**
	 * 学習開始情報を取得します
	 * @return LearnData 学習開始情報
	 */
	public LearnData getLearnData() {
		LoData objData = (LoData)getResult();
		return objData.getLearnData();
	}

	/**
	 * LOXMO独自のメソッドです。<BR>
	 * 指定した条件のLOの学習終了を行います。
	 * @param strLoID	LOID
	 * @param strUserID	ユーザID
	 * @param strPassword	パスワード
	 * @param strReturnURL	戻りURL
	 * @return boolean true: 学習開始成功 false: エラー
	 */
	public boolean endLearn(	String strLoID,
								String strUserID,
								String strPassword,
								String strReturnURL )
		throws Exception
	{

		// LOIDを指定します
		setLoID( strLoID );
		// ユーザID
		setUserID( strUserID );
		// パスワード
		setPassword( strPassword );
		// 戻りURL
		setReturnURL( strReturnURL );

		Vector vecEndResult = (Vector)super.execute( METHOD_ENDLEARN, htParams );
		// メッセージデータを取得します
		MessageData objMessage = (MessageData)vecEndResult.get(0);
		mobjMessage = objMessage;
		if( isErr( objMessage ) ) {
			return false;
		}

		return true;
	}

	/**
	 * LOXMO独自のメソッドです。<BR>
	 * 指定したLOIDの属性を変更します
	 * @param strLoID LOID
	 */
	public boolean changeType( String strLoID )
		throws Exception
	{
		// LOIDを指定します
		setLoID( strLoID );

		Vector vecResult = (Vector)super.execute( METHOD_CHANGETYPE, htParams );
		// メッセージデータを取得します
		MessageData objMessage = (MessageData)vecResult.get(0);
		mobjMessage = objMessage;
		if( isErr( objMessage ) ) {
			return false;
		}

		return true;
	}

	/**
	 * ユーザIDを指定します
	 */
	public void setUserID( String strUserID ) {
		putData( USER_ID, strUserID );
	}

	/**
	 * パスワードを指定します
	 */
	public void setPassword( String strPassword ) {
		putData( PASSWD, strPassword );
	}

	/**
	 * ユーザタイプを設定します
	 * @param strUserType ユーザタイプ
	 *                    0: 管理者
	 *                    1: 学習者
	 */
	public void setUserType( String strUserType ) {
		putData( USER_TYPE, strUserType );
	}

	/**
	 * 戻りURLを指定します
	 */
	public void setReturnURL( String strURL ) {
		putData( RETURNURL, strURL );
	}

	/**
	 * LOXMO独自のメソッドです。<BR>
	 * 指定した条件の教材一覧を取得します
	 * @param strLoType LO種別
	 * @return boolean 正常時はtrue　エラー時はfalse
	 */
	public boolean getMaterialList( String strLoType )
		throws Exception
	{

		// LO種別を設定します
		setLoType( strLoType );

		Vector vecMaterialList = (Vector)super.execute( METHOD_GETMATERIALLIST, htParams );

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

		vecResults = vecMaterialList;
		return true;
	}

	/**
	 * 教材データオブジェクトを取得します
	 */
	public MaterialData getMaterialData() {
		LoData objData = (LoData)getResult();
		return objData.getMaterialData();
	}

	/**
	 * メニューオブジェクトを取得します
	 */
	public MenuData getMenuData() {
		LoData objData = (LoData)getResult();
		return objData.getMenuData();
	}

	/**
	 * 削除するuser_idを設定する。<BR>
	 * 共通処理管理 ログ削除処理で使用する。
	 *
	 * @param strID user_id
	 */
	public void setDeleteLOID( String strID ) {
		putData( DELETE_LOID, strID );
	}

	/**
	 * 削除するparent_idを設定する。<BR>
	 * 共通処理管理 ログ削除処理で使用する。
	 *
	 * @param strID parent_id
	 */
	public void setDeleteParentID( String strID ) {
		putData( DELETE_PARENTID, strID );
	}

	/**
	 * コピーフラグを設定します。
	 */
	public void setCopyFlag() {
		putData( COPY_FLAG, "on" );
	}

	/**
	 * ステータス伝搬フラグを設定します。
	 */
	public void setStatusPropagateFlag() {
		putData( STATUS_PROPAGATE_FLAG, "on" );
	}

	/**
	 * ソート番号を設定します。
	 */
	public void setSortNO( String strSortNO ) {
		putData( SORT_NO, strSortNO );
	}

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

		String strKeyCondition = "(";
		String strGidCondition = "";
		
		try{
			//XMS.iniファイルロードクラスのインスタンス
			Environment objEnv = new Environment();
	
			
						
			//PostgreSQLの場合
			if (objEnv.getDBType().equals( objEnv.DB_POSTGRE )){
				strKeyCondition = strKeyCondition + LO_TYTLE + SEARCH_LIKE  + "'%" + SqlEscape.escapeSearch(strKey) + "%' ESCAPE('\\\\') OR " +
				FOREIGN_ID + SEARCH_LIKE  + "'%" + SqlEscape.escapeSearch(strKey) + "%' ESCAPE('\\\\') OR " +
				LO_EXPLANATION + SEARCH_LIKE + "'%" + SqlEscape.escapeSearch(strKey) + "%' ESCAPE('\\\\') OR " +
				KEYWORD + 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 + LO_TYTLE + SEARCH_LIKE  + "'%" + SqlEscape.escapeSearch(strKey) + "%' ESCAPE('\\') OR " +
				FOREIGN_ID + SEARCH_LIKE  + "'%" + SqlEscape.escapeSearch(strKey) + "%' ESCAPE('\\') OR " +
				LO_EXPLANATION + SEARCH_LIKE + "'%" + SqlEscape.escapeSearch(strKey) + "%' ESCAPE('\\') OR " +
				KEYWORD + SEARCH_LIKE + "'%" + SqlEscape.escapeSearch(strKey) + "%' ESCAPE('\\') )";
			}
		
			//SQLServerの場合
			if(objEnv.getDBType().equals( objEnv.DB_SQLSERVER )){
				strGidCondition = " ORDER BY CONVERT(INT,SUBSTRING(LOID, 3, { fn LENGTH(LOID) })) ";
			//Oracleの場合
			}else if(objEnv.getDBType().equals( objEnv.DB_ORACLE )){
				strGidCondition = " ORDER BY TO_NUMBER(SUBSTR(LOID, 3,LENGTH(LOID))) ";
			//PostgreSQLの場合
			}else if(objEnv.getDBType().equals( objEnv.DB_POSTGRE )){
				strGidCondition = " ORDER BY TO_NUMBER(SUBSTR(LOID, 3,LENGTH(LOID)),'99999999') ";
			}
		}catch(Exception ex){
			ex.printStackTrace();
		}
		setCondition( strKeyCondition+strGidCondition );
	}

	/**
	 * パラメータに完結要件をセットします
	 */
	public void setConclusion( String strConclusion ) {
		putData( CONCLUSION, strConclusion );
	}

	/**
	 * 検索結果の現在のインデックスの完結要件を取得します
	 */
	public String getConclusion() {
		LoData objData = (LoData)getResult();
		return objData.getConclusion();
	}

	/**
	 * パラメータにRealLOIDをセットします
	 */
	public void setRealLOID( String strRealLOID ) {
		putData( REAL_LOID, strRealLOID );
	}

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

	/**
	 * LOXMO独自のメソッドです。<BR>
	 * LOIDからRealLOIDを取得します。
	 * @return boolean true: リスト取得成功 false: エラー
	 */
	public boolean getRealLOIDFromLOID(String strLOID) throws Exception {
		// LOIDを設定します
		setLoID( strLOID );

		mstrRealLOIDResult = (String)super.execute( METHOD_GET_REALLOID, htParams );

		if( mstrRealLOIDResult == null ) {
			return false;
		}

		return true;

	}

	/**
	 * LOIDからRealLOIDを返します。
	 * @return String RealLOID
	 */
	public String getRealLOIDResult() {
		return mstrRealLOIDResult;
	}

	/**
	 * LOXMO独自のメソッドです。<BR>
	 * LOIDから参照LOIDリストを取得します。
	 * @return boolean true: リスト取得成功 false: エラー
	 */
	public boolean getListFromLOID(String strLOID) throws Exception {
		// LOIDを設定します
		setLoID( strLOID );

		mstrRefLOIDList = (String[])super.execute( METHOD_GET_REF_LIST_FROM_LOID, htParams );

		if( mstrRefLOIDList.length < 1 ) {
			return false;
		}

		return true;

	}

	/**
	 * LOIDから参照LOIDリストを返します。
	 * @return String[] 参照リスト
	 */
	public String[] getRefLstResult() {
		return mstrRefLOIDList;
	}

	/**
	 * LOXMO独自のメソッドです。<BR>
	 * RealLOIDから参照LOIDリストを取得します。
	 * @return boolean true: リスト取得成功 false: エラー
	 */
	public boolean getListFromRealLOID(String strRealLOID) throws Exception {
		// RealLOIDを設定します
		setLoID( strRealLOID );

		mstrRefLOIDList = (String[])super.execute( METHOD_GET_REF_LIST_FROM_REALLOID, htParams );

		if( mstrRefLOIDList.length < 1 ) {
			return false;
		}

		return true;

	}

	/**
	 * RealLOIDから参照LOIDリストを返します。
	 * @return String[] 参照リスト
	 */
	public String[] getRefListResult() {
		return mstrRefLOIDList;
	}


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

		htParam.put( LO_ID, strLoID );
		htParam.put( LOGIN_USER_ID2, strLoginUserID );
		Vector vecResult = (Vector)execute( METHOD_SEARCHREFERENCELIST, 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;
	}

	/**
	 * 「LO更新」画面、「LO削除」画面に表示する登録内容を検索します。
	 * @param strLoID		LOID
	 * @return boolean true: 検索成功 false: 検索失敗
	 */
	public boolean selectHistory( String strRealLoID )
		throws Exception
	{
		// RealLOIDを設定します
		setRealLOID( strRealLoID );

		Vector vecResult = (Vector)super.execute( METHOD_SELECT_HISTORY, htParams );

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

		mobjHistoryData = (HistoryData)vecResult.get(1);

		return true;
	}
	
	/**
	 * 「LO更新」画面、「LO削除」画面に表示する登録内容を取得します。
	 * @return String[] 参照リスト
	 */
	public HistoryData getHistory() {
		return mobjHistoryData;
	}

	/**
	 * パラメータに前提条件をセットします
	 */
	public void setPrere( String strPrere ) {
		putData( PRERE, strPrere );
	}

	/**
	 * 検索結果の現在のインデックスの前提条件を取得します
	 */
	public String getPrere() {
		LoData objData = (LoData)getResult();
		return objData.getPrere();
	}

	/**
	 * 前提条件の被設定チェックに使用します。
	 * 前提条件に設定されているLOIDから前提条件を設定しているLOIDのリストをString配列で返します。
	 * @param strPrereID		PrereID
	 * @return boolean true: 検索成功 false: 検索失敗
	 */
	public boolean selectLOIDFromPrere( String strPrereID )
		throws Exception
	{
		// PrereIDを設定します
		setPrere( strPrereID );

		Vector vecResult = (Vector)super.execute( METHOD_LOID_FROM_PRERE, htParams );

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

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

		return true;
	}
	
	/**
	 * 前提条件の被設定LOIDリストを取得します。
	 * @return String[] 被設定LOIDリスト
	 */
	public String[] getLOIDFromPrere() {
		return mstrLOIDList;
	}


	/**
	 * 前提条件を満たしているかのチェックに使用します。
	 * 満たしている場合はtrueを、満たしていない場合はfalseを返します。
	 * @param strPrereID		PrereID
	 * @return boolean true: 検索成功 false: 検索失敗
	 */
	public boolean checkPrere(String strUserID, String strLOID, String strPrere)
		throws Exception
	{
		// ユーザID,LOID,前提条件をパラメータに設定します。
		setUserID(strUserID);
		setLoID(strLOID);
		setPrere(strPrere);
		
		Vector vecResult = (Vector)super.execute( METHOD_IS_PREREQUISITED, htParams );

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

		Integer intPrereFlg = (Integer)vecResult.get(1);
		
		// 前提条件を満たしている場合
		if(intPrereFlg.intValue() == 1){
			mblPrere = true;
		}
		// 前提条件を満たしていない場合
		else{
			mblPrere = false;
		}

		return true;
	}
	
	/**
	 * 前提条件の判定結果を返却します。
	 * @return String[] 被設定LOIDリスト
	 */
	public boolean isPrerequisited() {
		return mblPrere;
	}

	/**
	 * コピー元LOIDを設定します
	 * @param astrPrere 前提条件
	 */
	public void setCopyLOID( String strCopyLOID ) {
		putData( LO_COPY_ID, strCopyLOID );
	}

	/**
	 * コピー元LOIDを取得します
	 * @return String 前提条件
	 */
	public String getCopyLOID() {
		LoData objData = (LoData)getResult();
		return objData.getCopyLOID();
	}

	/**
	 * ステータスの判定に使用します。
	 * @param strLOID		LOID
	 * @param strUserID		UserID
	 * @return boolean true: ステータス判定成功 false: ステータス判定失敗
	 */
	public boolean checkStatus(String strLOID, String strUserID)
		throws Exception
	{
		// ユーザID,LOID,前提条件をパラメータに設定します。
		setUserID(strUserID);
		setLoID(strLOID);
		
		Vector vecResult = (Vector)super.execute( METHOD_GET_STATUS, htParams );

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

		Integer intStatus = (Integer)vecResult.get(1);
		mintStatus = intStatus.intValue();
		
		// 返り値が0の場合エラー
		if(mintStatus == 0){
			return false;
		}
		

		return true;
	}
	
	/**
	 * ステータス判定結果を返却します。
	 * @return int ステータス
	 */
	public int getStatus() {
		return mintStatus;
	}

	/**
	 * メール送信の１回あたりの送信件数を取得する。
	 * @return メール送信の１回あたりの送信件数。
	 * @throws XMOException
	 */
	public int getSendMailCount() throws XMOException {
		Map executeResult = null;
		int returnValue = 0;
		try {
			executeResult = (Map)super.execute(METHOD_GET_SEND_MAIL_COUNT, htParams);
			// エラーメッセージの取得
			String message = null;
			message = (String)executeResult.get( KEY_ERROR_MESSAGE );
			if ( message != null ) {
				throw new XMOException( message );
			}
			// 送信件数の取得
			Integer sendMailCount = null;
			sendMailCount = (Integer)executeResult.get( KEY_SEND_MAIL_COUNT );
			if ( sendMailCount == null ) {
				throw new XMOException( "sendMailCount == null" );
			}
			returnValue = sendMailCount.intValue();
		} catch (XMOException e) {
			throw e;
		} catch ( Exception e ) {
			DebugLog.write(this.getClass(), e, DebugLog.HIGHT );
			throw new XMOException( e.getMessage() );
		}
		return returnValue;
	}

//	 ADD 2005/02/10 START SUGAWARA [LOM情報取得]
	/**
	 * <p>選択項目つきLOM情報を設定します。</p>
	 * <p>画面上からのパラメータとして、LoIDをもとに該当LoのLOM情報を選択項目付きでセットします。
	 *    初期表示等でLoID無しで検索したい場合は、引数に<code>null</code>をセットしてください。</p>
	 * @param Strng loID 取得するLoのLoID
	 * @return 成功可否判定
	 */
	public boolean setLomDisplayData(String loID) throws Exception {
	    Hashtable htParam = htParam = new Hashtable();

	    if (loID == null) {
	        loID = "";
	    }
        htParam.put(LO_ID, loID);

        lomDisplayData = (Vector)super.execute(KEY_LOM_DISPLAY_DATA, htParam );
		// メッセージデータを取得します
		mobjMessage = (MessageData)lomDisplayData.get(0);
		if( isErr( mobjMessage ) || isWarning( mobjMessage ) ) {
			return false;
		}
	    
		return true;
	}
	
	/**
	 * <p>選択項目付きLOM情報を取得します。</p>
	 * <p>setLomDisplaydata()を実行したあとDBから取得した、選択項目付きLOM情報の取得を行います。</p>
	 * @return 選択項目付きLOM情報
	 */
	public Vector getLomDisplayData() {
	    return lomDisplayData;
	}

	/**
	 * <p>学習期間を設定します。</p>
	 * <p>LoIDを元に対象となるLoのLOM情報から、学習期間を取得し、設定します。</p>
	 * @param loID
	 * @return 成功可否判定
	 * @throws Exception
	 */
	public boolean setTimeSpan(String loID) throws Exception{
	    if (loID == null) {
		    return false;
	    }
	    Hashtable htParam = htParam = new Hashtable();
        htParam.put(LO_ID, loID);
        lomDisplayData = (Vector)super.execute(KEY_GET_TIMESPAN, htParam );
		// メッセージデータを取得します
		mobjMessage = (MessageData)lomDisplayData.get(0);
		if( isErr( mobjMessage ) || isWarning( mobjMessage ) ) {
			return false;
		}
	    
	    return true;
	}
	
	/**
	 * <p>学習期間を取得します。</p>
	 * <p>setTimeSpan()を実行したあとDBから取得した、学習期間の取得を行います</p>
	 * @return 取得した学習期間
	 */
	public String getTimeSpan() {
	    return (String) lomDisplayData.get(1);
	}
//	 ADD 2005/02/10 END SUGAWARA
//	 ADD 2005/02/11 START SUGAWARA [LOM情報更新]
	/**
	 * <p>LOM情報の更新を行います。</p>
	 * @param displayData 画面入力情報
	 * @return 成功可否判定
	 */
	public boolean updateLomData(Vector displayData) throws Exception{
	    Hashtable htParam = htParam = new Hashtable();

        htParam.put(LO_ID, displayData);

        lomDisplayData = (Vector)super.execute(KEY_UPDATE_LOM, htParam );
		// メッセージデータを取得します
		mobjMessage = (MessageData)lomDisplayData.get(0);
		if( isErr( mobjMessage ) || isWarning( mobjMessage ) ) {
			return false;
		}
	    
		return true;
	}
//	 ADD 2005/02/11 END SUGAWARA

// ADD 2005/02/12 START Katsuhiko Kagami(UNITEC) [LO追加情報/追加/更新/削除メソッド追加]
	/**
	 * LoExtendテーブルを検索して情報を取得します。
	 * @param strLoID 対象のLOID
	 * @return 成功:true/失敗:false
	 * @throws Exception パラメータ異常、DBアクセスエラーなどの場合
	 */
	public boolean selectLoExtend( String strLoID )
		throws Exception
	{
	    Hashtable htParam = htParam = new Hashtable();

		if (strLoID != null) {
			// LoIDの設定
			htParam.put( LO_ID, strLoID );
		}

        Vector vecResult = (Vector)super.execute(METHOD_SELECT_LOEXTEND, htParam );
		// メッセージデータを取得します
		mobjMessage = (MessageData)vecResult.get(0);
		if( isErr( mobjMessage ) || isWarning( mobjMessage ) ) {
			return false;
		}
		if (vecResult.size() > 1) {
			// レコードが検索できた場合は見つかったデータを設定する。
			mLoExtendRecord = (LoExtendRecord)vecResult.get(1);
			mbLoExtendFound = true;
		} else {
			// 見つからなかった場合
			mLoExtendRecord = null;
			mbLoExtendFound = false;
		}

		return true;
	}

	/**
	 * LoExtendテーブルを追加します。
	 * @param strLoID 		対象のLOID
	 * @param strBuy 		購入ステータス
	 * @param strKeyword1	LO推奨検索キーワード1
	 * @param strKeyword2	LO推奨検索キーワード2
	 * @param strKeyword3	LO推奨検索キーワード3
	 * @param strKeyword4	LO推奨検索キーワード4
	 * @param strKeyword5	LO推奨検索キーワード5
	 * @return 成功:true/失敗:false
	 * @throws Exception パラメータ異常、DBアクセスエラーなどの場合
	 */
	public boolean insertLoExtend( String strLoID, 
			String strBuy,
			String strKeyword1, String strKeyword2, 
			String strKeyword3, String strKeyword4,
			String strKeyword5)
		throws Exception
	{
	    Hashtable htParam = htParam = new Hashtable();

	    // パラメータの設定
		if (strLoID != null) {
			// LoIDの設定
			htParam.put( LO_ID, strLoID );
		}
		if (strBuy != null) {
			// Buyの設定
			htParam.put( LOEXTEND_BUY, strBuy );
		}
		if (strKeyword1 != null) {
			// keyword1の設定
			htParam.put( LOEXTEND_KEYWORD1, strKeyword1 );
		}
		if (strKeyword2 != null) {
			// keyword2の設定
			htParam.put( LOEXTEND_KEYWORD2, strKeyword2 );
		}
		if (strKeyword3 != null) {
			// keyword3の設定
			htParam.put( LOEXTEND_KEYWORD3, strKeyword3 );
		}
		if (strKeyword4 != null) {
			// keyword4の設定
			htParam.put( LOEXTEND_KEYWORD4, strKeyword4 );
		}
		if (strKeyword5 != null) {
			// keyword5の設定
			htParam.put( LOEXTEND_KEYWORD5, strKeyword5 );
		}

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

		return true;
	}
	
	/**
	 * LoExtendテーブルを更新します。
	 * @param strLoID		対象のLOID
	 * @param strBuy		購入ステータス
	 * @param strKeyword1	LO推奨検索キーワード1
	 * @param strKeyword2	LO推奨検索キーワード2
	 * @param strKeyword3	LO推奨検索キーワード3
	 * @param strKeyword4	LO推奨検索キーワード4
	 * @param strKeyword5	LO推奨検索キーワード5
	 * @return 成功:true/失敗:false
	 * @throws Exception パラメータ異常、DBアクセスエラーなどの場合
	 */
	public boolean updateLoExtend( String strLoID,
			String strBuy,
			String strKeyword1, String strKeyword2, 
			String strKeyword3, String strKeyword4,
			String strKeyword5)
		throws Exception
	{
	    Hashtable htParam = htParam = new Hashtable();

	    // パラメータの設定
		if (strLoID != null) {
			// LoIDの設定
			htParam.put( LO_ID, strLoID );
		}
		if (strBuy != null) {
			// Buyの設定
			htParam.put( LOEXTEND_BUY, strBuy );
		}
		if (strKeyword1 != null) {
			// keyword1の設定
			htParam.put( LOEXTEND_KEYWORD1, strKeyword1 );
		}
		if (strKeyword2 != null) {
			// keyword2の設定
			htParam.put( LOEXTEND_KEYWORD2, strKeyword2 );
		}
		if (strKeyword3 != null) {
			// keyword3の設定
			htParam.put( LOEXTEND_KEYWORD3, strKeyword3 );
		}
		if (strKeyword4 != null) {
			// keyword4の設定
			htParam.put( LOEXTEND_KEYWORD4, strKeyword4 );
		}
		if (strKeyword5 != null) {
			// keyword5の設定
			htParam.put( LOEXTEND_KEYWORD5, strKeyword5 );
		}

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

		return true;
	}

	/**
	 * LoExtendテーブルを削除します。
	 * @param strLoID 対象のLOID
	 * @return 成功:true/失敗:false
	 * @throws Exception パラメータ異常、DBアクセスエラーなどの場合
	 */
	public boolean deleteLoExtend( String strLoID )
		throws Exception
	{
		    Hashtable htParam = htParam = new Hashtable();

			if (strLoID != null) {
				// LoIDの設定
			    htParam.put(DELETE_LOID, strLoID);
			}

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

			return true;
	}
	
// ADD 2005/02/12 END Katsuhiko Kagami(UNITEC)
// ADD 2005/02/16 START SUGAWARA [LOM属性検索]
	/**
	 * <p>LOM情報のテキスト項目の検索を行う。</p>
	 * @param params 検索文字列
	 * @return 成功可否判定
	 * @throws Exception
	 */
	public boolean searchLomText(String param) throws Exception {
	    Hashtable htParam = htParam = new Hashtable();

	    if (param == null) {
	        return false;
	    }
        htParam.put(LO_ID, param);

        searchLomResult = (Vector)super.execute(KEY_SEARCH_LOM_TEXT, htParam );
		// メッセージデータを取得します
		mobjMessage = (MessageData)searchLomResult.get(0);
		if( isErr( mobjMessage ) || isWarning( mobjMessage ) ) {
			return false;
		}
	    
		return true;
	}
	
	/**
	 * <p>LOM情報の選択項目の検索を行う。</p>
	 * @param params 検索条件を格納したベクタ
	 * @return 成功可否判定
	 * @throws Exception
	 */
	public boolean searchLom(Vector params) throws Exception {
	    Hashtable htParam = htParam = new Hashtable();

	    if (params == null) {
	        return false;
	    }
        htParam.put(LO_ID, params);
        searchLomResult = (Vector)super.execute(KEY_SEARCH_LOM, htParam );
		// メッセージデータを取得します
		mobjMessage = (MessageData)searchLomResult.get(0);
		if( isErr( mobjMessage ) || isWarning( mobjMessage ) ) {
			return false;
		}
	    
		return true;
	}

	/**
	 * <p>LOM情報検索の結果を取得する。</p>
	 * @return 検索結果を格納したベクタ
	 */
	public Vector getSearchLomResult() {
	    return searchLomResult;
	}
// ADD 2005/02/16 END SUGAWARA [LOM属性検索]

//	ADD 2005/02/14 START MASUDA [属性追加対応]
    /**
	 * LOM詳細情報を登録用にセットします。
     * @param instrDisData	登録対象情報
     * @param instrRegLoID	登録LOID
     * @return	Vector		登録データ
     * @throws Exception
     */
    public Vector setLomDetailData(String instrDisData, String instrRegLoID)
    	throws Exception
    {
    	String[] spDisData = instrDisData.split("!");
    	String[][] spDisData2 = new String[spDisData.length][1];
		//入力値をチェック用にセット
		for (int i=0;i<spDisData.length;i++) {
        	spDisData2[i] = spDisData[i].split(",");
		}
		Vector vecDispData = new Vector();
		Vector newDispData = new Vector();
		Vector newDispValue = new Vector();
		Vector vecDisData = new Vector();
		String stroldPath = "";
		//LOM情報取得
		if (this.setLomDisplayData("")) {
			vecDisData = this.getLomDisplayData();
			Vector vecmsg = (Vector)vecDisData.get(0);	
			Vector vecnew = (Vector)vecDisData;

			Iterator iterator = vecnew.iterator();
	        while(iterator.hasNext()) {
				DisplayData strDisData = (DisplayData) iterator.next();
				if (strDisData!=null) {
					Iterator values = strDisData.getDisplayValueIterator();
					//LOMタイプでVALUE取得（PATH＝アイテム名）
					for (int i=0;i<spDisData2.length;i++) {
						if (spDisData2[i][0].equals(strDisData.getPath())) {
							//入力値セット
							//text系セット・選択系は表示用バリューが同一のものをセット
							if ((strDisData.getLomType().equals("00") || strDisData.getLomType().equals("15")) ||
								(!strDisData.getLomType().equals("00") && !strDisData.getLomType().equals("15") && !spDisData2[i][0].equals("0"))) {
								newDispValue.add(new DisplayValue(/*encodeSJIS(*/spDisData2[i][1]/*)*/, "", false));
							}
		    			}
					}
		        	if (newDispValue.size()!=0) {
		        		newDispData.add(new DisplayData(strDisData.getPath(),strDisData.getLomType(),strDisData.getName(),newDispValue));
		        		newDispValue = new Vector();
		        	}
				}
	    	}
			newDispData.add(0, instrRegLoID);
		}
    	return newDispData;
    }

    /**
	 * 文字エンコードを"ISO-8859-1"(ユニコード文字)から"Windows-31J"に変換します
     * @param strTar	変更対象文字列
     * @return
     */
    public String encodeSJIS( String strTar ) {

		if( strTar == null ) {
			return "";
		}

		try {
			return new String( strTar.getBytes( "8859_1" ), "Windows-31J" );
		}
		catch( java.io.UnsupportedEncodingException ue ) {
		}

		// 例外発生時は元の文字列を返す
		return strTar;
	}
//	ADD 2005/02/14 END MASUDA
	
	//	ADD 2005/04/27 START Koji Umehara [メソッド管理追加]
	/**
	 * パラメータにメソッドフラグをセットします.
	 * Insert,Update,Delete,copy,transferメソッドをメソッドツリーに対して
	 * 実行する場合には必ずtrueを設定します。
	 */
	public void setMethodFlag( boolean blnMethodFlag ) {
		htParams.put( METHOD_FLAG, new Boolean( blnMethodFlag ) );
	}
	//	ADD 2005/04/27 END Koji Umehara [メソッド管理追加]
	
}

