package jp.ne.mki.wedge.rule.client.component.dialog;
import javax.swing.SwingUtilities;
import jp.ne.mki.wedge.rule.AbstractBusinessRule;
import jp.ne.mki.wedge.run.interfaces.DataInterface;
import jp.ne.mki.wedge.rule.RuleLibrary;

/**
 *   <h2>ダイアログを表示(Swing処理待ち版)</h2><br/>
 *   <p>メッセージダイアログを表示します。<br/>
 *      <br/>
 *     SwingUtilities.invokeLater を使いSwingのEventの最後に実行されます。
 *     ダイアログ2回表示する事により発生するSwingの不具合(キャレットが複数発生する)
 *     を回避する目的で使用が可能です。
 *   </p>
 * <br/>
 * <h4>[I/O RECORD]</h4>
 * <table border="1" cellpadding="3" cellspacing="0" width="100%">
 *  <tr class="TableSubHeadingColor">
 *      <th style="width:50%;">InputRecord</th>
 *      <th>OutputRecord</th>
 *  </tr><tr class="TableRowColor">
 *      <td>
 *      <!--  InputRecordの内容を記述   -->
 *      <ol>
 *      <li>ダイアログに表示したいアイテム(省略可能)
 *      </ol>
 *      <!--  ここまで   -->
 *      </td>
 *      <td>
 *      <!-- OutputRecordの内容を記述    -->
 *
 *      <!--  ここまで   -->
 *      </td>
 *  </tr></table>
 *
 * <h4>[RULE PARAMETER]</h4>
 * <table border="1" cellpadding="3" cellspacing="0" width="100%">
 *  <tr>
 *      <th style="width:100px;" class="TableSubHeadingColor">Parameter</th>
 *      <td class="TableRowColor">
 *      <!-- Parameterの内容を記述    -->
 *          ダイアログに表示したい文字列
 *      <!--ここまで   -->
 *      </td>
 *  </tr></table>
 *
 * @author mki
 * @version 1.0
 */

public class ShowMessageDialogWait extends AbstractBusinessRule {
	DataInterface inData = null;

	/**
	 * IOパラメータ取得。{@link #execute() execute} の前に実行される。
	 * @return　int int OK=処理続行、ERROR=異常終了、CANCEL=処理を中断(正常終了)
	 */
	public int getIOParameter() {
		inData = getInRecord(0);
		return OK;
	}
	/**
	 * ダイアログを表示する処理を実行。Parameterに指定されている文字列を表示する。
	 * @return　int USER_ERRORを返す。
	*/
	public int execute() {
		final String message;
		if(inData == null){
				message = getRuleParameter();
		}
		else{
				message = inData.getValue();
		}
		
		SwingUtilities.invokeLater( new Thread() {
		public void run() {
			RuleLibrary.showInfomationDialog(getContentPane(), message);
		}
		});

		return USER_ERROR;
	}
	/**
	 * 終了処理。保持していた変数などを開放する処理を記述します。<br/>
	 * {@link #execute() execute} の後に実行されます。<br/>正常終了・異常終了などに関わらず必ず実行されます。
	*/
	public void exit() {
		inData = null;
	}
}
