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.listeners;
35
36 import info.magnolia.objectfactory.Components;
37 import info.magnolia.rendering.engine.OutputProvider;
38 import info.magnolia.rendering.template.RenderableDefinition;
39 import info.magnolia.voting.voters.ResponseContentTypeVoter;
40 import info.magnolia.voting.voters.VoterSet;
41
42 import java.util.Arrays;
43 import java.util.Map;
44
45 import javax.jcr.Node;
46 import javax.jcr.RepositoryException;
47 import javax.servlet.http.HttpServletResponse;
48
49
50
51
52 public abstract class AbstractRenderingListener {
53
54 private VoterSet<HttpServletResponse> shouldProcess = new VoterSet<HttpServletResponse>();
55
56
57
58
59 public static enum RenderingListenerReturnCode {
60 SKIP,
61 STOP,
62 NOT_FOUND
63 }
64
65 private boolean enabled = true;
66
67 public AbstractRenderingListener() {
68
69 ResponseContentTypeVoter voter = new ResponseContentTypeVoter();
70 voter.setAllowed(Arrays.asList("text/html"));
71 getShouldProcess().addVoter(voter);
72 }
73
74 public RenderingListenerReturnCode init(OutputProvider outputProvider, HttpServletResponse response) throws RepositoryException {
75 return this.shouldProcess(response) ? null : RenderingListenerReturnCode.SKIP;
76 }
77
78 protected boolean shouldProcess(HttpServletResponse response) {
79 if (getShouldProcess().vote(response) <= 0) {
80 return false;
81 }
82 return true;
83 }
84
85 public abstract RenderingListenerReturnCode before(Node content, RenderableDefinition definition, Map<String, Object> contextObjects, OutputProvider out) throws RepositoryException;
86
87 public abstract RenderingListenerReturnCode after(Node content, RenderableDefinition definition, Map<String, Object> contextObjects, OutputProvider out) throws RepositoryException;
88
89 public boolean isEnabled() {
90 return enabled;
91 }
92
93 public void setEnabled(boolean enabled) {
94 this.enabled = enabled;
95 }
96
97
98
99
100
101 public AbstractRenderingListener copy() {
102 AbstractRenderingListener copy = Components.newInstance(this.getClass());
103 copy.setShouldProcess(shouldProcess);
104 return copy;
105 }
106
107 public VoterSet<HttpServletResponse> getShouldProcess() {
108 return shouldProcess;
109 }
110
111 public void setShouldProcess(VoterSet<HttpServletResponse> shouldProcess) {
112 this.shouldProcess = shouldProcess;
113 }
114
115 }