X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms.jcr%2Fsrc%2Forg%2Fargeo%2Fcms%2Fjcr%2Finternal%2FJackrabbitLocalRepository.java;fp=org.argeo.cms.jcr%2Fsrc%2Forg%2Fargeo%2Fcms%2Fjcr%2Finternal%2FJackrabbitLocalRepository.java;h=bad9fdfd551bbb37ab36cf286f8c24d2cef59a38;hb=bce03099b0d2f1758e7a3d74fba339d0200924d5;hp=0000000000000000000000000000000000000000;hpb=0ea2992e5f3803cd98b5981f27274faa922bc199;p=gpl%2Fargeo-jcr.git diff --git a/org.argeo.cms.jcr/src/org/argeo/cms/jcr/internal/JackrabbitLocalRepository.java b/org.argeo.cms.jcr/src/org/argeo/cms/jcr/internal/JackrabbitLocalRepository.java new file mode 100644 index 0000000..bad9fdf --- /dev/null +++ b/org.argeo.cms.jcr/src/org/argeo/cms/jcr/internal/JackrabbitLocalRepository.java @@ -0,0 +1,71 @@ +package org.argeo.cms.jcr.internal; + +import java.util.Map; +import java.util.TreeMap; + +import javax.jcr.RepositoryException; +import javax.jcr.Session; + +import org.apache.jackrabbit.core.RepositoryImpl; +import org.argeo.api.cms.CmsConstants; +import org.argeo.api.cms.CmsLog; + +class JackrabbitLocalRepository extends LocalRepository { + private final static CmsLog log = CmsLog.getLog(JackrabbitLocalRepository.class); + final String SECURITY_WORKSPACE = "security"; + + private Map workspaceMonitors = new TreeMap<>(); + + public JackrabbitLocalRepository(RepositoryImpl repository, String cn) { + super(repository, cn); +// Session session = KernelUtils.openAdminSession(repository); +// try { +// if (NodeConstants.NODE.equals(cn)) +// for (String workspaceName : session.getWorkspace().getAccessibleWorkspaceNames()) { +// addMonitor(workspaceName); +// } +// } catch (RepositoryException e) { +// throw new IllegalStateException(e); +// } finally { +// JcrUtils.logoutQuietly(session); +// } + } + + protected RepositoryImpl getJackrabbitrepository(String workspaceName) { + return (RepositoryImpl) getRepository(workspaceName); + } + + @Override + protected synchronized void processNewSession(Session session, String workspaceName) { +// String realWorkspaceName = session.getWorkspace().getName(); +// addMonitor(realWorkspaceName); + } + + private void addMonitor(String realWorkspaceName) { + if (realWorkspaceName.equals(SECURITY_WORKSPACE)) + return; + if (!CmsConstants.NODE_REPOSITORY.equals(getCn())) + return; + + if (!workspaceMonitors.containsKey(realWorkspaceName)) { + try { + CmsWorkspaceIndexer workspaceMonitor = new CmsWorkspaceIndexer( + getJackrabbitrepository(realWorkspaceName), getCn(), realWorkspaceName); + workspaceMonitors.put(realWorkspaceName, workspaceMonitor); + workspaceMonitor.init(); + if (log.isDebugEnabled()) + log.debug("Registered " + workspaceMonitor); + } catch (RepositoryException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + } + + public void destroy() { + for (String workspaceName : workspaceMonitors.keySet()) { + workspaceMonitors.get(workspaceName).destroy(); + } + } + +}