View Javadoc
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  }