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

//
//	一括登録XMO クライアントクラス
//			変更履歴
//				2004.01.08	新規作成	二條智文
//
package jp.co.ntt.lms.xmo.LumpInsert;

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

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;

/**
 * 一括登録XMO クライアントクラスです。<BR>
 * このクラスは一括登録 XMO サーバクラスとの接続および、
 * 一括登録に必要なパラメータの設定、検索後の
 * 検索結果の取得メソッドを提供します。<BR>
 * <p>
 * <table border="1">
 * 	<tr>
 *   <td rowspan="7">ファイルアップロード</td>
 *   <td>LumpInsertClientインスタンスを生成する</td>
 *   <td>LumpInsertClient client = new LumpInsertClient()</td>
 *  </tr>
 * 	<tr>
 *   <td>一括登録用のＸＭＬデータ文字列を設定する</td>
 *   <td>client.setLumpFile(String);</td>
 *  </tr>
 *  <tr>
 *   <td>ログインユーザを設定する</td>
 *   <td>client.setLoginID(String);</td>
 *  </tr>
 *  <tr>
 *   <td>登録先を設定する</td>
 *   <td>client.setLumpRootGroup(String);</td>
 *  </tr>
 * 	<tr>
 *   <td>ファイルアップロードを実行する</td>
 *   <td>boolean uploadFlag = client.upload()</td>
 *  </tr>
 * 	<tr>
 *   <td>失敗した場合、エラーとなった理由を取得する</td>
 *   <td>
 *     if (uploadFlag == false ) {<br>
 *     &nbsp;&nbsp;&nbsp;&nbsp;String strMessage = client.getMessage();<br>
 *     }
 *   </td>
 *  </tr>
 * 	<tr>
 *   <td>サーバ上のファイル名を取得する</td>
 *   <td>strLumpFileName = client.getLumpFileName();</td>
 *  </tr>
 * 	<tr>
 *   <td rowspan="6">一括登録ＸＭＬファイルからの登録</td>
 *   <td>LumpInsertClientインスタンスを生成する</td>
 *   <td>LumpInsertClient client = new LumpInsertClient()</td>
 *  </tr>
 * 	<tr>
 *   <td>一括登録ファイル名を指定する</td>
 *   <td>client.setLumpFileName(String);</td>
 *  </tr>
 *  <tr>
 *   <td>メール送信の有無を設定する</td>
 *   <td>client.setSendMail(String);</td>
 *  </tr>
 *  <tr>
 *   <td>登録先グループＩＤを設定する</td>
 *   <td>client.setLumpRootGroup(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="7">一括登録ＸＭＬ文字列からの登録</td>
 *   <td>LumpInsertClientインスタンスを生成する</td>
 *   <td>LumpInsertClient client = new LumpInsertClient()</td>
 *  </tr>
 * 	<tr>
 *   <td>内部文字コードを指定する</td>
 *   <td>client.setEncode(String);</td>
 *  </tr>
 * 	<tr>
 *   <td>一括登録ＸＭＬ文字列を指定する</td>
 *   <td>client.setLumpXML(String);</td>
 *  </tr>
 *  <tr>
 *   <td>メール送信の有無を設定する</td>
 *   <td>client.setSendMail(String);</td>
 *  </tr>
 *  <tr>
 *   <td>登録先グループＩＤを設定する</td>
 *   <td>client.setLumpRootGroup(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>
 * </table>
 * </p>
 * @author T.Nijou
 * @version 0.0.0.1 2004/01/08
 */
public class LumpInsertClient extends XMOBasicClient
	implements LumpInsertParam
{

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

	/** アップロードメソッド名です */
	private static final String METHOD_UPLOAD  = "upload";

	/** 一括登録ファイルリスト取得メソッド名です */
	private static final String METHOD_GETLIST = "getFileList";

   /**
	* 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";

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

	/**
	 * パラメータにアップロードファイル値をセットします
	 */
	public void setLumpFile( String strLumpFile ) {
		putData( LUMP_FILE, strLumpFile );
	}

	/**
	 * 一括登録により登録したユーザにメールを送信するか設定します。<br>
	 * 一括登録を実施した際、登録対象となったユーザに対して登録通知のメールを送信するか設定します。
	 * メールを送信する場合は&quot;1&quot;を、メールを送信しない場合は&quot;2&quot;を渡します。
	 * 引数で渡された文字列は、内部で文字コードを変換してからデータとして格納されます。
	 * 変換は、setEncodeメソッドを呼んだ場合は、指定した文字コードから、
	 * 呼んでいない場合は&quot;8859-1&quot;から&quot;Shift_JIS&quot;への変換になります。<br>
	 * @param strMailFlag メール送信の有無。値は上記参照。
	 * 
	 * @see XMOBasicClient#setEncode(String)
	 */
	public void setSendMail( String strMailFlag ) {
		putData( MAIL_FLG, strMailFlag );
	}

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


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

	/**
	 * 一括登録する際に利用するＸＭＬファイル名を設定します。<br>
	 * 一括登録を実行する際には、このメソッドを呼んでファイルを指定するか、
	 * setLumpXMLメソッドを呼んでＸＭＬデータ文字列を直接渡すようにします。<br>
	 * 引数で渡された文字列は、内部で文字コードを変換してからデータとして格納されます。
	 * 変換は、setEncodeメソッドを呼んだ場合は、指定した文字コードから、
	 * 呼んでいない場合は&quot;8859-1&quot;から&quot;Shift_JIS&quot;への変換になります。<br>
	 * 
	 * @param strLumpFileName 一括登録する際に利用するＸＭＬファイル名。
	 * @see #setLumpXML(String)
	 * @see XMOBasicClient#setEncode(String)
	 */
	public void setLumpFileName(String strLumpFileName)
	{
		putData( LUMP_FILENAME, strLumpFileName );
	}

	/**
	 * 一括登録する際に利用するＸＭＬデータ文字列を設定します。<br>
	 * 一括登録を実行する際には、このメソッドを呼んでＸＭＬデータ文字列を直接渡すか、
	 * setLumpFileNameメソッドを呼んでファイルを指定するようにします。<br>
	 * 引数で渡された文字列は、内部で文字コードを変換してからデータとして格納されます。
	 * 変換は、setEncodeメソッドを呼んだ場合は、指定した文字コードから、
	 * 呼んでいない場合は&quot;8859-1&quot;から&quot;Shift_JIS&quot;への変換になります。<br>
	 * @param strLumpFileName 一括登録する際に利用するＸＭＬデータ文字列。
	 * @see #setLumpFileName(String)
	 * @see XMOBasicClient#setEncode(String)
	 */
	public void setLumpXML( String strXML ) {
		putData( LUMP_XML, strXML );
	}

	/**
	 * 一括登録ファイルのアップロードを実行します。<br>
	 * このメソッドを呼ぶ際には予め、setLumpFile、setLoginID、
	 * setLumpRootGroupメソッドを呼びます。
	 * @return 正常時はtrueを、失敗した場合はfalseを戻します。
	 * @throws Exception RMI接続に失敗した場合。
	 * @see #setLumpFile(String)
	 * @see #setLoginID(String)
	 * @see #setLumpRootGroup(String)
	 */
	public boolean upload()
		throws Exception
	{
		return select_m( METHOD_UPLOAD );
	}

	/**
	 * 一括登録ファイルリスト取得処理
	 * @return boolean 正常時はtrue　エラー時はfalse
	 * @exception Exception RMI接続に失敗した場合
	 */
	public boolean getFileList()
		throws Exception
	{
		return select_m( METHOD_GETLIST );
	}

	/**
	 * 一括登録ファイルリストを取得します
	 *
	 * @return String[] 一括登録ファイルリスト
	 */
	public String[] getResultFileList()
	{
		String[] strRet = null;
		try
		{
			// 一括登録ファイルリストは必ずVectorのIndex = 1
			strRet = (String[])getResult(1);
		}
		catch(Exception e)
		{
			DebugLog.write(this.getClass(), e, DebugLog.HIGHT);
		}
		return strRet;
	}

	/**
	 * 一括登録ファイル名を取得します。<br>
	 * uploadメソッドにより、アップロードした一括登録ファイルの
	 * サーバ上でのファイル名を取得します。<br>
	 *
	 * @return アップロードした一括登録ファイル名を取得します。<br>
	 * @see #upload()
	 */
	public String getLumpFileName()
	{
		String strRet = null;
		try
		{
			// 一括登録ファイル名は必ずVectorのIndex = 1
			strRet = (String)getResult(1);
		}
		catch(Exception e)
		{
			DebugLog.write(this.getClass(), e, DebugLog.HIGHT);
		}
		return strRet;
	}


	/**
	 * 一括登録されたユーザのリストを取得します。
	 * @return Vector 一括登録ユーザリスト<BR>
	 */
	public Vector getInsertUserList() throws Exception
	{
		Vector vctRet = null;
		try
		{
			// 一括登録ファイルリストは必ずVectorのIndex = 1
			vctRet = (Vector)getResult(1);
		}
		catch(Exception e)
		{
			DebugLog.write(this.getClass(), e, DebugLog.HIGHT);
		}
		return(vctRet);
	}


	// 内部関数
	protected boolean execute_m( String strMethodName )
		throws Exception
	{
		Vector vecResultTemp = (Vector)execute( strMethodName, htParams );
		vecResults = vecResultTemp;

		// 結果インデックスを初期化します
		intResultIndex = 0;
		MessageData objMessage = (MessageData)vecResultTemp.get(0);
		mobjMessage = objMessage;
		if( isErr( objMessage ) || isWarning( objMessage ) ) {
			return false;
		}
		return true;
	}

	/**
	 * メール送信の１回あたりの送信件数を取得する。
	 * @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;
	}
}

