/*
 * Copyright (C) 2005-2006 Kouji Sugisawa. All rights reserved.
 */

package jp.sourceforge.livez.vodafone;

import javax.servlet.http.HttpServletRequest;

import org.springframework.dao.DataAccessException;

import jp.sourceforge.livez.IllegalRequestException;
import jp.sourceforge.livez.MobilePhoneGenerator;
import jp.sourceforge.livez.dao.VodafoneDAO;

/**
 * ボーダフォン端末情報を生成する携帯端末情報ジェネレータクラスです。
 * 
 * @author 杉澤 浩二
 */
public final class VodafoneGenerator extends MobilePhoneGenerator<VodafoneRequest, Vodafone> {

	public static final String BEAN_ID = "vodafoneGenerator";

	/**
	 * VodafoneDAO を保持します。
	 */
	private VodafoneDAO vodafoneDAO = null;

	/**
	 * VodafoneDAO を設定します。
	 * 
	 * @param vodafoneDAO VodafoneDAO
	 */
	public void setVodafoneDAO(final VodafoneDAO vodafoneDAO) {
		this.vodafoneDAO = vodafoneDAO;
	}

	/**
	 * デフォルトコンストラクタです。
	 */
	public VodafoneGenerator() {}

	/**
	 * ボーダフォン端末リクエスト情報からボーダフォン端末情報を生成して返します。
	 * 
	 * @param r ボーダフォン端末リクエスト情報
	 * @return ボーダフォン端末情報
	 * @throws NullPointerException ボーダフォン端末リクエスト情報が <code>null</code> の場合
	 * @throws DataAccessException VodafoneDAO の操作で例外が発生した場合
	 */
	@Override
	public Vodafone create(final VodafoneRequest r) throws NullPointerException, DataAccessException {
		final VodafoneImpl result = new VodafoneImpl();

		if (vodafoneDAO != null) {
			jp.sourceforge.livez.dao.Vodafone v = vodafoneDAO.load(r.getName());
			if (v != null)
				result.setup(v);
		}

		result.setup(r);
		return result;
	}

	/**
	 * HTTP リクエスト情報からボーダフォン端末情報を生成して返します。
	 * 
	 * @param request HTTPリクエスト情報
	 * @return ボーダフォン端末情報
	 * @throws NullPointerException HTTPリクエスト情報が <code>null</code> の場合
	 * @throws IllegalRequestException HTTPリクエスト情報が不正な場合
	 * @throws DataAccessException VodafoneDAO の操作で例外が発生した場合
	 */
	@Override
	public Vodafone create(HttpServletRequest request) throws NullPointerException, IllegalRequestException, DataAccessException {
		return create(new VodafoneRequestImpl(request));
	}

}
