src/main/java/au/id/djc/stringtemplate/webmvc/StringTemplateViewResolver.java (2585B) - raw
1 package au.id.djc.stringtemplate.webmvc;
2
3 import java.nio.charset.Charset;
4 import java.util.ArrayList;
5 import java.util.List;
6
7 import org.antlr.stringtemplate.StringTemplateErrorListener;
8 import org.springframework.beans.factory.BeanFactoryUtils;
9 import org.springframework.beans.factory.InitializingBean;
10 import org.springframework.web.servlet.view.AbstractTemplateViewResolver;
11 import org.springframework.web.servlet.view.AbstractUrlBasedView;
12
13 import au.id.djc.stringtemplate.AttributeRenderer;
14
15 public class StringTemplateViewResolver extends AbstractTemplateViewResolver implements InitializingBean {
16
17 private String rootTemplateName;
18 private Charset charset;
19 private StringTemplateErrorListener errorListener;
20 private List<AttributeRenderer> attributeRenderers;
21
22 @Override
23 public void afterPropertiesSet() throws Exception {
24 if (errorListener == null) {
25 throw new IllegalArgumentException("Property 'errorListener' is required");
26 }
27 }
28
29 public void setRootTemplateName(String rootTemplateName) {
30 this.rootTemplateName = rootTemplateName;
31 }
32
33 public void setCharset(Charset charset) {
34 this.charset = charset;
35 }
36
37 public void setErrorListener(StringTemplateErrorListener errorListener) {
38 this.errorListener = errorListener;
39 }
40
41 /**
42 * If this property is not set, the default behaviour is to use all
43 * {@link AttributeRenderer} implementations in the current context.
44 */
45 public void setAttributeRenderers(List<AttributeRenderer> attributeRenderers) {
46 this.attributeRenderers = attributeRenderers;
47 }
48
49 public StringTemplateViewResolver() {
50 setViewClass(requiredViewClass());
51 }
52
53 @Override
54 protected Class<?> requiredViewClass() {
55 return StringTemplateView.class;
56 }
57
58 @Override
59 protected AbstractUrlBasedView buildView(String viewName) throws Exception {
60 StringTemplateView view = (StringTemplateView) super.buildView(viewName);
61 if (rootTemplateName != null) view.setRootTemplateName(rootTemplateName);
62 if (charset != null) view.setCharset(charset);
63 view.setErrorListener(errorListener);
64 if (attributeRenderers == null) {
65 view.setAttributeRenderers(new ArrayList<AttributeRenderer>(
66 BeanFactoryUtils.beansOfTypeIncludingAncestors(getApplicationContext(), AttributeRenderer.class).values()));
67 } else {
68 view.setAttributeRenderers(attributeRenderers);
69 }
70 return view;
71 }
72
73 }