/*******************************************************************************
* Copyright (c) 2012 OpenLegacy Inc.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* OpenLegacy Inc. - initial API and implementation
*******************************************************************************/
package org.openlegacy.mvc.web.interceptors;
import org.openlegacy.terminal.mvc.web.MvcConstants;
import org.springframework.mobile.device.Device;
import org.springframework.mobile.device.DeviceResolverHandlerInterceptor;
import org.springframework.mobile.device.DeviceType;
import org.springframework.mobile.device.DeviceUtils;
import org.springframework.mobile.device.site.SitePreference;
import org.springframework.mobile.device.site.SitePreferenceUtils;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.view.UrlBasedViewResolver;
import java.text.MessageFormat;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class OpenLegacyMobileViewSuffixingDeviceResolverHandlerInterceptor extends DeviceResolverHandlerInterceptor {
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)
throws Exception {
if ((modelAndView == null) || !modelAndView.isReference()
|| modelAndView.getViewName().startsWith(UrlBasedViewResolver.REDIRECT_URL_PREFIX)) {
super.postHandle(request, response, handler, modelAndView);
return;
}
SitePreference sitePreference = SitePreferenceUtils.getCurrentSitePreference(request);
Device device = (Device)request.getAttribute(DeviceUtils.CURRENT_DEVICE_ATTRIBUTE);
if (!(modelAndView.getViewName().startsWith("redirect"))) {
modelAndView.addObject(MvcConstants.DEVICE_TYPE_ATTRIBUTE, getDeviceType(device));
}
if ((sitePreference == SitePreference.MOBILE)) {
modelAndView.setViewName(MessageFormat.format("{0}{1}", modelAndView.getViewName(), MvcConstants.MOBILE_VIEW_SUFFIX));
super.postHandle(request, response, handler, modelAndView);
return;
}
super.postHandle(request, response, handler, modelAndView);
}
private static DeviceType getDeviceType(Device device) {
if (device.isMobile()) {
return DeviceType.MOBILE;
}
if (device.isTablet()) {
return DeviceType.TABLET;
}
return DeviceType.NORMAL;
}
}