#% 基本的なHTMLをコントロールするJavaソースファイル作成用の雛型ファイル
#% 2009/04/22 By S.Ito

#! package
package #package#;

#! import BigDecimal
import java.math.BigDecimal;
#! import Date
import java.sql.Date;
#! import Time
import java.sql.Time;
#! import Timestamp
import java.sql.Timestamp;
#! import logger
import org.apache.log4j.Logger;
#! import
import java.util.Calendar;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;

import jp.oarts.pirka.core.ctrl.SelectList;
import jp.oarts.pirka.core.kernel.FieldMap;
import jp.oarts.pirka.core.win.PirkaWindow;
import jp.oarts.pirka.core.res.PirkaFileDownloaderFromBytes;
import jp.oarts.pirka.core.res.PirkaRespons;
import jp.oarts.pirka.core.util.check.PirkaChecker;
import jp.oarts.pirka.core.util.check.PirkaCheckerLength;
import jp.oarts.pirka.core.util.check.PirkaCheckerString;
import jp.oarts.pirka.core.util.check.PirkaCheckerStringChars;
import jp.oarts.pirka.core.util.format.DateFieldFormat;
import jp.oarts.pirka.core.util.format.NumericFieldFormat;
import jp.oarts.pirka.core.util.format.TimeFieldFormat;
import jp.oarts.pirka.core.util.check.Checker;
import jp.oarts.pirka.core.util.check.PirkaCheckException;

/**
 * #nameJp# prika ウインドウクラス
 */
@SuppressWarnings("serial")
public class #className# extends PirkaWindow {

#! logger
	// ロガー
	private static Logger logger = Logger.getLogger(#className#.class);

#! class
	/**
	 * コンストラクタ
	 */
	public #className#() {
		super();

		FieldMap fm = getFieldMap();

		// チェッカー設定
#! addCheck
		addCheck("#name#", #checker#);
#! addCheck dokuji
		addCheck("#name#", new Checker(){
			@Override
			public void check(String value) throws PirkaCheckException {

				// ★ここで#name#に入力された値のチェックを行ないます。
				// チェックでエラーのときはPirkaCheckExceptionをスローしてください。

			}});
#! addCheck with message
		addCheck("#name#", "#message#", #checker#);
#! addCheck dokuji with message
		addCheck("#name#", "#message#", new Checker(){
			@Override
			public void check(String value) throws PirkaCheckException {

				// ★ここで#name#に入力された値のチェックを行ないます。
				// チェックでエラーのときはPirkaCheckExceptionをスローしてください。

			}});
#! addErrorCheckReturner
		addErrorCheckReturner();
#! setOfficialFieldName start

		// インターフェース名とタイトル名のリンク
#! setOfficialFieldName
		fm.setOfficialFieldName("#name#", "#nameJp#");
#! setAutoCheck start

		// 自動的に入力チェックなわないボタンの設定
#! setAutoCheck
		fm.setAutoCheck("#name#", false);
#! setSelecter start

		// 選択リストの項目定義＆設定
#! setSelecter
		SelectList #name#_select_list = new SelectList();
		#name#_select_list.add("#nameJp#_01", "01");
		#name#_select_list.add("#nameJp#_02", "02");
		#name#_select_list.add("#nameJp#_03", "03");
		#name#_select_list.add("#nameJp#_04", "04");
		fm.setSelectList("#name#", #name#_select_list);

#! setFormat start

		// フォーマッターの設定
#! setFormat
		fm.setFormat("#name#", #format#);
#! setInitData start

		// 初期表示データ格納
#! setInitData
		fm.setValue("#name#", #value#);
#! init end
	}
#! actionMethod start 1

	/**
	 * #nameJp#(#action#)がクリックされた時の処理を行う
#! actionMethod @return
	 *
	 * @return #return#
#! actionMethod start 2
	 */
	public #type# #methodName#() {
#! actionMethod logger start
		logger.info("#nameJp#・#actionNameJp#(#action#):開始");

#! actionMethod start 3

		FieldMap fm = getFieldMap();

#! actionMethod getData
		#type# #name# = #method#("#name#")#option#;
#! actionMethod getData file
		try {
			#type# #name# = #method#("#name#")#option#;
		} catch(IOException e){
			// ★イメージ取得失敗時の処理を記述します
		}
#! actionMethod proc

		// ★ここに処理を記述してください
		// 処理結果を画面に反映させるにはfmにデータを設定します
		// コンストラクタの初期表示データ格納を参考にしてください

		///////////////////////////////////////////////////////////////////////////

#! actionMethod proc link

		// ★ここに処理を記述してください

		///////////////////////////////////////////////////////////////////////////

#! actionMethod logger end
		logger.info("#nameJp#・#actionNameJp#(#action#):終了");
#! actionMethod return null

		// ★nullを返すことにより呼出元のウインドウに戻ります
		return null;
#! actionMethod return next

		// ★表示を行いたいPirkaWindowオブジェクトを戻り値とします
		// 呼出元のウインドウに戻りたいときはnullを返します
		// thisを返すと自ウインドウが再び表示されるため画面遷移はおこりません
		// 例）return new NextWindow();
		return this;
#! actionMethod return download

		// ★PirkaFileDownloaderまたはその派生クラスのオブジェクトを返すことによりダウンロードが可能となります
		// 以下の例ではファイル名がabc.txtでファイルの内容が123CrLfのファイルのダウンロードが行われます
		return new PirkaFileDownloaderFromBytes("abc.txt", new byte[]{0x31, 0x32, 0x33, 0x0d, 0x0a});
#! actionMethod footer
	}
#! byteLoad

	/**
	 * インプットストリームの内容をバイト配列に変換する
	 *
	 * @pramam is InputStreamオブジェクト
	 * @retrun 変換されたバイト配列
	 */
	protected byte[] changeInputStream_to_byteArray(InputStream is) throws IOException {
		if (is == null) {
			return new byte[0];
		}

		byte[] buf = new byte[4096];
		ByteArrayOutputStream baos = null;
		try {
			try {
				baos = new ByteArrayOutputStream();
				while (true) {
					int length = is.read(buf);
					if (length <= 0) {
						break;
					}
					baos.write(buf, 0, length);
				}
			} finally {
				try {
					baos.close();
				} catch (Exception e) {
					// 何もしない
				}
			}

			return baos.toByteArray();

		} finally {
			try {
				is.close();
			} catch (Exception e) {
				// 何もしない
			}
		}
	}
#! footer
}