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.cms.core.Content;
37 import info.magnolia.cms.core.HierarchyManager;
38 import info.magnolia.cms.core.NodeData;
39 import info.magnolia.cms.core.Path;
40 import info.magnolia.module.InstallContext;
41 import info.magnolia.module.delta.AbstractTask;
42 import info.magnolia.module.delta.Task;
43 import info.magnolia.module.delta.TaskExecutionException;
44
45 import java.security.InvalidParameterException;
46 import java.util.Iterator;
47
48 import javax.jcr.RepositoryException;
49
50
51
52
53
54
55
56
57 public class RegisterWorkspaceForCacheFlushingTask extends AbstractTask implements Task {
58
59 private String workspaceName;
60
61 public RegisterWorkspaceForCacheFlushingTask(String workspaceName) {
62 super("Cache flushing", "Updates the cache flushing configuration to trigger cache flush when new or updated content is published to " + workspaceName + " workspace.");
63 this.workspaceName = workspaceName;
64 if (workspaceName == null) {
65 throw new InvalidParameterException("Workspace name can't be empty.");
66 }
67 }
68
69 @Override
70 public void execute(InstallContext ctx) throws TaskExecutionException {
71 HierarchyManager hm = ctx.getConfigHierarchyManager();
72 try {
73 String nodePath = "/modules/cache/config/configurations/default/flushPolicy/policies/flushAll/repositories";
74 if (!ctx.getModulesNode().hasContent("cache") || !hm.isExist(nodePath)) {
75
76 return;
77 }
78 Content c = hm.getContent(nodePath);
79
80 Iterator iter = c.getNodeDataCollection().iterator();
81 boolean found = false;
82 while (iter.hasNext()) {
83 if (this.workspaceName.equals(((NodeData) iter.next()).getString())) {
84 found = true;
85 break;
86 }
87 }
88 if (!found) {
89 c.createNodeData(Path.getUniqueLabel(c, "0"), this.workspaceName);
90 }
91 } catch (RepositoryException e) {
92 throw new TaskExecutionException(e.getMessage(), e);
93 }
94 }
95 }