/*******************************************************************************
* Copyright (c) 2011, 2012 Anton Gorenkov
* 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:
* Anton Gorenkov - initial API and implementation
*******************************************************************************/
package org.eclipse.cdt.testsrunner.internal.launcher;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.Platform;
import org.eclipse.debug.core.ILaunchConfiguration;
/**
* Collects the data from the Tests Runner provider plug-in extension points and
* provides the convenient access to it.
*/
public class TestsRunnerProvidersManager {
/** Tests Runner Plug-ins extension point ID. */
private static final String TESTS_RUNNER_EXTENSION_POINT_ID = "org.eclipse.cdt.testsrunner.TestsRunner"; //$NON-NLS-1$
/** Tests Runner Plug-ins information collection. */
private TestsRunnerProviderInfo[] testsRunnerProviders = null;
/**
* Provides access to information about all registered Tests Runner
* Plug-ins.
*
* @return array of tests runner plug-ins descriptors
*/
public TestsRunnerProviderInfo[] getTestsRunnersProviderInfo() {
if (testsRunnerProviders == null) {
// Initialize tests runners info
List<TestsRunnerProviderInfo> testsRunnerProvidersList = new ArrayList<TestsRunnerProviderInfo>();
for (IConfigurationElement element : Platform.getExtensionRegistry().getConfigurationElementsFor(TESTS_RUNNER_EXTENSION_POINT_ID)) {
testsRunnerProvidersList.add(new TestsRunnerProviderInfo(element));
}
testsRunnerProviders = testsRunnerProvidersList.toArray(new TestsRunnerProviderInfo[testsRunnerProvidersList.size()]);
}
return testsRunnerProviders;
}
/**
* Provides access to information about Tests Runner Plug-in referred in the
* specified launch configuration.
*
* @return tests runner plug-in descriptor
*/
public TestsRunnerProviderInfo getTestsRunnerProviderInfo(ILaunchConfiguration launchConf) throws CoreException {
String testsRunnerId = launchConf.getAttribute(ITestsLaunchConfigurationConstants.ATTR_TESTS_RUNNER, (String)null);
return getTestsRunnerProviderInfo(testsRunnerId);
}
/**
* Provides access to information about Tests Runner Plug-in with the
* specified ID.
*
* @return tests runner plug-in descriptor
*/
private TestsRunnerProviderInfo getTestsRunnerProviderInfo(String testsRunnerProviderId) {
if (testsRunnerProviderId != null) {
for (TestsRunnerProviderInfo testsRunnerProvider : getTestsRunnersProviderInfo()) {
if (testsRunnerProvider.getId().equals(testsRunnerProviderId)) {
return testsRunnerProvider;
}
}
}
return null;
}
}