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;
35
36 import info.magnolia.cms.core.Content;
37 import info.magnolia.cms.core.HierarchyManager;
38 import info.magnolia.cms.core.ItemType;
39 import info.magnolia.cms.util.ContentUtil;
40 import info.magnolia.context.MgnlContext;
41 import info.magnolia.module.model.ModuleDefinition;
42 import info.magnolia.repository.RepositoryConstants;
43
44 import javax.inject.Inject;
45 import javax.inject.Singleton;
46 import javax.jcr.RepositoryException;
47 import javax.jcr.Session;
48 import java.util.ArrayList;
49 import java.util.LinkedHashMap;
50 import java.util.List;
51 import java.util.Map;
52
53
54
55
56
57
58
59 @Singleton
60 public class InstallContextImpl implements InstallContext {
61 private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(InstallContextImpl.class);
62
63 private static final String DEFAULT_KEY = "General messages";
64
65 private final ModuleRegistry moduleRegistry;
66 private ModuleDefinition currentModule;
67 private InstallStatus status;
68 private boolean restartNeeded;
69 private int executedTaskCount;
70 private int totalTaskCount;
71
72 private final Map<String, List<Message>> messages = new LinkedHashMap<String, List<Message>>();
73
74 @Inject
75 public InstallContextImpl(ModuleRegistry moduleRegistry) {
76 this.moduleRegistry = moduleRegistry;
77 }
78
79 public void setCurrentModule(ModuleDefinition module) {
80 this.currentModule = module;
81 }
82
83 @Override
84 public void info(String message) {
85 log.info("> " + message);
86 log(new Message(MessagePriority.info, message));
87 }
88
89 @Override
90 public void warn(String message) {
91 log.warn("> " + message);
92 log(new Message(MessagePriority.warning, message));
93 }
94
95 @Override
96 public void error(String message, Throwable th) {
97 log.error("> " + message, th);
98 log(new Message(MessagePriority.error, message, th));
99 }
100
101 @Override
102 public void restartNeeded(String message) {
103 this.restartNeeded = true;
104 log.warn("> restartNeeded > " + message);
105 log(new Message(MessagePriority.restartNeeded, message));
106 }
107
108 boolean isRestartNeeded() {
109 return restartNeeded;
110 }
111
112 void incExecutedTaskCount() {
113 executedTaskCount++;
114 }
115
116 @Override
117 public int getExecutedTaskCount() {
118 return executedTaskCount;
119 }
120
121 @Override
122 public int getTotalTaskCount() {
123 return totalTaskCount;
124 }
125
126 void setTotalTaskCount(int totalTaskCount) {
127 this.totalTaskCount = totalTaskCount;
128 }
129
130 @Override
131 public InstallStatus getStatus() {
132 return status;
133 }
134
135 void setStatus(InstallStatus status) {
136 this.status = status;
137 }
138
139 @Override
140 public Map<String, List<Message>> getMessages() {
141 return messages;
142 }
143
144 @Override
145 public ModuleDefinition getCurrentModuleDefinition() {
146 return currentModule;
147 }
148
149 @Override
150 public boolean isModuleRegistered(String moduleName) {
151 return moduleRegistry.isModuleRegistered(moduleName);
152 }
153
154 @Override
155 public HierarchyManager getHierarchyManager(String workspace) {
156 return MgnlContext.getSystemContext().getHierarchyManager(workspace);
157 }
158
159 @Override
160 public HierarchyManager getConfigHierarchyManager() {
161 return getHierarchyManager(RepositoryConstants.CONFIG);
162 }
163
164 @Override
165 public Session getJCRSession(String workspaceName) throws RepositoryException {
166 return MgnlContext.getSystemContext().getJCRSession(workspaceName);
167 }
168
169 @Override
170 public Session getConfigJCRSession() throws RepositoryException {
171 return getJCRSession(RepositoryConstants.CONFIG);
172 }
173
174 @Override
175 public boolean hasModulesNode() {
176 final HierarchyManager hm = getConfigHierarchyManager();
177 return hm.isExist("/" + ModuleManagerImpl.MODULES_NODE);
178 }
179
180 @Override
181 public Content getModulesNode() throws RepositoryException {
182 final HierarchyManager hm = getConfigHierarchyManager();
183 return hm.getContent(ModuleManagerImpl.MODULES_NODE);
184 }
185
186 @Override
187 public Content getOrCreateCurrentModuleNode() throws RepositoryException {
188 final Content allModulesNode = getModulesNode();
189 return ContentUtil.getOrCreateContent(allModulesNode, currentModule.getName(), ItemType.CONTENT);
190 }
191
192 @Override
193 public Content getOrCreateCurrentModuleConfigNode() throws RepositoryException {
194 final Content moduleNode = getOrCreateCurrentModuleNode();
195 return ContentUtil.getOrCreateContent(moduleNode, "config", ItemType.CONTENT);
196 }
197
198 protected void log(final Message message) {
199 final String k = getModuleKey();
200 List<Message> messagesForKey = messages.get(k);
201 if (messagesForKey == null) {
202 messagesForKey = new ArrayList<Message>();
203 messages.put(k, messagesForKey);
204 }
205 messagesForKey.add(message);
206 }
207
208
209
210
211
212 protected String getModuleKey() {
213 return currentModule != null ? currentModule.toString() : DEFAULT_KEY;
214 }
215 }