HttpServletRequestのラッパークラス作った

ClassCastExceptionに嫌気が差した。
ぬるぽにも嫌気が差した。
使う側でキャストせず、リターン型の決まったメソッドを使って取得。
Pythonみたいに、nullだった場合のデフォルト値も指定出来る。
型は今回必要なものだけ作った。
 
Pythonは最初から便利なメソッドが用意されてるから困らない。
Rubyは自分でメソッド追加出来るから困らない。
Javaは継承するかラップするかしか出来なくて困る。
Javaを極めた人なら、もっといいやり方が思いつくのかも知れないけど。
 
最近Struts(というかTerasoluna)を初めて使って、構造を理解するまでに時間がかかった。
Rubyだったらattr_accessorで簡単に書けるような単純なsetter/getterをひたすらFormに定義したりして、なかなか面倒。
 

HttpServletRequestWrap

package jp.eth0.http;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.util.*;
import java.text.SimpleDateFormat;


public class HttpServletRequestWrap
{
	protected HttpServletRequest request;
	protected HttpSession session;


	public HttpServletRequestWrap(HttpServletRequest request)
	{
		this.request = request;
		this.session = request.getSession();
	}


	public HttpServletRequest getRequest()
	{
		return request;
	}

	public HttpSession getSession()
	{
		return session;
	}


	/* Parameter */

	// Object

	public Object getParameter(String key)
	{
		return request.getParameter(key);
	}

	public Object getParameter(String key, Object defaultValue)
	{
		Object value = getParameter(key);
		if (value==null) {
			value = defaultValue;
		}
		return value;
	}


	// String

	public String getStringParameter(String key)
	{
		String value = null;
		try {
			value = getParameter(key).toString();
		} catch (Exception e) {
		}
		return value;
	}

	public String getStringParameter(String key, String defaultValue)
	{
		String value = getStringParameter(key);
		if (value==null) {
			value = defaultValue;
		}
		return value;
	}


	// Integer

	public Integer getIntegerParameter(String key)
	{
		Integer value = null;
		try {
			value = Integer.parseInt(getStringParameter(key));
		} catch (Exception e) {
		}
		return value;
	}

	public Integer getIntegerParameter(String key, Integer defaultValue)
	{
		Integer value = getIntegerParameter(key);
		if (value==null) {
			value = defaultValue;
		}
		return value;
	}


	// Date

	public Date getDateParameter(String key, String format)
	{
		Date value = null;
		try {
			SimpleDateFormat dateFormat = new SimpleDateFormat(format);
			value = dateFormat.parse(getParameter(key).toString());
		} catch (Exception e) {
		}
		return value;
	}

	public Date getDateParameter(String key, String format, Date defaultValue)
	{
		Date value = getDateParameter(key, format);
		if (value==null) {
			value = defaultValue;
		}
		return value;
	}

	public Date getDateParameter(String key, String format, String defaultValue)
	{
		Date value = getDateParameter(key, format);
		if (value==null && defaultValue!=null) {
			try {
				SimpleDateFormat dateFormat = new SimpleDateFormat(format);
				value = dateFormat.parse(defaultValue);
			} catch (Exception e) {
			}
		}
		return value;
	}


	/* Session */

	// Object

	public void setSession(String key, Object value)
	{
		session.setAttribute(key, value);
	}

	public Object getSession(String key)
	{
		return session.getAttribute(key);
	}

	public Object getSession(String key, Object defaultValue)
	{
		Object value = getSession(key);
		if (value==null) {
			value = defaultValue;
		}
		return value;
	}


	// String

	public String getStringSession(String key)
	{
		String value = null;
		try {
			value = getSession(key).toString();
		} catch (Exception e) {
		}
		return value;
	}

	public String getStringSession(String key, String defaultValue)
	{
		String value = getStringSession(key);
		if (value==null) {
			value = defaultValue;
		}
		return value;
	}


	// Integer

	public Integer getIntegerSession(String key)
	{
		Integer value = null;
		try {
			value = Integer.parseInt(getStringSession(key));
		} catch (Exception e) {
		}
		return value;
	}

	public Integer getIntegerSession(String key, Integer defaultValue)
	{
		Integer value = getIntegerSession(key);
		if (value==null) {
			value = defaultValue;
		}
		return value;
	}


	// Boolean

	public Boolean getBooleanSession(String key)
	{
		Boolean value = null;
		try {
			Object valueObj = getSession(key);
			if (valueObj!=null) {
				value = Boolean.parseBoolean(valueObj.toString());
			}
		} catch (Exception e) {
		}
		return value;
	}

	public Boolean getBooleanSession(String key, Boolean defaultValue)
	{
		Boolean value = getBooleanSession(key);
		if (value==null) {
			value = defaultValue;
		}
		return value;
	}


	// HashMap

	public HashMap getHashSession(String sessionKey)
	{
		HashMap hash = null;
		try {
			hash = (HashMap)getSession(sessionKey);
		} catch (Exception e) {
		}
		if (hash==null) {
			hash = new HashMap();
			setSession(sessionKey, hash);
		}
		return hash;
	}

	@SuppressWarnings("unchecked")
	public void addHashSession(String sessionKey, Object hashKey, Object hashValue)
	{
		getHashSession(sessionKey).put(hashKey, hashValue);
	}

	public void removeHashSession(String sessionKey, Object hashKey)
	{
		getHashSession(sessionKey).remove(hashKey);
	}
}