Commit cbd81c83fbff2e99e59b38e50ce09af357f53fc2
- Diff rendering mode:
- inline
- side by side
spring-mobile-device/src/main/java/org/springframework/mobile/device/site/SitePreferenceHandler.java
(27 / 0)
|   | |||
| 1 | package org.springframework.mobile.device.site; | ||
| 2 | |||
| 3 | import javax.servlet.http.HttpServletRequest; | ||
| 4 | import javax.servlet.http.HttpServletResponse; | ||
| 5 | |||
| 6 | import org.springframework.mobile.device.Device; | ||
| 7 | |||
| 8 | public interface SitePreferenceHandler { | ||
| 9 | |||
| 10 | /** | ||
| 11 | * Name of the request attribute that holds the current user's site preference value. | ||
| 12 | */ | ||
| 13 | final String CURRENT_SITE_PREFERENCE_ATTRIBUTE = "currentSitePreference"; | ||
| 14 | |||
| 15 | /** | ||
| 16 | * Handle the site preference aspect of the web request. | ||
| 17 | * Implementations should check if the user has indicated a site preference. | ||
| 18 | * If so, the indicated site preference should be saved and remembered for future requests. | ||
| 19 | * If no site preference has been indicated, an implementation may derive a default site preference from the {@link Device} that originated the request. | ||
| 20 | * After handling, the resolved site preference is available as a {@link #CURRENT_SITE_PREFERENCE_ATTRIBUTE request attribute}. | ||
| 21 | * @param request the web request | ||
| 22 | * @param response the web response | ||
| 23 | * @return the resolved site preference for the user that originated the web request | ||
| 24 | */ | ||
| 25 | SitePreference handleSitePreference(HttpServletRequest request, HttpServletResponse response); | ||
| 26 | |||
| 27 | } |
spring-mobile-device/src/main/java/org/springframework/mobile/device/site/SitePreferenceHandlerInterceptor.java
(51 / 0)
|   | |||
| 1 | /* | ||
| 2 | * Copyright 2010 the original author or authors. | ||
| 3 | * | ||
| 4 | * Licensed under the Apache License, Version 2.0 (the "License"); | ||
| 5 | * you may not use this file except in compliance with the License. | ||
| 6 | * You may obtain a copy of the License at | ||
| 7 | * | ||
| 8 | * http://www.apache.org/licenses/LICENSE-2.0 | ||
| 9 | * | ||
| 10 | * Unless required by applicable law or agreed to in writing, software | ||
| 11 | * distributed under the License is distributed on an "AS IS" BASIS, | ||
| 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
| 13 | * See the License for the specific language governing permissions and | ||
| 14 | * limitations under the License. | ||
| 15 | */ | ||
| 16 | package org.springframework.mobile.device.site; | ||
| 17 | |||
| 18 | import javax.servlet.http.HttpServletRequest; | ||
| 19 | import javax.servlet.http.HttpServletResponse; | ||
| 20 | |||
| 21 | import org.springframework.mobile.device.switcher.SiteSwitcherHandlerInterceptor; | ||
| 22 | import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; | ||
| 23 | |||
| 24 | /** | ||
| 25 | * A Spring MVC interceptor that, on preHandle, delegates to a {@link SitePreferenceHandler} to resolve the SitePreference of the user that originated the web request. | ||
| 26 | * The resolved SitePreference is exported as a request attribute under the well-known name of {@link SitePreferenceHandler#CURRENT_SITE_PREFERENCE_ATTRIBUTE}. | ||
| 27 | * Request handlers such as @Controllers and views may then access the currentSitePreference to vary their control and rendering logic, respectively. | ||
| 28 | * | ||
| 29 | * Note: do not use this interceptor with the {@link SiteSwitcherHandlerInterceptor}, as {@link SiteSwitcherHandlerInterceptor} internally delegates to a {@link SitePreferenceHandler} as part of its own workflow. | ||
| 30 | * This interceptor should only be used when the SiteSwitcher is not needed but general site preference handling is desired. | ||
| 31 | * | ||
| 32 | * @author Keith Donald | ||
| 33 | */ | ||
| 34 | public class SitePreferenceHandlerInterceptor extends HandlerInterceptorAdapter { | ||
| 35 | |||
| 36 | private final SitePreferenceHandler sitePreferenceHandler; | ||
| 37 | |||
| 38 | public SitePreferenceHandlerInterceptor() { | ||
| 39 | this(new StandardSitePreferenceHandler(new CookieSitePreferenceRepository())); | ||
| 40 | } | ||
| 41 | |||
| 42 | public SitePreferenceHandlerInterceptor(SitePreferenceHandler sitePreferenceHandler) { | ||
| 43 | this.sitePreferenceHandler = sitePreferenceHandler; | ||
| 44 | } | ||
| 45 | |||
| 46 | public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { | ||
| 47 | sitePreferenceHandler.handleSitePreference(request, response); | ||
| 48 | return true; | ||
| 49 | } | ||
| 50 | |||
| 51 | } |
spring-mobile-device/src/main/java/org/springframework/mobile/device/site/SitePreferenceResolver.java
(0 / 97)
|   | |||
| 1 | /* | ||
| 2 | * Copyright 2010 the original author or authors. | ||
| 3 | * | ||
| 4 | * Licensed under the Apache License, Version 2.0 (the "License"); | ||
| 5 | * you may not use this file except in compliance with the License. | ||
| 6 | * You may obtain a copy of the License at | ||
| 7 | * | ||
| 8 | * http://www.apache.org/licenses/LICENSE-2.0 | ||
| 9 | * | ||
| 10 | * Unless required by applicable law or agreed to in writing, software | ||
| 11 | * distributed under the License is distributed on an "AS IS" BASIS, | ||
| 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
| 13 | * See the License for the specific language governing permissions and | ||
| 14 | * limitations under the License. | ||
| 15 | */ | ||
| 16 | package org.springframework.mobile.device.site; | ||
| 17 | |||
| 18 | import javax.servlet.http.HttpServletRequest; | ||
| 19 | import javax.servlet.http.HttpServletResponse; | ||
| 20 | |||
| 21 | import org.springframework.mobile.device.Device; | ||
| 22 | import org.springframework.mobile.device.mvc.DeviceResolverHandlerInterceptor; | ||
| 23 | import org.springframework.web.context.request.RequestAttributes; | ||
| 24 | |||
| 25 | /** | ||
| 26 | * A helper that resolves the user's site preference and makes it available as a request attribute. | ||
| 27 | * Primarily used to support the case where a user on a mobile device prefers to use the normal site. | ||
| 28 | * The site preference may be changed on behalf of a user by submitting the 'site_preference' query parameter. | ||
| 29 | * The preference value is saved in a repository so it can be remembered until the user decides to change it again. | ||
| 30 | * If no site preference is specified, preference to the mobile site will be given if the current device is a mobile device. | ||
| 31 | * The current user SitePreference is exported as a request attribute with the name {@link #CURRENT_SITE_PREFERENCE_ATTRIBUTE}. | ||
| 32 | * This allows handler mappings and view resolvers further down the line to vary their logic by site preference. | ||
| 33 | * @author Keith Donald | ||
| 34 | */ | ||
| 35 | public class SitePreferenceResolver { | ||
| 36 | |||
| 37 | public static final String CURRENT_SITE_PREFERENCE_ATTRIBUTE = "currentSitePreference"; | ||
| 38 | |||
| 39 | private final SitePreferenceRepository sitePreferenceRepository; | ||
| 40 | |||
| 41 | /** | ||
| 42 | * Creates a new site preference interceptor. | ||
| 43 | * @param sitePreferenceRepository the store for recording user site preference | ||
| 44 | */ | ||
| 45 | public SitePreferenceResolver(SitePreferenceRepository sitePreferenceRepository) { | ||
| 46 | this.sitePreferenceRepository = sitePreferenceRepository; | ||
| 47 | } | ||
| 48 | |||
| 49 | public SitePreference resolveSitePreference(HttpServletRequest request, HttpServletResponse response) { | ||
| 50 | SitePreference preference = getSitePreferenceQueryParameter(request); | ||
| 51 | if (preference != null) { | ||
| 52 | sitePreferenceRepository.saveSitePreference(preference, request, response); | ||
| 53 | } else { | ||
| 54 | preference = sitePreferenceRepository.loadSitePreference(request); | ||
| 55 | } | ||
| 56 | if (preference == null) { | ||
| 57 | preference = getDefaultSitePreferenceForDevice(DeviceResolverHandlerInterceptor.getCurrentDevice(request)); | ||
| 58 | } | ||
| 59 | if (preference != null) { | ||
| 60 | request.setAttribute(CURRENT_SITE_PREFERENCE_ATTRIBUTE, preference); | ||
| 61 | } | ||
| 62 | return preference; | ||
| 63 | } | ||
| 64 | |||
| 65 | // static factory methods | ||
| 66 | |||
| 67 | /** | ||
| 68 | * Get the current site preference for the user that originated this web request. | ||
| 69 | */ | ||
| 70 | public static SitePreference getCurrentSitePreference(HttpServletRequest request) { | ||
| 71 | return (SitePreference) request.getAttribute(CURRENT_SITE_PREFERENCE_ATTRIBUTE); | ||
| 72 | } | ||
| 73 | |||
| 74 | /** | ||
| 75 | * Get the current site preference for the user from the request attributes map. | ||
| 76 | */ | ||
| 77 | public static SitePreference getCurrentSitePreference(RequestAttributes attributes) { | ||
| 78 | return (SitePreference) attributes.getAttribute(CURRENT_SITE_PREFERENCE_ATTRIBUTE, RequestAttributes.SCOPE_REQUEST); | ||
| 79 | } | ||
| 80 | |||
| 81 | // internal helpers | ||
| 82 | |||
| 83 | private SitePreference getSitePreferenceQueryParameter(HttpServletRequest request) { | ||
| 84 | String string = request.getParameter(SITE_PREFERENCE_PARAMETER); | ||
| 85 | return string != null && string.length() > 0 ? SitePreference.valueOf(string.toUpperCase()) : null; | ||
| 86 | } | ||
| 87 | |||
| 88 | private SitePreference getDefaultSitePreferenceForDevice(Device device) { | ||
| 89 | if (device == null) { | ||
| 90 | return null; | ||
| 91 | } | ||
| 92 | return device.isMobile() ? SitePreference.MOBILE : SitePreference.NORMAL; | ||
| 93 | } | ||
| 94 | |||
| 95 | private static final String SITE_PREFERENCE_PARAMETER = "site_preference"; | ||
| 96 | |||
| 97 | } |
spring-mobile-device/src/main/java/org/springframework/mobile/device/site/SitePreferenceUtils.java
(33 / 0)
|   | |||
| 1 | package org.springframework.mobile.device.site; | ||
| 2 | |||
| 3 | import static org.springframework.mobile.device.site.SitePreferenceHandler.CURRENT_SITE_PREFERENCE_ATTRIBUTE; | ||
| 4 | |||
| 5 | import javax.servlet.http.HttpServletRequest; | ||
| 6 | |||
| 7 | import org.springframework.web.context.request.RequestAttributes; | ||
| 8 | |||
| 9 | /** | ||
| 10 | * Static helper for accessing request-scoped SitePreference values. | ||
| 11 | * @author Keith Donald | ||
| 12 | */ | ||
| 13 | public class SitePreferenceUtils { | ||
| 14 | |||
| 15 | /** | ||
| 16 | * Get the current site preference for the user that originated this web request. | ||
| 17 | */ | ||
| 18 | public static SitePreference getCurrentSitePreference(HttpServletRequest request) { | ||
| 19 | return (SitePreference) request.getAttribute(CURRENT_SITE_PREFERENCE_ATTRIBUTE); | ||
| 20 | } | ||
| 21 | |||
| 22 | /** | ||
| 23 | * Get the current site preference for the user from the request attributes map. | ||
| 24 | */ | ||
| 25 | public static SitePreference getCurrentSitePreference(RequestAttributes attributes) { | ||
| 26 | return (SitePreference) attributes.getAttribute(CURRENT_SITE_PREFERENCE_ATTRIBUTE, RequestAttributes.SCOPE_REQUEST); | ||
| 27 | } | ||
| 28 | |||
| 29 | private SitePreferenceUtils() { | ||
| 30 | |||
| 31 | } | ||
| 32 | |||
| 33 | } |
spring-mobile-device/src/main/java/org/springframework/mobile/device/site/SitePreferenceWebArgumentResolver.java
(2 / 3)
|   | |||
| 16 | 16 | package org.springframework.mobile.device.site; | |
| 17 | 17 | ||
| 18 | 18 | import org.springframework.core.MethodParameter; | |
| 19 | import org.springframework.mobile.device.switcher.SiteSwitcherHandlerInterceptor; | ||
| 20 | 19 | import org.springframework.web.bind.support.WebArgumentResolver; | |
| 21 | 20 | import org.springframework.web.context.request.NativeWebRequest; | |
| 22 | 21 | ||
| 23 | 22 | /** | |
| 24 | 23 | * Spring MVC {@link WebArgumentResolver} that resolves @Controller MethodParameters of type {@link SitePreference} | |
| 25 | * to the value of the web request's {@link SiteSwitcherHandlerInterceptor#CURRENT_SITE_PREFERENCE_ATTRIBUTE current site preference} attribute. | ||
| 24 | * to the value of the web request's {@link SitePreferenceHandler#CURRENT_SITE_PREFERENCE_ATTRIBUTE current site preference attribute}. | ||
| 26 | 25 | * @author Keith Donald | |
| 27 | 26 | */ | |
| 28 | 27 | public class SitePreferenceWebArgumentResolver implements WebArgumentResolver { | |
| 29 | 28 | ||
| 30 | 29 | public Object resolveArgument(MethodParameter param, NativeWebRequest request) throws Exception { | |
| 31 | 30 | if (SitePreference.class.isAssignableFrom(param.getParameterType())) { | |
| 32 | return SitePreferenceResolver.getCurrentSitePreference(request); | ||
| 31 | return SitePreferenceUtils.getCurrentSitePreference(request); | ||
| 33 | 32 | } else { | |
| 34 | 33 | return WebArgumentResolver.UNRESOLVED; | |
| 35 | 34 | } |
spring-mobile-device/src/main/java/org/springframework/mobile/device/site/StandardSitePreferenceHandler.java
(78 / 0)
|   | |||
| 1 | /* | ||
| 2 | * Copyright 2010 the original author or authors. | ||
| 3 | * | ||
| 4 | * Licensed under the Apache License, Version 2.0 (the "License"); | ||
| 5 | * you may not use this file except in compliance with the License. | ||
| 6 | * You may obtain a copy of the License at | ||
| 7 | * | ||
| 8 | * http://www.apache.org/licenses/LICENSE-2.0 | ||
| 9 | * | ||
| 10 | * Unless required by applicable law or agreed to in writing, software | ||
| 11 | * distributed under the License is distributed on an "AS IS" BASIS, | ||
| 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
| 13 | * See the License for the specific language governing permissions and | ||
| 14 | * limitations under the License. | ||
| 15 | */ | ||
| 16 | package org.springframework.mobile.device.site; | ||
| 17 | |||
| 18 | import javax.servlet.http.HttpServletRequest; | ||
| 19 | import javax.servlet.http.HttpServletResponse; | ||
| 20 | |||
| 21 | import org.springframework.mobile.device.Device; | ||
| 22 | import org.springframework.mobile.device.mvc.DeviceResolverHandlerInterceptor; | ||
| 23 | |||
| 24 | /** | ||
| 25 | * A helper that resolves the user's site preference and makes it available as a request attribute. | ||
| 26 | * Primarily used to support the case where a user on a mobile device prefers to use the normal site. | ||
| 27 | * The site preference may be changed on behalf of a user by submitting the 'site_preference' query parameter. | ||
| 28 | * The preference value is saved in a repository so it can be remembered until the user decides to change it again. | ||
| 29 | * If no site preference is specified, preference to the mobile site will be given if the current device is a mobile device. | ||
| 30 | * The current user SitePreference is exported as a request attribute with the name {@link #CURRENT_SITE_PREFERENCE_ATTRIBUTE}. | ||
| 31 | * This allows handler mappings and view resolvers further down the line to vary their logic by site preference. | ||
| 32 | * @author Keith Donald | ||
| 33 | */ | ||
| 34 | public class StandardSitePreferenceHandler implements SitePreferenceHandler { | ||
| 35 | |||
| 36 | private final SitePreferenceRepository sitePreferenceRepository; | ||
| 37 | |||
| 38 | /** | ||
| 39 | * Creates a new site preference handler. | ||
| 40 | * @param sitePreferenceRepository the store for recording user site preference | ||
| 41 | */ | ||
| 42 | public StandardSitePreferenceHandler(SitePreferenceRepository sitePreferenceRepository) { | ||
| 43 | this.sitePreferenceRepository = sitePreferenceRepository; | ||
| 44 | } | ||
| 45 | |||
| 46 | public SitePreference handleSitePreference(HttpServletRequest request, HttpServletResponse response) { | ||
| 47 | SitePreference preference = getSitePreferenceQueryParameter(request); | ||
| 48 | if (preference != null) { | ||
| 49 | sitePreferenceRepository.saveSitePreference(preference, request, response); | ||
| 50 | } else { | ||
| 51 | preference = sitePreferenceRepository.loadSitePreference(request); | ||
| 52 | } | ||
| 53 | if (preference == null) { | ||
| 54 | preference = getDefaultSitePreferenceForDevice(DeviceResolverHandlerInterceptor.getCurrentDevice(request)); | ||
| 55 | } | ||
| 56 | if (preference != null) { | ||
| 57 | request.setAttribute(CURRENT_SITE_PREFERENCE_ATTRIBUTE, preference); | ||
| 58 | } | ||
| 59 | return preference; | ||
| 60 | } | ||
| 61 | |||
| 62 | // internal helpers | ||
| 63 | |||
| 64 | private SitePreference getSitePreferenceQueryParameter(HttpServletRequest request) { | ||
| 65 | String string = request.getParameter(SITE_PREFERENCE_PARAMETER); | ||
| 66 | return string != null && string.length() > 0 ? SitePreference.valueOf(string.toUpperCase()) : null; | ||
| 67 | } | ||
| 68 | |||
| 69 | private SitePreference getDefaultSitePreferenceForDevice(Device device) { | ||
| 70 | if (device == null) { | ||
| 71 | return null; | ||
| 72 | } | ||
| 73 | return device.isMobile() ? SitePreference.MOBILE : SitePreference.NORMAL; | ||
| 74 | } | ||
| 75 | |||
| 76 | private static final String SITE_PREFERENCE_PARAMETER = "site_preference"; | ||
| 77 | |||
| 78 | } |
spring-mobile-device/src/main/java/org/springframework/mobile/device/switcher/SiteSwitcherHandlerInterceptor.java
(9 / 15)
|   | |||
| 22 | 22 | import org.springframework.mobile.device.mvc.DeviceResolverHandlerInterceptor; | |
| 23 | 23 | import org.springframework.mobile.device.site.CookieSitePreferenceRepository; | |
| 24 | 24 | import org.springframework.mobile.device.site.SitePreference; | |
| 25 | import org.springframework.mobile.device.site.SitePreferenceRepository; | ||
| 26 | import org.springframework.mobile.device.site.SitePreferenceResolver; | ||
| 25 | import org.springframework.mobile.device.site.SitePreferenceHandler; | ||
| 26 | import org.springframework.mobile.device.site.StandardSitePreferenceHandler; | ||
| 27 | 27 | import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; | |
| 28 | 28 | ||
| 29 | 29 | /** | |
| … | … | ||
| 45 | 45 | */ | |
| 46 | 46 | public class SiteSwitcherHandlerInterceptor extends HandlerInterceptorAdapter { | |
| 47 | 47 | ||
| 48 | public static final String CURRENT_SITE_PREFERENCE_ATTRIBUTE = "currentSitePreference"; | ||
| 49 | |||
| 50 | 48 | private final SiteUrlFactory normalSiteUrlFactory; | |
| 51 | 49 | ||
| 52 | 50 | private final SiteUrlFactory mobileSiteUrlFactory; | |
| 53 | 51 | ||
| 54 | private final SitePreferenceResolver sitePreferenceResolver; | ||
| 52 | private final SitePreferenceHandler sitePreferenceHandler; | ||
| 55 | 53 | ||
| 56 | 54 | /** | |
| 57 | 55 | * Creates a new site switcher. | |
| 58 | 56 | * @param normalSiteUrlFactory the factory for a "normal" site URL e.g. http://app.com | |
| 59 | 57 | * @param mobileSiteUrlFactory the factory for a "mobile" site URL e.g. http://m.app.com | |
| 60 | * @param sitePreferenceRepository the store for resolving user site preference | ||
| 58 | * @param sitePreferenceHandler the handler for the user site preference | ||
| 61 | 59 | */ | |
| 62 | public SiteSwitcherHandlerInterceptor(SiteUrlFactory normalSiteUrlFactory, SiteUrlFactory mobileSiteUrlFactory, | ||
| 63 | SitePreferenceRepository sitePreferenceRepository) { | ||
| 60 | public SiteSwitcherHandlerInterceptor(SiteUrlFactory normalSiteUrlFactory, SiteUrlFactory mobileSiteUrlFactory, SitePreferenceHandler sitePreferenceHandler) { | ||
| 64 | 61 | this.normalSiteUrlFactory = normalSiteUrlFactory; | |
| 65 | 62 | this.mobileSiteUrlFactory = mobileSiteUrlFactory; | |
| 66 | this.sitePreferenceResolver = new SitePreferenceResolver(sitePreferenceRepository); | ||
| 63 | this.sitePreferenceHandler = sitePreferenceHandler; | ||
| 67 | 64 | } | |
| 68 | 65 | ||
| 69 | 66 | public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { | |
| 70 | SitePreference sitePreference = sitePreferenceResolver.resolveSitePreference(request, response); | ||
| 67 | SitePreference sitePreference = sitePreferenceHandler.handleSitePreference(request, response); | ||
| 71 | 68 | if (mobileSiteUrlFactory.isRequestForSite(request)) { | |
| 72 | 69 | if (sitePreference == SitePreference.NORMAL) { | |
| 73 | 70 | response.sendRedirect(response.encodeRedirectURL(normalSiteUrlFactory.createSiteUrl(request))); | |
| … | … | ||
| 88 | 88 | * Uses a {@link CookieSitePreferenceRepository} that saves a cookie that is shared between the two domains. | |
| 89 | 89 | */ | |
| 90 | 90 | public static SiteSwitcherHandlerInterceptor mDot(String serverName) { | |
| 91 | return new SiteSwitcherHandlerInterceptor(new StandardSiteUrlFactory(serverName), | ||
| 92 | new StandardSiteUrlFactory("m." + serverName), new CookieSitePreferenceRepository("." + serverName)); | ||
| 91 | return new SiteSwitcherHandlerInterceptor(new StandardSiteUrlFactory(serverName), new StandardSiteUrlFactory("m." + serverName), new StandardSitePreferenceHandler(new CookieSitePreferenceRepository("." + serverName))); | ||
| 93 | 92 | } | |
| 94 | 93 | ||
| 95 | 94 | /** | |
| … | … | ||
| 100 | 100 | */ | |
| 101 | 101 | public static SiteSwitcherHandlerInterceptor dotMobi(String serverName) { | |
| 102 | 102 | int lastDot = serverName.lastIndexOf('.'); | |
| 103 | return new SiteSwitcherHandlerInterceptor(new StandardSiteUrlFactory(serverName), | ||
| 104 | new StandardSiteUrlFactory(serverName.substring(0, lastDot) + ".mobi"), | ||
| 105 | new CookieSitePreferenceRepository("." + serverName)); | ||
| 103 | return new SiteSwitcherHandlerInterceptor(new StandardSiteUrlFactory(serverName), new StandardSiteUrlFactory(serverName.substring(0, lastDot) + ".mobi"), new StandardSitePreferenceHandler(new CookieSitePreferenceRepository("." + serverName))); | ||
| 106 | 104 | } | |
| 107 | 105 | ||
| 108 | 106 | } |
spring-mobile-device/src/test/java/org/springframework/mobile/device/mvc/DeviceResolverHandlerInterceptorTest.java
(43 / 0)
|   | |||
| 1 | package org.springframework.mobile.device.mvc; | ||
| 2 | |||
| 3 | import static org.junit.Assert.assertSame; | ||
| 4 | import static org.junit.Assert.assertTrue; | ||
| 5 | |||
| 6 | import javax.servlet.http.HttpServletRequest; | ||
| 7 | |||
| 8 | import org.junit.Test; | ||
| 9 | import org.springframework.mobile.device.Device; | ||
| 10 | import org.springframework.mobile.device.DeviceResolver; | ||
| 11 | import org.springframework.mock.web.MockHttpServletRequest; | ||
| 12 | import org.springframework.mock.web.MockHttpServletResponse; | ||
| 13 | |||
| 14 | public class DeviceResolverHandlerInterceptorTest { | ||
| 15 | |||
| 16 | private Device device = new StubDevice(); | ||
| 17 | |||
| 18 | private DeviceResolverHandlerInterceptor interceptor = new DeviceResolverHandlerInterceptor(new DeviceResolver() { | ||
| 19 | public Device resolveDevice(HttpServletRequest request) { | ||
| 20 | return device; | ||
| 21 | } | ||
| 22 | }); | ||
| 23 | |||
| 24 | private MockHttpServletRequest request = new MockHttpServletRequest(); | ||
| 25 | |||
| 26 | private MockHttpServletResponse response = new MockHttpServletResponse(); | ||
| 27 | |||
| 28 | @Test | ||
| 29 | public void resolve() throws Exception { | ||
| 30 | assertTrue(interceptor.preHandle(request, response, null)); | ||
| 31 | assertSame(device, DeviceResolverHandlerInterceptor.getCurrentDevice(request)); | ||
| 32 | } | ||
| 33 | |||
| 34 | @Test | ||
| 35 | public void resolveDefaultResolver() throws Exception { | ||
| 36 | interceptor = new DeviceResolverHandlerInterceptor(); | ||
| 37 | request.addHeader("User-Agent", "Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_0 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8A293 Safari/6531.22.7"); | ||
| 38 | assertTrue(interceptor.preHandle(request, response, null)); | ||
| 39 | Device device = DeviceResolverHandlerInterceptor.getCurrentDevice(request); | ||
| 40 | assertTrue(device.isMobile()); | ||
| 41 | } | ||
| 42 | |||
| 43 | } |
spring-mobile-device/src/test/java/org/springframework/mobile/device/mvc/DeviceResolvingHandlerInterceptorTest.java
(0 / 43)
|   | |||
| 1 | package org.springframework.mobile.device.mvc; | ||
| 2 | |||
| 3 | import static org.junit.Assert.assertSame; | ||
| 4 | import static org.junit.Assert.assertTrue; | ||
| 5 | |||
| 6 | import javax.servlet.http.HttpServletRequest; | ||
| 7 | |||
| 8 | import org.junit.Test; | ||
| 9 | import org.springframework.mobile.device.Device; | ||
| 10 | import org.springframework.mobile.device.DeviceResolver; | ||
| 11 | import org.springframework.mock.web.MockHttpServletRequest; | ||
| 12 | import org.springframework.mock.web.MockHttpServletResponse; | ||
| 13 | |||
| 14 | public class DeviceResolvingHandlerInterceptorTest { | ||
| 15 | |||
| 16 | private Device device = new StubDevice(); | ||
| 17 | |||
| 18 | private DeviceResolverHandlerInterceptor interceptor = new DeviceResolverHandlerInterceptor(new DeviceResolver() { | ||
| 19 | public Device resolveDevice(HttpServletRequest request) { | ||
| 20 | return device; | ||
| 21 | } | ||
| 22 | }); | ||
| 23 | |||
| 24 | private MockHttpServletRequest request = new MockHttpServletRequest(); | ||
| 25 | |||
| 26 | private MockHttpServletResponse response = new MockHttpServletResponse(); | ||
| 27 | |||
| 28 | @Test | ||
| 29 | public void resolve() throws Exception { | ||
| 30 | assertTrue(interceptor.preHandle(request, response, null)); | ||
| 31 | assertSame(device, DeviceResolverHandlerInterceptor.getCurrentDevice(request)); | ||
| 32 | } | ||
| 33 | |||
| 34 | @Test | ||
| 35 | public void resolveDefaultResolver() throws Exception { | ||
| 36 | interceptor = new DeviceResolverHandlerInterceptor(); | ||
| 37 | request.addHeader("User-Agent", "Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_0 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8A293 Safari/6531.22.7"); | ||
| 38 | assertTrue(interceptor.preHandle(request, response, null)); | ||
| 39 | Device device = DeviceResolverHandlerInterceptor.getCurrentDevice(request); | ||
| 40 | assertTrue(device.isMobile()); | ||
| 41 | } | ||
| 42 | |||
| 43 | } |
spring-mobile-device/src/test/java/org/springframework/mobile/device/site/SitePreferenceHandlerInterceptorTest.java
(42 / 0)
|   | |||
| 1 | package org.springframework.mobile.device.site; | ||
| 2 | |||
| 3 | import static org.junit.Assert.assertEquals; | ||
| 4 | import static org.junit.Assert.assertNull; | ||
| 5 | import static org.junit.Assert.assertTrue; | ||
| 6 | |||
| 7 | import javax.servlet.http.HttpServletRequest; | ||
| 8 | import javax.servlet.http.HttpServletResponse; | ||
| 9 | |||
| 10 | import org.junit.Test; | ||
| 11 | import org.springframework.mock.web.MockHttpServletRequest; | ||
| 12 | import org.springframework.mock.web.MockHttpServletResponse; | ||
| 13 | |||
| 14 | public class SitePreferenceHandlerInterceptorTest { | ||
| 15 | |||
| 16 | private MockHttpServletRequest request = new MockHttpServletRequest(); | ||
| 17 | |||
| 18 | private MockHttpServletResponse response = new MockHttpServletResponse(); | ||
| 19 | |||
| 20 | @Test | ||
| 21 | public void preHandleDefault() throws Exception { | ||
| 22 | SitePreferenceHandlerInterceptor interceptor = new SitePreferenceHandlerInterceptor(); | ||
| 23 | boolean result = interceptor.preHandle(request, response, null); | ||
| 24 | assertNull(SitePreferenceUtils.getCurrentSitePreference(request)); | ||
| 25 | assertTrue(result); | ||
| 26 | } | ||
| 27 | |||
| 28 | @Test | ||
| 29 | public void preHandleCustom() throws Exception { | ||
| 30 | SitePreferenceHandler handler = new SitePreferenceHandler() { | ||
| 31 | public SitePreference handleSitePreference(HttpServletRequest request, HttpServletResponse response) { | ||
| 32 | request.setAttribute("currentSitePreference", SitePreference.MOBILE); | ||
| 33 | return SitePreference.MOBILE; | ||
| 34 | } | ||
| 35 | }; | ||
| 36 | SitePreferenceHandlerInterceptor interceptor = new SitePreferenceHandlerInterceptor(handler); | ||
| 37 | boolean result = interceptor.preHandle(request, response, null); | ||
| 38 | assertEquals(SitePreference.MOBILE, request.getAttribute("currentSitePreference")); | ||
| 39 | assertTrue(result); | ||
| 40 | } | ||
| 41 | |||
| 42 | } |
spring-mobile-device/src/test/java/org/springframework/mobile/device/site/SitePreferenceResolverTest.java
(0 / 63)
|   | |||
| 1 | package org.springframework.mobile.device.site; | ||
| 2 | |||
| 3 | import static org.junit.Assert.assertEquals; | ||
| 4 | import static org.junit.Assert.assertNull; | ||
| 5 | |||
| 6 | import org.junit.Before; | ||
| 7 | import org.junit.Test; | ||
| 8 | import org.springframework.mobile.device.mvc.DeviceResolverHandlerInterceptor; | ||
| 9 | import org.springframework.mobile.device.mvc.StubDevice; | ||
| 10 | import org.springframework.mock.web.MockHttpServletRequest; | ||
| 11 | import org.springframework.mock.web.MockHttpServletResponse; | ||
| 12 | |||
| 13 | public class SitePreferenceResolverTest { | ||
| 14 | |||
| 15 | private SitePreferenceResolver sitePreferenceResolver; | ||
| 16 | |||
| 17 | private MockHttpServletRequest request = new MockHttpServletRequest(); | ||
| 18 | |||
| 19 | private MockHttpServletResponse response = new MockHttpServletResponse(); | ||
| 20 | |||
| 21 | private StubSitePreferenceRepository repository = new StubSitePreferenceRepository(); | ||
| 22 | |||
| 23 | @Before | ||
| 24 | public void setup() throws Exception { | ||
| 25 | sitePreferenceResolver = new SitePreferenceResolver(repository); | ||
| 26 | } | ||
| 27 | |||
| 28 | @Test | ||
| 29 | public void saveSitePreference() throws Exception { | ||
| 30 | request.addParameter("site_preference", "normal"); | ||
| 31 | assertEquals(SitePreference.NORMAL, sitePreferenceResolver.resolveSitePreference(request, response)); | ||
| 32 | assertEquals(SitePreference.NORMAL, repository.getSitePreference()); | ||
| 33 | assertEquals(SitePreference.NORMAL, SitePreferenceResolver.getCurrentSitePreference(request)); | ||
| 34 | } | ||
| 35 | |||
| 36 | @Test | ||
| 37 | public void loadSitePreference() throws Exception { | ||
| 38 | repository.setSitePreference(SitePreference.MOBILE); | ||
| 39 | assertEquals(SitePreference.MOBILE, sitePreferenceResolver.resolveSitePreference(request, response)); | ||
| 40 | assertEquals(SitePreference.MOBILE, SitePreferenceResolver.getCurrentSitePreference(request)); | ||
| 41 | } | ||
| 42 | |||
| 43 | @Test | ||
| 44 | public void defaultSitePreference() throws Exception { | ||
| 45 | assertNull(sitePreferenceResolver.resolveSitePreference(request, response)); | ||
| 46 | assertNull(SitePreferenceResolver.getCurrentSitePreference(request)); | ||
| 47 | } | ||
| 48 | |||
| 49 | @Test | ||
| 50 | public void defaultSitePreferenceMobileDevice() throws Exception { | ||
| 51 | request.setAttribute(DeviceResolverHandlerInterceptor.CURRENT_DEVICE_ATTRIBUTE, new StubDevice()); | ||
| 52 | assertEquals(SitePreference.MOBILE, sitePreferenceResolver.resolveSitePreference(request, response)); | ||
| 53 | assertEquals(SitePreference.MOBILE, SitePreferenceResolver.getCurrentSitePreference(request)); | ||
| 54 | } | ||
| 55 | |||
| 56 | @Test | ||
| 57 | public void defaultSitePreferenceNormalDevice() throws Exception { | ||
| 58 | request.setAttribute(DeviceResolverHandlerInterceptor.CURRENT_DEVICE_ATTRIBUTE, new StubDevice(false)); | ||
| 59 | assertEquals(SitePreference.NORMAL, sitePreferenceResolver.resolveSitePreference(request, response)); | ||
| 60 | assertEquals(SitePreference.NORMAL, SitePreferenceResolver.getCurrentSitePreference(request)); | ||
| 61 | } | ||
| 62 | |||
| 63 | } |
spring-mobile-device/src/test/java/org/springframework/mobile/device/site/SitePreferenceWebArgumentResolverTest.java
(2 / 2)
|   | |||
| 19 | 19 | ||
| 20 | 20 | @Test | |
| 21 | 21 | public void resolve() throws Exception { | |
| 22 | request.setAttribute(SitePreferenceResolver.CURRENT_SITE_PREFERENCE_ATTRIBUTE, SitePreference.MOBILE, WebRequest.SCOPE_REQUEST); | ||
| 22 | request.setAttribute(SitePreferenceHandler.CURRENT_SITE_PREFERENCE_ATTRIBUTE, SitePreference.MOBILE, WebRequest.SCOPE_REQUEST); | ||
| 23 | 23 | MethodParameter parameter = new MethodParameter(getClass().getMethod("handlerMethod", SitePreference.class), 0); | |
| 24 | 24 | Object resolved = resolver.resolveArgument(parameter, request); | |
| 25 | 25 | assertEquals(SitePreference.MOBILE, resolved); | |
| … | … | ||
| 27 | 27 | ||
| 28 | 28 | @Test | |
| 29 | 29 | public void unresolved() throws Exception { | |
| 30 | request.setAttribute(SitePreferenceResolver.CURRENT_SITE_PREFERENCE_ATTRIBUTE, SitePreference.MOBILE, WebRequest.SCOPE_REQUEST); | ||
| 30 | request.setAttribute(SitePreferenceHandler.CURRENT_SITE_PREFERENCE_ATTRIBUTE, SitePreference.MOBILE, WebRequest.SCOPE_REQUEST); | ||
| 31 | 31 | MethodParameter parameter = new MethodParameter(getClass().getMethod("handlerMethodUnresolved", String.class), 0); | |
| 32 | 32 | Object resolved = resolver.resolveArgument(parameter, request); | |
| 33 | 33 | assertSame(WebArgumentResolver.UNRESOLVED, resolved); |
spring-mobile-device/src/test/java/org/springframework/mobile/device/site/StandardSitePreferenceHandlerTest.java
(63 / 0)
|   | |||
| 1 | package org.springframework.mobile.device.site; | ||
| 2 | |||
| 3 | import static org.junit.Assert.assertEquals; | ||
| 4 | import static org.junit.Assert.assertNull; | ||
| 5 | |||
| 6 | import org.junit.Before; | ||
| 7 | import org.junit.Test; | ||
| 8 | import org.springframework.mobile.device.mvc.DeviceResolverHandlerInterceptor; | ||
| 9 | import org.springframework.mobile.device.mvc.StubDevice; | ||
| 10 | import org.springframework.mock.web.MockHttpServletRequest; | ||
| 11 | import org.springframework.mock.web.MockHttpServletResponse; | ||
| 12 | |||
| 13 | public class StandardSitePreferenceHandlerTest { | ||
| 14 | |||
| 15 | private StandardSitePreferenceHandler sitePreferenceHandler; | ||
| 16 | |||
| 17 | private MockHttpServletRequest request = new MockHttpServletRequest(); | ||
| 18 | |||
| 19 | private MockHttpServletResponse response = new MockHttpServletResponse(); | ||
| 20 | |||
| 21 | private StubSitePreferenceRepository sitePreferenceRepository = new StubSitePreferenceRepository(); | ||
| 22 | |||
| 23 | @Before | ||
| 24 | public void setup() throws Exception { | ||
| 25 | sitePreferenceHandler = new StandardSitePreferenceHandler(sitePreferenceRepository); | ||
| 26 | } | ||
| 27 | |||
| 28 | @Test | ||
| 29 | public void saveSitePreference() throws Exception { | ||
| 30 | request.addParameter("site_preference", "normal"); | ||
| 31 | assertEquals(SitePreference.NORMAL, sitePreferenceHandler.handleSitePreference(request, response)); | ||
| 32 | assertEquals(SitePreference.NORMAL, sitePreferenceRepository.getSitePreference()); | ||
| 33 | assertEquals(SitePreference.NORMAL, SitePreferenceUtils.getCurrentSitePreference(request)); | ||
| 34 | } | ||
| 35 | |||
| 36 | @Test | ||
| 37 | public void loadSitePreference() throws Exception { | ||
| 38 | sitePreferenceRepository.setSitePreference(SitePreference.MOBILE); | ||
| 39 | assertEquals(SitePreference.MOBILE, sitePreferenceHandler.handleSitePreference(request, response)); | ||
| 40 | assertEquals(SitePreference.MOBILE, SitePreferenceUtils.getCurrentSitePreference(request)); | ||
| 41 | } | ||
| 42 | |||
| 43 | @Test | ||
| 44 | public void defaultSitePreference() throws Exception { | ||
| 45 | assertNull(sitePreferenceHandler.handleSitePreference(request, response)); | ||
| 46 | assertNull(SitePreferenceUtils.getCurrentSitePreference(request)); | ||
| 47 | } | ||
| 48 | |||
| 49 | @Test | ||
| 50 | public void defaultSitePreferenceMobileDevice() throws Exception { | ||
| 51 | request.setAttribute(DeviceResolverHandlerInterceptor.CURRENT_DEVICE_ATTRIBUTE, new StubDevice()); | ||
| 52 | assertEquals(SitePreference.MOBILE, sitePreferenceHandler.handleSitePreference(request, response)); | ||
| 53 | assertEquals(SitePreference.MOBILE, SitePreferenceUtils.getCurrentSitePreference(request)); | ||
| 54 | } | ||
| 55 | |||
| 56 | @Test | ||
| 57 | public void defaultSitePreferenceNormalDevice() throws Exception { | ||
| 58 | request.setAttribute(DeviceResolverHandlerInterceptor.CURRENT_DEVICE_ATTRIBUTE, new StubDevice(false)); | ||
| 59 | assertEquals(SitePreference.NORMAL, sitePreferenceHandler.handleSitePreference(request, response)); | ||
| 60 | assertEquals(SitePreference.NORMAL, SitePreferenceUtils.getCurrentSitePreference(request)); | ||
| 61 | } | ||
| 62 | |||
| 63 | } |
spring-mobile-device/src/test/java/org/springframework/mobile/device/switcher/SiteSwitcherHandlerInterceptorTest.java
(4 / 1)
|   | |||
| 12 | 12 | import org.springframework.mobile.device.mvc.DeviceResolverHandlerInterceptor; | |
| 13 | 13 | import org.springframework.mobile.device.mvc.StubDevice; | |
| 14 | 14 | import org.springframework.mobile.device.site.SitePreference; | |
| 15 | import org.springframework.mobile.device.site.SitePreferenceHandler; | ||
| 16 | import org.springframework.mobile.device.site.StandardSitePreferenceHandler; | ||
| 15 | 17 | import org.springframework.mobile.device.site.StubSitePreferenceRepository; | |
| 16 | 18 | import org.springframework.mock.web.MockHttpServletRequest; | |
| 17 | 19 | import org.springframework.mock.web.MockHttpServletResponse; | |
| … | … | ||
| 49 | 49 | return "http://m.app.com"; | |
| 50 | 50 | } | |
| 51 | 51 | }; | |
| 52 | siteSwitcher = new SiteSwitcherHandlerInterceptor(normalSiteUrlFactory, mobileSiteUrlFactory, sitePreferenceRepository); | ||
| 52 | SitePreferenceHandler sitePreferenceHandler = new StandardSitePreferenceHandler(sitePreferenceRepository); | ||
| 53 | siteSwitcher = new SiteSwitcherHandlerInterceptor(normalSiteUrlFactory, mobileSiteUrlFactory, sitePreferenceHandler); | ||
| 53 | 54 | } | |
| 54 | 55 | ||
| 55 | 56 | @Test |
Comments
Add your comment
Please log in to comment



Add a new comment:
Login or create an account to post a comment