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.commands;
35
36 import info.magnolia.commands.MgnlCommand;
37 import info.magnolia.context.Context;
38 import info.magnolia.module.cache.Cache;
39 import info.magnolia.module.cache.CacheFactory;
40 import info.magnolia.module.cache.CacheModule;
41 import info.magnolia.module.cache.CachePolicy;
42 import info.magnolia.module.cache.ContentCachingConfiguration;
43 import info.magnolia.module.cache.cachepolicy.Never;
44
45 import java.util.Arrays;
46 import java.util.Collection;
47 import java.util.HashSet;
48 import java.util.Set;
49
50 import javax.inject.Inject;
51
52 import org.apache.commons.lang3.StringUtils;
53
54
55
56
57 public class FlushFromCachesByUUIDCommand extends MgnlCommand {
58
59 public static final String WORKSPACE = "repository";
60 public static final String UUID = "uuid";
61
62 private final CacheModule cacheModule;
63 private String uuid;
64 private String workspace;
65
66 @Inject
67 public FlushFromCachesByUUIDCommand(CacheModule cacheModule) {
68 this.cacheModule = cacheModule;
69 }
70
71 @Override
72 public boolean execute(Context ctx) throws Exception {
73 String uuid = (String) ctx.get(UUID);
74 if (StringUtils.isBlank(uuid)) {
75 uuid = getUuid();
76 }
77 String workspace = (String) ctx.get(WORKSPACE);
78 if (StringUtils.isBlank(workspace)) {
79 workspace = getWorkspace();
80 }
81 final Set<Object> keySet = new HashSet<Object>();
82 Collection<ContentCachingConfiguration> cacheConfigs = cacheModule.getContentCaching().values();
83 for (ContentCachingConfiguration config : cacheConfigs) {
84 if (!(config.getCachePolicy() instanceof Never)) {
85 CachePolicy policy = config.getCachePolicy();
86 keySet.addAll(Arrays.asList(policy.removeCacheKeys(uuid, workspace)));
87 }
88 }
89
90 CacheFactory factory = cacheModule.getCacheFactory();
91
92 for (Object key : keySet) {
93 for (ContentCachingConfiguration config : cacheConfigs) {
94 final Cache cache = factory.getCache(config.getCacheName());
95 cache.remove(key);
96 }
97 }
98 return true;
99 }
100
101 public String getUuid() {
102 return uuid;
103 }
104
105 public void setUuid(String uuid) {
106 this.uuid = uuid;
107 }
108
109 public String getWorkspace() {
110 return workspace;
111 }
112
113 public void setWorkspace(String workspace) {
114 this.workspace = workspace;
115 }
116 }