View Javadoc
1   package org.argeo.cms.internal.kernel;
2   
3   import javax.jcr.Repository;
4   import javax.naming.ldap.LdapName;
5   
6   import org.apache.commons.logging.Log;
7   import org.apache.commons.logging.LogFactory;
8   import org.argeo.api.NodeConstants;
9   import org.argeo.api.NodeInstance;
10  import org.argeo.cms.CmsException;
11  import org.osgi.framework.BundleContext;
12  import org.osgi.framework.FrameworkUtil;
13  import org.osgi.framework.ServiceReference;
14  import org.osgi.util.tracker.ServiceTracker;
15  
16  public class CmsInstance implements NodeInstance {
17  	private final Log log = LogFactory.getLog(getClass());
18  	private final BundleContext bc = FrameworkUtil.getBundle(getClass()).getBundleContext();
19  
20  	private EgoRepository egoRepository;
21  
22  	public CmsInstance() {
23  		initTrackers();
24  	}
25  
26  	private void initTrackers() {
27  		// node repository
28  		new ServiceTracker<Repository, Repository>(bc, Repository.class, null) {
29  			@Override
30  			public Repository addingService(ServiceReference<Repository> reference) {
31  				Object cn = reference.getProperty(NodeConstants.CN);
32  				if (cn != null && cn.equals(NodeConstants.EGO_REPOSITORY)) {
33  					egoRepository = (EgoRepository) bc.getService(reference);
34  					if (log.isTraceEnabled())
35  						log.trace("Home repository is available");
36  				}
37  				return super.addingService(reference);
38  			}
39  
40  			@Override
41  			public void removedService(ServiceReference<Repository> reference, Repository service) {
42  				super.removedService(reference, service);
43  				egoRepository = null;
44  			}
45  
46  		}.open();
47  	}
48  
49  	public void shutdown() {
50  
51  	}
52  
53  	@Override
54  	public void createWorkgroup(LdapName dn) {
55  		if (egoRepository == null)
56  			throw new CmsException("Ego repository is not available");
57  		// TODO add check that the group exists
58  		egoRepository.createWorkgroup(dn);
59  	}
60  
61  }