/******************************************************************************* * Copyright (c) 2000, 2013 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.debug.internal.ui.launchConfigurations; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.Hashtable; import java.util.List; import java.util.Map; import java.util.Set; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IConfigurationElement; import org.eclipse.debug.internal.core.IConfigurationElementConstants; import org.eclipse.debug.internal.core.IInternalDebugCoreConstants; import org.eclipse.debug.ui.ILaunchConfigurationTabGroup; /** * Proxy to a launch configuration tab group element */ public class LaunchConfigurationTabGroupExtension { /** * The configuration element defining this tab group. */ private IConfigurationElement fConfig = null; /** * A list of sets of modes that this tab group supports * @since 3.3 */ private List<Set<String>> fModes = null; /** * A map of mode sets to descriptions * @since 3.3 */ private Map<Set<String>, String> fDescriptions = null; /** * Perspectives for each mode */ private Map<Set<String>, String> fPerspectives = null; /** * Constructs a launch configuration tab extension based * on the given configuration element * * @param element the configuration element defining the * attributes of this launch configuration tab extension * @return a new launch configuration tab extension */ public LaunchConfigurationTabGroupExtension(IConfigurationElement element) { setConfigurationElement(element); } /** * Sets the configuration element that defines the attributes * for this launch configuration tab group extension. * * @param element configuration element */ private void setConfigurationElement(IConfigurationElement element) { fConfig = element; } /** * Returns the configuration element that defines the attributes * for this launch configuration tab group extension. * * @param configuration element that defines the attributes * for this launch configuration tab extension */ protected IConfigurationElement getConfigurationElement() { return fConfig; } /** * Returns the set of modes specified in the configuration data, or <code>null</code> * if none (i.e. default tab group) * * @return the set of modes specified in the configuration data, or * <code>null</code> */ protected List<Set<String>> getModes() { if (fModes == null) { fModes = new ArrayList<Set<String>>(); fPerspectives = new Hashtable<Set<String>, String>(); IConfigurationElement[] modes = fConfig.getChildren(IConfigurationElementConstants.LAUNCH_MODE); if (modes.length > 0) { IConfigurationElement element = null; String perspective = null, mode = null; Set<String> mset = null; for (int i = 0; i < modes.length; i++) { element = modes[i]; mode = element.getAttribute(IConfigurationElementConstants.MODE); mset = new HashSet<String>(); mset.add(mode); fModes.add(mset); perspective = element.getAttribute(IConfigurationElementConstants.PERSPECTIVE); if (perspective != null) { fPerspectives.put(mset, perspective); } } } } return fModes; } /** * Returns the perspective associated with the given launch * mode, as specified in plug-in XML, or <code>null</code> if none. * * @param modes the set of launch modes * @return perspective identifier, or <code>null</code> */ protected String getPerspective(Set<String> modes) { getModes(); return fPerspectives.get(modes); } /** * Returns the identifier of the type of launch configuration this * tab group is associated with * * @return the identifier of the type of launch configuration this * tab group is associated with */ protected String getTypeIdentifier() { return getConfigurationElement().getAttribute(IConfigurationElementConstants.TYPE); } /** * Returns the identifier of the help context associated with this tab * group, or <code>null</code> if one was not specified. * * @return the identifier of this tab group's help context or * <code>null</code> * @since 2.1 */ protected String getHelpContextId() { return getConfigurationElement().getAttribute(IConfigurationElementConstants.HELP_CONTEXT_ID); } /** * Returns the identifier of the tab group * @return the id of the tab group * * @since 3.3 */ protected String getIdentifier() { return getConfigurationElement().getAttribute(IConfigurationElementConstants.ID); } /** * Returns a new tab group defined by this extension * * @return a new tab group defined by this extension * @exception CoreException if an exception occurs instantiating * the tab group */ public ILaunchConfigurationTabGroup newTabGroup() throws CoreException { return (ILaunchConfigurationTabGroup)getConfigurationElement().createExecutableExtension(IConfigurationElementConstants.CLASS); } /** * Returns this tab group's description in the given mode set. * * @param modes the set of modes * @return a description of the Launch Mode if available. If not available, attempts to return * a description of the Launch Configuration. If no appropriate description is found an empty string is returned. */ public String getDescription(Set<String> modes) { String description = null; if(fDescriptions == null) { fDescriptions = new HashMap<Set<String>, String>(); IConfigurationElement[] children = fConfig.getChildren(IConfigurationElementConstants.LAUNCH_MODE); IConfigurationElement child = null; String mode = null; HashSet<String> set = null; for (int i = 0; i < children.length; i++) { child = children[i]; mode = child.getAttribute(IConfigurationElementConstants.MODE); if(mode != null) { set = new HashSet<String>(); set.add(mode); } description = child.getAttribute(IConfigurationElementConstants.DESCRIPTION); if(description != null) { fDescriptions.put(set, description); } } } description = fDescriptions.get(modes); if(description == null) { description = fConfig.getAttribute(IConfigurationElementConstants.DESCRIPTION); } return (description == null ? IInternalDebugCoreConstants.EMPTY_STRING : description); } }