/******************************************************************************* * Copyright (c) 2006, 2014 Cognos Incorporated, IBM Corporation * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Cognos Incorporated - initial API and implementation * Chris Aniszczyk <zx@us.ibm.com> - bug 209294 *******************************************************************************/ package org.eclipse.equinox.internal.cm; import org.osgi.framework.*; import org.osgi.service.cm.ConfigurationAdmin; /** * Activator start the ConfigurationAdminFactory but also handles passing in the Service * Registration needed by Asynch threads. Asynch threads are controlled by ConfigurationAdminFactory * start and stop. It requires some care to handle pending events as the service is registered before * activating the threads. (see EventDispatcher) */ public class Activator implements BundleActivator { private static final String EVENT_ADMIN_CLASS = "org.osgi.service.event.EventAdmin"; //$NON-NLS-1$ private LogTracker logTracker; private ServiceRegistration<?> registration; private ConfigurationAdminFactory factory; private ConfigurationEventAdapter eventAdapter; private static BundleContext bundleContext; private static synchronized void setBundleContext(BundleContext context) { bundleContext = context; } public static synchronized String getProperty(String key) { if (bundleContext != null) return bundleContext.getProperty(key); return null; } public void start(BundleContext context) throws Exception { setBundleContext(context); logTracker = new LogTracker(context, System.err); logTracker.open(); if (checkEventAdmin()) { eventAdapter = new ConfigurationEventAdapter(context); eventAdapter.start(); } factory = new ConfigurationAdminFactory(context, logTracker); factory.start(); context.addBundleListener(factory); registration = context.registerService(ConfigurationAdmin.class.getName(), factory, null); } public void stop(BundleContext context) throws Exception { registration.unregister(); registration = null; context.removeBundleListener(factory); factory.stop(); factory = null; if (eventAdapter != null) { eventAdapter.stop(); eventAdapter = null; } logTracker.close(); logTracker = null; setBundleContext(null); } private static boolean checkEventAdmin() { // cannot support scheduling without the event admin package try { Class.forName(EVENT_ADMIN_CLASS); return true; } catch (ClassNotFoundException e) { return false; } } }