]> git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.cms/src/org/argeo/cms/internal/kernel/JackrabbitLocalRepository.java
Work on SNAPSHOTs containers.
[lgpl/argeo-commons.git] / org.argeo.cms / src / org / argeo / cms / internal / kernel / JackrabbitLocalRepository.java
1 package org.argeo.cms.internal.kernel;
2
3 import java.util.Map;
4 import java.util.TreeMap;
5
6 import javax.jcr.RepositoryException;
7 import javax.jcr.Session;
8
9 import org.apache.commons.logging.Log;
10 import org.apache.commons.logging.LogFactory;
11 import org.apache.jackrabbit.core.RepositoryImpl;
12 import org.argeo.jcr.JcrUtils;
13
14 class JackrabbitLocalRepository extends LocalRepository {
15 private final static Log log = LogFactory.getLog(JackrabbitLocalRepository.class);
16 final String SECURITY_WORKSPACE = "security";
17
18 private Map<String, CmsWorkspaceIndexer> workspaceMonitors = new TreeMap<>();
19
20 public JackrabbitLocalRepository(RepositoryImpl repository, String cn) {
21 super(repository, cn);
22 Session session = KernelUtils.openAdminSession(repository);
23 try {
24 for (String workspaceName : session.getWorkspace().getAccessibleWorkspaceNames()) {
25 addMonitor(workspaceName);
26 }
27 } catch (RepositoryException e) {
28 throw new IllegalStateException(e);
29 } finally {
30 JcrUtils.logoutQuietly(session);
31 }
32 }
33
34 protected RepositoryImpl getJackrabbitrepository(String workspaceName) {
35 return (RepositoryImpl) getRepository(workspaceName);
36 }
37
38 @Override
39 protected synchronized void processNewSession(Session session, String workspaceName) {
40 String realWorkspaceName = session.getWorkspace().getName();
41 addMonitor(realWorkspaceName);
42 }
43
44 private void addMonitor(String realWorkspaceName) {
45 if (realWorkspaceName.equals(SECURITY_WORKSPACE))
46 return;
47 if (!workspaceMonitors.containsKey(realWorkspaceName)) {
48 try {
49 CmsWorkspaceIndexer workspaceMonitor = new CmsWorkspaceIndexer(
50 getJackrabbitrepository(realWorkspaceName), getCn(), realWorkspaceName);
51 workspaceMonitors.put(realWorkspaceName, workspaceMonitor);
52 workspaceMonitor.init();
53 if (log.isDebugEnabled())
54 log.debug("Registered " + workspaceMonitor);
55 } catch (RepositoryException e) {
56 // TODO Auto-generated catch block
57 e.printStackTrace();
58 }
59 }
60 }
61
62 public void destroy() {
63 for (String workspaceName : workspaceMonitors.keySet()) {
64 workspaceMonitors.get(workspaceName).destroy();
65 }
66 }
67
68 }