1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package info.magnolia.rendering.renderer;
35
36 import freemarker.template.TemplateException;
37 import info.magnolia.context.MgnlContext;
38 import info.magnolia.freemarker.FreemarkerHelper;
39 import info.magnolia.objectfactory.Components;
40 import info.magnolia.rendering.context.RenderingContext;
41 import info.magnolia.rendering.engine.RenderException;
42 import info.magnolia.rendering.template.RenderableDefinition;
43 import info.magnolia.rendering.util.AppendableWriter;
44
45 import java.io.IOException;
46 import java.util.HashMap;
47 import java.util.Locale;
48 import java.util.Map;
49
50 import javax.jcr.Node;
51
52 import org.slf4j.Logger;
53 import org.slf4j.LoggerFactory;
54
55
56
57
58
59
60
61 public class FreemarkerRenderer extends AbstractRenderer {
62
63 private final Logger log = LoggerFactory.getLogger(getClass());
64
65 private final FreemarkerHelper fmHelper;
66
67
68
69
70
71 public FreemarkerRenderer() {
72 this(Components.getComponent(FreemarkerHelper.class));
73 }
74
75 FreemarkerRenderer(FreemarkerHelper fmRenderer) {
76 this.fmHelper = fmRenderer;
77 }
78
79 @Override
80 protected void onRender(Node content, RenderableDefinition definition, RenderingContext renderingCtx, Map<String, Object> ctx, String templateScript) throws RenderException {
81 final Locale locale = MgnlContext.getAggregationState().getLocale();
82
83 try {
84 AppendableWriter out = renderingCtx.getAppendable();
85 fmHelper.render(templateScript, locale, definition.getI18nBasename(), ctx, out);
86 }
87 catch (TemplateException e) {
88 throw new RenderException(e);
89 }
90 catch (IOException e) {
91 throw new RenderException(e);
92 }
93 }
94
95 @Override
96 protected Map<String, Object> newContext() {
97 return new HashMap<String, Object>();
98 }
99
100
101 public FreemarkerHelper getFmHelper() {
102 return fmHelper;
103 }
104
105 }