//===========================================================================
// package
//===========================================================================
package jp.gr.java_conf.bugslife.form;

//===========================================================================
// import
//===========================================================================
import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.ActionError;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import org.apache.commons.logging.*;

import java.io.UnsupportedEncodingException;

import java.util.*;
import java.text.*;

import jp.gr.java_conf.bugslife.util.*;

/**
 *<PRE>
 * Formクラス
 *
 *</PRE>
 * @author 鰐川　正寛
 * @version 1.0.0
 */
public class BugDetail1Form extends ActionForm {
//===========================================================================
// attributes
//===========================================================================
	/**
	 * アクション
	 */
	private String m_action;
	/**
	 * bno
	 */
	private int m_bno;
	/**
	 * 発生工程
	 */
	private String m_issuPno;
	/**
	 * タイトル
	 */
	private String m_title;
	/**
	 * 試験項目ＩＤ
	 */
	private String m_tid;
	/**
	 * 発生日
	 */
	private Date m_issuDate;
	/**
	 * 発生日（文字）
	 */
	private String m_issuDateString;
	/**
	 * 故障度
	 */
	private String m_severity;
	/**
	 * 発生環境
	 */
	private String m_location;
	/**
	 * 画面バージョン
	 */
	private String m_htmlVersion;
	/**
	 * 発生サブシステム
	 */
	private String m_subsystem;
	/**
	 * 発生機能名
	 */
	private String m_functionName;
	/**
	 * DBバージョン
	 */
	private String m_dbVersion;
	/**
	 * 発生ブラウザ
	 */
	private String m_browser;
	/**
	 * APバージョン
	 */
	private String m_appVersion;
	/**
	 * 発生OS
	 */
	private String m_os;
	/**
	 * 仕様バージョン
	 */
	private String m_specVersion;
	/**
	 * 発生画面
	 */
	private String m_screen;
	/**
	 * 故障内容
	 */
	private String m_troubleSituation;
	/**
	 * 要求
	 */
	private String m_submitType;
	/**
	 * 要求ステータス状況
	 */
	private String m_requestStatusWhitebord;
	/**
	 * 要求ステータス
	 */
	private String m_requestStatus;
	/**
	 * 担当者
	 */
	private String m_requestAssigne;
	/**
	 * 承認者
	 */
	private String m_requestAuther;
	/**
	 * 解析者
	 */
	private String m_requestAnalyst;
	/**
	 * 故障画面
	 */
	private String[] m_bugScid;
	/**
	 * メール送信
	 */
	private boolean m_dontSendMail;
	/**
	 * Log
	 */
	private Log log = LogFactory.getLog(this.getClass().getName());
//===========================================================================
// other attribute
//===========================================================================
	private static final String DEFAULT_STATUS = "new";
//===========================================================================
// methods
//===========================================================================
	/**
	 * 発行日フォーマット
	 */
//	private static final String ISSU_DATE_FORMAT = Converter.SHORT_DATE_TIME_PATTAN;
	private static final String ISSU_DATE_FORMAT = Converter.MMDD_PATTAN;
	public static final int ISSU_DATE = Converter.MMDD;
//	private static final String ISSU_DATE_FORMAT = Converter.SHORT_DATE_PATTAN;
//	public static final int ISSU_DATE = Converter.SHORT_DATE;
//===========================================================================
// methods
//===========================================================================
	/**
	 * アクションの取得
	 * 
	 * @return アクション
	 */
	public String getAction()
	{
		return m_action;
	}
	/**
	 * アクションのセット
	 * 
	 * @param action アクション
	 */
	public void setAction(String action)
	{
		m_action = action;
	}
	/**
	 * バグ番号の取得
	 * 
	 * @return バグ番号
	 */
	public int getBno()
	{
		return m_bno;
	}
	/**
	 * バグ番号のセット
	 * 
	 * @param bno バグ番号
	 */
	public void setBno(int bno)
	{
		m_bno = bno;
	}
	/**
	 * 発生工程の取得
	 * 
	 * @return 発生工程
	 */
	public String getIssuPno()
	{
		return m_issuPno;
	}
	/**
	 * 発生工程のセット
	 * 
	 * @param issuPno 発生工程
	 */
	public void setIssuPno(String issuPno)
	{
		m_issuPno = issuPno;
	}
	/**
	 * タイトルのセット
	 * 
	 * @param title タイトル
	 */
	public void setTitle(String title) {
		m_title = title;
	}
	/**
	 * タイトルの取得
	 * 
	 * @return タイトル
	 */
	public String getTitle() {
		return m_title;
	}
	/**
	 * 試験項目ＩＤのセット
	 * 
	 * @param tid 試験項目ＩＤ
	 */
	public void setTid(String tid) {
		m_tid = tid;
	}
	/**
	 * 試験項目ＩＤの取得
	 * 
	 * @return 試験項目ＩＤ
	 */
	public String getTid() {
		return m_tid;
	}
	
	/**
	 * 発生日のセット
	 * 
	 * @param issuDate 発生日
	 */
	public void setIssuDate(Date issuDate) {
		m_issuDate = issuDate;
	}
	/**
	 * 発生日の取得
	 * 
	 * @return 発生日（文字）
	 */
	public Date getIssuDate() {
		return m_issuDate;
	}
	/**
	 * 発生日（文字）のセット
	 * 
	 * @param issuDateString 発生日（文字）
	 */
	public void setIssuDateString(String issuDateString) {
		m_issuDateString = issuDateString;
	}
	/**
	 * 発生日（文字）の取得
	 * 
	 * @return 発生日（文字）
	 */
	public String getIssuDateString() {
		return m_issuDateString;
	}
	/**
	 * 故障度のセット
	 * 
	 * @param severity 故障度
	 */
	public void setSeverity(String severity) {
		m_severity = severity;
	}
	/**
	 * 故障度の取得
	 * 
	 * @return 故障度
	 */
	public String getSeverity() {
		return m_severity;
	}
	/**
	 * 発生環境のセット
	 * 
	 * @param location 発生環境
	 */
	public void setLocation(String location) {
		m_location = location;
	}
	/**
	 * 発生環境の取得
	 * 
	 * @return 発生環境
	 */
	public String getLocation() {
		return m_location;
	}
	/**
	 * 画面バージョンのセット
	 * 
	 * @param htmlVersion 画面バージョン
	 */
	public void setHtmlVersion(String htmlVersion) {
		m_htmlVersion = htmlVersion;
	}
	/**
	 * 画面バージョンの取得
	 * 
	 * @return 画面バージョン
	 */
	public String getHtmlVersion() {
		return m_htmlVersion;
	}
	/**
	 * 発生サブシステムのセット
	 * 
	 * @param subsystem 発生サブシステム
	 */
	public void setSubsystem(String subsystem) {
		m_subsystem = subsystem;
	}
	/**
	 * 発生サブシステムの取得
	 * 
	 * @return 発生サブシステム
	 */
	public String getSubsystem() {
		return m_subsystem;
	}
	/**
	 * 発生機能名の取得
	 * 
	 * @return 発生機能名
	 */
	public String getFunctionName()
	{
		return m_functionName;
	}
	/**
	 * 発生機能名のセット
	 * 
	 * @param functionName 発生機能名
	 */
	public void setFunctionName(String functionName)
	{
		m_functionName = functionName;
	}
	/**
	 * DBバージョンのセット
	 * 
	 * @param dbVersion DBバージョン
	 */
	public void setDbVersion(String dbVersion) {
		m_dbVersion = dbVersion;
	}
	/**
	 * DBバージョンの取得
	 * 
	 * @return DBバージョン
	 */
	public String getDbVersion() {
		return m_dbVersion;
	}
	/**
	 * 発生ブラウザのセット
	 * 
	 * @param browser 発生ブラウザ
	 */
	public void setBrowser(String browser) {
		m_browser = browser;
	}
	/**
	 * 発生ブラウザの取得
	 * 
	 * @return 発生ブラウザ
	 */
	public String getBrowser() {
		return m_browser;
	}
	/**
	 * APバージョンのセット
	 * 
	 * @param appVersion APバージョン
	 */
	public void setAppVersion(String appVersion) {
		m_appVersion = appVersion;
	}
	/**
	 * APバージョンの取得
	 * 
	 * @return APバージョン
	 */
	public String getAppVersion() {
		return m_appVersion;
	}
	/**
	 * 発生OSのセット
	 * 
	 * @param os 発生OS
	 */
	public void setOs(String os) {
		m_os = os;
	}
	/**
	 * 発生OSの取得
	 * 
	 * @return 発生OS
	 */
	public String getOs() {
		return m_os;
	}
	/**
	 * 仕様バージョンの取得
	 * 
	 * @return 仕様バージョン
	 */
	public String getSpecVersion()
	{
		return m_specVersion;
	}
	/**
	 * 仕様バージョンのセット
	 * 
	 * @param specVersion 仕様バージョン
	 */
	public void setSpecVersion(String specVersion)
	{
		m_specVersion = specVersion;
	}
	/**
	 * 故障内容のセット
	 * 
	 * @param troubleSituation 故障内容
	 */
	public void setTroubleSituation(String troubleSituation) {
		m_troubleSituation = troubleSituation;
	}
	/**
	 * 故障内容の取得
	 * 
	 * @return 故障内容
	 */
	public String getTroubleSituation() {
		return m_troubleSituation;
	}
	/**
	 * 要求のセット
	 * 
	 * @param submitType 要求
	 */
	public void setSubmitType(String submitType) {
		m_submitType = submitType;
	}
	/**
	 * 要求の取得
	 * 
	 * @return 要求
	 */
	public String getSubmitType() {
		return m_submitType;
	}
	/**
	 * 要求ステータス状況のセット
	 * 
	 * @param requestStatusWhitebord 要求ステータス状況
	 */
	public void setRequestStatusWhitebord(String requestStatusWhitebord) {
		m_requestStatusWhitebord = requestStatusWhitebord;
	}
	/**
	 * 要求ステータス状況の取得
	 * 
	 * @return 要求ステータス状況
	 */
	public String getRequestStatusWhitebord() {
		return m_requestStatusWhitebord;
	}
	/**
	 * 要求ステータスのセット
	 * 
	 * @param requestStatus 要求ステータス
	 */
	public void setRequestStatus(String requestStatus) {
		m_requestStatus = requestStatus;
	}
	/**
	 * 要求ステータスの取得
	 * 
	 * @return 要求ステータス
	 */
	public String getRequestStatus() {
		return m_requestStatus;
	}
	/**
	 * 解析者の取得
	 * 
	 * @return 解析者
	 */
	public String getRequestAnalyst()
	{
		return m_requestAnalyst;
	}
	/**
	 * 解析者のセット
	 * 
	 * @param requestAnalyst 解析者
	 */
	public void setRequestAnalyst(String requestAnalyst)
	{
		m_requestAnalyst = requestAnalyst;
	}
	/**
	 * 承認者の取得
	 * 
	 * @return 承認者
	 */
	public String getRequestAuther()
	{
		return m_requestAuther;
	}
	/**
	 * 承認者のセット
	 * 
	 * @param requestAuther 承認者
	 */
	public void setRequestAuther(String requestAuther)
	{
		m_requestAuther = requestAuther;
	}
	/**
	 * 担当者のセット
	 * 
	 * @param requestAssigne 担当者
	 */
	public void setRequestAssigne(String requestAssigne) {
		m_requestAssigne = requestAssigne;
	}
	/**
	 * 担当者の取得
	 * 
	 * @return 担当者
	 */
	public String getRequestAssigne() {
		return m_requestAssigne;
	}
	/**
	 * 故障画面の取得
	 * 
	 * @return 故障画面
	 */
	public String getScreen()
	{
		return m_screen;
	}
	/**
	 * 故障画面のセット
	 * 
	 * @param bugScreen 故障画面
	 */
	public void setScreen(String screen)
	{
		m_screen = screen;
	}
	/**
	 * メール送信の取得
	 * 
	 * @return メール送信
	 */
	public boolean getDontSendMail()
	{
		return m_dontSendMail;
	}
	/**
	 * メール送信のセット
	 * 
	 * @param sendMail メール送信
	 */
	public void setDontSendMail(boolean dontSendMail)
	{
		m_dontSendMail = dontSendMail;
	}
//===========================================================================
// Public Methods
//===========================================================================
	/**
	* リセット
	*
	* @param mapping The mapping used to select this instance
	* @param request The servlet request we are processing
	*/
	public void reset(ActionMapping mapping, HttpServletRequest request) {
		
		//debug
		log.debug("reset");
		//encodeing セット
		try {
			request.setCharacterEncoding("SJIS");
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
		
		m_action = null;
		m_bno = 0;
		m_issuPno = null;
		m_title = null;
		m_requestStatusWhitebord = null;
		m_tid = null;
		m_issuDate = null;
		m_issuDateString = null;
		m_severity = null;
		m_location = null;
		m_htmlVersion = null;
		m_subsystem = null;
		m_functionName = null;
		m_dbVersion = null;
		m_browser = null;
		m_appVersion = null;
		m_os = null;
		m_specVersion = null;
		m_screen = null;
		m_troubleSituation = null;
		m_submitType = DEFAULT_STATUS;
		m_requestStatus = null;
		m_requestAuther = null;
		m_requestAnalyst = null;
		m_requestAssigne = null;
		m_bugScid = new String[0];
		m_dontSendMail = false;
	}
	/**
	* 値の検証(Validate) 
	*
	* @param mapping The mapping used to select this instance
	* @param request The servlet request we are processing
	*/
	public ActionErrors validate(ActionMapping mapping,
								 HttpServletRequest request) {
		ActionErrors errors = new ActionErrors();
		
		log.debug("validate");
		
		//action
		Varidater.checkRequired(m_action, "action", errors);
		
		String[] defaultPno = new String[] { "00" };	//デフォルトのコード
		
		//issuPno
		Varidater.checkRequiredCode(m_issuPno, "issuPno", defaultPno, errors);
		//title
		Varidater.checkRequired(m_title, "title", errors);
		//issuDate
		if (Varidater.checkRequired(m_issuDateString, "issuDate", errors)) {
			if (Varidater.checkDate(m_issuDateString, "issuDate", ISSU_DATE_FORMAT, errors)) {
				//このタイミングで発行日をセットする
				/* MMDDパターンを適用すると年が1970年と解釈されてしまうので
				 * ここで強制的に現在日付とマージする。
				 */
				Date issuDate = Varidater.parseDate(m_issuDateString, ISSU_DATE_FORMAT);
				Calendar now = Calendar.getInstance();	//現在日付
				Calendar issuCal = Calendar.getInstance();
				issuCal.setTime(issuDate);				//発行日カレンダ
				issuCal.set(Calendar.YEAR, now.get(Calendar.YEAR));
				
				m_issuDate = issuCal.getTime();
			}
		}
		//submitType
		if (Varidater.checkSelected(m_submitType, "submitType", errors)) {
			//タイプ別必須チェック
			if (m_submitType.equals("statusSelect")) {
				//issuDate
				Varidater.checkSelected(m_requestStatus, "requestStatus", errors);
			}
		}
		return errors;
	}
}