package org.marketcetera.photon.internal.marketdata.ui; import org.marketcetera.photon.core.ISymbolResolver; import org.marketcetera.photon.marketdata.IMarketDataManager; import org.marketcetera.util.misc.ClassVersion; import org.osgi.framework.BundleActivator; import org.osgi.framework.BundleContext; import org.osgi.util.tracker.ServiceTracker; /* $License$ */ /** * This class controls the plug-in life cycle and manages singleton state. * * @author <a href="mailto:will@marketcetera.com">Will Horn</a> * @version $Id: Activator.java 16604 2013-06-26 14:49:42Z colin $ * @since 2.0.0 */ @ClassVersion("$Id: Activator.java 16604 2013-06-26 14:49:42Z colin $") public class Activator implements BundleActivator { /** * The singleton instance */ private static Activator sInstance; /** * Tracks the {@link IMarketDataManager} service */ private ServiceTracker mMarketDataManagerTracker; /** * Tracks the {@link ISymbolResolver} service */ private ServiceTracker mSymbolResolverServiceTracker; @Override public void start(BundleContext context) throws Exception { synchronized (getClass()) { mMarketDataManagerTracker = new ServiceTracker(context, IMarketDataManager.class .getName(), null); mMarketDataManagerTracker.open(); mSymbolResolverServiceTracker = new ServiceTracker(context, ISymbolResolver.class.getName(), null); mSymbolResolverServiceTracker.open(); sInstance = this; } } @Override public void stop(BundleContext context) throws Exception { synchronized (getClass()) { sInstance = null; if (mMarketDataManagerTracker != null) { mMarketDataManagerTracker.close(); mMarketDataManagerTracker = null; } } } /** * Returns the symbol resolver service for the singleton instance of this plug-in. * * @return an <code>ISymbolResolver</code> value */ public static ISymbolResolver getSymbolResolver() { synchronized (Activator.class) { if (sInstance != null) { return (ISymbolResolver)sInstance.mSymbolResolverServiceTracker.getService(); } else { return null; } } } /** * Returns the market data manager for the singleton instance of this plug-in. * * @return the market data manager, or null if one is not available */ public static IMarketDataManager getMarketDataManager() { synchronized (Activator.class) { if (sInstance != null) { return (IMarketDataManager) sInstance.mMarketDataManagerTracker.getService(); } else { return null; } } } }