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.ehcache3.setup;
35
36 import info.magnolia.init.MagnoliaConfigurationProperties;
37 import info.magnolia.init.MagnoliaInitPaths;
38 import info.magnolia.jcr.util.PropertyUtil;
39 import info.magnolia.module.InstallContext;
40 import info.magnolia.module.cache.ehcache3.EhCache3Factory;
41 import info.magnolia.module.delta.AbstractRepositoryTask;
42 import info.magnolia.module.delta.NodeExistsDelegateTask;
43 import info.magnolia.repository.RepositoryConstants;
44
45 import java.io.File;
46 import java.io.IOException;
47
48 import javax.jcr.RepositoryException;
49
50 import org.apache.commons.io.FileUtils;
51
52
53
54
55 class CleanUpDiskStoreDirectoryTask extends NodeExistsDelegateTask {
56
57 static final String DISK_STORE_PATH = "diskStorePath";
58 static final String EHCACHE_3 = "/modules/cache/config/cacheFactory/delegateFactories/ehcache3";
59
60 CleanUpDiskStoreDirectoryTask(MagnoliaConfigurationProperties configurationProperties, MagnoliaInitPaths magnoliaInitPaths) {
61 super("Removes disk store", EHCACHE_3, new CleanUp(configurationProperties, magnoliaInitPaths));
62 }
63
64 private static class CleanUp extends AbstractRepositoryTask {
65
66 private final MagnoliaConfigurationProperties configurationProperties;
67 private final MagnoliaInitPaths magnoliaInitPaths;
68
69 private CleanUp(MagnoliaConfigurationProperties configurationProperties, MagnoliaInitPaths magnoliaInitPaths) {
70 super("Remove disk store", "Clean up incompatible ehcache3 disk store");
71 this.configurationProperties = configurationProperties;
72 this.magnoliaInitPaths = magnoliaInitPaths;
73 }
74
75 @Override
76 public void doExecute(InstallContext installContext) throws RepositoryException {
77 final File directory = new File(getPath(installContext));
78 try {
79 FileUtils.deleteDirectory(directory);
80 } catch (IOException e) {
81 installContext.error(String.format("Can't clean up cache store {%s} due to {%s}. Please stop the webapp and remove the directory manually.", directory, e.getMessage()), e);
82 }
83 }
84
85 private String getPath(InstallContext installContext) throws RepositoryException {
86 String path = PropertyUtil.getString(installContext.getJCRSession(RepositoryConstants.CONFIG).getNode(EHCACHE_3), DISK_STORE_PATH);
87 if (path == null) {
88 path = EhCache3Factory.resolveDiskStorePath(configurationProperties, magnoliaInitPaths);
89 }
90 return path;
91 }
92 }
93
94
95 }