/*******************************************************************************
 * Copyright (c) 1997-2009 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.ds.tests;

import org.osgi.framework.Bundle;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
import org.osgi.framework.BundleException;

public class DSTestsActivator implements BundleActivator {

	private static DSTestsActivator instance;
	private BundleContext context;
	
	public DSTestsActivator() {
		instance = this;
	}
	public void start(BundleContext context) throws Exception {
		this.context = context;
	}

	public void stop(BundleContext context) throws Exception {
		this.context = null;
	}

	public static BundleContext getContext() {
		return instance != null ? instance.context : null;
	}
	
	public static void activateSCR() {
		activateBundle("org.apache.felix.scr");
		activateBundle("org.eclipse.equinox.cm");
		activateBundle("org.eclipse.equinox.log");
		activateBundle("org.eclipse.equinox.util");
	}
	
	private static void activateBundle(String symbolicName) {
		if (instance != null) {
			Bundle[] bundles = instance.context.getBundles();
			for (Bundle bundle : bundles) {
				if (symbolicName.equals(bundle.getSymbolicName())) {
					if (bundle.getState() != Bundle.ACTIVE) {
						try {
							bundle.start(Bundle.START_TRANSIENT);
						}catch (BundleException e) {
							e.printStackTrace();
						}
					}
				}
			}
		}
	}
}
