package com.processpuzzle.internationalization.control; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.processpuzzle.application.configuration.domain.ProcessPuzzleContext; import com.processpuzzle.application.internalization.control.InternationalizationHelper; import com.processpuzzle.user_session.domain.UserRequestManager; import com.processpuzzle.user_session.domain.UserSession; import com.processpuzzle.user_session.domain.UserSessionKeys; public class InternationalizationContextCreator implements Filter { public static final String I18HELPER_KEY = "i18Helper"; private static final Logger log = LoggerFactory.getLogger( InternationalizationContextCreator.class ); private ProcessPuzzleContext applicationContext; public void init(FilterConfig arg0) throws ServletException { applicationContext = UserRequestManager.getInstance().getApplicationContext(); } public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException { log.debug("InternationalizationContextCreator.doFilter()"); HttpServletRequest httpRequest = (HttpServletRequest) request; HttpSession httpSession = (HttpSession) httpRequest.getSession(); UserSession userSession = UserRequestManager.getInstance().currentUserSession(); InternationalizationHelper i18Helper = retrieveI18HelperFromHttpSession( httpSession ); configureI18HelperWithUserSession( i18Helper, userSession ); httpRequest.setAttribute( I18HELPER_KEY, i18Helper ); filterChain.doFilter( request, response ); } public void destroy() {} //Private helper methods private InternationalizationHelper retrieveI18HelperFromHttpSession( HttpSession httpSession ){ InternationalizationHelper i18Helper = (InternationalizationHelper) httpSession.getAttribute( I18HELPER_KEY ); if( i18Helper == null ) { i18Helper = new InternationalizationHelper(); httpSession.setAttribute( I18HELPER_KEY, i18Helper ); } return i18Helper; } private void configureI18HelperWithUserSession( InternationalizationHelper i18Helper, UserSession userSession ) { String preferredLocaleSpecifier = (String) userSession.getAttribute( UserSessionKeys.localeSpecifier ); if( preferredLocaleSpecifier != null ) i18Helper.setLocale( preferredLocaleSpecifier ); else i18Helper.setLocale( applicationContext.getDefaultLocale() ); } }