]> git.argeo.org Git - lgpl/argeo-commons.git/blob - JackrabbitLocalRepository.java
c59a599f101fa9941a86a38d33e2087426158258
[lgpl/argeo-commons.git] / 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.node.NodeConstants;
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 // if (NodeConstants.NODE.equals(cn))
25 // for (String workspaceName : session.getWorkspace().getAccessibleWorkspaceNames()) {
26 // addMonitor(workspaceName);
27 // }
28 // } catch (RepositoryException e) {
29 // throw new IllegalStateException(e);
30 // } finally {
31 // JcrUtils.logoutQuietly(session);
32 // }
33 }
34
35 protected RepositoryImpl getJackrabbitrepository(String workspaceName) {
36 return (RepositoryImpl) getRepository(workspaceName);
37 }
38
39 @Override
40 protected synchronized void processNewSession(Session session, String workspaceName) {
41 // String realWorkspaceName = session.getWorkspace().getName();
42 // addMonitor(realWorkspaceName);
43 }
44
45 private void addMonitor(String realWorkspaceName) {
46 if (realWorkspaceName.equals(SECURITY_WORKSPACE))
47 return;
48 if (!NodeConstants.NODE.equals(getCn()))
49 return;
50
51 if (!workspaceMonitors.containsKey(realWorkspaceName)) {
52 try {
53 CmsWorkspaceIndexer workspaceMonitor = new CmsWorkspaceIndexer(
54 getJackrabbitrepository(realWorkspaceName), getCn(), realWorkspaceName);
55 workspaceMonitors.put(realWorkspaceName, workspaceMonitor);
56 workspaceMonitor.init();
57 if (log.isDebugEnabled())
58 log.debug("Registered " + workspaceMonitor);
59 } catch (RepositoryException e) {
60 // TODO Auto-generated catch block
61 e.printStackTrace();
62 }
63 }
64 }
65
66 public void destroy() {
67 for (String workspaceName : workspaceMonitors.keySet()) {
68 workspaceMonitors.get(workspaceName).destroy();
69 }
70 }
71
72 }