//===========================================================================
// 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.struts.validator.ValidatorForm;

import java.io.UnsupportedEncodingException;

import jp.gr.java_conf.bugslife.util.*;
/**
 *<PRE>
 * UserEditFormクラス
 *
 *</PRE>
 * @author 鰐川　正寛
 * @version 1.0.0
 */
public class UserEditForm extends ValidatorForm {
//===========================================================================
// attributes
//===========================================================================
	/**
	 * uno
	 */
	private int m_uno;
	/**
	 * uid
	 */
	private String m_uid;
	/**
	 * 旧パスワード
	 */
	private String m_oldPassword;
	/**
	 * 新パスワード
	 */
	private String m_newPassword;
	/**
	 * 新パスワード２
	 */
	private String m_newPassword2;
	/**
	 * 氏名
	 */
	private String m_name;
	/**
	 * 略称
	 */
	private String m_nickname;
	/**
	 * メールアドレス
	 */
	private String m_email;
	/**
	 * 会社名
	 */
	private String m_company;
	/**
	 * 部署
	 */
	private String m_section;
	/**
	 * 電話番号
	 */
	private String m_tel;
	/**
	 * ユーザ権限
	 */
	private boolean m_userPermission;
	/**
	 * テスター権限
	 */
	private boolean m_testerPermission;
	/**
	 * 開発者権限
	 */
	private boolean m_developerPermission;
	/**
	 * プロジェクト管理者権限
	 */
	private boolean m_projectManagerPermission;
	/**
	 * システム管理者権限
	 */
	private boolean m_systemManagerPermission;
	/**
	 * メール購読（発行）
	 */
	private boolean m_subscriprion0;
	/**
	 * メール購読（故障）
	 */
	private boolean m_subscriprion1;
	/**
	 * メール購読（方針）
	 */
	private boolean m_subscriprion2;
	/**
	 * メール購読（解析）
	 */
	private boolean m_subscriprion3;
	/**
	 * メール購読（対処）
	 */
	private boolean m_subscriprion4;
	/**
	 * メール購読（確認）
	 */
	private boolean m_subscriprion5;
	/**
	 * メモ
	 */
	private String m_memo;
//===========================================================================
// methods
//===========================================================================
	/**
	 * unoのセット
	 * 
	 * @param uno uno
	 */
	public void setUno(int uno) {
		m_uno = uno;
	}
	/**
	 * unoの取得
	 * 
	 * @return uno
	 */
	public int getUno() {
		return m_uno;
	}
	/**
	 * ユーザIDの取得
	 * 
	 * @return ユーザID
	 */
	public String getUid()
	{
		return m_uid;
	}
	/**
	 * ユーザIDのセット
	 * 
	 * @param uid ユーザID
	 */
	public void setUid(String uid)
	{
		m_uid = uid;
	}
	/**
	 * 旧パスワードのセット
	 * 
	 * @param oldPassword 旧パスワード
	 */
	public void setOldPassword(String oldPassword) {
		m_oldPassword = oldPassword;
	}
	/**
	 * 旧パスワードの取得
	 * 
	 * @return 旧パスワード
	 */
	public String getOldPassword() {
		return m_oldPassword;
	}
	/**
	 * 新パスワードのセット
	 * 
	 * @param newPassword 新パスワード
	 */
	public void setNewPassword(String newPassword) {
		m_newPassword = newPassword;
	}
	/**
	 * 新パスワードの取得
	 * 
	 * @return 新パスワード
	 */
	public String getNewPassword() {
		return m_newPassword;
	}
	/**
	 * 新パスワード２のセット
	 * 
	 * @param password2 新パスワード２
	 */
	public void setNewPassword2(String newPassword2) {
		m_newPassword2 = newPassword2;
	}
	/**
	 * 新パスワード２の取得
	 * 
	 * @return 新パスワード２
	 */
	public String getNewPassword2() {
		return m_newPassword2;
	}
	/**
	 * 氏名のセット
	 * 
	 * @param name 氏名
	 */
	public void setName(String name) {
		m_name = name;
	}
	/**
	 * 氏名の取得
	 * 
	 * @return 氏名
	 */
	public String getName() {
		return m_name;
	}
	/**
	 * 略称のセット
	 * 
	 * @param nickname 略称
	 */
	public void setNickname(String nickname) {
		m_nickname = nickname;
	}
	/**
	 * 略称の取得
	 * 
	 * @return 略称
	 */
	public String getNickname() {
		return m_nickname;
	}
	/**
	 * メールアドレスのセット
	 * 
	 * @param email メールアドレス
	 */
	public void setEmail(String email) {
		m_email = email;
	}
	/**
	 * メールアドレスの取得
	 * 
	 * @return メールアドレス
	 */
	public String getEmail() {
		return m_email;
	}
	/**
	 * 会社名のセット
	 * 
	 * @param company 会社名
	 */
	public void setCompany(String company) {
		m_company = company;
	}
	/**
	 * 会社名の取得
	 * 
	 * @return 会社名
	 */
	public String getCompany() {
		return m_company;
	}
	/**
	 * 部署のセット
	 * 
	 * @param section 部署
	 */
	public void setSection(String section) {
		m_section = section;
	}
	/**
	 * 部署の取得
	 * 
	 * @return 部署
	 */
	public String getSection() {
		return m_section;
	}
	/**
	 * 電話番号のセット
	 * 
	 * @param tel 電話番号
	 */
	public void setTel(String tel) {
		m_tel = tel;
	}
	/**
	 * 電話番号の取得
	 * 
	 * @return 電話番号
	 */
	public String getTel() {
		return m_tel;
	}
	/**
	 * ユーザ権限のセット
	 * 
	 * @param userPermission ユーザ権限
	 */
	public void setUserPermission(boolean userPermission) {
		m_userPermission = userPermission;
	}
	/**
	 * ユーザ権限の取得
	 * 
	 * @return ユーザ権限
	 */
	public boolean getUserPermission() {
		return m_userPermission;
	}
	/**
	 * テスター権限のセット
	 * 
	 * @param testerPermission テスター権限
	 */
	public void setTesterPermission(boolean testerPermission) {
		m_testerPermission = testerPermission;
	}
	/**
	 * テスター権限の取得
	 * 
	 * @return テスター権限
	 */
	public boolean getTesterPermission() {
		return m_testerPermission;
	}
	/**
	 * 開発者権限のセット
	 * 
	 * @param developerPermission 開発者権限
	 */
	public void setDeveloperPermission(boolean developerPermission) {
		m_developerPermission = developerPermission;
	}
	/**
	 * 開発者権限の取得
	 * 
	 * @return 開発者権限
	 */
	public boolean getDeveloperPermission() {
		return m_developerPermission;
	}
	/**
	 * プロジェクト管理者権限のセット
	 * 
	 * @param projectManagerPermission プロジェクト管理者権限
	 */
	public void setProjectManagerPermission(boolean projectManagerPermission) {
		m_projectManagerPermission = projectManagerPermission;
	}
	/**
	 * プロジェクト管理者権限の取得
	 * 
	 * @return プロジェクト管理者権限
	 */
	public boolean getProjectManagerPermission() {
		return m_projectManagerPermission;
	}
	/**
	 * システム管理者権限のセット
	 * 
	 * @param systemManagerPermission システム管理者権限
	 */
	public void setSystemManagerPermission(boolean systemManagerPermission) {
		m_systemManagerPermission = systemManagerPermission;
	}
	/**
	 * メール購読（発行）の取得
	 * 
	 * @return メール購読（発行）
	 */
	public boolean getSubscriprion0()
	{
		return m_subscriprion0;
	}
	/**
	 * メール購読（発行）のセット
	 * 
	 * @param subscriprion0 メール購読（発行）
	 */
	public void setSubscriprion0(boolean subscriprion0)
	{
		m_subscriprion0 = subscriprion0;
	}
	/**
	 * メール購読（故障）の取得
	 * 
	 * @return メール購読（故障）
	 */
	public boolean getSubscriprion1()
	{
		return m_subscriprion1;
	}
	/**
	 * メール購読（故障）のセット
	 * 
	 * @param subscriprion1 メール購読（故障）
	 */
	public void setSubscriprion1(boolean subscriprion1)
	{
		m_subscriprion1 = subscriprion1;
	}
	/**
	 * メール購読（方針）の取得
	 * 
	 * @return メール購読（方針）
	 */
	public boolean getSubscriprion2()
	{
		return m_subscriprion2;
	}
	/**
	 * メール購読（方針）のセット
	 * 
	 * @param subscriprion2 メール購読（方針）
	 */
	public void setSubscriprion2(boolean subscriprion2)
	{
		m_subscriprion2 = subscriprion2;
	}
	/**
	 * メール購読（解析）の取得
	 * 
	 * @return メール購読（解析）
	 */
	public boolean getSubscriprion3()
	{
		return m_subscriprion3;
	}
	/**
	 * メール購読（解析）のセット
	 * 
	 * @param subscriprion3 メール購読（解析）
	 */
	public void setSubscriprion3(boolean subscriprion3)
	{
		m_subscriprion3 = subscriprion3;
	}
	/**
	 * メール購読（対処）の取得
	 * 
	 * @return メール購読（対処）
	 */
	public boolean getSubscriprion4()
	{
		return m_subscriprion4;
	}
	/**
	 * メール購読（対処）のセット
	 * 
	 * @param subscriprion4 メール購読（対処）
	 */
	public void setSubscriprion4(boolean subscriprion4)
	{
		m_subscriprion4 = subscriprion4;
	}
	/**
	 * メール購読（確認）の取得
	 * 
	 * @return メール購読（確認）
	 */
	public boolean getSubscriprion5()
	{
		return m_subscriprion5;
	}
	/**
	 * メール購読（確認）のセット
	 * 
	 * @param subscriprion5 メール購読（確認）
	 */
	public void setSubscriprion5(boolean subscriprion5)
	{
		m_subscriprion5 = subscriprion5;
	}
	/**
	 * システム管理者権限の取得
	 * 
	 * @return システム管理者権限
	 */
	public boolean getSystemManagerPermission() {
		return m_systemManagerPermission;
	}
	/**
	 * メモのセット
	 * 
	 * @param memo メモ
	 */
	public void setMemo(String memo) {
		m_memo = memo;
	}
	/**
	 * メモの取得
	 * 
	 * @return メモ
	 */
	public String getMemo() {
		return m_memo;
	}
	public String toString() {
		
		StringBuffer sb = new StringBuffer();
		sb.append("oldPassword :"  + m_oldPassword + "\n");
		sb.append("newPassword :"  + m_newPassword + "\n");
		sb.append("newPassword2:"  + m_newPassword2 + "\n");
		sb.append("name        :"  + m_name + "\n");
		sb.append("nickname    :"  + m_nickname + "\n");
		sb.append("email       :"  + m_email + "\n");
		sb.append("company     :"  + m_company + "\n");
		sb.append("section     :"  + m_section + "\n");
		sb.append("tel         :"  + m_tel + "\n");
		sb.append("userPm      :"  + m_userPermission + "\n");
		sb.append("testerPm    :"  + m_testerPermission + "\n");
		sb.append("developerPm :"  + m_developerPermission + "\n");
		sb.append("projectManPm:"  + m_projectManagerPermission + "\n");
		sb.append("systemManaPm:"  + m_systemManagerPermission + "\n");
		sb.append("subscription0:"  + m_subscriprion0 + "\n");
		sb.append("subscription1:"  + m_subscriprion1 + "\n");
		sb.append("subscription2:"  + m_subscriprion2 + "\n");
		sb.append("subscription3:"  + m_subscriprion3 + "\n");
		sb.append("subscription4:"  + m_subscriprion4 + "\n");
		sb.append("subscription5:"  + m_subscriprion5 + "\n");
		sb.append("m_memo      :"  + m_memo + "\n");
		return new String(sb);
	}
	/**
	 * デバッグ文字出力
	 *
	 * @param s 出力文字列
	 */
	private void debug(String s) {
		System.out.println("[UserEditForm]" + s);
	}
//===========================================================================
// 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
		debug("reset");
		//encodeing セット
		try {
			request.setCharacterEncoding("SJIS");
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
		
		m_uid = null;
		m_oldPassword = null;
		m_newPassword = null;
		m_newPassword2 = null;
		m_name = null;
		m_nickname = null;
		m_email = null;
		m_company = null;
		m_section = null;
		m_tel = null;
		m_userPermission = false;
		m_testerPermission = false;
		m_developerPermission = false;
		m_projectManagerPermission = false;
		m_systemManagerPermission = false;
		m_subscriprion0 = false;
		m_subscriprion1 = false;
		m_subscriprion2 = false;
		m_subscriprion3 = false;
		m_subscriprion4 = false;
		m_subscriprion5 = false;
		m_memo = null;
	}
	/**
	* 値の検証(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();
	
		debug("validate");
		debug(toString());
		
		//新規の場合
		if (m_uno == 0) {
			//uid
			Varidater.checkRequired(m_uid, "uid", errors);
		}
		
		
		//パスワードチェック
		boolean oldP = Varidater.isInput(m_oldPassword);
		boolean newP = Varidater.isInput(m_newPassword);
		boolean newP2 = Varidater.isInput(m_newPassword2);
		
		//新規の場合
		if (m_uno == 0) {
			//新パスワード、新パスワード２は必須
			Varidater.checkRequired(m_newPassword, "password", errors);
			Varidater.checkRequired(m_newPassword2, "password2", errors);
			//両方とも指定されていれば
			if (newP && newP2) {
				//パスワード一致チェック
				Varidater.checkSame(m_newPassword, m_newPassword2, "password", "password2", errors);
			}
		//変更の場合
		} else {
			//どれか１つでも指定されていれば、３つとも必須
			if ((oldP || newP) || newP2) {
				Varidater.checkRequired(m_oldPassword, "oldPassword", errors);
				Varidater.checkRequired(m_newPassword, "newPassword", errors);
				Varidater.checkRequired(m_newPassword2, "newPassword2", errors);
			}
			//３つとも指定されていれば
			if ((newP && newP2) && (oldP)) {
				//パスワード一致チェック
				Varidater.checkSame(m_newPassword, m_newPassword2, "newPassword", "newPassword2", errors);
			}
		}
		//name
		Varidater.checkRequired(m_name, "name", errors);
		//nickname
		Varidater.checkRequired(m_nickname, "nickname", errors);
		//email
		if (Varidater.checkRequired(m_email, "email", errors)) {
/*---------------------------------- エラーになるのでコメントアウト
			//形式チェック
			Varidater.checkEmail(m_email, "email", errors);
-------------------------------------------------------------------*/
		}
		
		//permission
		//どれもチェックされていない場合、エラー
		if ((! m_userPermission) && (! m_testerPermission) && 
			(! m_developerPermission) && (! m_systemManagerPermission)) {
				
				Varidater.addErrors(Varidater.REQUIRED_MSG, "permission", errors);	//エラー追加
		}
		return errors;
	}
}