View Javadoc
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.api.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_REPOSITORY.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  }