package com.softwaremill.common.faces.i18n; import com.softwaremill.common.cdi.util.BeanInject; import javax.faces.FacesException; import javax.faces.application.ViewHandler; import javax.faces.component.UIViewRoot; import javax.faces.context.FacesContext; import javax.faces.view.ViewDeclarationLanguage; import java.io.IOException; import java.util.List; import java.util.Locale; import java.util.Map; /** * @author Adam Warski (adam at warski dot org) */ public class CurrentLocaleViewHandler extends ViewHandler { private ViewHandler delegate; public CurrentLocaleViewHandler(ViewHandler delegate) { this.delegate = delegate; } @Override public Locale calculateLocale(FacesContext facesContext) { CurrentLocale currentLocale = BeanInject.lookup(CurrentLocale.class); Locale storedCurrentLocale = currentLocale.getCurrentLocale(); if (storedCurrentLocale == null) { storedCurrentLocale = delegate.calculateLocale(facesContext); currentLocale.setCurrentLocale(storedCurrentLocale); } return storedCurrentLocale; } @Override public String calculateCharacterEncoding(FacesContext context) { return delegate.calculateCharacterEncoding(context); } @Override public String calculateRenderKitId(FacesContext facesContext) { return delegate.calculateRenderKitId(facesContext); } @Override public UIViewRoot createView(FacesContext facesContext, String s) { return delegate.createView(facesContext, s); } @Override public String deriveViewId(FacesContext context, String rawViewId) { return delegate.deriveViewId(context, rawViewId); } @Override public String getActionURL(FacesContext facesContext, String s) { return delegate.getActionURL(facesContext, s); } @Override public String getResourceURL(FacesContext facesContext, String s) { return delegate.getResourceURL(facesContext, s); } @Override public String getRedirectURL(FacesContext context, String viewId, Map<String, List<String>> parameters, boolean includeViewParams) { return delegate.getRedirectURL(context, viewId, parameters, includeViewParams); } @Override public String getBookmarkableURL(FacesContext context, String viewId, Map<String, List<String>> parameters, boolean includeViewParams) { return delegate.getBookmarkableURL(context, viewId, parameters, includeViewParams); } @Override public ViewDeclarationLanguage getViewDeclarationLanguage(FacesContext context, String viewId) { return delegate.getViewDeclarationLanguage(context, viewId); } @Override public void initView(FacesContext context) throws FacesException { delegate.initView(context); } @Override public void renderView(FacesContext facesContext, UIViewRoot uiViewRoot) throws IOException, FacesException { delegate.renderView(facesContext, uiViewRoot); } @Override public UIViewRoot restoreView(FacesContext facesContext, String s) { return delegate.restoreView(facesContext, s); } @Override public void writeState(FacesContext facesContext) throws IOException { delegate.writeState(facesContext); } }