/*******************************************************************************
* Copyright (c) 2012, 2014 Wind River Systems, Inc. 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:
* Wind River Systems - initial API and implementation
*******************************************************************************/
package org.eclipse.tcf.te.launch.core.lm.internal;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.core.runtime.Assert;
import org.eclipse.tcf.te.launch.core.lm.delegates.DefaultLaunchManagerDelegate;
import org.eclipse.tcf.te.launch.core.lm.interfaces.ILaunchManagerDelegate;
import org.eclipse.tcf.te.runtime.extensions.AbstractExtensionPointManager;
import org.eclipse.tcf.te.runtime.extensions.ExecutableExtensionProxy;
import org.eclipse.tcf.te.runtime.interfaces.extensions.IExecutableExtension;
/**
* Launch manager delegate extension point manager.
*/
public class ExtensionPointManager extends AbstractExtensionPointManager<ILaunchManagerDelegate> {
private final ILaunchManagerDelegate defaultDelegate = new DefaultLaunchManagerDelegate();
/*
* Thread save singleton instance creation.
*/
private static class LazyInstanceHolder {
public static ExtensionPointManager instance = new ExtensionPointManager();
}
/**
* Returns the singleton instance for the manager.
*/
public static ExtensionPointManager getInstance() {
return LazyInstanceHolder.instance;
}
/**
* Constructor.
*/
ExtensionPointManager() {
super();
}
/* (non-Javadoc)
* @see org.eclipse.tcf.te.runtime.extensions.AbstractExtensionPointManager#getConfigurationElementName()
*/
@Override
protected String getConfigurationElementName() {
return "delegate"; //$NON-NLS-1$
}
/* (non-Javadoc)
* @see org.eclipse.tcf.te.runtime.extensions.AbstractExtensionPointManager#getExtensionPointId()
*/
@Override
protected String getExtensionPointId() {
return "org.eclipse.tcf.te.launch.core.launchManagerDelegates"; //$NON-NLS-1$
}
/**
* Get the list of all registered launch manager delegates.
*/
public ILaunchManagerDelegate[] getLaunchManagerDelegates() {
List<ILaunchManagerDelegate> delegates = new ArrayList<ILaunchManagerDelegate>();
for (ExecutableExtensionProxy<ILaunchManagerDelegate> proxy : getExtensions().values()) {
IExecutableExtension candidate = proxy.getInstance();
if (candidate instanceof ILaunchManagerDelegate && !delegates.contains(candidate)) {
delegates.add((ILaunchManagerDelegate)candidate);
}
}
return delegates.toArray(new ILaunchManagerDelegate[delegates.size()]);
}
/**
* Returns the launch manager delegate with the given id.
* @param id The id of the launch manager delegate.
*/
public ILaunchManagerDelegate getLaunchManagerDelegate(String id) {
Assert.isNotNull(id);
ILaunchManagerDelegate delegate = null;
if (getExtensions().containsKey(id)) {
delegate = getExtensions().get(id).getInstance();
}
return delegate != null ? delegate : getDefaultLaunchManagerDelegate();
}
/**
* Returns the default dummy launch manager delegate.
*/
public ILaunchManagerDelegate getDefaultLaunchManagerDelegate() {
return defaultDelegate;
}
}