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.cms.beans.config;
35
36 import info.magnolia.cms.core.SystemProperty;
37 import info.magnolia.cms.security.AccessDeniedException;
38 import info.magnolia.objectfactory.Components;
39 import info.magnolia.repository.Provider;
40 import info.magnolia.repository.RepositoryConstants;
41 import info.magnolia.repository.RepositoryManager;
42 import info.magnolia.repository.RepositoryNotInitializedException;
43 import info.magnolia.repository.definition.RepositoryDefinition;
44 import info.magnolia.repository.definition.WorkspaceMappingDefinition;
45
46 import java.util.Collection;
47 import java.util.Iterator;
48
49 import javax.jcr.Repository;
50 import javax.jcr.RepositoryException;
51
52 import org.apache.commons.lang.StringUtils;
53 import org.slf4j.Logger;
54 import org.slf4j.LoggerFactory;
55
56
57
58
59
60
61
62
63
64 public final class ContentRepository {
65
66 private static final Logger log = LoggerFactory.getLogger(ContentRepository.class);
67
68
69
70
71 public static final String WEBSITE = RepositoryConstants.WEBSITE;
72
73
74
75
76 public static final String USERS = RepositoryConstants.USERS;
77
78
79
80
81 public static final String USER_ROLES = RepositoryConstants.USER_ROLES;
82
83
84
85
86 public static final String USER_GROUPS = RepositoryConstants.USER_GROUPS;
87
88
89
90
91 public static final String CONFIG = RepositoryConstants.CONFIG;
92
93
94
95
96 public static final String VERSION_STORE = RepositoryConstants.VERSION_STORE;
97
98
99
100
101
102 public static final String NAMESPACE_PREFIX = RepositoryConstants.NAMESPACE_PREFIX;
103
104
105
106
107 public static final String NAMESPACE_URI = RepositoryConstants.NAMESPACE_URI;
108
109 public static final String DEFAULT_WORKSPACE = "default";
110
111
112
113
114
115
116 public static String REPOSITORY_USER;
117
118
119
120
121
122
123 public static String REPOSITORY_PSWD;
124
125 static {
126 REPOSITORY_USER = SystemProperty.getProperty("magnolia.connection.jcr.userId");
127 REPOSITORY_PSWD = SystemProperty.getProperty("magnolia.connection.jcr.password");
128 }
129
130
131
132
133 private ContentRepository() {
134
135 }
136
137
138
139
140
141
142 public static void init() {
143 Components.getComponent(RepositoryManager.class).init();
144 }
145
146
147
148
149
150
151 public static void shutdown() {
152 Components.getComponent(RepositoryManager.class).shutdown();
153 }
154
155
156
157
158
159
160
161
162
163
164 public static boolean checkIfInitialized() throws AccessDeniedException, RepositoryException {
165 return Components.getComponent(RepositoryManager.class).checkIfInitialized();
166 }
167
168
169
170
171
172
173
174
175
176 public static boolean checkIfInitialized(String logicalWorkspaceName) throws RepositoryException, AccessDeniedException {
177 return Components.getComponent(RepositoryManager.class).checkIfInitialized(logicalWorkspaceName);
178 }
179
180
181
182
183
184
185
186 public static void reload() {
187 Components.getComponent(RepositoryManager.class).reload();
188 }
189
190
191
192
193
194
195
196
197
198
199
200 public static void loadRepository(RepositoryDefinition repositoryDefinition) throws RepositoryNotInitializedException, InstantiationException, IllegalAccessException, ClassNotFoundException {
201 Components.getComponent(RepositoryManager.class).loadRepository(repositoryDefinition);
202 }
203
204
205
206
207
208
209
210
211 public static void loadWorkspace(String repositoryId, String workspaceName) throws RepositoryException {
212 Components.getComponent(RepositoryManager.class).loadWorkspace(repositoryId, workspaceName);
213 }
214
215
216
217
218
219
220
221
222
223 public static String getParentRepositoryName(String physicalWorkspaceName) throws RepositoryException {
224 RepositoryManager repositoryManager = Components.getComponent(RepositoryManager.class);
225 for (WorkspaceMappingDefinition mapping : repositoryManager.getWorkspaceMappings()) {
226 if (physicalWorkspaceName.equalsIgnoreCase(mapping.getPhysicalWorkspaceName())) {
227 return mapping.getRepositoryName();
228 }
229 }
230 throw new RepositoryException("No mapping found for "+physicalWorkspaceName+" repository in magnolia repositories.xml");
231 }
232
233
234
235
236
237
238
239 public static String getMappedRepositoryName(String logicalWorkspaceName) {
240 RepositoryManager repositoryManager = Components.getComponent(RepositoryManager.class);
241 WorkspaceMappingDefinition mapping = repositoryManager.getWorkspaceMapping(logicalWorkspaceName);
242 return mapping != null ? mapping.getRepositoryName() : logicalWorkspaceName;
243 }
244
245
246
247
248
249
250
251 public static String getMappedWorkspaceName(String logicalWorkspaceName) {
252 RepositoryManager repositoryManager = Components.getComponent(RepositoryManager.class);
253 WorkspaceMappingDefinition mapping = repositoryManager.getWorkspaceMapping(logicalWorkspaceName);
254 return mapping != null ? mapping.getPhysicalWorkspaceName() : logicalWorkspaceName;
255 }
256
257
258
259
260
261
262 public static void addMappedRepositoryName(String logicalWorkspaceName, String repositoryName) {
263 addMappedRepositoryName(logicalWorkspaceName, repositoryName, null);
264 }
265
266
267
268
269
270
271 public static void addMappedRepositoryName(String logicalWorkspaceName, String repositoryName, String workspaceName) {
272 if (StringUtils.isEmpty(workspaceName)) {
273 workspaceName = logicalWorkspaceName;
274 }
275 Components.getComponent(RepositoryManager.class).addWorkspaceMapping(new WorkspaceMappingDefinition(logicalWorkspaceName, repositoryName, workspaceName));
276 }
277
278
279
280
281
282
283 public static String getDefaultWorkspace(String repositoryId) {
284 RepositoryDefinition mapping = getRepositoryMapping(repositoryId);
285 if (mapping == null) {
286 return DEFAULT_WORKSPACE;
287 }
288 Collection<String> workspaces = mapping.getWorkspaces();
289 if (workspaces.contains(getMappedWorkspaceName(repositoryId))) {
290 return repositoryId;
291 }
292 return DEFAULT_WORKSPACE;
293 }
294
295
296
297
298
299
300
301 public static Repository getRepository(String repositoryOrLogicalWorkspace) {
302 RepositoryManager repositoryManager = Components.getComponent(RepositoryManager.class);
303 if (!repositoryManager.hasRepository(repositoryOrLogicalWorkspace)) {
304 repositoryOrLogicalWorkspace = getMappedRepositoryName(repositoryOrLogicalWorkspace);
305 }
306 return repositoryManager.getRepository(repositoryOrLogicalWorkspace);
307 }
308
309
310
311
312
313
314
315 public static Provider getRepositoryProvider(String repositoryOrLogicalWorkspace) {
316 RepositoryManager repositoryManager = Components.getComponent(RepositoryManager.class);
317 if (!repositoryManager.hasRepository(repositoryOrLogicalWorkspace)) {
318 repositoryOrLogicalWorkspace = getMappedRepositoryName(repositoryOrLogicalWorkspace);
319 }
320 return repositoryManager.getRepositoryProvider(repositoryOrLogicalWorkspace);
321 }
322
323
324
325
326
327
328 public static RepositoryDefinition getRepositoryMapping(String repositoryOrLogicalWorkspace) {
329 RepositoryManager repositoryManager = Components.getComponent(RepositoryManager.class);
330 if (!repositoryManager.hasRepository(repositoryOrLogicalWorkspace)) {
331 repositoryOrLogicalWorkspace = getMappedRepositoryName(repositoryOrLogicalWorkspace);
332 }
333 return repositoryManager.getRepositoryDefinition(repositoryOrLogicalWorkspace);
334 }
335
336
337
338
339
340
341 public static boolean hasRepositoryMapping(String repositoryOrLogicalWorkspace) {
342 RepositoryManager repositoryManager = Components.getComponent(RepositoryManager.class);
343 if (!repositoryManager.hasRepository(repositoryOrLogicalWorkspace)) {
344 repositoryOrLogicalWorkspace = getMappedRepositoryName(repositoryOrLogicalWorkspace);
345 }
346 return repositoryManager.hasRepository(repositoryOrLogicalWorkspace);
347 }
348
349
350
351
352
353
354 public static Iterator<String> getAllRepositoryNames() {
355 return Components.getComponent(RepositoryManager.class).getWorkspaceNames().iterator();
356 }
357
358
359
360
361
362
363
364
365
366 public static String getInternalWorkspaceName(String physicalWorkspaceName) {
367 RepositoryManager repositoryManager = Components.getComponent(RepositoryManager.class);
368 Collection<WorkspaceMappingDefinition> repositoryNameMap = repositoryManager.getWorkspaceMappings();
369 for (WorkspaceMappingDefinition mappingDefinition : repositoryNameMap) {
370 if (mappingDefinition.getPhysicalWorkspaceName().equalsIgnoreCase(physicalWorkspaceName)) {
371 return mappingDefinition.getLogicalWorkspaceName();
372 }
373 }
374 log.error("No Repository/Workspace name mapping defined for "+physicalWorkspaceName);
375 return physicalWorkspaceName;
376 }
377
378
379
380 }