/*
 * Copyright 2010 jomura.net All Rights Reserved.
 */
package net.jomura.http.util;

import javax.servlet.http.HttpServletRequest;

/**
 * WebClientのUser-Agentを判定します。<br />
 * 参考： http://fdays.blogspot.com/2007/03/user-agent.html<br />
 * @author Jomora (kazuhiko@jomura.net http://jomura.net)
 * @since 2010.01.20
 * @version 2010.01.20 初版作成<br />
 */
public final class UserAgentUtil {

    private String userAgent;

    /**
     * コンストラクターです。
     * @param request HTTP要求オブジェクト
     */
    public UserAgentUtil(HttpServletRequest request) {
        userAgent = request.getHeader("user-agent");
    }

    /**
     * 携帯電話か？
     * @return 該当ならtrue,他ならfalse.
     */
    public boolean isMobile() {
        return isDoCoMo()
            || isAu()
            || isSoftbank()
            || isWillcom();
    }

    /**
     * DoCoMoか？
     * @return 該当ならtrue,他ならfalse.
     */
    public boolean isDoCoMo() {
        return userAgent.startsWith("DoCoMo");
    }

    /**
     * auか？
     * @return 該当ならtrue,他ならfalse.
     */
    public boolean isAu() {
        return isAuWAP2() || isAuHDML();
    }

    /**
     * au WAP2.0ブラウザか？
     * @return 該当ならtrue,他ならfalse.
     */
    public boolean isAuWAP2() {
        return userAgent.contains("UP.Browser")
            && userAgent.startsWith("KDDI");
    }

    /**
     * au HDMLブラウザか？
     * @return 該当ならtrue,他ならfalse.
     */
    public boolean isAuHDML() {
        return userAgent.contains("UP.Browser")
            && !userAgent.startsWith("KDDI");
    }

    /**
     * Softbankか？
     * @return 該当ならtrue,他ならfalse.
     */
    public boolean isSoftbank() {
        return userAgent.startsWith("SoftBank")
            || isVodafone()
            || isJphone()
            || userAgent.startsWith("MOT");
    }

    /**
     * Vodafoneか？
     * @return 該当ならtrue,他ならfalse.
     */
    public boolean isVodafone() {
        return userAgent.startsWith("Vodafone");
    }

    /**
     * J-PHONEか？
     * @return 該当ならtrue,他ならfalse.
     */
    public boolean isJphone() {
        return userAgent.startsWith("J-PHONE");
    }

    /**
     * WILLCOMか？
     * @return 該当ならtrue,他ならfalse.
     */
    public boolean isWillcom() {
        return userAgent.contains("WILLCOM")
            || userAgent.contains("DDIPOCKET");
    }
}
