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.context;
35
36 import info.magnolia.context.MgnlContext;
37 import info.magnolia.rendering.engine.FilteringResponseOutputProvider;
38 import info.magnolia.rendering.engine.OutputProvider;
39 import info.magnolia.rendering.engine.ResponseOutputProvider;
40 import info.magnolia.rendering.template.RenderableDefinition;
41
42 import java.util.Map;
43
44 import javax.jcr.Node;
45 import javax.jcr.RepositoryException;
46
47 import org.apache.commons.lang3.StringUtils;
48 import org.slf4j.Logger;
49 import org.slf4j.LoggerFactory;
50
51
52
53
54
55
56 @Deprecated
57 public class AreaFilteringListener implements RenderingListener {
58
59 private boolean insideOfTargetArea = false;
60 private String targetArea = null;
61 private int depth = 0;
62 private static final Logger log = LoggerFactory.getLogger(AreaFilteringListener.class);
63 private FilteringResponseOutputProvider output = null;
64
65
66
67
68 @Deprecated
69 public AreaFilteringListener(ResponseOutputProvider out) {
70 if (!(out instanceof FilteringResponseOutputProvider)) {
71 return;
72 }
73 targetArea = MgnlContext.getAttribute("mgnlArea");
74 output = (FilteringResponseOutputProvider) out;
75 }
76
77 @Override
78 public void before(Node content, RenderableDefinition definition, Map<String, Object> contextObjects, OutputProvider out) {
79 try {
80 if (StringUtils.isEmpty(targetArea)) {
81 return;
82 }
83
84 if (insideOfTargetArea) {
85 depth++;
86 } else if (content != null && targetArea.equals(content.getName())) {
87 output.setWriteEnabled(true);
88 insideOfTargetArea = true;
89 } else {
90 output.setWriteEnabled(false);
91 }
92
93 } catch (RepositoryException e) {
94 log.error("Exception when trying to find the start point for direct rendering of area '{}'.", targetArea, e);
95 }
96 }
97
98 @Override
99 public void after(Node content, RenderableDefinition definition, Map<String, Object> contextObjects, OutputProvider out) {
100 if (!insideOfTargetArea) {
101 return;
102 }
103 if (depth == 0) {
104 output.setWriteEnabled(false);
105 insideOfTargetArea = false;
106 depth = 0;
107 } else {
108 depth--;
109 }
110 }
111 }