package net.asfun.jangod.spring; import static org.springframework.format.datetime.joda.JodaTimeContextHolder.getJodaTimeContext; import java.util.Locale; import java.util.Map; import java.util.TimeZone; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import net.asfun.jangod.template.TemplateEngine; import org.joda.time.DateTimeZone; import org.springframework.format.datetime.joda.JodaTimeContext; import org.springframework.format.datetime.joda.JodaTimeContextHolder; import org.springframework.web.servlet.support.RequestContextUtils; import org.springframework.web.servlet.view.InternalResourceView; /** * JangodView * * @author igor.mihalik */ public class JangodView extends InternalResourceView { private static final String PARAM_TIMEZONE = "timezone"; private TemplateEngine engine; public JangodView() throws Exception { engine = new TemplateEngine(); } @Override protected void renderMergedOutputModel(Map<String, Object> model, HttpServletRequest request, HttpServletResponse response) throws Exception { setTimeZoneForDateTimeFilter(); String templateFile = getServletContext().getRealPath(getUrl()); { // ThemeResolver themeResolver = RequestContextUtils // .getThemeResolver(request); // String theme = themeResolver.resolveThemeName(request); // if (logger.isDebugEnabled()) { // logger.debug("Current theme is " + theme); // } // templateFile = theme + File.separator + getUrl(); // templateFile = getServletContext().getRealPath(templateFile); } Locale locale = RequestContextUtils.getLocale(request); response.setContentType(getContentType()); engine.process(templateFile, model, response.getWriter(), locale); } private void setTimeZoneForDateTimeFilter() { JodaTimeContext jodaTimeContext = getJodaTimeContext(); // check JodaTimeContext first and use it if set if (jodaTimeContext != null) engine.getConfiguration().setTimezone( jodaTimeContext.getTimeZone().toTimeZone()); else { // try attrib param next String timeZone = (String) getAttributesMap().get(PARAM_TIMEZONE); if (timeZone != null) { engine.getConfiguration().setTimezone( TimeZone.getTimeZone(timeZone)); JodaTimeContext context = JodaTimeContextHolder .getJodaTimeContext(); if (context == null) context = new JodaTimeContext(); context.setTimeZone(DateTimeZone.forID(timeZone)); JodaTimeContextHolder.setJodaTimeContext(context); } } } }