package intrace.ecl.ui.launching; import intrace.ecl.Util; 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.ILaunchManager; import org.eclipse.debug.ui.AbstractLaunchConfigurationTabGroup; import org.eclipse.debug.ui.ILaunchConfigurationDialog; import org.eclipse.debug.ui.ILaunchConfigurationTab; import org.eclipse.debug.ui.ILaunchConfigurationTabGroup; public class TabGroup extends AbstractLaunchConfigurationTabGroup implements 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[] alltabs; 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$ for (IConfigurationElement modeConfig : modeConfigs) { if (DELEGATE_LAUNCHMODE.equals(modeConfig.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(Util.createErrorStatus(msg, null)); } else { return (ILaunchConfigurationTabGroup) element .createExecutableExtension("class"); //$NON-NLS-1$ } } @Override public void createTabs(ILaunchConfigurationDialog dialog, String mode) { tabGroupDelegate.createTabs(dialog, mode); ILaunchConfigurationTab[] tabs = tabGroupDelegate.getTabs(); alltabs = new ILaunchConfigurationTab[tabs.length + 1]; alltabs[0] = tabs[0]; alltabs[1] = new InTraceLaunchConfigTab(); for (int ii = 2; ii < alltabs.length; ii++) { alltabs[ii] = tabs[ii - 1]; } setTabs(alltabs); } @Override public ILaunchConfigurationTab[] getTabs() { return alltabs; } }