package jp.ne.mki.wedge.rule.server.control;

import jp.ne.mki.wedge.rule.base.AbstractServer;

/**
 *   <h2>デシジョンテーブル呼び出し</h2><br/>
 *   <p>ロジッククラスパラメータの物理名のデシジョンテーブルを呼び出します。<br/>
 *      ロジッククラスパラメータが空の場合は、IN1から物理名を取得します。<br/>
 *   </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>(デシジョンテーブル物理名(TEXT))</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>
 *
 * @since 1.1.3
 * @author mki
 * @version 1.0
 */

public class ExecuteDecisionTable extends AbstractServer {

	private String pname = null;

	/**
	 * @see jp.ne.mki.wedge.rule.base.interfaces.CommonInterface#getIOParameter()
	 */
	public int getIOParameter() throws Throwable {
		if (getRuleParameter().length() != 0) {
			pname = getRuleParameter();
		} else if (getInRecord(0) != null) {
			pname = getInRecord(0).getString();
		} else {
			return IO_ERROR_IN;
		}
		return OK;
	}

	/**
	 * @see jp.ne.mki.wedge.rule.base.interfaces.CommonInterface#execute()
	 */
	public int execute() throws Throwable {
		return executeDecisionTable(pname);
	}

	/**
	 * @see jp.ne.mki.wedge.rule.base.interfaces.CommonInterface#exit()
	 */
	public void exit() throws Throwable {
		pname = null;
	}

}