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.objectfactory.Components;
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
67
68
69 @Deprecated
70 public FlushFromCachesByUUIDCommand() {
71 this(Components.getComponent(CacheModule.class));
72 }
73
74 @Inject
75 public FlushFromCachesByUUIDCommand(CacheModule cacheModule) {
76 this.cacheModule = cacheModule;
77 }
78
79 @Override
80 public boolean execute(Context ctx) throws Exception {
81 String uuid = (String) ctx.get(UUID);
82 if (StringUtils.isBlank(uuid)) {
83 uuid = getUuid();
84 }
85 String workspace = (String) ctx.get(WORKSPACE);
86 if (StringUtils.isBlank(workspace)) {
87 workspace = getWorkspace();
88 }
89 final Set<Object> keySet = new HashSet<Object>();
90 Collection<ContentCachingConfiguration> cacheConfigs = cacheModule.getContentCaching().values();
91 for (ContentCachingConfiguration config : cacheConfigs) {
92 CachePolicy policy = config.getCachePolicy();
93 if (policy == null) {
94 continue;
95 }
96 keySet.addAll(Arrays.asList(policy.removeCacheKeys(uuid, workspace)));
97 }
98
99 CacheFactory factory = cacheModule.getCacheFactory();
100
101 for (Object key : keySet) {
102 for (ContentCachingConfiguration config : cacheConfigs) {
103 final Cache cache = factory.getCache(config.getCacheName());
104 cache.remove(key);
105 }
106 }
107 return true;
108 }
109
110 public String getUuid() {
111 return uuid;
112 }
113
114 public void setUuid(String uuid) {
115 this.uuid = uuid;
116 }
117
118 public String getWorkspace() {
119 return workspace;
120 }
121
122 public void setWorkspace(String workspace) {
123 this.workspace = workspace;
124 }
125 }