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.webapp;
35
36 import info.magnolia.module.InstallContext;
37 import info.magnolia.module.ModuleVersionHandler;
38 import info.magnolia.module.delta.Delta;
39 import info.magnolia.module.delta.DeltaBuilder;
40 import info.magnolia.module.delta.Task;
41 import info.magnolia.module.model.Version;
42 import info.magnolia.objectfactory.Components;
43 import info.magnolia.repository.DefaultRepositoryManager;
44 import info.magnolia.repository.RepositoryConstants;
45 import info.magnolia.repository.RepositoryManager;
46
47 import java.util.Collection;
48 import java.util.Collections;
49 import java.util.List;
50
51 import javax.inject.Inject;
52 import javax.jcr.RepositoryException;
53
54
55
56
57
58
59 public class WebappVersionHandler implements ModuleVersionHandler {
60 private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(WebappVersionHandler.class);
61
62 private final RepositoryManager repositoryManager;
63
64
65
66
67 @Deprecated
68 public WebappVersionHandler() {
69 this.repositoryManager = Components.getComponent(RepositoryManager.class);
70 }
71
72 @Inject
73 public WebappVersionHandler(RepositoryManager repositoryManager) {
74 this.repositoryManager = repositoryManager;
75 }
76
77 @Override
78 public Version getCurrentlyInstalled(InstallContext ctx) {
79 try {
80 final boolean anyContent = checkIfInitialized();
81 log.info("Content was {}found in the repository, will {}bootstrap web-app.", (anyContent ? "" : "not "), (anyContent ? "not " : ""));
82 if (anyContent) {
83 return Version.UNDEFINED_TO;
84 }
85
86 return null;
87
88 } catch (RepositoryException e) {
89
90 throw new RuntimeException("Couldn't check if repositories were empty: " + e.getMessage(), e);
91 }
92 }
93
94 @Override
95 public List<Delta> getDeltas(InstallContext ctx, Version from) {
96 if (from == null) {
97 final Version version = ctx.getCurrentModuleDefinition().getVersion();
98 return Collections.<Delta>singletonList(new WebappDelta(version));
99 } else if (!from.equals(Version.UNDEFINED_TO)) {
100 throw new IllegalStateException("This is a dummy module. It should not get updated.");
101 } else {
102 return Collections.emptyList();
103 }
104 }
105
106 @Override
107 public Delta getStartupDelta(InstallContext ctx) {
108 return DeltaBuilder.startup(ctx.getCurrentModuleDefinition(), Collections.<Task>emptyList());
109 }
110
111
112
113
114 private boolean checkIfInitialized() throws RepositoryException {
115 boolean isClusteredWorkspace = false;
116 boolean isMasterCluster = false;
117
118 Collection<String> workspaceNames = repositoryManager.getWorkspaceNames();
119 for (String workspace : workspaceNames) {
120
121 if (repositoryManager instanceof DefaultRepositoryManager) {
122 isClusteredWorkspace = ((DefaultRepositoryManager) repositoryManager).isClusteredWorkspace(workspace);
123 isMasterCluster = ((DefaultRepositoryManager) repositoryManager).isClusterMaster();
124 }
125
126 if (isClusteredWorkspace && !isMasterCluster) {
127 log.info("Skipped clustered workspace '{}' initializing check because it is not cluster master", workspace);
128 continue;
129 }
130
131 if (!workspace.endsWith(RepositoryConstants.VERSION_STORE) && repositoryManager.checkIfInitialized(workspace)) {
132 return true;
133 }
134 }
135 return false;
136 }
137 }