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;
35
36 import info.magnolia.module.cache.executor.Bypass;
37 import info.magnolia.module.cache.listeners.AbstractCacheListener;
38 import info.magnolia.repository.RepositoryManager;
39
40 import java.util.ArrayList;
41 import java.util.HashMap;
42 import java.util.List;
43 import java.util.Map;
44 import java.util.Map.Entry;
45
46 import javax.inject.Inject;
47
48 import org.slf4j.Logger;
49 import org.slf4j.LoggerFactory;
50
51
52
53
54
55
56
57
58
59 public class ContentCachingConfiguration {
60
61 private static final Logger log = LoggerFactory.getLogger(ContentCachingConfiguration.class);
62
63 private CacheModule cacheModule;
64 private RepositoryManager repositoryManager;
65
66 private String name;
67 private String cacheName;
68 private CachePolicy cachePolicy = new info.magnolia.module.cache.cachepolicy.Never();
69 private FlushPolicy flushPolicy;
70 private BrowserCachePolicy browserCachePolicy = new info.magnolia.module.cache.browsercachepolicy.Never();
71
72 private Map<String, CachePolicyExecutor> executors = new HashMap<String, CachePolicyExecutor>();
73 private List<AbstractCacheListener> listeners = new ArrayList<AbstractCacheListener>();
74
75 @Inject
76 public ContentCachingConfiguration(CacheModule cacheModule, RepositoryManager repositoryManager) {
77 this.cacheModule = cacheModule;
78 this.repositoryManager = repositoryManager;
79 flushPolicy = new FlushAllListeningPolicy(cacheModule, repositoryManager);
80 }
81
82 public String getName() {
83 return name;
84 }
85
86 public void setName(String name) {
87 this.name = name;
88 }
89
90 public String getCacheName() {
91 return cacheName != null ? cacheName : name;
92 }
93
94 public void setCacheName(String cacheName) {
95 this.cacheName = cacheName;
96 }
97
98 public CachePolicy getCachePolicy() {
99 return cachePolicy;
100 }
101
102 public void setCachePolicy(CachePolicy cachePolicy) {
103 this.cachePolicy = cachePolicy;
104 }
105
106 public FlushPolicy getFlushPolicy() {
107 return flushPolicy;
108 }
109
110 public void setFlushPolicy(FlushPolicy flushPolicy) {
111 this.flushPolicy = flushPolicy;
112 }
113
114 public CachePolicyExecutor getExecutor(CachePolicyResult.CachePolicyBehaviour behaviour) {
115 if (executors.containsKey(behaviour.getName())) {
116 return executors.get(behaviour.getName());
117 }
118
119 log.error("Check your cache configuration! Executor " + behaviour.getName() + " is probably not set! Bypassing cache.");
120 return new Bypass();
121 }
122
123 public BrowserCachePolicy getBrowserCachePolicy() {
124 return browserCachePolicy;
125 }
126
127 public void setBrowserCachePolicy(BrowserCachePolicy browserCachePolicy) {
128 this.browserCachePolicy = browserCachePolicy;
129 }
130
131 public Map<String, CachePolicyExecutor> getExecutors() {
132 return executors;
133 }
134
135 public void setExecutors(Map<String, CachePolicyExecutor> executors) {
136 for (Entry<String, CachePolicyExecutor> executor : executors.entrySet()) {
137 this.addExecutor(executor.getKey(), executor.getValue());
138 }
139 }
140
141 public void addExecutor(String name, CachePolicyExecutor executor) {
142 executor.setContentCachingConfiguration(this);
143 this.executors.put(name, executor);
144 }
145
146 public List<AbstractCacheListener> getListeners() {
147 return listeners;
148 }
149
150 public void setListeners(List<AbstractCacheListener> listeners) {
151 this.listeners = listeners;
152 }
153
154 public AbstractCacheListener getListener(String name) {
155 for (AbstractCacheListener listener : getListeners()) {
156 if (name.equals(listener.getName())) {
157 return listener;
158 }
159 }
160 return null;
161 }
162
163 }