1 package org
.argeo
.cms
.internal
.kernel
;
3 import javax
.jcr
.Repository
;
4 import javax
.naming
.ldap
.LdapName
;
6 import org
.apache
.commons
.logging
.Log
;
7 import org
.apache
.commons
.logging
.LogFactory
;
8 import org
.argeo
.cms
.CmsException
;
9 import org
.argeo
.node
.NodeConstants
;
10 import org
.argeo
.node
.NodeInstance
;
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
;
16 public class CmsInstance
implements NodeInstance
{
17 private final Log log
= LogFactory
.getLog(getClass());
18 private final BundleContext bc
= FrameworkUtil
.getBundle(getClass()).getBundleContext();
20 private HomeRepository homeRepository
;
22 public CmsInstance() {
26 private void initTrackers() {
28 new ServiceTracker
<Repository
, Repository
>(bc
, Repository
.class, null) {
30 public Repository
addingService(ServiceReference
<Repository
> reference
) {
31 Object cn
= reference
.getProperty(NodeConstants
.CN
);
32 if (cn
!= null && cn
.equals(NodeConstants
.HOME
)) {
33 homeRepository
= (HomeRepository
) bc
.getService(reference
);
34 if (log
.isDebugEnabled())
35 log
.debug("Home repository is available");
37 return super.addingService(reference
);
41 public void removedService(ServiceReference
<Repository
> reference
, Repository service
) {
42 super.removedService(reference
, service
);
43 homeRepository
= null;
49 public void shutdown() {
54 public void createWorkgroup(LdapName dn
) {
55 if (homeRepository
== null)
56 throw new CmsException("Home repository is not available");
57 // TODO add check that the group exists
58 homeRepository
.createWorkgroup(dn
);