1 12 13 package org.eclipse.equinox.http.registry.internal; 14 15 import org.eclipse.core.runtime.IExtensionRegistry; 16 import org.osgi.framework.*; 17 import org.osgi.service.packageadmin.PackageAdmin; 18 import org.osgi.util.tracker.ServiceTracker; 19 import org.osgi.util.tracker.ServiceTrackerCustomizer; 20 21 public class Activator implements BundleActivator, ServiceTrackerCustomizer { 22 23 private ServiceTracker httpServiceTracker; 24 private ServiceTracker packageAdminTracker; 25 private ServiceTracker registryTracker; 26 27 private PackageAdmin packageAdmin; 28 private IExtensionRegistry registry; 29 private BundleContext context; 30 31 public void start(BundleContext context) throws Exception { 32 this.context = context; 33 packageAdminTracker = new ServiceTracker(context, PackageAdmin.class.getName(), this); 34 packageAdminTracker.open(); 35 36 registryTracker = new ServiceTracker(context, IExtensionRegistry.class.getName(), this); 37 registryTracker.open(); 38 } 39 40 public void stop(BundleContext context) throws Exception { 41 packageAdminTracker.close(); 42 packageAdminTracker = null; 43 registryTracker.close(); 44 registryTracker = null; 45 this.context = null; 46 } 47 48 public Object addingService(ServiceReference reference) { 49 Object service = context.getService(reference); 50 51 if (service instanceof PackageAdmin && packageAdmin == null) 52 packageAdmin = (PackageAdmin) service; 53 54 if (service instanceof IExtensionRegistry && registry == null) 55 registry = (IExtensionRegistry) service; 56 57 if (packageAdmin != null && registry != null) { 58 httpServiceTracker = new HttpServiceTracker(context, packageAdmin, registry); 59 httpServiceTracker.open(); 60 } 61 62 return service; 63 } 64 65 public void modifiedService(ServiceReference reference, Object service) { 66 } 68 69 public void removedService(ServiceReference reference, Object service) { 70 if (service == packageAdmin) 71 packageAdmin = null; 72 73 if (service == registry) 74 registry = null; 75 76 if (packageAdmin == null || registry == null) { 77 if (httpServiceTracker != null) { 78 httpServiceTracker.close(); 79 httpServiceTracker = null; 80 } 81 } 82 context.ungetService(reference); 83 } 84 85 } 86 | Popular Tags |