blob: 19e209d17906fb06c99315adf9fac2f50c2b85e8 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 1997-2007 by ProSyst Software GmbH
* http://www.prosyst.com
* 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:
* ProSyst Software GmbH - initial API and implementation
*******************************************************************************/
package org.eclipse.equinox.internal.wireadmin;
import org.eclipse.equinox.internal.util.ref.Log;
import org.osgi.framework.*;
import org.osgi.service.cm.ConfigurationAdmin;
import org.osgi.service.wireadmin.*;
/**
* @author Pavlin Dobrev
* @version 1.0
*/
public class Activator implements BundleActivator, ServiceListener, ServiceFactory {
static final String PREFIX = "[WireAdmin]: ";
public static boolean LOG_DEBUG;
static Log log;
private WireAdminImpl wireAdmin;
private ServiceReference cmRef;
public static BundleContext bc;
WireReDispatcher wireReDispatcher;
/*
* (non-Javadoc)
*
* @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)
*/
public void start(BundleContext bc) throws Exception {
Activator.bc = bc;
log = new Log(bc, false);
log.setPrintOnConsole(getBoolean("equinox.services.wireadmin.console"));
LOG_DEBUG = getBoolean("equinox.services.wireadmin.debug");
log.setDebug(LOG_DEBUG);
cmRef = bc.getServiceReference(ConfigurationAdmin.class.getName());
ConfigurationAdmin cm = null;
if (cmRef != null) {
cm = (ConfigurationAdmin) bc.getService(cmRef);
}
try {
bc.addServiceListener(this, '(' + Constants.OBJECTCLASS + '=' + ConfigurationAdmin.class.getName() + ')');
} catch (InvalidSyntaxException ise) {
/* syntax is valid */
}
wireAdmin = new WireAdminImpl(bc, cm);
try {
bc.addServiceListener(wireAdmin, "(|(" + Constants.OBJECTCLASS + '=' + WireAdminListener.class.getName() + ')' + '(' + Constants.OBJECTCLASS + '=' + Consumer.class.getName() + ')' + '(' + Constants.OBJECTCLASS + '=' + Producer.class.getName() + "))");
} catch (InvalidSyntaxException ise) {
/* syntax is valid */
// ise.printStackTrace();
}
wireReDispatcher = new WireReDispatcher();
wireReDispatcher.start(bc);
}
/*
* (non-Javadoc)
*
* @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)
*/
public void stop(BundleContext bc) throws Exception {
if (wireReDispatcher != null) {
wireReDispatcher.stop();
wireReDispatcher = null;
}
wireAdmin.unregister();
bc.removeServiceListener(wireAdmin);
bc.removeServiceListener(this);
if (cmRef != null) {
bc.ungetService(cmRef);
cmRef = null;
}
log.close();
log = null;
wireAdmin = null;
bc = null;
}
/*
* (non-Javadoc)
*
* @see org.osgi.framework.ServiceListener#serviceChanged(org.osgi.framework.ServiceEvent)
*/
public void serviceChanged(ServiceEvent e) {
switch (e.getType()) {
case ServiceEvent.MODIFIED :
case ServiceEvent.REGISTERED :
this.cmRef = e.getServiceReference();
wireAdmin.cm = (ConfigurationAdmin) bc.getService(cmRef);
break;
case ServiceEvent.UNREGISTERING :
this.cmRef = null;
wireAdmin.cm = null;
break;
}
}
public Object getService(Bundle bundle, ServiceRegistration registration) {
return null;
}
public void ungetService(Bundle bundle, ServiceRegistration registration, Object service) {
}
public static boolean getBoolean(String property) {
String prop = (bc != null) ? bc.getProperty(property) : System.getProperty(property);
return ((prop != null) && prop.equalsIgnoreCase("true"));
}
public static int getInteger(String property, int defaultValue) {
String prop = (bc != null) ? bc.getProperty(property) : System.getProperty(property);
if (prop != null) {
try {
return Integer.decode(prop).intValue();
} catch (NumberFormatException e) {
//do nothing
}
}
return defaultValue;
}
}