/*******************************************************************************
 * Copyright (c) 2000, 2012 IBM Corporation and others.
 * 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:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
package org.eclipse.jdi;

import org.eclipse.core.runtime.IExtensionRegistry;
import org.eclipse.core.runtime.Platform;
import org.eclipse.jdt.internal.debug.core.JDIDebugPlugin;

public class Bootstrap {
	private static com.sun.jdi.VirtualMachineManager fVirtualMachineManager;

	public Bootstrap() {
	}

	public static synchronized com.sun.jdi.VirtualMachineManager virtualMachineManager() {
		if (fVirtualMachineManager != null)
			return fVirtualMachineManager;

		try {
			IExtensionRegistry extensionRegistry = Platform
					.getExtensionRegistry();
			String className = null;
			if (extensionRegistry != null) { // is null if the platform was not
												// started
				className = extensionRegistry
						.getExtensionPoint(
								JDIDebugPlugin.getUniqueIdentifier(),
								"jdiclient").getLabel(); //$NON-NLS-1$
			}
			Class<?> clazz = null;
			if (className != null) {
				clazz = Class.forName(className);
			}
			if (clazz != null) {
				fVirtualMachineManager = (com.sun.jdi.VirtualMachineManager) clazz
						.newInstance();
			}
		} catch (ClassNotFoundException e) {
		} catch (NoClassDefFoundError e) {
		} catch (InstantiationException e) {
		} catch (IllegalAccessException e) {
		}

		if (fVirtualMachineManager == null) {
			// If any exceptions occurred, we'll end up here
			fVirtualMachineManager = new org.eclipse.jdi.internal.VirtualMachineManagerImpl();
		}

		return fVirtualMachineManager;
	}
}
