#% WEBアプリケーション用HTMLをコントロールするJavaソースファイル作成用の雛型ファイル
#% 2010/04/28 By S.Ito

#% === 一覧票 =====================================================================
#! list package
package #package#;

#! list 1
#loggerComment#import org.apache.log4j.Logger;
import java.math.BigDecimal;
import java.sql.Date;
import java.sql.SQLException;
import java.sql.Time;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashMap;
import java.util.LinkedList;

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

import jp.oarts.pirka.core.ctrl.SelectList;
import jp.oarts.pirka.core.ctrl.SelectListItem;
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;
import jp.oarts.pirka.core.util.converter.Converter;
import jp.oarts.pirka.core.util.converter.DataConverter;

import java.util.List;

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

	protected #daoModelName# dao = new #daoModelName#();

	// ロガー
	#loggerComment#private static Logger logger = Logger.getLogger(#mstName#List.class);

	private static String[] primary_key_array = new String[] { #primaryKeys# };
	private List<Object[]> primary_value_array_list = new ArrayList<Object[]>();

	private static Converter[] converters = new Converter[]{
#! list converter
		new Converter("field_#name#", "#name#", new ListDataConverter()),	//	#nameJp#
#! list 1.5
	};

#! list 2
	/**
	 * コンストラクタ
	 */
	public #mstName#List() {

		FieldMap fm = getFieldMap();
		FieldMap loopFieldMap = getDefaultLoopFieldMap("list_loop");

		// チェッカー設定
#! list addCheck
		addCheck("param_field_#name#", #checker#);
#! list addErrorCheckReturner
		addErrorCheckReturner();

#! list setOfficialFieldName start

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

		// 自動的に入力チェックなわないボタンの設定
		fm.setAutoCheck("clear_button", false);
		fm.setAutoCheck("goto_insert_button", false);
		fm.setAutoCheck("return_button", false);
		loopFieldMap.setAutoCheck("goto_reference_button", false);
		loopFieldMap.setAutoCheck("goto_update_button", false);

#! list setSelecter start
		// #nameJp# 選択リストの設定
#! list setSelecter
		SelectList #name#_select_list = new SelectList();
		//#name#_select_list.add("key", "value");	// このコードは実際の選択リストの設定を行うコードに置き換えてください
#! list setSelecter 2
		SelectList #name#_select_list =  (new #SelectListObjectName#()).getSelectListAddSpaceItem();
#! list setSelecter end
		fm.setSelectList("param_field_#name#", #name#_select_list); // #nameJp#

#! list setFormat start
		// パラメータ入力フィールドのフォーマッターの設定
#! list setFormat
		fm.setFormat("param_field_#name#", #format#);
#! list 3

		// 一覧表のパラメータフィールドのフォーマッター設定
#! list setListFormat
		loopFieldMap.setFormat("field_#name#", #format#);

#! list 3.5
		// 動的HTML部の初期化
		initDynamicHtml();

	}

	/**
	 * 動的HTML部の初期化
	 */
	protected void initDynamicHtml(){
		FieldMap fm = getFieldMap();
		// ラジオボタンの設定

#! list initDynamicHtml 1
		SelectList #name#_select_list = new SelectList();
		//#name#_select_list.add("key", "value");	// このコードは実際の選択リストの設定を行うコードに置き換えてください
#! list initDynamicHtml 2
		SelectList #name#_select_list  = (new #SelectListObjectName#()).getSelectList();
#! list initDynamicHtml 3
		for(SelectListItem selectListItem : #name#_select_list.getSelectListItems()){
			FieldMap  radio_loop = createLoopFieldMap("radio_loop_param_field_#name#");
			radio_loop.setGroupLoopLevel("param_field_#name#", 1);
			radio_loop.setValue("param_field_#name#", selectListItem.getSendValue());
			radio_loop.setValue("radio_title_param_field_#name#", selectListItem.getOptionValue());
			fm.addFieldMap("radio_loop_param_field_#name#", radio_loop);
		}

#! list 3.7
	}

	/**
	 * 検索条件クリアボタンクリック時の処理
	 */
	public void clear_button() {
		try {
			#loggerComment#logger.info("#classNameJp#・検索条件クリアボタン(clear_button):開始");

			FieldMap fm = getFieldMap();
	
			fm.clearAllValue();
	
			// 動的HTML部の初期化
			initDynamicHtml();
		} finally {
			#loggerComment#logger.info("#classNameJp#・検索条件クリアボタン(clear_button):終了");
		}
	}

	/**
	 * 検索開始ボタンクリック時の処理
	 */
	public void search_button() {
		try {
			#loggerComment#logger.info("#classNameJp#・検索開始ボタン(search_button):開始");

			FieldMap fm = getFieldMap();

			// 検索条件設定
			dao.clearSearchParameter();
#! list set search parameter text equal
			dao.addSearchParameter("#name#", #daoModelName#.equal, fm.get#group#ValueString("param_field_#name#"));
#! list set search parameter text like
			dao.addSearchParameter("#name#", #daoModelName#.like, fm.get#group#ValueString("param_field_#name#"));
#! list set search parameter select
			dao.addSearchParameter("#name#", #daoModelName#.equal, fm.get#group#ValueString("param_field_#name#"));
#! list set search parameter boolean
			dao.addSearchParameter("#name#", #daoModelName#.equal,
				fm.getValueString("param_field_#name#") == null
				|| fm.getValueString("param_field_#name#").length() == 0
				? null : "1".equals(fm.getValueString("param_field_#name#")));
#! list set search parameter int
			dao.addSearchParameter("#name#", #daoModelName#.equal, fm.get#group#ValueIntObject("param_field_#name#"));
#! list set search parameter long
			dao.addSearchParameter("#name#", #daoModelName#.equal, fm.get#group#ValueLongObject("param_field_#name#"));
#! list set search parameter bigdecimal
			dao.addSearchParameter("#name#", #daoModelName#.equal, fm.get#group#ValueBigDecimal("param_field_#name#"));
#! list set search parameter date
			dao.addSearchParameter("#name#", #daoModelName#.equal, fm.get#group#ValueDate("param_field_#name#"));
#! list set search parameter time
			dao.addSearchParameter("#name#", #daoModelName#.equal, fm.get#group#ValueTime("param_field_#name#"));
#! list set search parameter timestamp
			dao.addSearchParameter("#name#", #daoModelName#.equal, fm.get#group#ValueTimestamp("param_field_#name#"));
#! list 4

			start_search_main();
		} finally {
			#loggerComment#logger.info("#classNameJp#・検索開始ボタン(search_button):終了");
		}
	}

	/**
	 * 再検索
	 */
	public void re_search() {
		start_search_main();
	}


	/**
	 * 検索開始ボタンクリック時の処理
	 */
	public void start_search_main() {

		FieldMap fm = getFieldMap();

		// 検索開始
		List<#mstName#> list;
		try {
			list = dao.search();
		} catch (Exception e) {
			throw new RuntimeException(e);
		}

		// 主キー情報の保持
		primary_value_array_list.clear();
		for (#mstName# rec : list) {
			primary_value_array_list.add(new Object[] { #primaryKeyGetMethods# });
		}

		// リストデータの設定
		setBeanList(list, fm, "list_loop", converters);
	}

	/**
	 * 新規ボタンクリック時の処理
	 *
	 * @return 新規画面
	 */
	public PirkaWindow goto_insert_button() {
		try {
			#loggerComment#logger.info("#classNameJp#・新規ボタン(goto_insert_button):開始");
			
			PirkaWindow newInsertWindow = new #mstMntName#Insert();
			return newInsertWindow;
		} finally {
			#loggerComment#logger.info("#classNameJp#・新規ボタン(goto_insert_button):終了");
		}
	}

	/**
	 * 更新ボタンがクリックされた時の処理
	 *
	 * @return 修正画面
	 */
	public PirkaWindow goto_update_button() {

		try {
			#loggerComment#logger.info("#classNameJp#・更新ボタン(goto_update_button):開始");

			// 選択された行のインデックス番号取得
			int[] selectIndex = getActionLoopIndex();

			// プライマリーキーマップ作成
			Object[] values = primary_value_array_list.get(selectIndex[0]);
			HashMap<String, Object> keyMap = new HashMap<String, Object>();
			for (int i = 0; i < primary_key_array.length; i++) {
				keyMap.put(primary_key_array[i], values[i]);
			}

			// 修正画面作成
			#mstMntName#Update updateWindow = new #mstMntName#Update(this);

			// 修正画面にプライマリーキー設定
			try {
				if(!updateWindow.setPrimaryKey(keyMap)){
					addError("選択したデータは既に存在していません");
					return this;
				}
			} catch (SQLException e) {
				throw new RuntimeException("データーベース障害", e);
			}

			//	新しい自画面を戻す
			return updateWindow;
		} finally {
			#loggerComment#logger.info("#classNameJp#・更新ボタン(goto_update_button):終了");
		}
	}

	/**
	 * 照会ボタンがクリックされた時の処理
	 *
	 * @return 照会画面
	 */
	public PirkaWindow goto_reference_button() {
		try {
			#loggerComment#logger.info("#classNameJp#・照会ボタン(goto_reference_button):開始");

			// 選択された行のインデックス番号取得
			int[] selectIndex = getActionLoopIndex();

			// プライマリーキーマップ作成
			Object[] values = primary_value_array_list.get(selectIndex[0]);
			HashMap<String, Object> keyMap = new HashMap<String, Object>();
			for (int i = 0; i < primary_key_array.length; i++) {
				keyMap.put(primary_key_array[i], values[i]);
			}

			// 照会画面作成
			#mstMntName#Reference referenceWindow = new #mstMntName#Reference(this);

			// 照会画面にプライマリーキー設定
			try {
				if(!referenceWindow.setPrimaryKey(keyMap)){
					addError("選択したデータは既に存在していません");
					return this;
				}
			} catch (SQLException e) {
				throw new RuntimeException("データーベース障害", e);
			}

			return referenceWindow;
		} finally {
			#loggerComment#logger.info("#classNameJp#・照会ボタン(goto_reference_button):終了");
		}
	}

	/**
	 * 戻るボタンクリック時の処理
	 */
	public PirkaWindow return_button() {
		try {
			#loggerComment#logger.info("#classNameJp#・戻るボタン(return_button):開始");
			return null;
		} finally {
			#loggerComment#logger.info("#classNameJp#・戻るボタン(return_button):終了");
		}
	}

	/**
	 * 一覧表示用のデータコンバーター<br>
	 * Boolean値を表示文字に変換する
	 */
	public static class ListDataConverter implements DataConverter {

		@Override
		public Object target2Win(Object value) {
			// テーブル表示時にデータが無いフィールドの枠を出すためにスペースへ変換
			if (value == null || (value instanceof String && ((String) value).length() <= 0)) {
				return " ";
			}
			// Boolean値の変換
			if (value instanceof Boolean) {
				return (Boolean) value ? "yes" : "no";
			}
			// その他はそのまま
			return value;
		}

		@Override
		public Object win2Target(Object value) {
			return value;
		}
	}

}
#!

#% === 照会画面 ======================================================================================
#! ref package
package #package#;

#! ref 1
#loggerComment#import org.apache.log4j.Logger;
import java.math.BigDecimal;
import java.sql.Date;
import java.sql.SQLException;
import java.sql.Time;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashMap;
import java.util.LinkedList;

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;
import jp.oarts.pirka.core.util.converter.Converter;
import jp.oarts.pirka.core.util.converter.DataConverter;

import java.util.List;


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

	// ロガー
	#loggerComment#private static Logger logger = Logger.getLogger(#mstName#Reference.class);

	private #mstListName#List listWindow;
#! ref 1.5
	private #mstName# rec = null;

	// データコンバーター配列
	private static Converter[] converters = new Converter[]{
#! ref converter
		new Converter("field_#name#", "#name#", new ReferenceDataConverter()),	//	#nameJp#
#! ref converter end
	};

#! ref converter multi

	// #nameJp#用データコンバーター配列
	private static Converter[] converters_#multiName# = new Converter[]{
#! ref converter multi field
		new Converter("field_#multiName#_#name#", "#name#", new ReferenceDataConverter()),	//	#nameJp#
#! ref converter multi end
	};

#! ref 1.6
	/**
	 * コンストラクタ
	 *
	 * @param listWindow
	 *             一覧表画面
	 */
	public #mstName#Reference(#mstListName#List listWindow) {

		this.listWindow = listWindow;

		FieldMap fm = getFieldMap();
#! ref setFormat start

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

		// リスト部（#nameJp#）のフォーマッターの設定
		FieldMap #multiName#LoopFieldMap = getDefaultLoopFieldMap("#multiName#_loop");
#! ref setListFormat multi field
		#multiName#LoopFieldMap.setFormat("field_#multiName#_#name#", #format#);
#! ref 2
	}

	/**
	 * 主キー設定
	 * @param keyMap	主キーが格納されているMAP（キー：項目名、値：キー値）
	 * @return false=データ取得失敗（他のユーザが削除）
	 * @throws SQLException
	 */
	public boolean setPrimaryKey(HashMap<String, Object> keyMap) throws SQLException {

		// 主キー設定
		#mstName# keyRec = new #mstName#();
#! ref primary key set
		keyRec.#setMethodName#((#type#) keyMap.get("#name#"));
#! ref get record

		// レコード取得
		#mstClassName# #daoModel# = #mstNameCreate#;
		rec = #daoModel#.get(keyRec);
		if(rec == null) {
			return false;
		}

		// 取得したレコードを画面のフィールドへ設定
		setBean(rec, converters);

#! ref get record multi
		// 取得したレコードのリスト部（#nameJp#）を画面のフィールドへ設定
		setBeanList(rec.#listGetter#(), getFieldMap(), "#multiName#_loop", converters_#multiName#);

#! ref 3

		return true;
	}

	/**
	 * 更新ボタンがクリックされた時の処理
	 *
	 * @return 更新画面
	 */
	public PirkaWindow goto_update_button() {
		try {
			#loggerComment#logger.info("#classNameJp#・更新ボタン(goto_update_button):開始");

			// 更新画面作成
			#mstName#Update updateWindow = new #mstName#Update(listWindow);
	
			// 更新画面にプライマリーキー設定
			try {
				if(!updateWindow.setPrimaryKey(rec)){
					addError("選択したデータは既に存在していません");
					return this;
				}
			} catch (SQLException e) {
				throw new RuntimeException("データーベース障害", e);
			}
	
			return updateWindow;
		} finally{
			#loggerComment#logger.info("#classNameJp#・更新ボタン(goto_update_button):終了");
		}
	}

	/**
	 * 削除ボタンクリック時の処理
	 */
	public PirkaWindow delete_button() {
		try {
			#loggerComment#logger.info("#classNameJp#・削除ボタン(delete_button):開始");
			try {
				#mstClassName# #daoModel# = #mstNameCreate#;
				#daoModel#.delete(rec);
	
				listWindow.re_search();
	
			} catch (SQLException e) {
				throw new RuntimeException(e);
			}
			return null;
		} finally{
			#loggerComment#logger.info("#classNameJp#・削除ボタン(delete_button):終了");
		}
	}

	/**
	 * 戻るボタンクリック時の処理
	 */
	public PirkaWindow return_button() {
		try {
			#loggerComment#logger.info("#classNameJp#・戻るボタン(return_button):開始");
		
			return null;
		} finally{
			#loggerComment#logger.info("#classNameJp#・戻るボタン(return_button):終了");
		}
	}

	/**
	 * 参照表示用のデータコンバーター<br>
	 * Boolean値を表示文字に変換する
	 */
	public static class ReferenceDataConverter implements DataConverter {

		@Override
		public Object target2Win(Object value) {
			// テーブル表示時にデータが無いフィールドの枠を出すためにスペースへ変換
			if (value == null || (value instanceof String && ((String) value).length() <= 0)) {
				return " ";
			}
			// Boolean値の変換
			if (value instanceof Boolean) {
				return (Boolean) value ? "yes" : "no";
			}
			// その他はそのまま
			return value;
		}

		@Override
		public Object win2Target(Object value) {
			return value;
		}
	}
}
#!


#% === 新規画面 ======================================================================================
#! ins package
package #package#;

#! ins 1
#loggerComment#import org.apache.log4j.Logger;
import java.math.BigDecimal;
import java.sql.Date;
import java.sql.SQLException;
import java.sql.Time;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashMap;
import java.util.LinkedList;

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

import jp.oarts.pirka.core.ctrl.SelectList;
import jp.oarts.pirka.core.ctrl.SelectListItem;
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.check.PirkaCheckerNumericRange;

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;
import jp.oarts.pirka.core.util.converter.Converter;
import jp.oarts.pirka.core.util.converter.DataConverter;

import java.util.List;

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

	// ロガー
	#loggerComment#private static Logger logger = Logger.getLogger(#mstName#Insert.class);

	// データコンバーター配列
	private static Converter[] converters = new Converter[]{
#! ins converter
		new Converter("field_#name#", "#name#"),	//	#nameJp#
#! ins converter end
	};

#! ins converter multi

	// #nameJp#用データコンバーター配列
	private static Converter[] converters_#multiName# = new Converter[]{
#! ins converter multi field
		new Converter("field_#multiName#_#name#", "#name#"),	//	#nameJp#
#! ins converter multi end
	};

#! ins 2

	/**
	 * コンストラクタ
	 */
	public #mstName#Insert() {
		FieldMap fm = getFieldMap();

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

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

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

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

		// 自動的に入力チェックなわないボタンの設定
		fm.setAutoCheck("return_button", false);
#! ins no check button multi
		fm.setAutoCheck("#name#_line_insert_button", false);
		getDefaultLoopFieldMap("#name#_loop").setAutoCheck("#name#_line_delete_button", false);
#! ins setSelecter start

		// 選択リストの設定
#! ins setSelecter
		SelectList #name#_select_list = new SelectList();
		//#name#_select_list.add("key", "value");	// このコードは実際の選択リストの設定を行うコードに置き換えてください
#! ins setSelecter 2
		SelectList #name#_select_list = (new #SelectListObjectName#()).getSelectListAddSpaceItem();
#! ins setSelecter end
		fm.setSelectList("#name#", #name#_select_list); // #nameJp#
#! ins setSelecter end multi
		getDefaultLoopFieldMap("#multiName#_loop").setSelectList("#name#", #name#_select_list); // #nameJp#

#! ins setFormat start

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

		// ラジオボタンの設定
#! ins initDynamicHtml 1
		SelectList #name#_select_list = new SelectList();
		//#name#_select_list.add("key", "value");	// このコードは実際の選択リストの設定を行うコードに置き換えてください
#! ins initDynamicHtml 2
		SelectList #name#_select_list  = (new #SelectListObjectName#()).getSelectList();
#! ins initDynamicHtml 3
		for(SelectListItem selectListItem : #name#_select_list.getSelectListItems()){
			FieldMap  radio_loop = createLoopFieldMap("radio_loop_field_#name#");
			radio_loop.setGroupLoopLevel("field_#name#", 1);
			radio_loop.setValue("field_#name#", selectListItem.getSendValue());
			radio_loop.setValue("radio_title_field_#name#", selectListItem.getOptionValue());
			fm.addFieldMap("radio_loop_field_#name#", radio_loop);
		}

#! ins initDynamicHtml 4
		FieldMap loopMap = getDefaultLoopFieldMap("#name-loop#");
		for(SelectListItem selectListItem : #name#_select_list.getSelectListItems()){
			FieldMap  radio_loop = createLoopFieldMap("radio_loop_#name#");
			radio_loop.setGroupLoopLevel("#name#", 1);
			radio_loop.setValue("#name#", selectListItem.getSendValue());
			radio_loop.setValue("radio_title_#name#", selectListItem.getOptionValue());
			loopMap.addFieldMap("radio_loop_#name#", radio_loop);
		}

#! ins 3.5
	}


	/**
	 * 登録ボタンがクリックされた時の処理
	 *
	 * @return 登録画面
	 */
	public PirkaWindow save_button() {
		try{
			#loggerComment#logger.info("#classNameJp#・登録ボタン(save_button):開始");

			// 画面のフィールドよりデータ取得
			#mstName# rec = new #mstName#();
			getBean(rec, converters);

#! ins get record multi
			// 取得したレコードのリスト部（#nameJp#）を画面のフィールドへ設定
			rec.#listGetter#().clear();
			for(#multiClass# mRec : (List<#multiClass#>)getBeanList(#multiClass#.class, getFieldMap(), "#multiName#_loop", converters_#multiName#)){
				rec.#listGetter#().add(mRec);
			}

#! ins get record multi autoRowNo start
			// 自動行番号設定(#nameJp#)
			for(int index = 0; index < rec.#getter#().size(); index++){
				rec.#getter#().get(index).#setter#(index+1);
			}

#! ins 4
			#mstClassName# #daoModel# = #mstNameCreate#;
			try {
				if (#daoModel#.insert(rec) <= 0) {
					addError("登録に失敗しました");
					return this;
				}
			} catch (SQLException e) {
				throw new RuntimeException(e);
			}

			return new #mstName#Insert();
		} finally {
			#loggerComment#logger.info("#classNameJp#・登録ボタン(save_button):終了");
		}
	}

	/**
	 * 明細リストに自動行番号属性が有効なフィールドが存在してたら通し番号を格納する
	 */
	protected void renumbering(){
		FieldMap fm = getFieldMap();

#! ins autoRowNo start
		for (int index = 0; index < fm.getFieldMapSize("#multiName#_loop"); index++) {
			fm.getFieldMap("#multiName#_loop", index).setValue("field_#multiName#_#name#", index + 1);
		}
#! ins 4.5

	}

#! ins line add del
	/**
	 * #nameJp#に1行追加する
	 */
	public void #name#_line_insert_button(){
		try{
			#loggerComment#logger.info("#classNameJp#・行追加ボタン(#name#_line_insert_button):開始");

			FieldMap fm = getFieldMap();
			fm.addFieldMap("#name#_loop", createLoopFieldMap("#name#_loop"));
	
			// 自動行番号
			renumbering();
		} finally {
			#loggerComment#logger.info("#classNameJp#・行追加ボタン(#name#_line_insert_button):終了");
		}
	}

	/**
	 * #nameJp#から1行削除する
	 */
	public void #name#_line_delete_button(){
		try{
			#loggerComment#logger.info("#classNameJp#・行削除ボタン(#name#_line_delete_button):開始");

			FieldMap fm = getFieldMap();
			fm.removeFieldMap("#name#_loop", getActionLoopIndex()[0]);
	
			// 自動行番号
			renumbering();
		} finally {
			#loggerComment#logger.info("#classNameJp#・行削除ボタン(#name#_line_delete_button):終了");
		}
	}

#! ins 5
	/**
	 * 戻るボタンクリック時の処理
	 */
	public PirkaWindow return_button() {
		try{
			#loggerComment#logger.info("#classNameJp#・戻るボタン(return_button):開始");

			return null;
		} finally {
			#loggerComment#logger.info("#classNameJp#・戻るボタン(return_button):終了");
		}
	}
}

#% === 更新画面 ======================================================================================
#! upd package
package #package#;

#! upd 1
#loggerComment#import org.apache.log4j.Logger;
import java.math.BigDecimal;
import java.sql.Date;
import java.sql.SQLException;
import java.sql.Time;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashMap;
import java.util.LinkedList;

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

import jp.oarts.pirka.core.ctrl.SelectList;
import jp.oarts.pirka.core.ctrl.SelectListItem;
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.check.PirkaCheckerNumericRange;

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;
import jp.oarts.pirka.core.util.converter.Converter;
import jp.oarts.pirka.core.util.converter.DataConverter;

import java.util.List;

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

	// ロガー
	#loggerComment#private static Logger logger = Logger.getLogger(#mstName#Update.class);

	// データコンバーター配列
	private static Converter[] converters = new Converter[]{
#! upd converter
		new Converter("field_#name#", "#name#"),	//	#nameJp#
#! upd converter end
	};

#! upd converter multi

	// #nameJp#用データコンバーター配列
	private static Converter[] converters_#multiName# = new Converter[]{
#! upd converter multi field
		new Converter("field_#multiName#_#name#", "#name#"),	//	#nameJp#
#! upd converter multi end
	};

#! upd 2
	// 更新データ
	private #mstName# rec = new #mstName#();

	// 一覧ウィンドウ
	private #searcherClassName#List listWindow;

	/**
	 * コンストラクタ
	 */
	public #mstName#Update(#searcherClassName#List listWindow) {
		this.listWindow = listWindow;

		FieldMap fm = getFieldMap();

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

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

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

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

		// 自動的に入力チェックなわないボタンの設定
		fm.setAutoCheck("return_button", false);
		fm.setAutoCheck("delete_button", false);
#! upd no check button multi
		fm.setAutoCheck("#name#_line_insert_button", false);
		getDefaultLoopFieldMap("#name#_loop").setAutoCheck("#name#_line_delete_button", false);
#! upd setSelecter start

		// 選択リストの設定
#! upd setSelecter
		SelectList #name#_select_list = new SelectList();
		//#name#_select_list.add("key", "value");	// このコードは実際の選択リストの設定を行うコードに置き換えてください
#! upd setSelecter 2
		SelectList #name#_select_list = (new #SelectListObjectName#()).getSelectListAddSpaceItem();
#! upd setSelecter end
		fm.setSelectList("#name#", #name#_select_list); // #nameJp#
#! upd setSelecter end multi
		getDefaultLoopFieldMap("#multiName#_loop").setSelectList("#name#", #name#_select_list); // #nameJp#
#! upd setFormat start

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

		// ラジオボタンの設定
#! upd initDynamicHtml 1
		SelectList #name#_select_list = new SelectList();
		//#name#_select_list.add("key", "value");	// このコードは実際の選択リストの設定を行うコードに置き換えてください
#! upd initDynamicHtml 2
		SelectList #name#_select_list  = (new #SelectListObjectName#()).getSelectList();
#! upd initDynamicHtml 3
		for(SelectListItem selectListItem : #name#_select_list.getSelectListItems()){
			FieldMap  radio_loop = createLoopFieldMap("radio_loop_field_#name#");
			radio_loop.setGroupLoopLevel("field_#name#", 1);
			radio_loop.setValue("field_#name#", selectListItem.getSendValue());
			radio_loop.setValue("radio_title_field_#name#", selectListItem.getOptionValue());
			fm.addFieldMap("radio_loop_field_#name#", radio_loop);
		}

#! upd initDynamicHtml 4
		FieldMap loopMap = getDefaultLoopFieldMap("#name-loop#");
		for(SelectListItem selectListItem : #name#_select_list.getSelectListItems()){
			FieldMap  radio_loop = createLoopFieldMap("radio_loop_#name#");
			radio_loop.setGroupLoopLevel("#name#", 1);
			radio_loop.setValue("#name#", selectListItem.getSendValue());
			radio_loop.setValue("radio_title_#name#", selectListItem.getOptionValue());
			loopMap.addFieldMap("radio_loop_#name#", radio_loop);
		}

#! upd 3.2
	}

	/**
	 * 主キー設定
	 * @param keyMap	主キーが格納されているMAP（キー：項目名、値：キー値）
	 * @return false=データ取得失敗（他のユーザが削除）
	 * @throws SQLException
	 */
	public boolean setPrimaryKey(HashMap<String, Object> keyMap) throws SQLException {

		// 主キー設定
		#mstName# keyRec = new #mstName#();
#! upd primary key set
		keyRec.#setMethodName#((#type#) keyMap.get("#name#"));
#! upd get record

		// レコード取得
		return setPrimaryKey(keyRec);
	}

	/**
	 * 主キー設定
	 * @param keyMap	主キーが格納されているレコード
	 * @return false=データ取得失敗（他のユーザが削除）
	 * @throws SQLException
	 */
	public boolean setPrimaryKey(#mstName# keyRec) throws SQLException {

		// レコード取得
		#mstClassName# #daoModel# = #mstNameCreate#;
		rec = #daoModel#.get(keyRec);
		if(rec == null) {
			return false;
		}

		// 取得したレコードを画面のフィールドへ設定
		setBean(rec, converters);

#! upd set record multi
		// 取得したレコードのリスト部（#nameJp#）を画面のフィールドへ設定
		setBeanList(rec.#listGetter#(), getFieldMap(), "#multiName#_loop", converters_#multiName#);
#! upd 3.5

		return true;
	}

	/**
	 * 更新ボタンがクリックされた時の処理
	 *
	 * @return 更新画面
	 */
	public PirkaWindow save_button() {
		try {
			#loggerComment#logger.info("#classNameJp#・更新ボタン(save_button):開始");

			// 画面のフィールドよりデータ取得
			getBean(rec, converters);

#! upd get record multi
			// 取得したレコードのリスト部（#nameJp#）を画面のフィールドへ設定
			rec.#listGetter#().clear();
			for(#multiClass# mRec : (List<#multiClass#>)getBeanList(#multiClass#.class, getFieldMap(), "#multiName#_loop", converters_#multiName#)){
				rec.#listGetter#().add(mRec);
			}

#! upd get record multi autoRowNo start
			// 自動行番号設定(#nameJp#)
			for(int index = 0; index < rec.#getter#().size(); index++){
				rec.#getter#().get(index).#setter#(index+1);
			}

#! upd 4
			#mstClassName# #daoModel# = #mstNameCreate#;
			try {
				if (#daoModel#.update(rec) <= 0) {
					addError("更新に失敗しました");
					return this;
				}

				// 一覧表を再検索
				listWindow.re_search();

			} catch (SQLException e) {
				throw new RuntimeException(e);
			}

			return listWindow;
		} finally {
			#loggerComment#logger.info("#classNameJp#・更新ボタン(save_button):終了");
		}
	}

	/**
	 * 削除ボタンクリック時の処理
	 */
	public PirkaWindow delete_button() {
		try {
			#loggerComment#logger.info("#classNameJp#・削除ボタン(delete_button):開始");

			try {
				#mstClassName# #daoModel# = #mstNameCreate#;
				#daoModel#.delete(rec);
	
				listWindow.re_search();
	
			} catch (SQLException e) {
				throw new RuntimeException(e);
			}
			return listWindow;
		} finally {
			#loggerComment#logger.info("#classNameJp#・削除ボタン(delete_button):終了");
		}
	}


	/**
	 * 明細リストに自動行番号属性が有効なフィールドが存在してたら通し番号を格納する
	 */
	protected void renumbering(){
		FieldMap fm = getFieldMap();

#! upd autoRowNo start
		for (int index = 0; index < fm.getFieldMapSize("#multiName#_loop"); index++) {
			fm.getFieldMap("#multiName#_loop", index).setValue("field_#multiName#_#name#", index + 1);
		}
#! upd 4.5

	}

#! upd line add del
	/**
	 * #nameJp#に1行追加する
	 */
	public void #name#_line_insert_button(){
		try {
			#loggerComment#logger.info("#classNameJp#・行追加ボタン(#name#_line_insert_button):開始");

			FieldMap fm = getFieldMap();
			fm.addFieldMap("#name#_loop", createLoopFieldMap("#name#_loop"));
	
			// 自動行番号
			renumbering();
		} finally {
			#loggerComment#logger.info("#classNameJp#・行追加ボタン(#name#_line_insert_button):終了");
		}
	}

	/**
	 * #nameJp#から1行削除する
	 */
	public void #name#_line_delete_button(){
		try {
			#loggerComment#logger.info("#classNameJp#・行削除ボタン(#name#_line_delete_button):開始");

			FieldMap fm = getFieldMap();
			fm.removeFieldMap("#name#_loop", getActionLoopIndex()[0]);
	
			// 自動行番号
			renumbering();
		} finally {
			#loggerComment#logger.info("#classNameJp#・行削除ボタン(#name#_line_delete_button):終了");
		}
	}

#! upd 5

	/**
	 * 戻るボタンクリック時の処理
	 */
	public PirkaWindow return_button() {
		try {
			#loggerComment#logger.info("#classNameJp#・戻るボタン(return_button):開始");

			return null;
		} finally {
			#loggerComment#logger.info("#classNameJp#・戻るボタン(return_button):終了");
		}
	}
}
#!
