/** * */ package net.conselldemallorca.helium.webapp.mvc.interceptor; import java.util.Locale; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import net.conselldemallorca.helium.core.model.service.PersonaService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.propertyeditors.LocaleEditor; import org.springframework.web.servlet.LocaleResolver; import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; import org.springframework.web.servlet.support.RequestContextUtils; /** * Interceptor per a canviar l'idioma depenent d'un parĂ metre * del request. * * @author Limit Tecnologies <limit@limit.es> */ public class IdiomaInterceptor extends HandlerInterceptorAdapter { public static final String DEFAULT_PARAM_NAME = "lang"; private String paramName = DEFAULT_PARAM_NAME; private PersonaService personaService; public void setParamName(String paramName) { this.paramName = paramName; } public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws ServletException { if (request.getUserPrincipal() != null) { String codiIdioma = request.getParameter(this.paramName); if (codiIdioma != null) { personaService.savePrefIdioma(codiIdioma); LocaleResolver localeResolver = RequestContextUtils.getLocaleResolver(request); if (localeResolver == null) throw new IllegalStateException ("No LocaleResolver found: not in a DispatcherServlet request?"); LocaleEditor localeEditor = new LocaleEditor(); localeEditor.setAsText(codiIdioma); localeResolver.setLocale(request, response, (Locale)localeEditor.getValue()); } } return true; } @Autowired public void setPersonaService(PersonaService personaService) { this.personaService = personaService; } }