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.module.templatingkit.renderers;
35
36 import info.magnolia.beanmerger.BeanMergerUtil;
37 import info.magnolia.jcr.util.NodeUtil;
38 import info.magnolia.jcr.wrapper.HTMLEscapingNodeWrapper;
39 import info.magnolia.module.templatingkit.functions.STKTemplatingFunctions;
40 import info.magnolia.module.templatingkit.sites.Site;
41 import info.magnolia.module.templatingkit.templates.DefaultSTKTemplateConfiguration;
42 import info.magnolia.module.templatingkit.templates.pages.STKPage;
43 import info.magnolia.objectfactory.Components;
44 import info.magnolia.rendering.context.RenderingContext;
45 import info.magnolia.rendering.engine.RenderException;
46 import info.magnolia.rendering.renderer.FreemarkerRenderer;
47 import info.magnolia.rendering.template.RenderableDefinition;
48
49 import java.util.Map;
50
51 import javax.jcr.Node;
52
53 import org.apache.jackrabbit.commons.JcrUtils;
54
55
56
57
58
59
60 public class STKRenderer extends FreemarkerRenderer {
61
62 @Override
63 public void render(final RenderingContext renderingCtx, Map<String, Object> contextObjects) throws RenderException {
64 Node content = renderingCtx.getCurrentContent();
65
66
67 try {
68 final Site site = getSite(content);
69 RenderableDefinition renderableDefinition = renderingCtx.getRenderableDefinition();
70
71 if (renderableDefinition instanceof STKPage) {
72 renderableDefinition = (RenderableDefinition) BeanMergerUtil.merge(renderableDefinition, site.getTemplates().getPrototype(), DefaultSTKTemplateConfiguration.getInstance());
73 }
74
75 renderingCtx.push(content, renderableDefinition);
76 try{
77 super.render(renderingCtx, contextObjects);
78 } finally {
79 renderingCtx.pop();
80 }
81 } catch (Exception e) {
82 throw new RenderException(e);
83 }
84 }
85
86 protected Site getSite(Node node) {
87 final Site site = Components.getComponent(STKTemplatingFunctions.class).site();
88 if(site == null){
89 throw new IllegalStateException("No site configuration found for [" + JcrUtils.toString(node) + "]");
90 }
91 return site;
92 }
93
94
95
96
97
98
99 @Override
100 protected Node wrapNodeForModel(Node content) {
101 content = super.wrapNodeForModel(content);
102 content = wrapWithHTMLEscapingWrapper(content);
103 return content;
104 }
105
106 protected Node wrapWithHTMLEscapingWrapper(Node content) {
107 if (!NodeUtil.isWrappedWith(content, HTMLEscapingNodeWrapper.class)) {
108 content = new HTMLEscapingNodeWrapper(content, true);
109 }
110 return content;
111 }
112 }