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.voting.voters;
35
36 import info.magnolia.context.MgnlContext;
37 import org.apache.commons.lang.StringUtils;
38
39 import javax.servlet.http.HttpServletResponse;
40 import java.util.ArrayList;
41 import java.util.List;
42
43
44
45
46
47
48
49
50 public class ResponseContentTypeVoter extends AbstractBoolVoter {
51 private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(ResponseContentTypeVoter.class);
52
53 private final List allowed = new ArrayList();
54 private final List rejected = new ArrayList();
55
56 public List getAllowed() {
57 return allowed;
58 }
59
60 public void addAllowed(String contentType) {
61 allowed.add(contentType);
62 }
63
64 public List getRejected() {
65 return rejected;
66 }
67
68 public void addRejected(String contentType) {
69 rejected.add(contentType);
70 }
71
72 protected boolean boolVote(Object value) {
73 final HttpServletResponse response;
74 if (value instanceof HttpServletResponse) {
75 response = (HttpServletResponse) value;
76 } else {
77 if (MgnlContext.isWebContext()) {
78 response = MgnlContext.getWebContext().getResponse();
79 } else {
80 return false;
81 }
82 }
83
84
85 final String contentType = StringUtils.substringBefore(response.getContentType(), ";");
86 if (contentType == null) {
87 log.warn("No content type set on the response, can't vote.");
88 return false;
89 }
90 if (allowed.size() > 0 && !allowed.contains(contentType)) {
91 return false;
92 }
93 if (rejected.size() > 0 && rejected.contains(contentType)) {
94 return false;
95 }
96 return true;
97 }
98 }