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.templating;
35
36 import info.magnolia.cms.core.Content;
37 import info.magnolia.context.MgnlContext;
38 import info.magnolia.objectfactory.Components;
39
40 import java.io.IOException;
41 import java.io.Writer;
42
43 import javax.servlet.jsp.PageContext;
44
45
46
47
48
49
50
51
52 public class ParagraphRenderingFacade {
53
54 private final ParagraphRendererManager rendererManager;
55
56 private final ParagraphManager paragraphManager;
57
58 public static ParagraphRenderingFacade getInstance() {
59 return Components.getSingleton(ParagraphRenderingFacade.class);
60 }
61
62 public ParagraphRenderingFacade() {
63 this(ParagraphRendererManager.getInstance(), ParagraphManager.getInstance());
64 }
65
66
67 ParagraphRenderingFacade(ParagraphRendererManager rendererManager, ParagraphManager paragraphManager) {
68 this.rendererManager = rendererManager;
69 this.paragraphManager = paragraphManager;
70 }
71
72
73
74
75
76 public void render(Content content, Writer out) throws RenderException, IOException {
77 render(content, out, null);
78 }
79
80
81
82
83
84 public void render(Content content, Writer out, PageContext pageContext) throws RenderException, IOException {
85 final String paragraphName = content.getMetaData().getTemplate();
86 final Paragraph paragraph = paragraphManager.getParagraphDefinition(paragraphName);
87 if (paragraph == null) {
88 throw new IllegalStateException("Paragraph " + paragraphName + " not found for page " + content.getHandle());
89 }
90 render(content, paragraph, out, pageContext);
91 }
92
93
94
95
96
97 public void render(Content content, Paragraph paragraph, Writer out) throws RenderException, IOException {
98 render(content, paragraph, out, null);
99 }
100
101
102
103
104
105
106 public void render(Content content, Paragraph paragraph, Writer out, PageContext pageContext) throws RenderException, IOException{
107 setPageContext(pageContext);
108 final String paragraphType = paragraph.getType();
109
110 try {
111 final ParagraphRenderer renderer = rendererManager.getRenderer(paragraphType);
112 renderer.render(content, paragraph, out);
113 } finally {
114 setPageContext(null);
115 }
116
117 }
118
119 private void setPageContext(PageContext pageContext) {
120 if (pageContext != null && MgnlContext.isWebContext()) {
121 MgnlContext.getWebContext().setPageContext(pageContext);
122 }
123 }
124
125 }