/*
 * Copyright (C) 2008 feilong
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *         http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.feilong.spring.mobile.device;

import javax.servlet.http.HttpServletRequest;

import org.springframework.mobile.device.Device;
import org.springframework.mobile.device.DeviceHandlerMethodArgumentResolver;
import org.springframework.mobile.device.DeviceResolver;
import org.springframework.mobile.device.DeviceResolverHandlerInterceptor;
import org.springframework.mobile.device.DeviceResolverRequestFilter;
import org.springframework.mobile.device.LiteDeviceResolver;

/**
 * The Class DeviceUtil.
 * 
 * @author <a href="http://feitianbenyue.iteye.com/">feilong</a>
 * @see org.springframework.mobile.device.DeviceUtils
 * @since 1.6.0
 */
public class DeviceUtil{

    /**
     * The Constant DEVICE_RESOLVER.
     * 
     * @see org.springframework.mobile.device.LiteDeviceResolver#LiteDeviceResolver()
     */
    private static final DeviceResolver DEVICE_RESOLVER = new LiteDeviceResolver();

    /**
     * 通过 {@link HttpServletRequest} 解析获得 {@link Device},以便区分 {@link Device#isMobile()},{@link Device#isNormal()},{@link Device#isTablet()}.
     * 
     * <p>
     * 此方法适用于没有配置 {@link DeviceResolverHandlerInterceptor}或者 {@link DeviceResolverRequestFilter}或者
     * {@link DeviceHandlerMethodArgumentResolver} 的场景,如果你所在项目的环境配置了上述的参数,可以直接使用
     * {@link org.springframework.mobile.device.DeviceUtils#getCurrentDevice(HttpServletRequest)}
     * </p>
     * 
     * <p>
     * 以往的实现方式是通过配置 {@link DeviceResolverHandlerInterceptor}或者 {@link DeviceResolverRequestFilter}或者
     * {@link DeviceHandlerMethodArgumentResolver},<br>
     * 目前的实现方式是:按需加载,当有需要的时候调用该方法
     * </p>
     * 
     * <p>
     * 目前 spring mobile的默认实现是 {@link LiteDeviceResolver},参见
     * {@link org.springframework.mobile.device.DeviceResolverHandlerInterceptor#DeviceResolverHandlerInterceptor()}
     * </p>
     *
     * @param request
     *            request
     * @return {@link Device}
     * @see org.springframework.mobile.device.DeviceResolverHandlerInterceptor#DeviceResolverHandlerInterceptor()
     * @see org.springframework.mobile.device.LiteDeviceResolver#resolveDevice(HttpServletRequest)
     * @see org.springframework.mobile.device.DeviceUtils#getCurrentDevice(HttpServletRequest)
     */
    public static Device getDevice(HttpServletRequest request){
        return DEVICE_RESOLVER.resolveDevice(request);
    }
}

@@ -1252,16 +1252,22 @@
 %0Apublic 
+final 
 class De
@@ -1509,16 +1509,295 @@
 ver();%0A%0A
+    /** Don't let anyone instantiate this class. */%0A    private DeviceUtil()%7B%0A        //AssertionError%E4%B8%8D%E6%98%AF%E5%BF%85%E9%A1%BB%E7%9A%84. %E4%BD%86%E5%AE%83%E5%8F%AF%E4%BB%A5%E9%81%BF%E5%85%8D%E4%B8%8D%E5%B0%8F%E5%BF%83%E5%9C%A8%E7%B1%BB%E7%9A%84%E5%86%85%E9%83%A8%E8%B0%83%E7%94%A8%E6%9E%84%E9%80%A0%E5%99%A8. %E4%BF%9D%E8%AF%81%E8%AF%A5%E7%B1%BB%E5%9C%A8%E4%BB%BB%E4%BD%95%E6%83%85%E5%86%B5%E4%B8%8B%E9%83%BD%E4%B8%8D%E4%BC%9A%E8%A2%AB%E5%AE%9E%E4%BE%8B%E5%8C%96.%0A        //see %E3%80%8AEffective Java%E3%80%8B 2nd%0A        throw new AssertionError(%22No %22 + getClass().getName() + %22 instances for you!%22);%0A    %7D%0A%0A
     /**%0A

update javadoc