package at.gv.egiz.eaaf.core.impl.gui.interceptor; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.LocaleResolver; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.ViewResolver; import at.gv.egiz.eaaf.core.exceptions.GuiBuildException; import at.gv.egiz.eaaf.core.impl.gui.utils.MvcGuiRenderUtils; import lombok.extern.slf4j.Slf4j; /** * Intercepter to render GUI in response processing. * * @author tlenz * */ @Slf4j public class AsynchSpringMvcGuiBuilderIntercepter implements HandlerInterceptor { private @Autowired(required = false) ViewResolver[] viewResolvers; private @Autowired(required = false) LocaleResolver localeResolver; /* * (non-Javadoc) * * @see * org.springframework.web.servlet.HandlerInterceptor#postHandle(javax.servlet. * http. HttpServletRequest, javax.servlet.http.HttpServletResponse, * java.lang.Object, org.springframework.web.servlet.ModelAndView) */ @Override public void postHandle(final HttpServletRequest httpReq, final HttpServletResponse httpResp, final Object handler, final ModelAndView modelAndView) throws Exception { final ModelAndView model = MvcGuiRenderUtils.getMvcForAsynchRendering(httpReq); if (model != null) { log.debug("Find GUI model: {} Starting model rendering ... ", model.getViewName()); renderGui(model, httpReq, httpResp); } else { log.trace("No GUI model skipping asynch model rendering"); } } private void renderGui(final ModelAndView mav, final HttpServletRequest httpReq, final HttpServletResponse httpResp) throws GuiBuildException { try { MvcGuiRenderUtils.render(mav, httpReq, httpResp, viewResolvers, localeResolver); } catch (final Exception e) { log.info("Can NOT generate GUI for illustration", e); throw new GuiBuildException(e.getMessage(), e); } } }