private ModelAndView constructModelViewForNode(Node node, FlowSession session, String provider, String tree) {
Map<String, Object> params = new HashMap<String, Object>();
params.put(FLOW_SESSION_ID_FIELD, session.getSessionId());
treeEventProcessor.sendActionsBefore(node, params);
ModelAndView mav = new ModelAndView();
mav.setViewName(templateNameFor(provider, NODE_TEMPLATE_NAME));
mav.addObject("treeName", tree);
mav.addObject("node", node);
mav.addObject("provider", provider);
mav.addObject("language", session.getLanguage());
mav.addObject("escape", new StringEscapeUtils());
mav.addObject("maxDigits", maxDigits(node));
mav.addObject("maxTimeout", maxTimeout(node));
mav.addObject("transitionKeyEndMarker", transitionKeyEndMarker(node));
mav.addObject("isUserInputNeeded", isUserInputNeeded(node));
session.setCurrentNode(node);
return mav;
}