package org.bundlemaker.core.internal.parser; import java.util.Arrays; import org.bundlemaker.core.common.Activator; import org.bundlemaker.core.spi.store.IPersistentDependencyStoreFactory; import org.osgi.util.tracker.ServiceTracker; public class XYZService { /** - */ private static XYZService _instance; /** * <p> * </p> */ public static XYZService instance() { if (_instance == null) { _instance = new XYZService(); } return _instance; } /** Bundles that need to be in ACTIVE state in order to make Dependency Store work correctly */ public static final String[] REQUIRED_ACTIVE_BUNDLES = new String[] { "org.eclipse.equinox.ds", "org.bundlemaker.com.db4o.osgi" }; /** the factory tracker */ private ServiceTracker _factoryTracker; /** - */ private ParserFactoryRegistry _parserFactoryRegistry; public XYZService() { // create the factory tracker _factoryTracker = new ServiceTracker(Activator.getDefault().getContext(), IPersistentDependencyStoreFactory.class.getName(), null); _factoryTracker.open(); // _parserFactoryRegistry = new ParserFactoryRegistry(); } /** * <p> * </p> * * @return */ public ParserFactoryRegistry getParserFactoryRegistry() { // lazy initialization to prevent alzheimer's workspace [https://bundlemaker.jira.com/browse/BM-246] if (!_parserFactoryRegistry.isInitalized()) { _parserFactoryRegistry.initialize(); } // return the parser factory return _parserFactoryRegistry; } /** * <p> * </p> * * @return */ public IPersistentDependencyStoreFactory getPersistentDependencyStoreFactory() { try { // Make sure required bundles are ACTIVE for (String bundleName : REQUIRED_ACTIVE_BUNDLES) { Activator.getDefault().activateBundleIfNeeded(bundleName); } // IPersistentDependencyStoreFactory result = (IPersistentDependencyStoreFactory) _factoryTracker .waitForService(5000); // if (result == null) { // TODO throw new RuntimeException( "No IPersistentDependencyStoreFactory available. Please make sure that the following bundles are active: " + Arrays.asList(REQUIRED_ACTIVE_BUNDLES)); } // return result; } catch (InterruptedException e) { e.printStackTrace(); return null; } } }