/*
 * ユーザーエージェント判定機能
 * 
 * 作成日: 2007/06/08
 * 
 * 変更履歴
 *   ユーザーエージェント判定項目追加 ntc-hagiwara '07/07/20
 *   PC/携帯端末判定処理追加   　     ntc-hagiwara '07/07/20
 *   
 */
package jp.co.ntt.lms.imode.common;

import javax.servlet.http.*;

/**
 * ユーザーエージェント判定機能
 *
 * @author ntc-hagiwara
 *
 */
public class UserAgentCheck {
	/** HttpServletRequestの参照 */
	private HttpServletRequest request;
	/**
	 * キャリアを示す値を格納します。
	 * このクラスのPC, DOCOMO, KDDI, SOFTBANKのいずれかです。
	 */
	private static int mobileCarrierInt = 0;
	/** アクセス元が携帯以外であることを示します。 */
	public static final int PC = 4;
	/** アクセス元がDOCOMO端末であることを示します。 */
	public static final int DOCOMOCarrier = 1;
	/** アクセス元がKDDI端末であることを示します。 */
	public static final int KDDICarrier = 2;
	/** アクセス元がSOFTBANK端末であることを示します。 */
	public static final int SOFTBANKCarrier = 3;

	/** ユーザーエージェント判定用DOCOMO */
	public static final String DOCOMO[] = {"DoCoMo"};	
	/** ユーザーエージェント判定用KDDI */
	public static final String KDDI[] = {"KDDI", "BREW", "UP.Browser"};	
	/** ユーザーエージェント判定用SOFTBANK */
	public static final String SOFTBANK[] = {"J-PHONE", "Vodafone", "SoftBank"};

	
	/**
	 * このコンストラクタ実行時に、指定されたリクエストデータを取り出します。
	 * 
	 * @param request　HTTPリクエスト
	 */
	public UserAgentCheck(HttpServletRequest request) {
		this.request = request;
		setMobileCarrier();
	}

	/**
	 * アクセス元の携帯電話のキャリア(通信会社)を示す値を返します。
	 * @return mobileCarrierInt　キャリア(通信会社)名
	 */
	public int getMobileCarrier() {
		return mobileCarrierInt;
	}

	/**
	 * キャリア(通信会社)を返します。
	 * @return 携帯端末の場合true、PCの場合false
	 */
	public boolean isMobile(){
		if(mobileCarrierInt == 4) return false; 
		return true;
	}

	/**
	 * キャリア(通信会社)をリクエストヘッダーの"User-Agent"から取得します。
	 *
	 */
	private void setMobileCarrier() {
		String strUserAgent = (String)request.getHeader("user-agent").toUpperCase();
		
		// DOCOMO端末判定
		for(int i = 0; i < DOCOMO.length; i++){
			if(strUserAgent.indexOf(DOCOMO[i].toUpperCase()) >= 0){
				mobileCarrierInt = DOCOMOCarrier;
				break;
			}else{
				mobileCarrierInt = PC;
			}
		}
		// KDDI端末判定
		if(mobileCarrierInt == PC){
			for(int i = 0; i < KDDI.length; i++){
				if(strUserAgent.indexOf(KDDI[i].toUpperCase()) >= 0){
					mobileCarrierInt = KDDICarrier;
					break;
				}else{
					mobileCarrierInt = PC;
				}
			}
		}
		// SOFTBANK端末判定
		if(mobileCarrierInt == PC){
			for(int i = 0; i < SOFTBANK.length; i++){
				if(strUserAgent.indexOf(SOFTBANK[i].toUpperCase()) >= 0){
					mobileCarrierInt = SOFTBANKCarrier;
					break;
				}else{
					mobileCarrierInt = PC;
				}
			}
		}
	}
}
