//===========================================================================
// 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.upload.FormFile;
import org.apache.struts.upload.MultipartRequestHandler;
import org.apache.commons.logging.*;

import java.io.UnsupportedEncodingException;

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

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

/**
 *<PRE>
 * Formクラス
 *
 *</PRE>
 * @author 鰐川　正寛
 * @version 1.0.0
 */
public class BugAttachmentForm extends ActionForm {
//===========================================================================
// attributes
//===========================================================================
	/**
	 * アクション
	 */
	private String m_action;
	/**
	 * ファイル番号
	 */
	private int m_ano;
	/**
	 * 故障番号
	 */
	private int m_bno;
	/**
	 * ファイルタイプ
	 */
	private String m_fileType;
	/**
	 * MIMEタイプ
	 */
	private String m_mimeType;
	/**
	 * 説明
	 */
	private String m_info;
	/**
	 * ファイル
	 */
	private FormFile m_file;
	/**
	 * 結果メッセージkey
	 */
	private String m_messageKey;
	/**
	 * Log
	 */
	private Log log = LogFactory.getLog(this.getClass().getName());
//===========================================================================
// other attribute
//===========================================================================
	private static final String DEFAULT_FILETYPE = "8";		//binary
//===========================================================================
// methods
//===========================================================================
	/**
	 * アクションの取得
	 * 
	 * @return アクション
	 */
	public String getAction()
	{
		return m_action;
	}
	/**
	 * アクションのセット
	 * 
	 * @param action アクション
	 */
	public void setAction(String action)
	{
		m_action = action;
	}
	/**
	 * ファイル番号の取得
	 * 
	 * @return ファイル番号
	 */
	public int getAno()
	{
		return m_ano;
	}
	/**
	 * ファイル番号のセット
	 * 
	 * @param ano ファイル番号
	 */
	public void setAno(int ano)
	{
		m_ano = ano;
	}
	/**
	 * 故障番号の取得
	 * 
	 * @return 故障番号
	 */
	public int getBno()
	{
		return m_bno;
	}
	/**
	 * 故障番号のセット
	 * 
	 * @param bno 故障番号
	 */
	public void setBno(int bno)
	{
		m_bno = bno;
	}
	/**
	 * ファイルタイプの取得
	 * 
	 * @return ファイルタイプ
	 */
	public String getFileType()
	{
		return m_fileType;
	}
	/**
	 * ファイルタイプのセット
	 * 
	 * @param fileType ファイルタイプ
	 */
	public void setFileType(String fileType)
	{
		m_fileType = fileType;
	}
	/**
	 * MIMEタイプの取得
	 * 
	 * @return MIMEタイプ
	 */
	public String getMimeType()
	{
		return m_mimeType;
	}
	/**
	 * MIMEタイプのセット
	 * 
	 * @param mimeType MIMEタイプ
	 */
	public void setMimeType(String mimeType)
	{
		m_mimeType = mimeType;
	}
	/**
	 * 説明の取得
	 * 
	 * @return 説明
	 */
	public String getInfo()
	{
		return m_info;
	}
	/**
	 * 説明のセット
	 * 
	 * @param info 説明
	 */
	public void setInfo(String info)
	{
		m_info = Converter.getEncodingString(info);
	}
	/**
	 * ファイルの取得
	 * 
	 * @return ファイル
	 */
	public FormFile getFile()
	{
		return m_file;
	}
	/**
	 * ファイルのセット
	 * 
	 * @param file ファイル
	 */
	public void setFile(FormFile file)
	{
		m_file = file;
	}
	/**
	 * 結果メッセージkeyの取得
	 * 
	 * @return 結果メッセージkey
	 */
	public String getMessageKey()
	{
		return m_messageKey;
	}
	/**
	 * 結果メッセージの取得
	 * 
	 * @return 結果メッセージ
	 */
	public String getMessage()
	{
		if (m_messageKey == null) {
			return "";
		} else {
			return Varidater.getMessage(m_messageKey);
		}
	}
	/**
	 * 結果メッセージkeyのセット
	 * 
	 * @param messageKey 結果メッセージkey
	 */
	public void setMessageKey(String messageKey)
	{
		m_messageKey = messageKey;
	}
//===========================================================================
// 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_ano = 0;
		m_bno = 0;
		m_fileType = DEFAULT_FILETYPE;
		m_mimeType = null;
		m_info = null;
		m_file = null;
		m_messageKey = 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();
		
		log.debug("validate");
		log.debug("filetype = " + m_fileType + " info = " + m_info);
		
		
		
		
		//action
		Varidater.checkRequired(m_action, "action", errors);
		
		//filetype
		if (Varidater.checkRequired(m_fileType, "fileType", errors)) {
			byte type = Byte.parseByte(m_fileType);
			if (type == Attachment.TYPE_OTHER) {
				//mimeType
				Varidater.checkRequired(m_mimeType, "mimeType", errors);
			}
		}
		//info
		Varidater.checkRequired(m_info, "info", errors);
		//file
		if(Varidater.checkRequired(m_file, "file", errors)) {
			if (m_file.getFileSize() == 0) {
				Varidater.addErrors("error.zeroByteFile", "file", errors);
			} else if (m_file.getFileSize() > Attachment.MAX_SIZE) {
				Varidater.addErrors("error.sizeOrverFile", "file", errors);
			}
		}
		//has the maximum length been exceeded?
/*--------------------------------
		Boolean maxLengthExceeded = (Boolean)
			request.getAttribute(MultipartRequestHandler.ATTRIBUTE_MAX_LENGTH_EXCEEDED);
		if ((maxLengthExceeded != null) && (maxLengthExceeded.booleanValue())) {
			errors.add(ERROR_PROPERTY_MAX_LENGTH_EXCEEDED, new ActionError("maxLengthExceeded"));
		}
--------------------------------*/
		return errors;
	}
}