1 package org.argeo.cms.ui.jcr; 2 3 import java.util.HashMap; 4 import java.util.Map; 5 6 import javax.jcr.Repository; 7 8 import org.osgi.framework.BundleContext; 9 import org.osgi.framework.FrameworkUtil; 10 import org.osgi.framework.ServiceReference; 11 import org.osgi.util.tracker.ServiceTracker; 12 13 public class OsgiRepositoryRegister extends DefaultRepositoryRegister { 14 private final static BundleContext bc = FrameworkUtil.getBundle(OsgiRepositoryRegister.class).getBundleContext(); 15 private final ServiceTracker<Repository, Repository> repositoryTracker; 16 17 public OsgiRepositoryRegister() { 18 repositoryTracker = new ServiceTracker<Repository, Repository>(bc, Repository.class, null) { 19 20 @Override 21 public Repository addingService(ServiceReference<Repository> reference) { 22 23 Repository repository = super.addingService(reference); 24 Map<String, Object> props = new HashMap<>(); 25 for (String key : reference.getPropertyKeys()) { 26 props.put(key, reference.getProperty(key)); 27 } 28 register(repository, props); 29 return repository; 30 } 31 32 @Override 33 public void removedService(ServiceReference<Repository> reference, Repository service) { 34 Map<String, Object> props = new HashMap<>(); 35 for (String key : reference.getPropertyKeys()) { 36 props.put(key, reference.getProperty(key)); 37 } 38 unregister(service, props); 39 super.removedService(reference, service); 40 } 41 42 }; 43 } 44 45 public void init() { 46 repositoryTracker.open(); 47 } 48 49 public void destroy() { 50 repositoryTracker.close(); 51 } 52 }