package org.ntlab.traceanalyzer; import java.util.Hashtable; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.resource.ImageRegistry; import org.eclipse.ui.plugin.AbstractUIPlugin; import org.osgi.framework.BundleActivator; import org.osgi.framework.BundleContext; import org.osgi.framework.ServiceEvent; import org.osgi.framework.ServiceListener; import org.osgi.framework.ServiceReference; import org.osgi.util.tracker.ServiceTracker; public class Activator extends AbstractUIPlugin implements BundleActivator, ServiceListener { public static final String PLUGIN_ID = "org.ntlab.traceAnalyzer"; //$NON-NLS-1$ private DictionaryService service; private ServiceTracker dictionaryServiceTracker; private BundleContext fContext; private static Activator plugin; /* * (non-Javadoc) * @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext) */ public void start(BundleContext context) throws Exception { fContext = context; service = new DictionaryServiceImpl(); Hashtable props = new Hashtable(); // register the service context.registerService(DictionaryService.class.getName(), service, props); // create a tracker and track the service dictionaryServiceTracker = new ServiceTracker(context, DictionaryService.class.getName(), null); dictionaryServiceTracker.open(); // have a service listener to implement the whiteboard pattern fContext.addServiceListener(this, "(objectclass=" + Dictionary.class.getName() + ")"); // grab the service service = (DictionaryService) dictionaryServiceTracker.getService(); // register the dictionary service.registerDictionary(new DictionaryImpl()); plugin = this; } /* * (non-Javadoc) * @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext) */ public void stop(BundleContext context) throws Exception { // close the service tracker dictionaryServiceTracker.close(); dictionaryServiceTracker = null; service = null; fContext = null; plugin = null; } public void serviceChanged(ServiceEvent ev) { ServiceReference sr = ev.getServiceReference(); switch(ev.getType()) { case ServiceEvent.REGISTERED: { Dictionary dictionary = (Dictionary) fContext.getService(sr); service.registerDictionary(dictionary); } break; case ServiceEvent.UNREGISTERING: { Dictionary dictionary = (Dictionary) fContext.getService(sr); service.unregisterDictionary(dictionary); } break; } } public static Activator getDefault() { return plugin; } @Override protected void initializeImageRegistry(ImageRegistry reg) { reg.put("TraceAnalyzer.STACK_FRAME_IMAGE", getImageDescriptor("/icons/full/stckframe_obj.gif")); reg.put("TraceAnalyzer.STACK_FRAME_IMAGE2", getImageDescriptor("/icons/full/stckframe_obj2.gif")); reg.put("TraceAnalyzer.STACK_FRAME_IMAGE3", getImageDescriptor("/icons/full/stckframe_obj3.gif")); reg.put("TraceAnalyzer.THREAD_IMAGE", getImageDescriptor("/icons/full/threads_obj.gif")); reg.put("TraceAnalyzer.THREAD_IMAGE2", getImageDescriptor("/icons/full/threads_obj2.gif")); reg.put("TraceAnalyzer.HIGHLIGHT_UNIQUE_IMAGE", getImageDescriptor("/icons/full/read_obj.gif")); } public static ImageDescriptor getImageDescriptor(String path) { return imageDescriptorFromPlugin(PLUGIN_ID, path); } }