diff options
Diffstat (limited to 'org.eclipse.debug.ui/ui/org/eclipse/debug/ui/CommonTab.java')
-rw-r--r-- | org.eclipse.debug.ui/ui/org/eclipse/debug/ui/CommonTab.java | 935 |
1 files changed, 0 insertions, 935 deletions
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/CommonTab.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/CommonTab.java deleted file mode 100644 index e43740958..000000000 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/CommonTab.java +++ /dev/null @@ -1,935 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2009 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.ui; - - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; - -import org.eclipse.core.resources.IContainer; -import org.eclipse.core.resources.IFile; -import org.eclipse.core.resources.IProject; -import org.eclipse.core.resources.IResource; -import org.eclipse.core.resources.IWorkspaceRoot; -import org.eclipse.core.resources.ResourcesPlugin; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IPath; -import org.eclipse.core.runtime.Path; -import org.eclipse.core.variables.VariablesPlugin; -import org.eclipse.debug.core.DebugPlugin; -import org.eclipse.debug.core.ILaunchConfiguration; -import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; -import org.eclipse.debug.internal.core.IInternalDebugCoreConstants; -import org.eclipse.debug.internal.ui.DebugUIPlugin; -import org.eclipse.debug.internal.ui.IDebugHelpContextIds; -import org.eclipse.debug.internal.ui.IInternalDebugUIConstants; -import org.eclipse.debug.internal.ui.SWTFactory; -import org.eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationManager; -import org.eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationsMessages; -import org.eclipse.debug.internal.ui.launchConfigurations.LaunchGroupExtension; -import org.eclipse.debug.internal.ui.launchConfigurations.LaunchHistory; -import org.eclipse.jface.dialogs.Dialog; -import org.eclipse.jface.dialogs.IDialogConstants; -import org.eclipse.jface.dialogs.IDialogSettings; -import org.eclipse.jface.resource.ImageDescriptor; -import org.eclipse.jface.viewers.CheckStateChangedEvent; -import org.eclipse.jface.viewers.CheckboxTableViewer; -import org.eclipse.jface.viewers.ICheckStateListener; -import org.eclipse.jface.viewers.ILabelProviderListener; -import org.eclipse.jface.viewers.IStructuredContentProvider; -import org.eclipse.jface.viewers.ITableLabelProvider; -import org.eclipse.jface.viewers.Viewer; -import org.eclipse.swt.SWT; -import org.eclipse.swt.accessibility.AccessibleAdapter; -import org.eclipse.swt.accessibility.AccessibleEvent; -import org.eclipse.swt.events.ModifyEvent; -import org.eclipse.swt.events.ModifyListener; -import org.eclipse.swt.events.SelectionAdapter; -import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.events.SelectionListener; -import org.eclipse.swt.graphics.Image; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Button; -import org.eclipse.swt.widgets.Combo; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; -import org.eclipse.swt.widgets.FileDialog; -import org.eclipse.swt.widgets.Group; -import org.eclipse.swt.widgets.Text; -import org.eclipse.ui.PlatformUI; -import org.eclipse.ui.dialogs.ContainerSelectionDialog; -import org.eclipse.ui.dialogs.ElementTreeSelectionDialog; -import org.eclipse.ui.ide.IDEEncoding; -import org.eclipse.ui.model.WorkbenchContentProvider; -import org.eclipse.ui.model.WorkbenchLabelProvider; -import org.eclipse.ui.views.navigator.ResourceComparator; - -import com.ibm.icu.text.MessageFormat; - -/** - * Launch configuration tab used to specify the location a launch configuration - * is stored in, whether it should appear in the favorites list, and perspective - * switching behavior for an associated launch. - * <p> - * Clients may instantiate this class. - * </p> - * @since 2.0 - * @noextend This class is not intended to be subclassed by clients. - */ -public class CommonTab extends AbstractLaunchConfigurationTab { - - /** - * Constant representing the id of the {@link IDialogSettings} location for the {@link ContainerSelectionDialog} used - * on this tab - * - * @since 3.6 - */ - private final String SHARED_LAUNCH_CONFIGURATON_DIALOG = IDebugUIConstants.PLUGIN_ID + ".SHARED_LAUNCH_CONFIGURATON_DIALOG"; //$NON-NLS-1$ - private final String WORKSPACE_SELECTION_DIALOG = IDebugUIConstants.PLUGIN_ID + ".WORKSPACE_SELECTION_DIALOG"; //$NON-NLS-1$ - - /** - * This attribute exists solely for the purpose of making sure that invalid shared locations - * can be revertible. This attribute is not saveable and will never appear in a saved - * launch configuration. - * @since 3.3 - */ - private static final String BAD_CONTAINER = "bad_container_name"; //$NON-NLS-1$ - - // Local/shared UI widgets - private Button fLocalRadioButton; - private Button fSharedRadioButton; - private Text fSharedLocationText; - private Button fSharedLocationButton; - private Button fLaunchInBackgroundButton; - private Button fDefaultEncodingButton; - private Button fAltEncodingButton; - private Combo fEncodingCombo; - private Button fConsoleOutput; - private Button fFileOutput; - private Button fFileBrowse; - private Text fFileText; - private Button fVariables; - private Button fAppend; - private Button fWorkspaceBrowse; - - /** - * Check box list for specifying favorites - */ - private CheckboxTableViewer fFavoritesTable; - - /** - * Modify listener that simply updates the owning launch configuration dialog. - */ - private ModifyListener fBasicModifyListener = new ModifyListener() { - public void modifyText(ModifyEvent evt) { - updateLaunchConfigurationDialog(); - } - }; - - /* (non-Javadoc) - * @see org.eclipse.debug.ui.ILaunchConfigurationTab#createControl(org.eclipse.swt.widgets.Composite) - */ - public void createControl(Composite parent) { - Composite comp = new Composite(parent, SWT.NONE); - setControl(comp); - PlatformUI.getWorkbench().getHelpSystem().setHelp(getControl(), IDebugHelpContextIds.LAUNCH_CONFIGURATION_DIALOG_COMMON_TAB); - comp.setLayout(new GridLayout(2, true)); - comp.setFont(parent.getFont()); - - createSharedConfigComponent(comp); - createFavoritesComponent(comp); - createEncodingComponent(comp); - createOutputCaptureComponent(comp); - createLaunchInBackgroundComponent(comp); - } - - /** - * @return the {@link IDialogSettings} to pass into the {@link ContainerSelectionDialog} - * @since 3.6 - */ - IDialogSettings getDialogBoundsSettings(String id) { - IDialogSettings settings = DebugUIPlugin.getDefault().getDialogSettings(); - IDialogSettings section = settings.getSection(id); - if (section == null) { - section = settings.addNewSection(id); - } - return section; - } - - /** - * Creates the favorites control - * @param parent the parent composite to add this one to - * @since 3.2 - */ - private void createFavoritesComponent(Composite parent) { - Group favComp = SWTFactory.createGroup(parent, LaunchConfigurationsMessages.CommonTab_Display_in_favorites_menu__10, 1, 1, GridData.FILL_BOTH); - fFavoritesTable = CheckboxTableViewer.newCheckList(favComp, SWT.CHECK | SWT.BORDER | SWT.MULTI | SWT.FULL_SELECTION); - Control table = fFavoritesTable.getControl(); - GridData gd = new GridData(GridData.FILL_BOTH); - table.setLayoutData(gd); - table.setFont(parent.getFont()); - fFavoritesTable.setContentProvider(new FavoritesContentProvider()); - fFavoritesTable.setLabelProvider(new FavoritesLabelProvider()); - fFavoritesTable.addCheckStateListener(new ICheckStateListener() { - public void checkStateChanged(CheckStateChangedEvent event) { - updateLaunchConfigurationDialog(); - } - }); - } - - /** - * Creates the shared config component - * @param parent the parent composite to add this component to - * @since 3.2 - */ - private void createSharedConfigComponent(Composite parent) { - Group group = SWTFactory.createGroup(parent, LaunchConfigurationsMessages.CommonTab_0, 3, 2, GridData.FILL_HORIZONTAL); - Composite comp = SWTFactory.createComposite(group, parent.getFont(), 3, 3, GridData.FILL_BOTH, 0, 0); - fLocalRadioButton = createRadioButton(comp, LaunchConfigurationsMessages.CommonTab_L_ocal_3); - GridData gd = new GridData(); - gd.horizontalSpan = 3; - fLocalRadioButton.setLayoutData(gd); - fSharedRadioButton = createRadioButton(comp, LaunchConfigurationsMessages.CommonTab_S_hared_4); - fSharedRadioButton.addSelectionListener(new SelectionAdapter() { - public void widgetSelected(SelectionEvent evt) { - handleSharedRadioButtonSelected(); - } - }); - fSharedLocationText = SWTFactory.createSingleText(comp, 1); - fSharedLocationText.getAccessible().addAccessibleListener(new AccessibleAdapter() { - public void getName(AccessibleEvent e) { - e.result = LaunchConfigurationsMessages.CommonTab_S_hared_4; - } - }); - fSharedLocationText.addModifyListener(fBasicModifyListener); - fSharedLocationButton = createPushButton(comp, LaunchConfigurationsMessages.CommonTab__Browse_6, null); - fSharedLocationButton.addSelectionListener(new SelectionAdapter() { - public void widgetSelected(SelectionEvent evt) { - handleSharedLocationButtonSelected(); - } - }); - - fLocalRadioButton.setSelection(true); - setSharedEnabled(false); - } - - /** - * Creates the component set for the capture output composite - * @param parent the parent to add this component to - */ - private void createOutputCaptureComponent(Composite parent) { - Group group = SWTFactory.createGroup(parent, LaunchConfigurationsMessages.CommonTab_4, 5, 2, GridData.FILL_HORIZONTAL); - Composite comp = SWTFactory.createComposite(group, 5, 5, GridData.FILL_BOTH); - GridLayout ld = (GridLayout)comp.getLayout(); - ld.marginWidth = 1; - ld.marginHeight = 1; - fConsoleOutput = createCheckButton(comp, LaunchConfigurationsMessages.CommonTab_5); - GridData gd = new GridData(SWT.BEGINNING, SWT.NORMAL, true, false); - gd.horizontalSpan = 5; - fConsoleOutput.setLayoutData(gd); - fConsoleOutput.addSelectionListener(new SelectionAdapter() { - public void widgetSelected(SelectionEvent e) { - updateLaunchConfigurationDialog(); - } - }); - - fFileOutput = createCheckButton(comp, LaunchConfigurationsMessages.CommonTab_6); - fFileOutput.setLayoutData(new GridData(SWT.BEGINNING, SWT.NORMAL, false, false)); - fFileOutput.addSelectionListener(new SelectionAdapter() { - public void widgetSelected(SelectionEvent e) { - enableOuputCaptureWidgets(fFileOutput.getSelection()); - updateLaunchConfigurationDialog(); - } - }); - fFileText = SWTFactory.createSingleText(comp, 4); - fFileText.getAccessible().addAccessibleListener(new AccessibleAdapter() { - public void getName(AccessibleEvent e) { - e.result = LaunchConfigurationsMessages.CommonTab_6; - } - }); - fFileText.addModifyListener(fBasicModifyListener); - - Composite bcomp = SWTFactory.createComposite(comp, 3, 5, GridData.HORIZONTAL_ALIGN_END); - ld = (GridLayout)bcomp.getLayout(); - ld.marginHeight = 1; - ld.marginWidth = 0; - fWorkspaceBrowse = createPushButton(bcomp, LaunchConfigurationsMessages.CommonTab_12, null); - fWorkspaceBrowse.addSelectionListener(new SelectionAdapter() { - public void widgetSelected(SelectionEvent e) { - ElementTreeSelectionDialog dialog = new ElementTreeSelectionDialog(getShell(), new WorkbenchLabelProvider(), new WorkbenchContentProvider()); - dialog.setTitle(LaunchConfigurationsMessages.CommonTab_13); - dialog.setMessage(LaunchConfigurationsMessages.CommonTab_14); - dialog.setInput(ResourcesPlugin.getWorkspace().getRoot()); - dialog.setComparator(new ResourceComparator(ResourceComparator.NAME)); - dialog.setDialogBoundsSettings(getDialogBoundsSettings(WORKSPACE_SELECTION_DIALOG), Dialog.DIALOG_PERSISTSIZE); - if (dialog.open() == IDialogConstants.OK_ID) { - IResource resource = (IResource) dialog.getFirstResult(); - if(resource != null) { - String arg = resource.getFullPath().toString(); - String fileLoc = VariablesPlugin.getDefault().getStringVariableManager().generateVariableExpression("workspace_loc", arg); //$NON-NLS-1$ - fFileText.setText(fileLoc); - } - } - } - }); - fFileBrowse = createPushButton(bcomp, LaunchConfigurationsMessages.CommonTab_7, null); - fFileBrowse.addSelectionListener(new SelectionAdapter() { - public void widgetSelected(SelectionEvent e) { - String filePath = fFileText.getText(); - FileDialog dialog = new FileDialog(getShell(), SWT.SAVE); - filePath = dialog.open(); - if (filePath != null) { - fFileText.setText(filePath); - } - } - }); - fVariables = createPushButton(bcomp, LaunchConfigurationsMessages.CommonTab_9, null); - fVariables.addSelectionListener(new SelectionListener() { - public void widgetSelected(SelectionEvent e) { - StringVariableSelectionDialog dialog = new StringVariableSelectionDialog(getShell()); - dialog.open(); - String variable = dialog.getVariableExpression(); - if (variable != null) { - fFileText.insert(variable); - } - } - public void widgetDefaultSelected(SelectionEvent e) {} - }); - fAppend = createCheckButton(comp, LaunchConfigurationsMessages.CommonTab_11); - gd = new GridData(SWT.LEFT, SWT.TOP, true, false); - gd.horizontalSpan = 4; - fAppend.setLayoutData(gd); - fAppend.addSelectionListener(new SelectionAdapter() { - public void widgetSelected(SelectionEvent e) { - updateLaunchConfigurationDialog(); - } - }); - } - - /** - * Enables or disables the output capture widgets based on the the specified enablement - * @param enable if the output capture widgets should be enabled or not - * @since 3.2 - */ - private void enableOuputCaptureWidgets(boolean enable) { - fFileText.setEnabled(enable); - fFileBrowse.setEnabled(enable); - fWorkspaceBrowse.setEnabled(enable); - fVariables.setEnabled(enable); - fAppend.setEnabled(enable); - } - - /** - * Returns the default encoding for the specified config - * @param config - * @return the default encoding - * - * @since 3.4 - */ - private String getDefaultEncoding(ILaunchConfiguration config) { - try { - IResource[] resources = config.getMappedResources(); - if(resources != null && resources.length > 0) { - IResource res = resources[0]; - if(res instanceof IFile) { - return ((IFile)res).getCharset(); - } - else if(res instanceof IContainer) { - return ((IContainer)res).getDefaultCharset(); - } - } - } - catch(CoreException ce) { - DebugUIPlugin.log(ce); - } - return ResourcesPlugin.getEncoding(); - } - - /** - * Creates the encoding component - * @param parent the parent to add this composite to - */ - private void createEncodingComponent(Composite parent) { - Group group = SWTFactory.createGroup(parent, LaunchConfigurationsMessages.CommonTab_1, 2, 1, GridData.FILL_BOTH); - - fDefaultEncodingButton = createRadioButton(group, IInternalDebugCoreConstants.EMPTY_STRING); - GridData gd = new GridData(SWT.BEGINNING, SWT.NORMAL, true, false); - gd.horizontalSpan = 2; - fDefaultEncodingButton.setLayoutData(gd); - - fAltEncodingButton = createRadioButton(group, LaunchConfigurationsMessages.CommonTab_3); - fAltEncodingButton.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING)); - - fEncodingCombo = new Combo(group, SWT.READ_ONLY); - fEncodingCombo.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); - fEncodingCombo.setFont(parent.getFont()); - List allEncodings = IDEEncoding.getIDEEncodings(); - String[] encodingArray = (String[]) allEncodings.toArray(new String[0]); - fEncodingCombo.setItems(encodingArray); - if (encodingArray.length > 0) { - fEncodingCombo.select(0); - } - fEncodingCombo.getAccessible().addAccessibleListener(new AccessibleAdapter() { - public void getName(AccessibleEvent e) { - e.result = LaunchConfigurationsMessages.CommonTab_3; - } - }); - SelectionListener listener = new SelectionAdapter() { - public void widgetSelected(SelectionEvent e) { - if(e.getSource() instanceof Button) { - Button button = (Button)e.getSource(); - if(button.getSelection()) { - updateLaunchConfigurationDialog(); - fEncodingCombo.setEnabled(fAltEncodingButton.getSelection() == true); - } - } - else { - updateLaunchConfigurationDialog(); - } - } - }; - fAltEncodingButton.addSelectionListener(listener); - fDefaultEncodingButton.addSelectionListener(listener); - fEncodingCombo.addSelectionListener(listener); - } - - /** - * Creates the controls needed to edit the launch in background - * attribute of an external tool - * - * @param parent the composite to create the controls in - */ - protected void createLaunchInBackgroundComponent(Composite parent) { - fLaunchInBackgroundButton = createCheckButton(parent, LaunchConfigurationsMessages.CommonTab_10); - GridData data = new GridData(GridData.HORIZONTAL_ALIGN_FILL); - data.horizontalSpan = 2; - fLaunchInBackgroundButton.setLayoutData(data); - fLaunchInBackgroundButton.setFont(parent.getFont()); - fLaunchInBackgroundButton.addSelectionListener(new SelectionAdapter() { - public void widgetSelected(SelectionEvent e) { - updateLaunchConfigurationDialog(); - } - }); - } - - /** - * handles the shared radio button being selected - */ - private void handleSharedRadioButtonSelected() { - setSharedEnabled(isShared()); - updateLaunchConfigurationDialog(); - } - - /** - * Sets the widgets for specifying that a launch configuration is to be shared to the enable value - * @param enable the enabled value for - */ - private void setSharedEnabled(boolean enable) { - fSharedLocationText.setEnabled(enable); - fSharedLocationButton.setEnabled(enable); - } - - private String getDefaultSharedConfigLocation(ILaunchConfiguration config) { - String path = IInternalDebugCoreConstants.EMPTY_STRING; - try { - IResource[] res = config.getMappedResources(); - if(res != null) { - IProject proj; - for (int i = 0; i < res.length; i++) { - proj = res[i].getProject(); - if(proj != null && proj.isAccessible()) { - return proj.getFullPath().toOSString(); - } - } - } - } - catch (CoreException e) {DebugUIPlugin.log(e);} - return path; - } - - /** - * if the shared radio button is selected, indicating that the launch configuration is to be shared - * @return true if the radio button is selected, false otherwise - */ - private boolean isShared() { - return fSharedRadioButton.getSelection(); - } - - /** - * Handles the shared location button being selected - */ - private void handleSharedLocationButtonSelected() { - String currentContainerString = fSharedLocationText.getText(); - IContainer currentContainer = getContainer(currentContainerString); - ContainerSelectionDialog dialog = new ContainerSelectionDialog(getShell(), - currentContainer, - false, - LaunchConfigurationsMessages.CommonTab_Select_a_location_for_the_launch_configuration_13); - dialog.showClosedProjects(false); - dialog.setDialogBoundsSettings(getDialogBoundsSettings(SHARED_LAUNCH_CONFIGURATON_DIALOG), Dialog.DIALOG_PERSISTSIZE); - dialog.open(); - Object[] results = dialog.getResult(); - if ((results != null) && (results.length > 0) && (results[0] instanceof IPath)) { - IPath path = (IPath)results[0]; - String containerName = path.toOSString(); - fSharedLocationText.setText(containerName); - } - } - - /** - * gets the container form the specified path - * @param path the path to get the container from - * @return the container for the specified path or null if one cannot be determined - */ - private IContainer getContainer(String path) { - Path containerPath = new Path(path); - return (IContainer) getWorkspaceRoot().findMember(containerPath); - } - - /* (non-Javadoc) - * @see org.eclipse.debug.ui.ILaunchConfigurationTab#initializeFrom(org.eclipse.debug.core.ILaunchConfiguration) - */ - public void initializeFrom(ILaunchConfiguration configuration) { - boolean isShared = !configuration.isLocal(); - fSharedRadioButton.setSelection(isShared); - fLocalRadioButton.setSelection(!isShared); - setSharedEnabled(isShared); - fSharedLocationText.setText(getDefaultSharedConfigLocation(configuration)); - if(isShared) { - String containerName = IInternalDebugCoreConstants.EMPTY_STRING; - IFile file = configuration.getFile(); - if (file != null) { - IContainer parent = file.getParent(); - if (parent != null) { - containerName = parent.getFullPath().toOSString(); - } - } - fSharedLocationText.setText(containerName); - } - updateFavoritesFromConfig(configuration); - updateLaunchInBackground(configuration); - updateEncoding(configuration); - updateConsoleOutput(configuration); - } - - /** - * Updates the console output form the local configuration - * @param configuration the local configuration - */ - private void updateConsoleOutput(ILaunchConfiguration configuration) { - boolean outputToConsole = true; - String outputFile = null; - boolean append = false; - - try { - outputToConsole = configuration.getAttribute(IDebugUIConstants.ATTR_CAPTURE_IN_CONSOLE, true); - outputFile = configuration.getAttribute(IDebugUIConstants.ATTR_CAPTURE_IN_FILE, (String)null); - append = configuration.getAttribute(IDebugUIConstants.ATTR_APPEND_TO_FILE, false); - } catch (CoreException e) { - } - - fConsoleOutput.setSelection(outputToConsole); - fAppend.setSelection(append); - boolean haveOutputFile= outputFile != null; - if (haveOutputFile) { - fFileText.setText(outputFile); - } - fFileOutput.setSelection(haveOutputFile); - enableOuputCaptureWidgets(haveOutputFile); - } - - /** - * Updates the launch on background check button - * @param configuration the local launch configuration - */ - protected void updateLaunchInBackground(ILaunchConfiguration configuration) { - fLaunchInBackgroundButton.setSelection(isLaunchInBackground(configuration)); - } - - /** - * Updates the encoding - * @param configuration the local configuration - */ - private void updateEncoding(ILaunchConfiguration configuration) { - String encoding = null; - try { - encoding = configuration.getAttribute(DebugPlugin.ATTR_CONSOLE_ENCODING, (String)null); - } catch (CoreException e) { - } - String defaultEncoding = getDefaultEncoding(configuration); - fDefaultEncodingButton.setText(MessageFormat.format(LaunchConfigurationsMessages.CommonTab_2, new String[]{defaultEncoding})); - fDefaultEncodingButton.pack(); - if (encoding != null) { - fAltEncodingButton.setSelection(true); - fDefaultEncodingButton.setSelection(false); - fEncodingCombo.setText(encoding); - fEncodingCombo.setEnabled(true); - } else { - fDefaultEncodingButton.setSelection(true); - fAltEncodingButton.setSelection(false); - fEncodingCombo.setEnabled(false); - } - } - - /** - * Returns whether the given configuration should be launched in the background. - * - * @param configuration the configuration - * @return whether the configuration is configured to launch in the background - */ - public static boolean isLaunchInBackground(ILaunchConfiguration configuration) { - boolean launchInBackground= true; - try { - launchInBackground= configuration.getAttribute(IDebugUIConstants.ATTR_LAUNCH_IN_BACKGROUND, true); - } catch (CoreException ce) { - DebugUIPlugin.log(ce); - } - return launchInBackground; - } - - /** - * Updates the favorites selections from the local configuration - * @param config the local configuration - */ - private void updateFavoritesFromConfig(ILaunchConfiguration config) { - fFavoritesTable.setInput(config); - fFavoritesTable.setCheckedElements(new Object[]{}); - try { - List groups = config.getAttribute(IDebugUIConstants.ATTR_FAVORITE_GROUPS, new ArrayList()); - if (groups.isEmpty()) { - // check old attributes for backwards compatible - if (config.getAttribute(IDebugUIConstants.ATTR_DEBUG_FAVORITE, false)) { - groups.add(IDebugUIConstants.ID_DEBUG_LAUNCH_GROUP); - } - if (config.getAttribute(IDebugUIConstants.ATTR_RUN_FAVORITE, false)) { - groups.add(IDebugUIConstants.ID_RUN_LAUNCH_GROUP); - } - } - if (!groups.isEmpty()) { - List list = new ArrayList(); - Iterator iterator = groups.iterator(); - while (iterator.hasNext()) { - String id = (String)iterator.next(); - LaunchGroupExtension extension = getLaunchConfigurationManager().getLaunchGroup(id); - if (extension != null) { - list.add(extension); - } - } - fFavoritesTable.setCheckedElements(list.toArray()); - } - } catch (CoreException e) { - DebugUIPlugin.log(e); - } - } - - /** - * Updates the configuration form the local shared config working copy - * @param config the local shared config working copy - */ - private void updateConfigFromLocalShared(ILaunchConfigurationWorkingCopy config) { - if (isShared()) { - String containerPathString = fSharedLocationText.getText(); - IContainer container = getContainer(containerPathString); - if(container == null) { - //we need to force an attribute to allow the invalid container path to be revertable - config.setAttribute(BAD_CONTAINER, containerPathString); - } - else { - config.setContainer(container); - } - } else { - config.setContainer(null); - } - } - - /** - * Convenience accessor - */ - protected LaunchConfigurationManager getLaunchConfigurationManager() { - return DebugUIPlugin.getDefault().getLaunchConfigurationManager(); - } - - /** - * Update the favorite settings. - * - * NOTE: set to <code>null</code> instead of <code>false</code> for backwards compatibility - * when comparing if content is equal, since 'false' is default - * and will be missing for older configurations. - */ - private void updateConfigFromFavorites(ILaunchConfigurationWorkingCopy config) { - try { - Object[] checked = fFavoritesTable.getCheckedElements(); - boolean debug = config.getAttribute(IDebugUIConstants.ATTR_DEBUG_FAVORITE, false); - boolean run = config.getAttribute(IDebugUIConstants.ATTR_RUN_FAVORITE, false); - if (debug || run) { - // old attributes - List groups = new ArrayList(); - int num = 0; - if (debug) { - groups.add(getLaunchConfigurationManager().getLaunchGroup(IDebugUIConstants.ID_DEBUG_LAUNCH_GROUP)); - num++; - } - if (run) { - num++; - groups.add(getLaunchConfigurationManager().getLaunchGroup(IDebugUIConstants.ID_RUN_LAUNCH_GROUP)); - } - // see if there are any changes - if (num == checked.length) { - boolean different = false; - for (int i = 0; i < checked.length; i++) { - if (!groups.contains(checked[i])) { - different = true; - break; - } - } - if (!different) { - return; - } - } - } - config.setAttribute(IDebugUIConstants.ATTR_DEBUG_FAVORITE, (String)null); - config.setAttribute(IDebugUIConstants.ATTR_RUN_FAVORITE, (String)null); - List groups = null; - for (int i = 0; i < checked.length; i++) { - LaunchGroupExtension group = (LaunchGroupExtension)checked[i]; - if (groups == null) { - groups = new ArrayList(); - } - groups.add(group.getIdentifier()); - } - config.setAttribute(IDebugUIConstants.ATTR_FAVORITE_GROUPS, groups); - } catch (CoreException e) { - DebugUIPlugin.log(e); - } - } - - /** - * Convenience method for getting the workspace root. - */ - private IWorkspaceRoot getWorkspaceRoot() { - return ResourcesPlugin.getWorkspace().getRoot(); - } - - /* (non-Javadoc) - * @see org.eclipse.debug.ui.ILaunchConfigurationTab#isValid(org.eclipse.debug.core.ILaunchConfiguration) - */ - public boolean isValid(ILaunchConfiguration config) { - setMessage(null); - setErrorMessage(null); - - return validateLocalShared() && validateRedirectFile() && validateEncoding(); - } - - /** - * validates the encoding selection - * @return true if the validate encoding is allowable, false otherwise - */ - private boolean validateEncoding() { - if (fAltEncodingButton.getSelection()) { - if (fEncodingCombo.getSelectionIndex() == -1) { - setErrorMessage(LaunchConfigurationsMessages.CommonTab_No_Encoding_Selected); - return false; - } - } - return true; - } - - /** - * Validates if the redirect file is valid - * @return true if the filename is not zero, false otherwise - */ - private boolean validateRedirectFile() { - if(fFileOutput.getSelection()) { - int len = fFileText.getText().trim().length(); - if (len == 0) { - setErrorMessage(LaunchConfigurationsMessages.CommonTab_8); - return false; - } - } - return true; - } - - /** - * validates the local shared config file location - * @return true if the local shared file exists, false otherwise - */ - private boolean validateLocalShared() { - if (isShared()) { - String path = fSharedLocationText.getText().trim(); - IContainer container = getContainer(path); - if (container == null || container.equals(ResourcesPlugin.getWorkspace().getRoot())) { - setErrorMessage(LaunchConfigurationsMessages.CommonTab_Invalid_shared_configuration_location_14); - return false; - } else if (!container.getProject().isOpen()) { - setErrorMessage(LaunchConfigurationsMessages.CommonTab_Cannot_save_launch_configuration_in_a_closed_project__1); - return false; - } - } - return true; - } - - /* (non-Javadoc) - * @see org.eclipse.debug.ui.ILaunchConfigurationTab#setDefaults(org.eclipse.debug.core.ILaunchConfigurationWorkingCopy) - */ - public void setDefaults(ILaunchConfigurationWorkingCopy config) { - config.setContainer(null); - setAttribute(IDebugUIConstants.ATTR_LAUNCH_IN_BACKGROUND, config, true, true); - } - - /* (non-Javadoc) - * @see org.eclipse.debug.ui.ILaunchConfigurationTab#performApply(org.eclipse.debug.core.ILaunchConfigurationWorkingCopy) - */ - public void performApply(ILaunchConfigurationWorkingCopy configuration) { - updateConfigFromLocalShared(configuration); - updateConfigFromFavorites(configuration); - setAttribute(IDebugUIConstants.ATTR_LAUNCH_IN_BACKGROUND, configuration, fLaunchInBackgroundButton.getSelection(), true); - String encoding = null; - if(fAltEncodingButton.getSelection()) { - encoding = fEncodingCombo.getText(); - } - configuration.setAttribute(DebugPlugin.ATTR_CONSOLE_ENCODING, encoding); - boolean captureOutput = false; - if (fConsoleOutput.getSelection()) { - captureOutput = true; - configuration.setAttribute(IDebugUIConstants.ATTR_CAPTURE_IN_CONSOLE, (String)null); - } else { - configuration.setAttribute(IDebugUIConstants.ATTR_CAPTURE_IN_CONSOLE, false); - } - if (fFileOutput.getSelection()) { - captureOutput = true; - String file = fFileText.getText(); - configuration.setAttribute(IDebugUIConstants.ATTR_CAPTURE_IN_FILE, file); - if(fAppend.getSelection()) { - configuration.setAttribute(IDebugUIConstants.ATTR_APPEND_TO_FILE, true); - } else { - configuration.setAttribute(IDebugUIConstants.ATTR_APPEND_TO_FILE, (String)null); - } - } else { - configuration.setAttribute(IDebugUIConstants.ATTR_CAPTURE_IN_FILE, (String)null); - } - - if (!captureOutput) { - configuration.setAttribute(DebugPlugin.ATTR_CAPTURE_OUTPUT, false); - } else { - configuration.setAttribute(DebugPlugin.ATTR_CAPTURE_OUTPUT, (String)null); - } - } - - /* (non-Javadoc) - * @see org.eclipse.debug.ui.ILaunchConfigurationTab#getName() - */ - public String getName() { - return LaunchConfigurationsMessages.CommonTab__Common_15; - } - - /** - * @see org.eclipse.debug.ui.AbstractLaunchConfigurationTab#getId() - * - * @since 3.3 - */ - public String getId() { - return "org.eclipse.debug.ui.commonTab"; //$NON-NLS-1$ - } - - /* (non-Javadoc) - * @see org.eclipse.debug.ui.ILaunchConfigurationTab#canSave() - */ - public boolean canSave() { - return validateLocalShared(); - } - - /* (non-Javadoc) - * @see org.eclipse.debug.ui.ILaunchConfigurationTab#getImage() - */ - public Image getImage() { - return DebugUITools.getImage(IInternalDebugUIConstants.IMG_OBJS_COMMON_TAB); - } - - /* (non-Javadoc) - * @see org.eclipse.debug.ui.ILaunchConfigurationTab#activated(org.eclipse.debug.core.ILaunchConfigurationWorkingCopy) - */ - public void activated(ILaunchConfigurationWorkingCopy workingCopy) {} - - /* (non-Javadoc) - * @see org.eclipse.debug.ui.ILaunchConfigurationTab#deactivated(org.eclipse.debug.core.ILaunchConfigurationWorkingCopy) - */ - public void deactivated(ILaunchConfigurationWorkingCopy workingCopy) {} - - /** - * Content provider for the favorites table - */ - class FavoritesContentProvider implements IStructuredContentProvider { - - public Object[] getElements(Object inputElement) { - ILaunchGroup[] groups = DebugUITools.getLaunchGroups(); - List possibleGroups = new ArrayList(); - ILaunchConfiguration configuration = (ILaunchConfiguration)inputElement; - for (int i = 0; i < groups.length; i++) { - ILaunchGroup extension = groups[i]; - LaunchHistory history = getLaunchConfigurationManager().getLaunchHistory(extension.getIdentifier()); - if (history != null && history.accepts(configuration)) { - possibleGroups.add(extension); - } - } - return possibleGroups.toArray(); - } - - public void dispose() {} - - public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {} - - } - - /** - * Provides the labels for the favorites table - * - */ - class FavoritesLabelProvider implements ITableLabelProvider { - - private Map fImages = new HashMap(); - - public Image getColumnImage(Object element, int columnIndex) { - Image image = (Image)fImages.get(element); - if (image == null) { - ImageDescriptor descriptor = ((LaunchGroupExtension)element).getImageDescriptor(); - if (descriptor != null) { - image = descriptor.createImage(); - fImages.put(element, image); - } - } - return image; - } - - public String getColumnText(Object element, int columnIndex) { - String label = ((LaunchGroupExtension)element).getLabel(); - return DebugUIPlugin.removeAccelerators(label); - } - - public void addListener(ILabelProviderListener listener) {} - - public void dispose() { - Iterator images = fImages.values().iterator(); - while (images.hasNext()) { - Image image = (Image)images.next(); - image.dispose(); - } - } - - public boolean isLabelProperty(Object element, String property) {return false;} - - public void removeListener(ILabelProviderListener listener) {} - } - -} |