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.templating.elements;
35
36 import info.magnolia.cms.beans.config.ServerConfiguration;
37 import info.magnolia.context.MgnlContext;
38 import info.magnolia.context.WebContext;
39 import info.magnolia.rendering.context.RenderingContext;
40 import info.magnolia.rendering.engine.AppendableOnlyOutputProvider;
41 import info.magnolia.rendering.engine.RenderException;
42 import info.magnolia.rendering.engine.RenderingEngine;
43
44 import java.io.IOException;
45 import java.util.HashMap;
46 import java.util.Map;
47
48 import javax.jcr.Node;
49
50
51
52
53
54
55 public class RenderElement extends AbstractContentTemplatingElement {
56
57 private boolean editable;
58 private String template;
59 private Map<String, Object> contextAttributes = new HashMap<String, Object>();
60 private final RenderingEngine renderingEngine;
61 private Node content;
62
63 public RenderElement(ServerConfiguration server, RenderingContext renderingContext, RenderingEngine renderingEngine) {
64 super(server, renderingContext);
65 this.renderingEngine = renderingEngine;
66 }
67
68 @Override
69 public void begin(Appendable out) throws IOException, RenderException {
70 content = getTargetContent();
71
72 if(isAdmin()){
73 new MarkupHelper(out).openComment("cms:component").append(" -->\n");
74 }
75
76
77
78 WebContext webContext = MgnlContext.getWebContext();
79 webContext.push(webContext.getRequest(), webContext.getResponse());
80 setAttributesInWebContext(contextAttributes, WebContext.LOCAL_SCOPE);
81 try {
82 renderingEngine.render(content, new AppendableOnlyOutputProvider(out));
83 } finally {
84 webContext.pop();
85 webContext.setPageContext(null);
86 restoreAttributesInWebContext(contextAttributes, WebContext.LOCAL_SCOPE);
87 }
88 }
89
90 @Override
91 public void end(Appendable out) throws IOException, RenderException {
92 if(isAdmin()){
93 new MarkupHelper(out).closeComment("cms:component");
94 }
95 }
96
97 public boolean getEditable() {
98 return editable;
99 }
100
101 public void setEditable(boolean editable) {
102 this.editable = editable;
103 }
104
105 public String getTemplate() {
106 return template;
107 }
108
109 public void setTemplate(String template) {
110 this.template = template;
111 }
112
113
114 public Map<String, Object> getContextAttributes() {
115 return contextAttributes;
116 }
117
118 public void setContextAttributes(Map<String, Object> contextAttributes) {
119 this.contextAttributes = contextAttributes;
120 }
121
122 }