package net.asfun.jangod.spring;
import javax.annotation.PostConstruct;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.joda.time.DateTimeZone;
import org.springframework.format.datetime.joda.JodaTimeContext;
import org.springframework.format.datetime.joda.JodaTimeContextHolder;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import org.springframework.web.util.CookieGenerator;
import org.springframework.web.util.WebUtils;
public class DateTimeZoneHandlerInterceptor extends HandlerInterceptorAdapter {
private CookieGenerator cookieGen = new CookieGenerator();
private String cookieName = "timeZone";
private String reqParam = "tz";
private String defaultTimeZone = "GMT";
@PostConstruct
public void init() {
cookieGen.setCookieName(cookieName);
}
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
JodaTimeContext context = new JodaTimeContext();
String timezone = request.getParameter(reqParam);
if (timezone == null) {
Cookie cookie = WebUtils.getCookie(request, cookieName);
if (cookie == null)
timezone = defaultTimeZone;
else
timezone = cookie.getValue();
}
System.out.println(timezone);
cookieGen.addCookie(response, timezone);
context.setTimeZone(DateTimeZone.forID(timezone));
JodaTimeContextHolder.setJodaTimeContext(context);
return true;
}
public void postHandle(HttpServletRequest request,
HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
if (modelAndView != null) {
modelAndView.addObject("jodaTimeContext",
JodaTimeContextHolder.getJodaTimeContext());
}
}
public void setCookieName(String cookieName) {
this.cookieName = cookieName;
}
public void setReqParam(String reqParam) {
this.reqParam = reqParam;
}
public void setDefaultTimeZone(String defaultTimeZone) {
this.defaultTimeZone = defaultTimeZone;
}
}