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
38 import info.magnolia.context.MgnlContext;
39 import info.magnolia.freemarker.FreemarkerHelper;
40 import info.magnolia.objectfactory.Components;
41 import info.magnolia.rendering.context.RenderingContext;
42 import info.magnolia.rendering.engine.RenderException;
43 import info.magnolia.rendering.engine.RenderingEngine;
44 import info.magnolia.rendering.template.RenderableDefinition;
45 import info.magnolia.rendering.util.AppendableWriter;
46
47 import java.io.IOException;
48 import java.util.HashMap;
49 import java.util.Locale;
50 import java.util.Map;
51
52 import javax.inject.Inject;
53 import javax.jcr.Node;
54
55 import org.slf4j.Logger;
56 import org.slf4j.LoggerFactory;
57
58
59
60
61
62
63
64 public class FreemarkerRenderer extends AbstractRenderer {
65
66 private final Logger log = LoggerFactory.getLogger(getClass());
67
68 private final FreemarkerHelper fmHelper;
69
70
71
72
73
74
75
76 public FreemarkerRenderer() {
77 this(Components.getComponent(FreemarkerHelper.class));
78 }
79
80
81
82
83 FreemarkerRenderer(FreemarkerHelper fmRenderer) {
84 this.fmHelper = fmRenderer;
85 }
86
87 @Inject
88 public FreemarkerRenderer(FreemarkerHelper fmRenderer, RenderingEngine renderingEngine) {
89 super(renderingEngine);
90 this.fmHelper = fmRenderer;
91 }
92
93 @Override
94 protected void onRender(Node content, RenderableDefinition definition, RenderingContext renderingCtx, Map<String, Object> ctx, String templateScript) throws RenderException {
95 final Locale locale = MgnlContext.getAggregationState().getLocale();
96
97 try {
98 AppendableWriter out = renderingCtx.getAppendable();
99 fmHelper.render(templateScript, locale, definition.getI18nBasename(), ctx, out);
100 }
101 catch (TemplateException e) {
102 throw new RenderException(e);
103 }
104 catch (IOException e) {
105 throw new RenderException(e);
106 }
107 }
108
109 @Override
110 protected Map<String, Object> newContext() {
111 return new HashMap<String, Object>();
112 }
113
114
115 public FreemarkerHelper getFmHelper() {
116 return fmHelper;
117 }
118
119 }