1 package org
.argeo
.cms
.internal
.kernel
;
4 import java
.util
.TreeMap
;
6 import javax
.jcr
.RepositoryException
;
7 import javax
.jcr
.Session
;
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
;
14 class JackrabbitLocalRepository
extends LocalRepository
{
15 private final static Log log
= LogFactory
.getLog(JackrabbitLocalRepository
.class);
16 final String SECURITY_WORKSPACE
= "security";
18 private Map
<String
, CmsWorkspaceIndexer
> workspaceMonitors
= new TreeMap
<>();
20 public JackrabbitLocalRepository(RepositoryImpl repository
, String cn
) {
21 super(repository
, cn
);
22 // Session session = KernelUtils.openAdminSession(repository);
24 // if (NodeConstants.NODE.equals(cn))
25 // for (String workspaceName : session.getWorkspace().getAccessibleWorkspaceNames()) {
26 // addMonitor(workspaceName);
28 // } catch (RepositoryException e) {
29 // throw new IllegalStateException(e);
31 // JcrUtils.logoutQuietly(session);
35 protected RepositoryImpl
getJackrabbitrepository(String workspaceName
) {
36 return (RepositoryImpl
) getRepository(workspaceName
);
40 protected synchronized void processNewSession(Session session
, String workspaceName
) {
41 // String realWorkspaceName = session.getWorkspace().getName();
42 // addMonitor(realWorkspaceName);
45 private void addMonitor(String realWorkspaceName
) {
46 if (realWorkspaceName
.equals(SECURITY_WORKSPACE
))
48 if (!NodeConstants
.NODE
.equals(getCn()))
51 if (!workspaceMonitors
.containsKey(realWorkspaceName
)) {
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
66 public void destroy() {
67 for (String workspaceName
: workspaceMonitors
.keySet()) {
68 workspaceMonitors
.get(workspaceName
).destroy();