package org.jboss.seam.international; import static org.jboss.seam.annotations.Install.BUILT_IN; import javax.faces.event.ValueChangeEvent; import org.jboss.seam.Component; import org.jboss.seam.ScopeType; import org.jboss.seam.annotations.Create; import org.jboss.seam.annotations.Install; import org.jboss.seam.annotations.Name; import org.jboss.seam.annotations.Scope; import org.jboss.seam.annotations.intercept.BypassInterceptors; import org.jboss.seam.contexts.Contexts; import org.jboss.seam.core.Events; import org.jboss.seam.faces.Selector; /** * Selects the current user's time zone, defaulting * to the server time zone. * * @author Gavin King */ @Scope(ScopeType.SESSION) @Name("org.jboss.seam.international.timeZoneSelector") @BypassInterceptors @Install(precedence=BUILT_IN, classDependencies="javax.faces.context.FacesContext") public class TimeZoneSelector extends Selector { private static final long serialVersionUID = -5013819375360015369L; private String id; @Create public void initTimeZone() { String timeZoneId = getCookieValueIfEnabled(); if (timeZoneId!=null) setTimeZoneId(timeZoneId); } @Override protected String getCookieName() { return "org.jboss.seam.core.TimeZone"; } /** * Force the resource bundle to reload, using the current locale, * and raise the org.jboss.seam.timeZoneSelected event */ public void select() { setCookieValueIfEnabled( getTimeZoneId() ); if ( Events.exists() ) { Events.instance().raiseEvent( "org.jboss.seam.timeZoneSelected", getTimeZoneId() ); } } public void select(ValueChangeEvent event) { selectTimeZone( (String) event.getNewValue() ); } public void selectTimeZone(String timeZoneId) { setTimeZoneId(timeZoneId); select(); } public void setTimeZone(java.util.TimeZone timeZone) { setTimeZoneId( timeZone.getID() ); } public void setTimeZoneId(String id) { setDirty(this.id, id); this.id = id; } public String getTimeZoneId() { return id; } /** * Get the selected timezone */ public java.util.TimeZone getTimeZone() { if (id==null) { return java.util.TimeZone.getDefault(); } else { return java.util.TimeZone.getTimeZone( getTimeZoneId() ); } } public static TimeZoneSelector instance() { if ( !Contexts.isSessionContextActive() ) { throw new IllegalStateException("No active session context"); } return (TimeZoneSelector) Component.getInstance(TimeZoneSelector.class, ScopeType.SESSION); } }