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.resources.renderers;
35
36 import info.magnolia.cms.beans.config.ServerConfiguration;
37 import info.magnolia.context.MgnlContext;
38 import info.magnolia.jcr.util.PropertyUtil;
39 import info.magnolia.module.resources.ResourcesModule;
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.renderer.Renderer;
45 import info.magnolia.rendering.util.AppendableWriter;
46
47 import java.io.IOException;
48 import java.util.Map;
49
50 import javax.inject.Inject;
51 import javax.jcr.Node;
52 import javax.jcr.RepositoryException;
53 import javax.jcr.Session;
54
55 import org.apache.commons.lang3.StringUtils;
56 import org.apache.jackrabbit.commons.JcrUtils;
57 import org.slf4j.Logger;
58 import org.slf4j.LoggerFactory;
59
60
61
62
63
64
65 @Deprecated
66 public class ReferenceResourceRenderer implements Renderer {
67
68 private static final Logger log = LoggerFactory.getLogger(ReferenceResourceRenderer.class);
69
70 private final RenderingEngine engine;
71 private final ServerConfiguration servConf;
72
73
74
75
76 @Deprecated
77 public ReferenceResourceRenderer() {
78 this(Components.getComponent(RenderingEngine.class), Components.getComponent(ServerConfiguration.class));
79 }
80
81 @Inject
82 public ReferenceResourceRenderer(RenderingEngine renderingEngine, ServerConfiguration servConf) {
83 this.engine = renderingEngine;
84 this.servConf = servConf;
85 }
86
87 @Override
88 public void render(RenderingContext ctx, Map<String, Object> contextObjects) throws RenderException {
89 String logMessage = "";
90 Node content = ctx.getCurrentContent();
91
92 String referencedPath = PropertyUtil.getString(content, "reference");
93 if (referencedPath != null) {
94 Node referencedResource = null;
95 try {
96 Session session = MgnlContext.getJCRSession(ResourcesModule.DEFAULT_WORKSPACE);
97 if (session.nodeExists(referencedPath)) {
98 referencedResource = session.getNode(referencedPath);
99 engine.render(referencedResource, ctx.getOutputProvider());
100 } else {
101 logMessage = "The referenced resource '" + referencedPath + "' does not exist.";
102 log.error(logMessage);
103
104 }
105 } catch (RepositoryException e) {
106 logMessage = "Unable to render referenced resource node ." + JcrUtils.toString(referencedResource);
107 throw new RenderException(logMessage, e);
108 }
109 } else {
110 logMessage = "Reference resource " + JcrUtils.toString(content) + " does not contain any 'reference' property value targeting another resource node.";
111 log.error(logMessage);
112 }
113
114
115 try {
116 if (StringUtils.isNotEmpty(logMessage)) {
117
118 if (servConf.isAdmin()) {
119 AppendableWriter out = ctx.getAppendable();
120 out.append(htmlCommentLogMessage(logMessage));
121 }
122 }
123 } catch (IOException e) {
124 throw new RenderException(logMessage, e);
125 }
126 }
127
128 private String htmlCommentLogMessage(String logMessage) {
129 return "<!-- " + logMessage + " -->";
130 }
131 }