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.cache.cachepolicy;
35
36 import info.magnolia.cms.cache.CacheConstants;
37 import info.magnolia.module.cache.cachekey.CacheKeyGenerator;
38 import info.magnolia.objectfactory.Components;
39
40 import javax.servlet.http.HttpServletRequest;
41
42 import org.apache.commons.lang3.StringUtils;
43 import org.slf4j.Logger;
44 import org.slf4j.LoggerFactory;
45
46
47
48
49 public class XMagnoliaCacheAttribute {
50
51 private static Logger log = LoggerFactory.getLogger(XMagnoliaCacheAttribute.class);
52
53 public static final String NAME = CacheConstants.HEADER_X_MAGNOLIA_CACHE;
54
55 private Integer ttl;
56 private CacheKeyGenerator keyGenerator;
57
58 public XMagnoliaCacheAttribute(HttpServletRequest request) {
59 String header = request.getHeader(CacheConstants.HEADER_X_MAGNOLIA_CACHE);
60 if (header != null) {
61 try {
62 if (header.contains(CacheKeyGenerator.class.getSimpleName())) {
63 String cacheKeyGeneratorClass = StringUtils.substringBetween(header, CacheKeyGenerator.class.getSimpleName() + "=", ",");
64 if (StringUtils.isNotEmpty(cacheKeyGeneratorClass)) {
65 Class clazz = Class.forName(cacheKeyGeneratorClass);
66 if (CacheKeyGenerator.class.isAssignableFrom(clazz)) {
67 keyGenerator = (CacheKeyGenerator) Components.newInstance(clazz);
68 } else {
69 log.error("Cannot use cache key generator: '{}'. Expected instance of '{}'", clazz, CacheKeyGenerator.class);
70 }
71 }
72 }
73 if (header.contains(CacheConstants.HEADER_VALUE_X_MAGNOLIA_TTL)) {
74 ttl = Integer.parseInt(StringUtils.substringBetween(header, CacheConstants.HEADER_VALUE_X_MAGNOLIA_TTL + "=", ","));
75 }
76 } catch (NumberFormatException e) {
77 log.error("Unparsable TTL in '{}' header: {}", CacheConstants.HEADER_X_MAGNOLIA_CACHE, header);
78 } catch (ClassNotFoundException e) {
79 log.warn("Cannot use custom cache key generator class:", e);
80 }
81 }
82 }
83
84 public Integer getTtl() {
85 return ttl;
86 }
87
88 public CacheKeyGenerator getKeyGenerator() {
89 return keyGenerator;
90 }
91 }