#% メンテナンス用HTMLをコントロールするJavaソースファイル作成用の雛型ファイル
#% 2009/04/24 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.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 java.util.List;

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

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

	protected #mstName#Dao dao = new #mstName#Dao();

	private static String[] primary_key_array = new String[] { #primaryKeys# };
	private List<Object[]> primary_value_array_list = new ArrayList<Object[]>();
#! list select list map def
	private HashMap<String, String> #name#_codeMap = new HashMap<String, String>();
#!

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

		FieldMap fm = getFieldMap();

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

#! list setOfficialFieldName start

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

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

		// 選択リストの項目定義＆設定　★以下のコードは実際の選択リストの設定を行うコードに置き換えてください
#! list setSelecter
		SelectList #name#_select_list = new SelectList();
		#name#_select_list.add("#nameJp#_#zero#1", "#zero#1");
		#name#_select_list.add("#nameJp#_#zero#2", "#zero#2");
		#name#_select_list.add("#nameJp#_#zero#3", "#zero#3");
		#name#_select_list.add("#nameJp#_#zero#4", "#zero#4");
#! list setSelecter all
		setSelectListWithMap(#name#_codeMap, "search_parameter_#name#", #name#_select_list);

#! list setSelecter map only
		setSelectListWithMap(#name#_codeMap, #name#_select_list);

#! list setFormat start

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

	}

	/**
	 * 選択リストの設定
	 *
	 * @param selectList
	 *            選択リスト
	 */
	public void setSelectListWithMap(HashMap<String, String> map, String fieldName, SelectList selectList) {

		// 条件無しを先頭に付加するための新しい選択リスト
		SelectList newSelectList = new SelectList();
		newSelectList.add("", "");

		FieldMap fm = getFieldMap();

		map.clear();
		for (int i = 0; i < selectList.size(); i++) {
			map.put(selectList.getSendValue(i), selectList.getOptionValue(i));
			newSelectList.add(selectList.getOptionValue(i), selectList.getSendValue(i));
		}

		fm.setSelectList(fieldName, newSelectList);
	}

	/**
	 * 選択リストの設定（マップのみ）
	 *
	 * @param selectList
	 *            選択リスト
	 */
	public void setSelectListWithMap(HashMap<String, String> map, SelectList selectList) {

		// 条件無しを先頭に付加するための新しい選択リスト
		SelectList newSelectList = new SelectList();
		newSelectList.add("", "");

		map.clear();
		for (int i = 0; i < selectList.size(); i++) {
			map.put(selectList.getSendValue(i), selectList.getOptionValue(i));
			newSelectList.add(selectList.getOptionValue(i), selectList.getSendValue(i));
		}
	}

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

			FieldMap fm = getFieldMap();

			fm.clearAllValue();
		} finally {
			#loggerComment#logger.info("#classNameJp#・検索条件クリアボタン(clear_search):終了");
		}
	}

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

			FieldMap fm = getFieldMap();

			// 検索条件設定
			dao.clearSearchParameter();
#! list set search parameter text equal
			dao.addSearchParameter("#name#", #mstName#Dao.equal, fm.getValueString("search_parameter_#name#"));
#! list set search parameter text like
			dao.addSearchParameter("#name#", #mstName#Dao.like, fm.getValueString("search_parameter_#name#"));
#! list set search parameter select
			dao.addSearchParameter("#name#", #mstName#Dao.equal, fm.getValueString("search_parameter_#name#"));
#! list set search parameter boolean
			dao.addSearchParameter("#name#", #mstName#Dao.equal,
				fm.getValueString("search_parameter_#name#") == null
				|| fm.getValueString("search_parameter_#name#").length() == 0
				? null : "1".equals(fm.getValueString("search_parameter_#name#")));
#! list set search parameter int
			dao.addSearchParameter("#name#", #mstName#Dao.equal, fm.getValueIntObject("search_parameter_#name#"));
#! list set search parameter long
				dao.addSearchParameter("#name#", #mstName#Dao.equal, fm.getValueLongObject("search_parameter_#name#"));
#! list set search parameter bigdecimal
			dao.addSearchParameter("#name#", #mstName#Dao.equal, fm.getValueBigDecimal("search_parameter_#name#"));
#! list set search parameter date
			dao.addSearchParameter("#name#", #mstName#Dao.equal, fm.getValueDate("search_parameter_#name#"));
#! list set search parameter time
			dao.addSearchParameter("#name#", #mstName#Dao.equal, fm.getValueTime("search_parameter_#name#"));
#! list set search parameter timestamp
			dao.addSearchParameter("#name#", #mstName#Dao.equal, fm.getValueTimestamp("search_parameter_#name#"));
#! list 4

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

	/**
	 * 再検索
	 */
	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();

		fm.clearFieldMap("line_loop");
		for (#mstName# rec : list) {

			primary_value_array_list.add(new Object[] { #primaryKeyGetMethods# });

			FieldMap fmLoop = createLoopFieldMap("line_loop");
			fm.addFieldMap("line_loop", fmLoop);

			fmLoop.setAutoCheck("reference_button", false);
#! list set data
			setValueSpaceBr(fmLoop, "#name#", rec.#getMethod#());
#! list set select data
			setValueSpaceBr(fmLoop, "#name#", #name#_codeMap.get(rec.#getMethod#()));
#! list 5
		}

	}

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

	/**
	 * 照会ボタンがクリックされた時の処理
	 *
	 * @return 照会画面
	 */
	public PirkaWindow reference_button() {
		try {
			#loggerComment#logger.info("#classNameJp#・照会ボタン(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]);
			}
	
			// 照会画面作成
			#mstName#Reference referenceWindow = new #mstName#Reference(this);
	
			// 照会画面にプライマリーキー設定
			try {
				if(!referenceWindow.setPrimaryKey(keyMap)){
					addError("選択したデータは既に存在していません");
					return this;
				}
			} catch (SQLException e) {
				throw new RuntimeException("データーベース障害", e);
			}
	
			return referenceWindow;
		} finally {
			#loggerComment#logger.info("#classNameJp#・照会ボタン(reference_button):終了");
		}
	}

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

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

	/**
	 * 行データ設定
	 *
	 * @param fm
	 * @param fieldName
	 * @param value
	 */
	private void setValueSpaceBr(FieldMap fm, String fieldName, Object value) {

		fm.setTagEffective(fieldName, false);
		fm.setSafeMode(fieldName, true);

		if (value != null) {
			if (value instanceof String) {
				if (((String) value).length() > 0) {
					fm.setValue(fieldName, (String) value);
					return;
				}
			}
			if (value instanceof Integer) {
				fm.setValue(fieldName, (Integer) value);
				return;
			}
			if (value instanceof Long) {
				fm.setValue(fieldName, (Long) value);
				return;
			}
			if (value instanceof BigDecimal) {
				fm.setValue(fieldName, (BigDecimal) value);
				return;
			}
			if (value instanceof Date) {
				fm.setValue(fieldName, (Date) value);
				return;
			}
			if (value instanceof Time) {
				fm.setValue(fieldName, (Time) value);
				return;
			}
			if (value instanceof Timestamp) {
				fm.setValue(fieldName, (Timestamp) value);
				return;
			}
			if (value instanceof Boolean) {
				if ((Boolean) value) {
					fm.setValue(fieldName, "yes");
				} else {
					fm.setValue(fieldName, "no");
				}
				return;
			}
		}
		fm.setSafeMode(fieldName, false);
		fm.setValue(fieldName, "<br>"); // テーブルタグはスペースだと枠がなくなるので枠が出るようにする
	}

}
#!

#% === 照会画面 ======================================================================================
#! 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 {

	private #mstName#List listWindow;
#! ref select list map def
	private HashMap<String, String> #name#_codeMap = new HashMap<String, String>();
#! ref 1.5
	private #mstName# rec = null;

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

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

		this.listWindow = listWindow;

		FieldMap fm = getFieldMap();

		// 選択リストの項目定義＆設定　★以下のコードは実際の選択リストの設定を行うコードに置き換えてください
#! ref setSelecter
		SelectList #name#_select_list = new SelectList();
		#name#_select_list.add("#nameJp#_#zero#1", "#zero#1");
		#name#_select_list.add("#nameJp#_#zero#2", "#zero#2");
		#name#_select_list.add("#nameJp#_#zero#3", "#zero#3");
		#name#_select_list.add("#nameJp#_#zero#4", "#zero#4");
		setSelectListMap(#name#_codeMap, #name#_select_list);

#! ref setFormat start

		// フォーマッターの設定
#! ref setFormat
		fm.setFormat("#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

		// レコード取得
		#mstName#Dao dao = new #mstName#Dao();
		rec = dao.get(keyRec);
		if(rec == null){
			return false;
		}

		FieldMap fm = getFieldMap();

#! ref set data
		setValueSpaceBr(fm, "#name#", rec.#getMethod#());
#! ref set select data
		setValueSpaceBr(fm, "#name#", #name#_codeMap.get(rec.#getMethod#()));
#! ref 3

		return true;
	}

	/**
	 * データ設定
	 *
	 * @param fm
	 * @param fieldName
	 * @param value
	 */
	private void setValueSpaceBr(FieldMap fm, String fieldName, Object value) {

		fm.setTagEffective(fieldName, false);
		fm.setSafeMode(fieldName, true);

		if (value != null) {
			if (value instanceof String) {
				if (((String) value).length() > 0) {
					fm.setValue(fieldName, (String) value);
					return;
				}
			}
			if (value instanceof Integer) {
				fm.setValue(fieldName, (Integer) value);
				return;
			}
			if (value instanceof Long) {
				fm.setValue(fieldName, (Long) value);
				return;
			}
			if (value instanceof BigDecimal) {
				fm.setValue(fieldName, (BigDecimal) value);
				return;
			}
			if (value instanceof Date) {
				fm.setValue(fieldName, (Date) value);
				return;
			}
			if (value instanceof Time) {
				fm.setValue(fieldName, (Time) value);
				return;
			}
			if (value instanceof Timestamp) {
				fm.setValue(fieldName, (Timestamp) value);
				return;
			}
			if (value instanceof Boolean) {
				if ((Boolean) value) {
					fm.setValue(fieldName, "yes");
				} else {
					fm.setValue(fieldName, "no");
				}
				return;
			}
		}
		fm.setSafeMode(fieldName, false);
		fm.setValue(fieldName, "<br>"); // テーブルタグはスペースだと枠がなくなるので枠が出るようにする
	}

	/**
	 * 選択リストの設定
	 *
	 * @param selectList
	 *            選択リスト
	 */
	public void setSelectListMap(HashMap<String, String> map, SelectList selectList) {

		map.clear();
		for (int i = 0; i < selectList.size(); i++) {
			map.put(selectList.getSendValue(i), selectList.getOptionValue(i));
		}

	}

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

			PirkaWindow updateWindow = new #mstName#Update(rec, listWindow);
	
			return updateWindow;
		} finally{
			#loggerComment#logger.info("#classNameJp#・更新ボタン(update_button):終了");
		}
	}

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

			listWindow.re_search();
			return null;

		} catch (SQLException e) {
			throw new RuntimeException(e);
		} 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):終了");
		}
	}

}
#!


#% === 新規画面 ======================================================================================
#! 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.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 {

#! ins select list map def
	private HashMap<String, String> #name#_codeMap = new HashMap<String, String>();
#!

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


	/**
	 * コンストラクタ
	 */
	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 setSelecter start

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

		// 選択リストの項目定義＆設定　★以下のコードは実際の選択リストの設定を行うコードに置き換えてください
#! ins setSelecter
		SelectList #name#_select_list = new SelectList();
		#name#_select_list.add("#nameJp#_#zero#1", "#zero#1");
		#name#_select_list.add("#nameJp#_#zero#2", "#zero#2");
		#name#_select_list.add("#nameJp#_#zero#3", "#zero#3");
		#name#_select_list.add("#nameJp#_#zero#4", "#zero#4");
		setSelectListWithMap(#name#_codeMap, "#name#", #name#_select_list);

#! ins setFormat start

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

	}

	/**
	 * 登録ボタンがクリックされた時の処理
	 *
	 * @return 登録画面
	 */
	public PirkaWindow update_button() {
		try{
			#loggerComment#logger.info("#classNameJp#・登録ボタン(update_button):開始");
	
			#mstName# rec = new #mstName#();
			getBean(rec);
	
			#mstName#Dao dao = new #mstName#Dao();
			try {
				if (dao.insert(rec) <= 0) {
					addError("登録に失敗しました");
					return this;
				}
			} catch (SQLException e) {
				throw new RuntimeException(e);
			}
	
			// 画面をクリア
			FieldMap fm = getFieldMap();
			fm.clearAllValue();
	
			return this;
		} finally {
			#loggerComment#logger.info("#classNameJp#・登録ボタン(update_button):終了");
		}
	}

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

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

	/**
	 * 選択リストの設定
	 *
	 * @param selectList
	 *            選択リスト
	 */
	public void setSelectListWithMap(HashMap<String, String> map, String fieldName, SelectList selectList) {

		// 条件無しを先頭に付加するための新しい選択リスト
		SelectList newSelectList = new SelectList();
		newSelectList.add("", "");

		FieldMap fm = getFieldMap();

		map.clear();
		for (int i = 0; i < selectList.size(); i++) {
			map.put(selectList.getSendValue(i), selectList.getOptionValue(i));
			newSelectList.add(selectList.getOptionValue(i), selectList.getSendValue(i));
		}

		fm.setSelectList(fieldName, newSelectList);
	}

}

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

#! up 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.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 {

	private #mstName# rec;
	private #mstName#List listWindow;
#! up select list map def
	private HashMap<String, String> #name#_codeMap = new HashMap<String, String>();
#!

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

	/**
	 * コンストラクタ
	 */
	public #mstName#Update(#mstName# rec, #mstName#List listWindow) {

		this.rec = rec;
		this.listWindow = listWindow;

		FieldMap fm = getFieldMap();

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

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

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

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

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

		// 選択リストの項目定義＆設定　★以下のコードは実際の選択リストの設定を行うコードに置き換えてください
#! up setSelecter
		SelectList #name#_select_list = new SelectList();
		#name#_select_list.add("#nameJp#_#zero#1", "#zero#1");
		#name#_select_list.add("#nameJp#_#zero#2", "#zero#2");
		#name#_select_list.add("#nameJp#_#zero#3", "#zero#3");
		#name#_select_list.add("#nameJp#_#zero#4", "#zero#4");
		setSelectListWithMap(#name#_codeMap, "#name#", #name#_select_list);

#! up setFormat start

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

		// 初期表示データ設定
#! up init set display only
		setValueSpaceBr(fm, "#name#", rec.#getMethod#());
#! up init set display only select
		setValueSpaceBr(fm, "#name#", #name#_codeMap.get(rec.#getMethod#()));
#! up init set input
		fm.setValue("#name#", rec.#getMethod#());
#! up 4

	}

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

			FieldMap fm = getFieldMap();

			#mstName# rec = new #mstName#();

#! up get value non use or display only
			rec.#setMethod#(this.rec.#getMethod#()); // 画面で不使用または表示のみの項目は元の値を設定しなおす
#! up get value string
			rec.#setMethod#(fm.getValueString("#name#"));
#! up get value date
			rec.#setMethod#(fm.getValueDate("#name#"));
#! up get value time
			rec.#setMethod#(fm.getValueTime("#name#"));
#! up get value timestamp
			rec.#setMethod#(fm.getValueTimestamp("#name#"));
#! up get value boolean
			rec.#setMethod#(fm.getValueBoolean("#name#"));
#! up get value int
			rec.#setMethod#(fm.getValueIntObject("#name#"));
#! up get value long
			rec.#setMethod#(fm.getValueLongObject("#name#"));
#! up get value bigdecimal
			rec.#setMethod#(fm.getValueBigDecimal("#name#"));
#! up 5

			#mstName#Dao dao = new #mstName#Dao();
			try {
				if (dao.update(rec) <= 0) {
					addError("更新に失敗しました");
					return this;
				}
	
				listWindow.re_search();
	
			} catch (SQLException e) {
				throw new RuntimeException(e);
			}
	
			return listWindow;
		} finally {
			#loggerComment#logger.info("#classNameJp#・更新ボタン(update_button):終了");
		}
	}

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

	/**
	 * データ設定
	 *
	 * @param fm
	 * @param fieldName
	 * @param value
	 */
	private void setValueSpaceBr(FieldMap fm, String fieldName, Object value) {

		fm.setTagEffective(fieldName, true);
		fm.setSafeMode(fieldName, true);

		if (value != null) {
			if (value instanceof String) {
				if (((String) value).length() > 0) {
					fm.setValue(fieldName, (String) value);
					return;
				}
			}
			if (value instanceof Integer) {
				fm.setValue(fieldName, (Integer) value);
				return;
			}
			if (value instanceof Long) {
				fm.setValue(fieldName, (Long) value);
				return;
			}
			if (value instanceof BigDecimal) {
				fm.setValue(fieldName, (BigDecimal) value);
				return;
			}
			if (value instanceof Date) {
				fm.setValue(fieldName, (Date) value);
				return;
			}
			if (value instanceof Time) {
				fm.setValue(fieldName, (Time) value);
				return;
			}
			if (value instanceof Timestamp) {
				fm.setValue(fieldName, (Timestamp) value);
				return;
			}
			if (value instanceof Boolean) {
				if ((Boolean) value) {
					fm.setValue(fieldName, "yes");
				} else {
					fm.setValue(fieldName, "no");
				}
				return;
			}
		}
		fm.setSafeMode(fieldName, false);
		fm.setValue(fieldName, "<br>"); // テーブルタグはスペースだと枠がなくなるので枠が出るようにする
	}

	/**
	 * 選択リストの設定
	 *
	 * @param selectList
	 *            選択リスト
	 */
	public void setSelectListWithMap(HashMap<String, String> map, String fieldName, SelectList selectList) {

		// 条件無しを先頭に付加するための新しい選択リスト
		SelectList newSelectList = new SelectList();
		newSelectList.add("", "");

		FieldMap fm = getFieldMap();

		map.clear();
		for (int i = 0; i < selectList.size(); i++) {
			map.put(selectList.getSendValue(i), selectList.getOptionValue(i));
			newSelectList.add(selectList.getOptionValue(i), selectList.getSendValue(i));
		}

		fm.setSelectList(fieldName, newSelectList);
	}

}
#!
