/*******************************************************************************
* Copyright (c) 2006, 2016 Mountainminds GmbH & Co. KG and Contributors
* 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:
* Marc R. Hoffmann - initial API and implementation
*
******************************************************************************/
package com.mountainminds.eclemma.ui.launching;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.IExecutableExtension;
import org.eclipse.core.runtime.IExtensionPoint;
import org.eclipse.core.runtime.Platform;
import org.eclipse.debug.core.ILaunch;
import org.eclipse.debug.core.ILaunchConfiguration;
import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
import org.eclipse.debug.core.ILaunchManager;
import org.eclipse.debug.ui.ILaunchConfigurationDialog;
import org.eclipse.debug.ui.ILaunchConfigurationTab;
import org.eclipse.debug.ui.ILaunchConfigurationTabGroup;
import com.mountainminds.eclemma.internal.ui.EclEmmaUIPlugin;
/**
* The coverage tab group simply uses the tab group for the launch type "run"
* and inserts the "Coverage" tab at the second position.
*/
public class CoverageTabGroup implements ILaunchConfigurationTabGroup,
IExecutableExtension {
private static final String DELEGATE_LAUNCHMODE = ILaunchManager.RUN_MODE;
private static final String EXPOINT_TABGROUP = "org.eclipse.debug.ui.launchConfigurationTabGroups"; //$NON-NLS-1$
private static final String CONFIGATTR_TYPE = "type"; //$NON-NLS-1$
private ILaunchConfigurationTabGroup tabGroupDelegate;
private ILaunchConfigurationTab coverageTab;
// IExecutableExtension interface
public void setInitializationData(IConfigurationElement config,
String propertyName, Object data) throws CoreException {
tabGroupDelegate = createDelegate(config.getAttribute(CONFIGATTR_TYPE));
}
protected ILaunchConfigurationTabGroup createDelegate(String type)
throws CoreException {
IExtensionPoint extensionpoint = Platform.getExtensionRegistry()
.getExtensionPoint(EXPOINT_TABGROUP);
IConfigurationElement[] tabGroupConfigs = extensionpoint
.getConfigurationElements();
IConfigurationElement element = null;
findloop: for (IConfigurationElement tabGroupConfig : tabGroupConfigs) {
if (type.equals(tabGroupConfig.getAttribute(CONFIGATTR_TYPE))) {
IConfigurationElement[] modeConfigs = tabGroupConfig
.getChildren("launchMode"); //$NON-NLS-1$
if (modeConfigs.length == 0) {
element = tabGroupConfig;
}
for (final IConfigurationElement config : modeConfigs) {
if (DELEGATE_LAUNCHMODE.equals(config.getAttribute("mode"))) { //$NON-NLS-1$
element = tabGroupConfig;
break findloop;
}
}
}
}
if (element == null) {
String msg = "No tab group registered to run " + type; //$NON-NLS-1$
throw new CoreException(EclEmmaUIPlugin.errorStatus(msg, null));
} else {
return (ILaunchConfigurationTabGroup) element
.createExecutableExtension("class"); //$NON-NLS-1$
}
}
// ILaunchConfigurationTabGroup interface
public void createTabs(ILaunchConfigurationDialog dialog, String mode) {
tabGroupDelegate.createTabs(dialog, mode);
coverageTab = createCoverageTab(dialog, mode);
}
protected ILaunchConfigurationTab createCoverageTab(
ILaunchConfigurationDialog dialog, String mode) {
return new CoverageTab();
}
public ILaunchConfigurationTab[] getTabs() {
return insertCoverageTab(tabGroupDelegate.getTabs(), coverageTab);
}
protected ILaunchConfigurationTab[] insertCoverageTab(
ILaunchConfigurationTab[] delegateTabs,
ILaunchConfigurationTab coverageTab) {
ILaunchConfigurationTab[] tabs = new ILaunchConfigurationTab[delegateTabs.length + 1];
tabs[0] = delegateTabs[0];
tabs[1] = coverageTab;
System.arraycopy(delegateTabs, 1, tabs, 2, delegateTabs.length - 1);
return tabs;
}
public void dispose() {
tabGroupDelegate.dispose();
coverageTab.dispose();
}
public void setDefaults(ILaunchConfigurationWorkingCopy configuration) {
tabGroupDelegate.setDefaults(configuration);
coverageTab.setDefaults(configuration);
}
public void initializeFrom(ILaunchConfiguration configuration) {
tabGroupDelegate.initializeFrom(configuration);
coverageTab.initializeFrom(configuration);
}
public void performApply(ILaunchConfigurationWorkingCopy configuration) {
tabGroupDelegate.performApply(configuration);
coverageTab.performApply(configuration);
}
public void launched(ILaunch launch) {
// deprecated method will not be called
}
}