package org.argeo.cms.ui.jcr; import java.util.HashMap; import java.util.Map; import javax.jcr.Repository; import org.osgi.framework.BundleContext; import org.osgi.framework.FrameworkUtil; import org.osgi.framework.ServiceReference; import org.osgi.util.tracker.ServiceTracker; public class OsgiRepositoryRegister extends DefaultRepositoryRegister { private final static BundleContext bc = FrameworkUtil.getBundle(OsgiRepositoryRegister.class).getBundleContext(); private final ServiceTracker repositoryTracker; public OsgiRepositoryRegister() { repositoryTracker = new ServiceTracker(bc, Repository.class, null) { @Override public Repository addingService(ServiceReference reference) { Repository repository = super.addingService(reference); Map props = new HashMap<>(); for (String key : reference.getPropertyKeys()) { props.put(key, reference.getProperty(key)); } register(repository, props); return repository; } @Override public void removedService(ServiceReference reference, Repository service) { Map props = new HashMap<>(); for (String key : reference.getPropertyKeys()) { props.put(key, reference.getProperty(key)); } unregister(service, props); super.removedService(reference, service); } }; } public void init() { repositoryTracker.open(); } public void destroy() { repositoryTracker.close(); } }