Commit cbd81c83fbff2e99e59b38e50ce09af357f53fc2

extractd SitePreferenceHandler interface with StandardSitePreferenceHandler implementation; added SitePreferenceHandlerInterceptor adapter to support scenarios where no site switching is needed but site preference support is desired
spring-mobile-device/src/main/java/org/springframework/mobile/device/site/SitePreferenceHandler.java
(27 / 0)
  
1package org.springframework.mobile.device.site;
2
3import javax.servlet.http.HttpServletRequest;
4import javax.servlet.http.HttpServletResponse;
5
6import org.springframework.mobile.device.Device;
7
8public 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 */
16package org.springframework.mobile.device.site;
17
18import javax.servlet.http.HttpServletRequest;
19import javax.servlet.http.HttpServletResponse;
20
21import org.springframework.mobile.device.switcher.SiteSwitcherHandlerInterceptor;
22import 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 */
34public 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 */
16package org.springframework.mobile.device.site;
17
18import javax.servlet.http.HttpServletRequest;
19import javax.servlet.http.HttpServletResponse;
20
21import org.springframework.mobile.device.Device;
22import org.springframework.mobile.device.mvc.DeviceResolverHandlerInterceptor;
23import 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 */
35public 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)
  
1package org.springframework.mobile.device.site;
2
3import static org.springframework.mobile.device.site.SitePreferenceHandler.CURRENT_SITE_PREFERENCE_ATTRIBUTE;
4
5import javax.servlet.http.HttpServletRequest;
6
7import org.springframework.web.context.request.RequestAttributes;
8
9/**
10 * Static helper for accessing request-scoped SitePreference values.
11 * @author Keith Donald
12 */
13public 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)
  
1616package org.springframework.mobile.device.site;
1717
1818import org.springframework.core.MethodParameter;
19import org.springframework.mobile.device.switcher.SiteSwitcherHandlerInterceptor;
2019import org.springframework.web.bind.support.WebArgumentResolver;
2120import org.springframework.web.context.request.NativeWebRequest;
2221
2322/**
2423 * 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}.
2625 * @author Keith Donald
2726 */
2827public class SitePreferenceWebArgumentResolver implements WebArgumentResolver {
2928
3029 public Object resolveArgument(MethodParameter param, NativeWebRequest request) throws Exception {
3130 if (SitePreference.class.isAssignableFrom(param.getParameterType())) {
32 return SitePreferenceResolver.getCurrentSitePreference(request);
31 return SitePreferenceUtils.getCurrentSitePreference(request);
3332 } else {
3433 return WebArgumentResolver.UNRESOLVED;
3534 }
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 */
16package org.springframework.mobile.device.site;
17
18import javax.servlet.http.HttpServletRequest;
19import javax.servlet.http.HttpServletResponse;
20
21import org.springframework.mobile.device.Device;
22import 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 */
34public 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)
  
2222import org.springframework.mobile.device.mvc.DeviceResolverHandlerInterceptor;
2323import org.springframework.mobile.device.site.CookieSitePreferenceRepository;
2424import org.springframework.mobile.device.site.SitePreference;
25import org.springframework.mobile.device.site.SitePreferenceRepository;
26import org.springframework.mobile.device.site.SitePreferenceResolver;
25import org.springframework.mobile.device.site.SitePreferenceHandler;
26import org.springframework.mobile.device.site.StandardSitePreferenceHandler;
2727import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
2828
2929/**
4545 */
4646public class SiteSwitcherHandlerInterceptor extends HandlerInterceptorAdapter {
4747
48 public static final String CURRENT_SITE_PREFERENCE_ATTRIBUTE = "currentSitePreference";
49
5048 private final SiteUrlFactory normalSiteUrlFactory;
5149
5250 private final SiteUrlFactory mobileSiteUrlFactory;
5351
54 private final SitePreferenceResolver sitePreferenceResolver;
52 private final SitePreferenceHandler sitePreferenceHandler;
5553
5654 /**
5755 * Creates a new site switcher.
5856 * @param normalSiteUrlFactory the factory for a "normal" site URL e.g. http://app.com
5957 * @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
6159 */
62 public SiteSwitcherHandlerInterceptor(SiteUrlFactory normalSiteUrlFactory, SiteUrlFactory mobileSiteUrlFactory,
63 SitePreferenceRepository sitePreferenceRepository) {
60 public SiteSwitcherHandlerInterceptor(SiteUrlFactory normalSiteUrlFactory, SiteUrlFactory mobileSiteUrlFactory, SitePreferenceHandler sitePreferenceHandler) {
6461 this.normalSiteUrlFactory = normalSiteUrlFactory;
6562 this.mobileSiteUrlFactory = mobileSiteUrlFactory;
66 this.sitePreferenceResolver = new SitePreferenceResolver(sitePreferenceRepository);
63 this.sitePreferenceHandler = sitePreferenceHandler;
6764 }
6865
6966 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);
7168 if (mobileSiteUrlFactory.isRequestForSite(request)) {
7269 if (sitePreference == SitePreference.NORMAL) {
7370 response.sendRedirect(response.encodeRedirectURL(normalSiteUrlFactory.createSiteUrl(request)));
8888 * Uses a {@link CookieSitePreferenceRepository} that saves a cookie that is shared between the two domains.
8989 */
9090 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)));
9392 }
9493
9594 /**
100100 */
101101 public static SiteSwitcherHandlerInterceptor dotMobi(String serverName) {
102102 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)));
106104 }
107105
108106}
spring-mobile-device/src/test/java/org/springframework/mobile/device/mvc/DeviceResolverHandlerInterceptorTest.java
(43 / 0)
  
1package org.springframework.mobile.device.mvc;
2
3import static org.junit.Assert.assertSame;
4import static org.junit.Assert.assertTrue;
5
6import javax.servlet.http.HttpServletRequest;
7
8import org.junit.Test;
9import org.springframework.mobile.device.Device;
10import org.springframework.mobile.device.DeviceResolver;
11import org.springframework.mock.web.MockHttpServletRequest;
12import org.springframework.mock.web.MockHttpServletResponse;
13
14public 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)
  
1package org.springframework.mobile.device.mvc;
2
3import static org.junit.Assert.assertSame;
4import static org.junit.Assert.assertTrue;
5
6import javax.servlet.http.HttpServletRequest;
7
8import org.junit.Test;
9import org.springframework.mobile.device.Device;
10import org.springframework.mobile.device.DeviceResolver;
11import org.springframework.mock.web.MockHttpServletRequest;
12import org.springframework.mock.web.MockHttpServletResponse;
13
14public 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)
  
1package org.springframework.mobile.device.site;
2
3import static org.junit.Assert.assertEquals;
4import static org.junit.Assert.assertNull;
5import static org.junit.Assert.assertTrue;
6
7import javax.servlet.http.HttpServletRequest;
8import javax.servlet.http.HttpServletResponse;
9
10import org.junit.Test;
11import org.springframework.mock.web.MockHttpServletRequest;
12import org.springframework.mock.web.MockHttpServletResponse;
13
14public 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)
  
1package org.springframework.mobile.device.site;
2
3import static org.junit.Assert.assertEquals;
4import static org.junit.Assert.assertNull;
5
6import org.junit.Before;
7import org.junit.Test;
8import org.springframework.mobile.device.mvc.DeviceResolverHandlerInterceptor;
9import org.springframework.mobile.device.mvc.StubDevice;
10import org.springframework.mock.web.MockHttpServletRequest;
11import org.springframework.mock.web.MockHttpServletResponse;
12
13public 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)
  
1919
2020 @Test
2121 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);
2323 MethodParameter parameter = new MethodParameter(getClass().getMethod("handlerMethod", SitePreference.class), 0);
2424 Object resolved = resolver.resolveArgument(parameter, request);
2525 assertEquals(SitePreference.MOBILE, resolved);
2727
2828 @Test
2929 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);
3131 MethodParameter parameter = new MethodParameter(getClass().getMethod("handlerMethodUnresolved", String.class), 0);
3232 Object resolved = resolver.resolveArgument(parameter, request);
3333 assertSame(WebArgumentResolver.UNRESOLVED, resolved);
spring-mobile-device/src/test/java/org/springframework/mobile/device/site/StandardSitePreferenceHandlerTest.java
(63 / 0)
  
1package org.springframework.mobile.device.site;
2
3import static org.junit.Assert.assertEquals;
4import static org.junit.Assert.assertNull;
5
6import org.junit.Before;
7import org.junit.Test;
8import org.springframework.mobile.device.mvc.DeviceResolverHandlerInterceptor;
9import org.springframework.mobile.device.mvc.StubDevice;
10import org.springframework.mock.web.MockHttpServletRequest;
11import org.springframework.mock.web.MockHttpServletResponse;
12
13public 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)
  
1212import org.springframework.mobile.device.mvc.DeviceResolverHandlerInterceptor;
1313import org.springframework.mobile.device.mvc.StubDevice;
1414import org.springframework.mobile.device.site.SitePreference;
15import org.springframework.mobile.device.site.SitePreferenceHandler;
16import org.springframework.mobile.device.site.StandardSitePreferenceHandler;
1517import org.springframework.mobile.device.site.StubSitePreferenceRepository;
1618import org.springframework.mock.web.MockHttpServletRequest;
1719import org.springframework.mock.web.MockHttpServletResponse;
4949 return "http://m.app.com";
5050 }
5151 };
52 siteSwitcher = new SiteSwitcherHandlerInterceptor(normalSiteUrlFactory, mobileSiteUrlFactory, sitePreferenceRepository);
52 SitePreferenceHandler sitePreferenceHandler = new StandardSitePreferenceHandler(sitePreferenceRepository);
53 siteSwitcher = new SiteSwitcherHandlerInterceptor(normalSiteUrlFactory, mobileSiteUrlFactory, sitePreferenceHandler);
5354 }
5455
5556 @Test

Comments

Add a new comment:

Login or create an account to post a comment

Add your comment