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

//===========================================================================
// import
//===========================================================================
import javax.servlet.http.HttpServletRequest;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
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 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 BugDetail2Form extends ActionForm {
//===========================================================================
// attributes
//===========================================================================
	/**
	 * アクション
	 */
	private String m_action;
	/**
	 * 故障番号
	 */
	private int m_bno;
	/**
	 * 対処方法
	 */
	private String m_resolution;
	/**
	 * 仕様変更番号
	 */
	private String m_scid;
	/**
	 * マイルストーン
	 */
	private String m_milestone;
	/**
	 * 優先度
	 */
	private String m_priority;
	/**
	 * 関連ドキュメント
	 */
	private String m_reletedDoc;
	/**
	 * コンポーネントＩＤ１
	 */
	private String m_cpid1;
	/**
	 * コンポーネントＩＤ２
	 */
	private String m_cpid2;
	/**
	 * コンポーネントＩＤ３
	 */
	private String m_cpid3;
	/**
	 * コンポーネントＩＤ４
	 */
	private String m_cpid4;
	/**
	 * コンポーネントＩＤ５
	 */
	private String m_cpid5;
	/**
	 * 連絡事項
	 */
	private String m_addText;
	/**
	 * キーワード１
	 */
	private String m_keyword1;
	/**
	 * キーワード２
	 */
	private String m_keyword2;
	/**
	 * キーワード３
	 */
	private String m_keyword3;
	/**
	 * 追加ＣＣユーザ番号（複数）
	 */
	private String[] m_addCcUno = null;
	/**
	 * 追加ＣＣ要求
	 */
	private String m_addCcRequest = null;
	/**
	 * 削除ＣＣユーザ番号（複数）
	 */
	private String[] m_delCcUno = null;
	/**
	 * 削除ＣＣ要求
	 */
	private String m_delCcRequest = null;
	/**
	 * ＣＣ
	 */
	private Collection m_cc = null;
	/**
	 * サブミットタイプ
	 */
	private String m_submitType = DEFAULT_STATUS;
	/**
	 * 要求ステータス状況
	 */
	private String m_requestStatusWhitebord;
	/**
	 * 要求ステータス
	 */
	private String m_requestStatus;
	/**
	 * 解析担当者
	 */
	private String m_requestAnalyst;
	/**
	 * 修正担当者
	 */
	private String m_requestUpdater;
	/**
	 * 発行担当者
	 */
	private String m_requestIssuer;
	/**
	 * 担当者2
	 */
	private String m_requestAssigne;
	/**
	 * メール送信
	 */
	private boolean m_dontSendMail;
	/**
	 * CC要求
	 */
	private String m_ccRequest;
	/**
	 * Log
	 */
	private Log log = LogFactory.getLog(this.getClass().getName());
//===========================================================================
// other attribute
//===========================================================================
	private static final String DEFAULT_STATUS = "investigation";
//===========================================================================
// 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 getResolution()
	{
		return m_resolution;
	}
	/**
	 * 対処方法のセット
	 * 
	 * @param resolution 対処方法
	 */
	public void setResolution(String resolution)
	{
		m_resolution = resolution;
	}
	/**
	 * 仕様変更番号の取得
	 * 
	 * @return 仕様変更番号
	 */
	public String getScid()
	{
		return m_scid;
	}
	/**
	 * 仕様変更番号のセット
	 * 
	 * @param scid 仕様変更番号
	 */
	public void setScid(String scid)
	{
		m_scid = scid;
	}
	/**
	 * マイルストーンの取得
	 * 
	 * @return マイルストーン
	 */
	public String getMilestone()
	{
		return m_milestone;
	}
	/**
	 * マイルストーンのセット
	 * 
	 * @param milestone マイルストーン
	 */
	public void setMilestone(String milestone)
	{
		m_milestone = milestone;
	}
	/**
	 * 優先度の取得
	 * 
	 * @return 優先度
	 */
	public String getPriority()
	{
		return m_priority;
	}
	/**
	 * 優先度のセット
	 * 
	 * @param priority 優先度
	 */
	public void setPriority(String priority)
	{
		m_priority = priority;
	}
	/**
	 * 関連ドキュメントの取得
	 * 
	 * @return 関連ドキュメント
	 */
	public String getReletedDoc()
	{
		return m_reletedDoc;
	}
	/**
	 * 関連ドキュメントのセット
	 * 
	 * @param reletedDoc 関連ドキュメント
	 */
	public void setReletedDoc(String reletedDoc)
	{
		m_reletedDoc = reletedDoc;
	}
	/**
	 * コンポーネントＩＤ1の取得
	 * 
	 * @return コンポーネントＩＤ1
	 */
	public String getCpid1()
	{
		return m_cpid1;
	}
	/**
	 * コンポーネントＩＤ1のセット
	 * 
	 * @param cpid1 コンポーネントＩＤ1
	 */
	public void setCpid1(String cpid1)
	{
		m_cpid1 = cpid1;
	}
	/**
	 * コンポーネントＩＤ2の取得
	 * 
	 * @return コンポーネントＩＤ2
	 */
	public String getCpid2()
	{
		return m_cpid2;
	}
	/**
	 * コンポーネントＩＤ2のセット
	 * 
	 * @param cpid2 コンポーネントＩＤ2
	 */
	public void setCpid2(String cpid2)
	{
		m_cpid2 = cpid2;
	}
	/**
	 * コンポーネントＩＤ3の取得
	 * 
	 * @return コンポーネントＩＤ3
	 */
	public String getCpid3()
	{
		return m_cpid3;
	}
	/**
	 * コンポーネントＩＤ3のセット
	 * 
	 * @param cpid3 コンポーネントＩＤ3
	 */
	public void setCpid3(String cpid3)
	{
		m_cpid3 = cpid3;
	}
	/**
	 * コンポーネントＩＤ4の取得
	 * 
	 * @return コンポーネントＩＤ4
	 */
	public String getCpid4()
	{
		return m_cpid4;
	}
	/**
	 * コンポーネントＩＤ4のセット
	 * 
	 * @param cpid4 コンポーネントＩＤ4
	 */
	public void setCpid4(String cpid4)
	{
		m_cpid4 = cpid4;
	}
	/**
	 * コンポーネントＩＤ5の取得
	 * 
	 * @return コンポーネントＩＤ5
	 */
	public String getCpid5()
	{
		return m_cpid5;
	}
	/**
	 * コンポーネントＩＤ5のセット
	 * 
	 * @param cpid5 コンポーネントＩＤ5
	 */
	public void setCpid5(String cpid5)
	{
		m_cpid5 = cpid5;
	}
	/**
	 * 連絡事項の取得
	 * 
	 * @return 連絡事項
	 */
	public String getAddText()
	{
		return m_addText;
	}
	/**
	 * 連絡事項のセット
	 * 
	 * @param principalAddText 連絡事項
	 */
	public void setAddText(String addText)
	{
		m_addText = addText;
	}
	/**
	 * キーワード１の取得
	 * 
	 * @return キーワード１
	 */
	public String getKeyword1()
	{
		return m_keyword1;
	}
	/**
	 * キーワード１のセット
	 * 
	 * @param keyword1 キーワード１
	 */
	public void setKeyword1(String keyword1)
	{
		m_keyword1 = keyword1;
	}
	/**
	 * キーワード２の取得
	 * 
	 * @return キーワード２
	 */
	public String getKeyword2()
	{
		return m_keyword2;
	}
	/**
	 * キーワード２のセット
	 * 
	 * @param keyword2 キーワード２
	 */
	public void setKeyword2(String keyword2)
	{
		m_keyword2 = keyword2;
	}
	/**
	 * キーワード３の取得
	 * 
	 * @return キーワード３
	 */
	public String getKeyword3()
	{
		return m_keyword3;
	}
	/**
	 * キーワード３のセット
	 * 
	 * @param keyword3 キーワード３
	 */
	public void setKeyword3(String keyword3)
	{
		m_keyword3 = keyword3;
	}
	/**
	 * 追加ＣＣユーザ番号の取得
	 * 
	 * @return 追加ＣＣユーザ番号
	 */
	public String[] getAddCcUno()
	{
		return m_addCcUno;
	}
	/**
	 * 追加ＣＣユーザ番号のセット
	 * 
	 * @param addCcUno 追加ＣＣユーザ番号
	 */
	public void setAddCcUno(String[] addCcUno)
	{
		m_addCcUno = addCcUno;
	}
	/**
	 * 追加ＣＣ要求の取得
	 * 
	 * @return 追加ＣＣ要求
	 */
	public String getAddCcRequest()
	{
		return m_addCcRequest;
	}
	/**
	 * 追加ＣＣ要求のセット
	 * 
	 * @param addCcRequest 追加ＣＣ要求
	 */
	public void setAddCcRequest(String addCcRequest)
	{
		m_addCcRequest = addCcRequest;
	}
	/**
	 * 削除ＣＣユーザ番号の取得
	 * 
	 * @return 削除ＣＣユーザ番号
	 */
	public String[] getDelCcUno()
	{
		return m_delCcUno;
	}
	/**
	 * 削除ＣＣユーザ番号のセット
	 * 
	 * @param delCcUno 削除ＣＣユーザ番号
	 */
	public void setDelCcUno(String[] delCcUno)
	{
		m_delCcUno = delCcUno;
	}
	/**
	 * 削除ＣＣ要求の取得
	 * 
	 * @return 削除ＣＣ要求
	 */
	public String getDelCcRequest()
	{
		return m_delCcRequest;
	}
	/**
	 * 削除ＣＣ要求のセット
	 * 
	 * @param delCcRequest 削除ＣＣ要求
	 */
	public void setDelCcRequest(String delCcRequest)
	{
		m_delCcRequest = delCcRequest;
	}
	/**
	 * ＣＣの取得
	 * 
	 * @return ＣＣ
	 */
	public Collection getCc()
	{
		return m_cc;
	}
	/**
	 * ＣＣのセット
	 * 
	 * @param cc ＣＣ
	 */
	public void setCc(Collection cc)
	{
		m_cc = cc;
	}
	/**
	 * サブミットタイプの取得
	 * 
	 * @return サブミットタイプ
	 */
	public String getSubmitType()
	{
		return m_submitType;
	}
	/**
	 * サブミットタイプのセット
	 * 
	 * @param submitType サブミットタイプ
	 */
	public void setSubmitType(String submitType)
	{
		m_submitType = submitType;
	}
	/**
	 * 要求ステータス状況の取得
	 * 
	 * @return 要求ステータス状況
	 */
	public String getRequestStatusWhitebord()
	{
		return m_requestStatusWhitebord;
	}
	/**
	 * 要求ステータス状況のセット
	 * 
	 * @param requestStatusWhitebord 要求ステータス状況
	 */
	public void setRequestStatusWhitebord(String requestStatusWhitebord)
	{
		m_requestStatusWhitebord = requestStatusWhitebord;
	}
	/**
	 * 要求ステータスの取得
	 * 
	 * @return 要求ステータス
	 */
	public String getRequestStatus()
	{
		return m_requestStatus;
	}
	/**
	 * 要求ステータスのセット
	 * 
	 * @param requestStatus 要求ステータス
	 */
	public void setRequestStatus(String requestStatus)
	{
		m_requestStatus = requestStatus;
	}
	/**
	 * 解析担当者の取得
	 * 
	 * @return 解析担当者
	 */
	public String getRequestAnalyst()
	{
		return m_requestAnalyst;
	}
	/**
	 * 解析担当者のセット
	 * 
	 * @param requestAnalyst 解析担当者
	 */
	public void setRequestAnalyst(String requestAnalyst)
	{
		m_requestAnalyst = requestAnalyst;
	}
	/**
	 * 発行担当者の取得
	 * 
	 * @return 発行担当者
	 */
	public String getRequestIssuer()
	{
		return m_requestIssuer;
	}
	/**
	 * 発行担当者のセット
	 * 
	 * @param requestIssuer 発行担当者
	 */
	public void setRequestIssuer(String requestIssuer)
	{
		m_requestIssuer = requestIssuer;
	}
	/**
	 * 修正担当者の取得
	 * 
	 * @return 修正担当者
	 */
	public String getRequestUpdater()
	{
		return m_requestUpdater;
	}
	/**
	 * 修正担当者のセット
	 * 
	 * @param requestUpdater 修正担当者
	 */
	public void setRequestUpdater(String requestUpdater)
	{
		m_requestUpdater = requestUpdater;
	}
	/**
	 * 担当者の取得
	 * 
	 * @return 担当者
	 */
	public String getRequestAssigne()
	{
		return m_requestAssigne;
	}
	/**
	 * 担当者のセット
	 * 
	 * @param requestAssigne 担当者
	 */
	public void setRequestAssigne(String requestAssigne)
	{
		m_requestAssigne = requestAssigne;
	}
	/**
	 * 送信メール要否の取得
	 * 
	 * @return 送信メール要否
	 */
	public boolean getDontSendMail()
	{
		return m_dontSendMail;
	}
	/**
	 * 送信メール要否のセット
	 * 
	 * @param dontSendMail 送信メール要否
	 */
	public void setDontSendMail(boolean dontSendMail)
	{
		m_dontSendMail = dontSendMail;
	}
	/**
	 * cc要求の取得
	 * 
	 * @return cc要求
	 */
	public String getCcRequest()
	{
		return m_ccRequest;
	}
	/**
	 * cc要求のセット
	 * 
	 * @param ccRequest cc要求
	 */
	public void setCcRequest(String ccRequest)
	{
		m_ccRequest = ccRequest;
	}
//===========================================================================
// 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_resolution = null;
		m_scid = null;
		m_milestone = null;
		m_priority = null;
		m_reletedDoc = null;
		m_cpid1 = null;
		m_cpid2 = null;
		m_cpid3 = null;
		m_cpid4 = null;
		m_cpid5 = null;
		m_addText = null;
		m_keyword1 = null;
		m_keyword2 = null;
		m_keyword3 = null;
		m_addCcUno = null;
		m_addCcRequest = null;
		m_delCcUno = null;
		m_delCcRequest = null;
		m_submitType = DEFAULT_STATUS;
		m_requestStatusWhitebord = null;
		m_requestStatus = null;
		m_requestAssigne = null;
		m_requestUpdater = null;
		m_requestIssuer = null;
		m_requestAnalyst = null;
		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);
		
		//cc
		//追加要求があった場合
		if (Varidater.isInput(m_addCcRequest)) {
			//debug
			log.debug("addCcRequest = " + m_addCcRequest);
			log.debug("addCcUno = " + m_addCcUno);
			
			//追加CC必須チェック
			Varidater.checkRequired(m_addCcUno, "addCcUno", errors);
		}
		//削除要求があった場合
		if (Varidater.isInput(m_delCcRequest)) {
			//debug
			log.debug("delCcRequest = " + m_delCcRequest);
			log.debug("delCcUno = " + m_delCcUno);
			
			//追加CC必須チェック
			Varidater.checkRequired(m_delCcUno, "delCcUno", errors);
		}
		
		//submitType
		if (Varidater.checkSelected(m_submitType, "submitType", errors)) {
			//タイプ別必須チェック
			if (m_submitType.equals("statusSelect")) {
				//issuDate
				Varidater.checkSelected(m_requestStatus, "requestStatus", errors);
			}
		}
		return errors;
	}
}