/* * Copyright (c) 2005-2011 Grameen Foundation USA * All rights reserved. * * 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. * * See also http://www.apache.org/licenses/LICENSE-2.0.html for an * explanation of the license and how it is applied. */ package org.mifos.ui.core.controller.util.helpers; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.mifos.application.admin.servicefacade.PersonnelServiceFacade; import org.mifos.config.SitePreferenceType; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.mobile.device.site.CookieSitePreferenceRepository; import org.springframework.mobile.device.site.SitePreference; import org.springframework.mobile.device.site.SitePreferenceUtils; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.util.CookieGenerator; /** * Helper class for managing SitePreference functionality from Spring Mobile Framework. * Can resolve view name (mobile or normal) depending on SitePreference cookie and * can set such cookie (for example after user settings changes). * For setting ad-hoc site preference just add site_preference query parameter to URL with value 'normal' or 'mobile'. * A SitePreference cookie is set when a user logs in. */ public class SitePreferenceHelper extends CookieGenerator{ @Autowired private PersonnelServiceFacade personnelServiceFacade; private static final String MOBILE_SITE_PREFIX = "m_"; private static final String DEFAULT_COOKIE_NAME = CookieSitePreferenceRepository.class.getName() + ".SITE_PREFERENCE"; public SitePreferenceHelper() { super(); setCookieName(DEFAULT_COOKIE_NAME); } public void resolveSiteType(ModelAndView modelAndView, String viewName, HttpServletRequest request) { SitePreference sitePreference = SitePreferenceUtils.getCurrentSitePreference(request); StringBuffer resultViewName = new StringBuffer(viewName); if (sitePreference.isMobile()) { resultViewName = resultViewName.insert(0, MOBILE_SITE_PREFIX); } modelAndView.setViewName(resultViewName.toString()); String url = UrlHelper.constructCurrentPageUrl(request); request.setAttribute("currentPageUrl", url); } public boolean isMobile(HttpServletRequest request){ SitePreference sitePreference = SitePreferenceUtils.getCurrentSitePreference(request); return sitePreference.isMobile(); } public void setSitePreferenceCookie(Integer userId, HttpServletResponse response) { SitePreferenceType sitePreferenceType = personnelServiceFacade.retrieveSitePreference(userId); setSitePreferenceCookie(sitePreferenceType, response); } public void setSitePreferenceCookie(SitePreferenceType sitePreferenceType, HttpServletResponse response) { if ( sitePreferenceType == SitePreferenceType.AUTO){ removeCookie(response); } else { addCookie(response, sitePreferenceType.name()); } } }