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.engine;
35
36 import info.magnolia.cms.beans.config.ServerConfiguration;
37 import info.magnolia.context.MgnlContext;
38
39 import java.io.PrintWriter;
40 import java.io.Writer;
41
42 import javax.inject.Inject;
43
44
45
46
47
48
49
50 public class ModeDependentRenderExceptionHandler implements RenderExceptionHandler {
51
52 public static final String RENDER_ERROR_MESSAGE_BEGIN =
53 "<!-- ERROR MESSAGE STARTS HERE --><script language=javascript>//\"></script><script language=javascript>//\'></script><script language=javascript>//\"></script><script language=javascript>//\'></script></title></xmp></script></noscript></style></object></head></pre></table></form></table></table></table></a></u></i></b><div align=left style='background-color:#FFFF00; color:#FF0000; display:block; border-top:double; padding:2pt; font-size:medium; font-family:Arial,sans-serif; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; text-transform: none'><b style='font-size:medium'>FreeMarker template error!</b><pre><xmp>";
54
55 public static final String RENDER_ERROR_MESSAGE_END = "</xmp></pre></div></html>";
56
57 private ServerConfiguration serverConfiguration;
58
59 @Inject
60 public ModeDependentRenderExceptionHandler(ServerConfiguration config) {
61 this.serverConfiguration = config;
62 }
63
64 @Override
65 public void handleException(RenderException renderException, Writer out) {
66 if ( serverConfiguration.isAdmin() && !MgnlContext.getAggregationState().isPreviewMode()) {
67 inEditMode(renderException, out);
68 } else {
69 inPublicMode(renderException, out);
70 }
71 }
72
73 private PrintWriter getPrintWriterFor(Writer out) {
74 return (out instanceof PrintWriter) ? (PrintWriter) out : new PrintWriter(out);
75 }
76
77 protected void inPublicMode(RenderException renderException, Writer out) {
78 final PrintWriter pw = getPrintWriterFor(out);
79 renderException.printStackTrace(pw);
80 pw.flush();
81
82 }
83
84 protected void inEditMode(RenderException renderException, Writer out) {
85 final PrintWriter pw = getPrintWriterFor(out);
86 pw.println(RENDER_ERROR_MESSAGE_BEGIN);
87 renderException.printStackTrace(pw);
88 pw.println(RENDER_ERROR_MESSAGE_END);
89 pw.flush();
90 }
91 }