blob: 6da04e878eaba1fb3830297e2c852ce7c1bb0cf0 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 1997, 2008 by ProSyst Software GmbH
* http://www.prosyst.com
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* ProSyst Software GmbH - initial API and implementation
*******************************************************************************/
package org.eclipse.equinox.internal.ip.provider;
import java.util.Hashtable;
import org.eclipse.equinox.internal.ip.ProvisioningInfoProvider;
import org.eclipse.equinox.internal.ip.impl.Log;
import org.eclipse.equinox.internal.ip.impl.ProvisioningAgent;
import org.osgi.framework.*;
/**
* Base class for inner providers. Implements their registering and
* unregistering as services, their common debug.
*
* @author Avgustin Marinov
* @author Pavlin Dobrev
* @version 1.0
*/
public class BaseProvider implements BundleActivator {
/** Service Registration of ConfigurationLoader service. */
private ServiceRegistration reg;
/**
* Invoked from ProvisioningAgent if provider is packed in provisioning
* agent bundle or by FW when it is packed as standalone bundle. Registers
* itself as ProvisioningInfoProvider service with
* <I>Constants.SERVICE_RANKING</I> get from manifest. Puts in provisioning
* dictionary entire stored data.
*
* @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)
*/
public void start(BundleContext bc) throws Exception {
Log.debug = ProvisioningAgent.getBoolean("equinox.provisioning.debug");
String providers = (String) bc.getBundle().getHeaders().get(ProvisioningInfoProvider.PROVIDERS);
if (providers != null) {
String className = this.getClass().getName();
int index = (providers = providers.trim()).indexOf(className);
if (index != -1) {
index += className.length();
index = providers.indexOf(';', index);
if (index != -1) {
int end = providers.indexOf(',', index);
if (end == -1) {
end = providers.length();
}
Integer ranking = null;
try {
ranking = new Integer(providers.substring(index + 1, end).trim());
} catch (NumberFormatException nfe) {
throw new Exception("Bad \"" + ProvisioningInfoProvider.PROVIDERS + "\" header format in manifest! " + toString() + "'s ranking \"" + providers.substring(index + 1, end).trim() + "\" is not valid integer!");
}
Log.debug("Registers " + this + " provider with ranking = " + ranking + ".");
Hashtable props = new Hashtable(1, 1.0F);
props.put(Constants.SERVICE_RANKING, ranking);
reg = bc.registerService(ProvisioningInfoProvider.class.getName(), this, props);
return;
}
}
}
throw new Exception("Bad \"" + ProvisioningInfoProvider.PROVIDERS + "\" header format in manifest! Loader " + toString() + " can't be loaded!");
}
/**
* Invoked from ProvisioningAgent if provider is packed in provisioning
* agent bundle or by FW when it is packed as standalone bundle. Unregister
* service.
*
* @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)
*/
public void stop(BundleContext bc) {
if (reg != null) {
try {
reg.unregister();
} catch (Exception _) {
}
}
}
}