### Eclipse Workspace Patch 1.0 #P org.eclipse.ant.ui Index: Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/AntTabGroup.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/AntTabGroup.java,v retrieving revision 1.14 diff -u -r1.14 AntTabGroup.java --- Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/AntTabGroup.java 23 Feb 2005 17:20:11 -0000 1.14 +++ Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/AntTabGroup.java 26 Jul 2007 14:38:12 -0000 @@ -25,6 +25,7 @@ import org.eclipse.debug.ui.ILaunchConfigurationTab; import org.eclipse.debug.ui.RefreshTab; import org.eclipse.jdt.launching.IJavaLaunchConfigurationConstants; +import org.eclipse.ui.externaltools.internal.launchConfigurations.ExternalToolsBuildTab; import org.eclipse.ui.externaltools.internal.model.IExternalToolConstants; public class AntTabGroup extends AbstractLaunchConfigurationTabGroup { @@ -53,7 +54,7 @@ ILaunchConfigurationTab[] tabs = new ILaunchConfigurationTab[] { new AntMainTab(), new RefreshTab(), - new AntBuildTab(), + new ExternalToolsBuildTab(), new AntTargetsTab(), new AntClasspathTab(), new AntPropertiesTab(), Index: Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/AntLaunchConfigurationMessages.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/AntLaunchConfigurationMessages.java,v retrieving revision 1.6 diff -u -r1.6 AntLaunchConfigurationMessages.java --- Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/AntLaunchConfigurationMessages.java 25 May 2005 20:20:29 -0000 1.6 +++ Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/AntLaunchConfigurationMessages.java 26 Jul 2007 14:38:08 -0000 @@ -19,16 +19,6 @@ public static String AddVariableStringAction_3; public static String AddVariableStringAction_4; - public static String AntBuildTab_1; - public static String AntBuildTab_2; - public static String AntBuildTab_3; - public static String AntBuildTab_4; - public static String AntBuildTab_5; - public static String AntBuildTab_6; - public static String AntBuildTab_7; - public static String AntBuildTab_8; - public static String AntBuildTab_9; - public static String AntLaunchDelegate_Launching__0__1; public static String AntLaunchDelegate_Running__0__2; public static String AntLaunchDelegate_Build_In_Progress; Index: Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/AntLaunchConfigurationMessages.properties =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/AntLaunchConfigurationMessages.properties,v retrieving revision 1.42 diff -u -r1.42 AntLaunchConfigurationMessages.properties --- Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/AntLaunchConfigurationMessages.properties 23 Mar 2006 19:11:48 -0000 1.42 +++ Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/AntLaunchConfigurationMessages.properties 26 Jul 2007 14:38:08 -0000 @@ -14,16 +14,6 @@ AddVariableStringAction_3=&Variables... AddVariableStringAction_4=Add Variable Classpath Entry -AntBuildTab_1=&Build before launch -AntBuildTab_2=The &entire workspace -AntBuildTab_3=The &project containing the selected resource -AntBuildTab_4=&Specific projects -AntBuildTab_5=P&rojects... -AntBuildTab_6=Include referenced pro&jects -AntBuildTab_7=Select &Projects: -AntBuildTab_8=Build -AntBuildTab_9=No projects specified - AntLaunchDelegate_Launching__0__1=Launching {0} AntLaunchDelegate_Running__0__2=Running {0} AntLaunchDelegate_Build_In_Progress=Ant build {0} already in progress. Concurrent Ant builds are possible if you specify to build in a separate JRE. Index: Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/AntBuildTab.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/AntBuildTab.java,v retrieving revision 1.11 diff -u -r1.11 AntBuildTab.java --- Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/AntBuildTab.java 11 Aug 2005 16:30:00 -0000 1.11 +++ Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/AntBuildTab.java 26 Jul 2007 14:38:08 -0000 @@ -11,38 +11,8 @@ package org.eclipse.ant.internal.ui.launchConfigurations; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import org.eclipse.ant.internal.ui.AntUIImages; import org.eclipse.ant.internal.ui.AntUIPlugin; -import org.eclipse.ant.internal.ui.IAntUIConstants; -import org.eclipse.ant.internal.ui.IAntUIHelpContextIds; -import org.eclipse.core.resources.IProject; -import org.eclipse.core.resources.IResource; -import org.eclipse.core.resources.IWorkspace; -import org.eclipse.core.resources.IWorkspaceRoot; -import org.eclipse.core.resources.ResourcesPlugin; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.debug.core.ILaunchConfiguration; -import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; -import org.eclipse.debug.ui.AbstractLaunchConfigurationTab; -import org.eclipse.debug.ui.DebugUITools; -import org.eclipse.jface.viewers.IStructuredContentProvider; -import org.eclipse.jface.viewers.Viewer; -import org.eclipse.jface.window.Window; -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.SelectionAdapter; -import org.eclipse.swt.events.SelectionEvent; -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.Composite; -import org.eclipse.swt.widgets.Group; -import org.eclipse.ui.PlatformUI; -import org.eclipse.ui.dialogs.ListSelectionDialog; -import org.eclipse.ui.model.WorkbenchLabelProvider; +import org.eclipse.ui.externaltools.internal.launchConfigurations.ExternalToolsBuildTab; /** * A launch configuration tab which allows the user to specify @@ -53,7 +23,7 @@ *

* @since 3.0 */ -public class AntBuildTab extends AbstractLaunchConfigurationTab { +public class AntBuildTab extends ExternalToolsBuildTab { /** * String attribute identifying the build scope for this launch configuration. @@ -68,360 +38,17 @@ */ public static final String ATTR_INCLUDE_REFERENCED_PROJECTS = AntUIPlugin.getUniqueIdentifier() + ".ATTR_INCLUDE_REFERENCED_PROJECTS"; //$NON-NLS-1$ - // Check Buttons - private Button fBuildButton; - - // Group box - private Group fGroup; - - // Radio Buttons - private Button fProjectButton; - private Button fSpecificProjectsButton; - private Button fWorkspaceButton; - - // Push Button - private Button fSelectButton; - - // whether to include referenced projects - private Button fReferencedProjects; - - // projects to build (empty if none) - private List fProjects = new ArrayList(); - - class ProjectsContentProvider implements IStructuredContentProvider { - - /* (non-Javadoc) - * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object) - */ - public Object[] getElements(Object inputElement) { - return ((IWorkspace)inputElement).getRoot().getProjects(); - } - - /* (non-Javadoc) - * @see org.eclipse.jface.viewers.IContentProvider#dispose() - */ - public void dispose() { - } - - /* (non-Javadoc) - * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object) - */ - public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { - } - - } - /** - * @see org.eclipse.debug.ui.ILaunchConfigurationTab#createControl(org.eclipse.swt.widgets.Composite) - */ - public void createControl(Composite parent) { - Composite mainComposite = new Composite(parent, SWT.NONE); - setControl(mainComposite); - PlatformUI.getWorkbench().getHelpSystem().setHelp(getControl(), IAntUIHelpContextIds.ANT_BUILD_TAB); - - GridLayout layout = new GridLayout(); - GridData gd = new GridData(GridData.FILL_HORIZONTAL); - mainComposite.setLayout(layout); - mainComposite.setLayoutData(gd); - mainComposite.setFont(parent.getFont()); - - fBuildButton = createCheckButton(mainComposite, AntLaunchConfigurationMessages.AntBuildTab_1); - fBuildButton.addSelectionListener(new SelectionAdapter() { - public void widgetSelected(SelectionEvent e) { - updateEnabledState(); - updateLaunchConfigurationDialog(); - } - }); - - fGroup = new Group(mainComposite, SWT.NONE); - fGroup.setFont(mainComposite.getFont()); - layout = new GridLayout(); - layout.numColumns = 2; - layout.makeColumnsEqualWidth = false; - fGroup.setLayout(layout); - gd = new GridData(GridData.FILL_HORIZONTAL); - gd.horizontalSpan = 2; - fGroup.setLayoutData(gd); - - SelectionAdapter adapter = new SelectionAdapter() { - public void widgetSelected(SelectionEvent e) { - if (((Button)e.getSource()).getSelection()) { - updateEnabledState(); - updateLaunchConfigurationDialog(); - } - } - }; - - fWorkspaceButton = createRadioButton(fGroup, AntLaunchConfigurationMessages.AntBuildTab_2); - gd = new GridData(GridData.FILL_HORIZONTAL); - gd.horizontalSpan = 2; - fWorkspaceButton.setLayoutData(gd); - fWorkspaceButton.addSelectionListener(adapter); - - fProjectButton = createRadioButton(fGroup, AntLaunchConfigurationMessages.AntBuildTab_3); - gd = new GridData(GridData.FILL_HORIZONTAL); - gd.horizontalSpan = 2; - fProjectButton.setLayoutData(gd); - fProjectButton.addSelectionListener(adapter); - - fSpecificProjectsButton = createRadioButton(fGroup, AntLaunchConfigurationMessages.AntBuildTab_4); - gd = new GridData(GridData.FILL_HORIZONTAL); - gd.horizontalSpan = 1; - fSpecificProjectsButton.setLayoutData(gd); - fSpecificProjectsButton.addSelectionListener(adapter); - - fSelectButton = createPushButton(fGroup, AntLaunchConfigurationMessages.AntBuildTab_5, null); - gd = (GridData)fSelectButton.getLayoutData(); - gd.horizontalAlignment = GridData.HORIZONTAL_ALIGN_END; - fSelectButton.addSelectionListener(new SelectionAdapter() { - public void widgetSelected(SelectionEvent e) { - selectResources(); - } - }); - - createVerticalSpacer(mainComposite, 1); - fReferencedProjects = createCheckButton(mainComposite, AntLaunchConfigurationMessages.AntBuildTab_6); - } - - /** - * Prompts the user to select the projects to build. - */ - private void selectResources() { - ListSelectionDialog dialog = new ListSelectionDialog(getShell(), ResourcesPlugin.getWorkspace(), new ProjectsContentProvider(), new WorkbenchLabelProvider(), AntLaunchConfigurationMessages.AntBuildTab_7); - dialog.setInitialElementSelections(fProjects); - if (dialog.open() == Window.CANCEL) { - return; - } - Object[] res = dialog.getResult(); - fProjects = new ArrayList(res.length); - for (int i = 0; i < res.length; i++) { - fProjects.add(res[i]); - } - updateLaunchConfigurationDialog(); - } - - /** - * @see org.eclipse.debug.ui.ILaunchConfigurationTab#setDefaults(org.eclipse.debug.core.ILaunchConfigurationWorkingCopy) - */ - public void setDefaults(ILaunchConfigurationWorkingCopy configuration) { - } - - /** - * @see org.eclipse.debug.ui.ILaunchConfigurationTab#initializeFrom(org.eclipse.debug.core.ILaunchConfiguration) - */ - public void initializeFrom(ILaunchConfiguration configuration) { - updateScope(configuration); - updateReferencedProjects(configuration); - updateEnabledState(); - } - - private void updateReferencedProjects(ILaunchConfiguration configuration) { - boolean ref = false; - try { - ref = configuration.getAttribute(ATTR_INCLUDE_REFERENCED_PROJECTS, true); - } catch (CoreException e) { - AntUIPlugin.log(AntUIPlugin.newErrorStatus("Exception reading launch configuration", e)); //$NON-NLS-1$ - } - fReferencedProjects.setSelection(ref); - } - - /** - * Updates the tab to display the build scope specified by the launch config - */ - private void updateScope(ILaunchConfiguration configuration) { - String scope = null; - try { - scope= configuration.getAttribute(ATTR_BUILD_SCOPE, (String)null); - } catch (CoreException ce) { - AntUIPlugin.log(AntUIPlugin.newErrorStatus("Exception reading launch configuration", ce)); //$NON-NLS-1$ - } - fBuildButton.setSelection(scope != null); - fWorkspaceButton.setSelection(false); - fProjectButton.setSelection(false); - fSpecificProjectsButton.setSelection(false); - fProjects.clear(); - if (scope == null) { - // select the workspace by default - fBuildButton.setSelection(true); - fWorkspaceButton.setSelection(true); - } else { - if (scope.equals("${none}")) { //$NON-NLS-1$ - fBuildButton.setSelection(false); - } else if (scope.equals("${project}")) { //$NON-NLS-1$ - fProjectButton.setSelection(true); - } else if (scope.startsWith("${projects:")) { //$NON-NLS-1$ - fSpecificProjectsButton.setSelection(true); - IProject[] projects = getBuildProjects(scope); - fProjects = new ArrayList(projects.length); - for (int i = 0; i < projects.length; i++) { - fProjects.add(projects[i]); - } - } - } - } - /** - * @see org.eclipse.debug.ui.ILaunchConfigurationTab#performApply(org.eclipse.debug.core.ILaunchConfigurationWorkingCopy) - */ - public void performApply(ILaunchConfigurationWorkingCopy configuration) { - String scope = generateScopeMemento(); - configuration.setAttribute(ATTR_BUILD_SCOPE, scope); - if (fReferencedProjects.getSelection()) { - // default is true - configuration.setAttribute(ATTR_INCLUDE_REFERENCED_PROJECTS, (String)null); - } else { - configuration.setAttribute(ATTR_INCLUDE_REFERENCED_PROJECTS, false); - } - } - - /** - * Generates a memento for the build scope. - */ - private String generateScopeMemento() { - if (fBuildButton.getSelection()) { - if (fWorkspaceButton.getSelection()) { - return null; - } - if (fProjectButton.getSelection()) { - return "${project}"; //$NON-NLS-1$ - } - if (fSpecificProjectsButton.getSelection()) { - return getBuildScopeAttribute(fProjects); - } - return null; - - } - return "${none}"; //$NON-NLS-1$ - } - - /** - * @see org.eclipse.debug.ui.ILaunchConfigurationTab#getName() - */ - public String getName() { - return AntLaunchConfigurationMessages.AntBuildTab_8; - } - - /** - * Updates the enablement state of the fields. - */ - private void updateEnabledState() { - boolean enabled= fBuildButton.getSelection(); - fGroup.setEnabled(enabled); - fWorkspaceButton.setEnabled(enabled); - fProjectButton.setEnabled(enabled); - fSpecificProjectsButton.setEnabled(enabled); - fSelectButton.setEnabled(enabled && fSpecificProjectsButton.getSelection()); - if (!enabled) { - super.setErrorMessage(null); - } - if (enabled) { - if (!fWorkspaceButton.getSelection() && !fProjectButton.getSelection() && - !fSpecificProjectsButton.getSelection()) { - fWorkspaceButton.setSelection(true); - } - } - fReferencedProjects.setEnabled(fBuildButton.getSelection() && (fProjectButton.getSelection() || fSpecificProjectsButton.getSelection())); - } - - /** - * @see org.eclipse.debug.ui.ILaunchConfigurationTab#getImage() - */ - public Image getImage() { - return AntUIImages.getImage(IAntUIConstants.IMG_ANT_BUILD_TAB); - } - - public boolean isValid(ILaunchConfiguration launchConfig) { - setErrorMessage(null); - setMessage(null); - if (fBuildButton.getSelection() && fSpecificProjectsButton.getSelection() && fProjects.isEmpty()) { - setErrorMessage(AntLaunchConfigurationMessages.AntBuildTab_9); - return false; - } - return true; - } - - /** - * Returns a collection of projects referenced by a build scope attribute. - * - * @param scope build scope attribute (ATTR_BUILD_SCOPE) - * @return collection of porjects referred to by the scope attribute - */ - public static IProject[] getBuildProjects(String scope) { - if (scope.startsWith("${projects:")) { //$NON-NLS-1$ - String pathString = scope.substring(11, scope.length() - 1); - if (pathString.length() > 1) { - String[] names = pathString.split(","); //$NON-NLS-1$ - IProject[] projects = new IProject[names.length]; - IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot(); - for (int i = 0; i < names.length; i++) { - projects[i] = root.getProject(names[i]); - } - return projects; - } - } else if (scope.equals("${project}")) { //$NON-NLS-1$ - IResource resource = DebugUITools.getSelectedResource(); - if (resource != null) { - return new IProject[]{resource.getProject()}; - } - } - return new IProject[0]; - } - - /** - * Returns the build scope attribute specified by the given launch configuration - * or null if none. - * - * @param configuration launch configuration - * @return build scope attribute (ATTR_BUILD_SCOPE) - * @throws CoreException if unable to access the associated attribute - */ - public static String getBuildScope(ILaunchConfiguration configuration) throws CoreException { - return configuration.getAttribute(ATTR_BUILD_SCOPE, (String) null); - } - - /** - * Whether referenced projects should be considered when building. Only valid - * when a set of projects is to be built. - * - * @param configuration - * @return whether referenced projects should be considerd when building - * @throws CoreException if unable to access the associated attribute - */ - public static boolean isIncludeReferencedProjects(ILaunchConfiguration configuration) throws CoreException { - return configuration.getAttribute(ATTR_INCLUDE_REFERENCED_PROJECTS, true); - } - - /** - * Creates and returns a memento for the given project set, to be used as a - * build scope attribute. - * - * @param projects list of projects - * @return an equivalent refresh attribute - */ - public static String getBuildScopeAttribute(List projects) { - StringBuffer buf = new StringBuffer(); - buf.append("${projects:"); //$NON-NLS-1$ - Iterator iterator = projects.iterator(); - while (iterator.hasNext()) { - IProject project = (IProject) iterator.next(); - buf.append(project.getName()); - if (iterator.hasNext()) { - buf.append(","); //$NON-NLS-1$ - } - } - buf.append("}"); //$NON-NLS-1$ - return buf.toString(); - } - /* (non-Javadoc) - * @see org.eclipse.debug.ui.ILaunchConfigurationTab#activated(org.eclipse.debug.core.ILaunchConfigurationWorkingCopy) + * @see org.eclipse.ui.externaltools.internal.launchConfigurations.ExternalToolsBuildTab#getAttrIncludeReferencedProjectsId() */ - public void activated(ILaunchConfigurationWorkingCopy workingCopy) { - // do nothing on activation + protected String getAttrIncludeReferencedProjectsId() { + return ATTR_INCLUDE_REFERENCED_PROJECTS ; } - + /* (non-Javadoc) - * @see org.eclipse.debug.ui.ILaunchConfigurationTab#deactivated(org.eclipse.debug.core.ILaunchConfigurationWorkingCopy) + * @see org.eclipse.ui.externaltools.internal.launchConfigurations.ExternalToolsBuildTab#getAttrBuildScopeId() */ - public void deactivated(ILaunchConfigurationWorkingCopy workingCopy) { - // do nothing on deactivation + protected String getAttrBuildScopeId() { + return ATTR_BUILD_SCOPE ; } } Index: Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/AntLaunchDelegate.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/AntLaunchDelegate.java,v retrieving revision 1.79 diff -u -r1.79 AntLaunchDelegate.java --- Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/AntLaunchDelegate.java 4 May 2007 12:28:55 -0000 1.79 +++ Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/AntLaunchDelegate.java 26 Jul 2007 14:38:11 -0000 @@ -66,6 +66,7 @@ import org.eclipse.jface.dialogs.MessageDialogWithToggle; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.osgi.service.resolver.BundleDescription; +import org.eclipse.ui.externaltools.internal.launchConfigurations.ExternalToolsBuildTab; import org.eclipse.ui.externaltools.internal.launchConfigurations.ExternalToolsUtil; import org.eclipse.ui.externaltools.internal.model.IExternalToolConstants; import org.eclipse.ui.externaltools.internal.program.launchConfigurations.BackgroundResourceRefresher; @@ -668,17 +669,10 @@ * @see org.eclipse.debug.core.model.LaunchConfigurationDelegate#getBuildOrder(org.eclipse.debug.core.ILaunchConfiguration, java.lang.String) */ protected IProject[] getBuildOrder(ILaunchConfiguration configuration, String mode) throws CoreException { - String scope = null; - try { - scope = configuration.getAttribute(AntBuildTab.ATTR_BUILD_SCOPE, (String)null); - } catch (CoreException e) { - return null; - } - if (scope == null) { - return null; - } - IProject[] projects = AntBuildTab.getBuildProjects(scope); - boolean isRef = AntBuildTab.isIncludeReferencedProjects(configuration); + IProject[] projects = ExternalToolsBuildTab.getBuildProjects(configuration, AntBuildTab.ATTR_BUILD_SCOPE); + if (projects == null) + return null ; + boolean isRef = ExternalToolsBuildTab.isIncludeReferencedProjects(configuration, AntBuildTab.ATTR_INCLUDE_REFERENCED_PROJECTS); if (isRef) { return computeReferencedBuildOrder(projects); } #P org.eclipse.ui.externaltools Index: External Tools Base/org/eclipse/ui/externaltools/internal/launchConfigurations/ExternalToolsUtil.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.ui.externaltools/External Tools Base/org/eclipse/ui/externaltools/internal/launchConfigurations/ExternalToolsUtil.java,v retrieving revision 1.46 diff -u -r1.46 ExternalToolsUtil.java --- External Tools Base/org/eclipse/ui/externaltools/internal/launchConfigurations/ExternalToolsUtil.java 18 Apr 2006 16:04:56 -0000 1.46 +++ External Tools Base/org/eclipse/ui/externaltools/internal/launchConfigurations/ExternalToolsUtil.java 26 Jul 2007 14:38:19 -0000 @@ -172,7 +172,7 @@ * @throws CoreException if an exception occurs while retrieving the resources */ public static IResource[] getResourcesForBuildScope(ILaunchConfiguration configuration) throws CoreException { - String scope = configuration.getAttribute(IExternalToolConstants.ATTR_BUILD_SCOPE, (String) null); + String scope = configuration.getAttribute(IExternalToolConstants.ATTR_BUILDER_SCOPE, (String) null); if (scope == null) { return null; } Index: External Tools Base/org/eclipse/ui/externaltools/internal/launchConfigurations/ExternalToolsBuilderTab.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.ui.externaltools/External Tools Base/org/eclipse/ui/externaltools/internal/launchConfigurations/ExternalToolsBuilderTab.java,v retrieving revision 1.46 diff -u -r1.46 ExternalToolsBuilderTab.java --- External Tools Base/org/eclipse/ui/externaltools/internal/launchConfigurations/ExternalToolsBuilderTab.java 16 Apr 2007 23:42:11 -0000 1.46 +++ External Tools Base/org/eclipse/ui/externaltools/internal/launchConfigurations/ExternalToolsBuilderTab.java 26 Jul 2007 14:38:16 -0000 @@ -316,7 +316,7 @@ String buildScope= null; try { buildKindString= configuration.getAttribute(IExternalToolConstants.ATTR_RUN_BUILD_KINDS, ""); //$NON-NLS-1$ - buildScope= configuration.getAttribute(IExternalToolConstants.ATTR_BUILD_SCOPE, (String)null); + buildScope= configuration.getAttribute(IExternalToolConstants.ATTR_BUILDER_SCOPE, (String)null); } catch (CoreException e) { } @@ -426,9 +426,9 @@ } if (workingSetButton.getSelection()) { String scope = RefreshTab.getRefreshAttribute(workingSet); - configuration.setAttribute(IExternalToolConstants.ATTR_BUILD_SCOPE, scope); + configuration.setAttribute(IExternalToolConstants.ATTR_BUILDER_SCOPE, scope); } else { - configuration.setAttribute(IExternalToolConstants.ATTR_BUILD_SCOPE, (String)null); + configuration.setAttribute(IExternalToolConstants.ATTR_BUILDER_SCOPE, (String)null); } configuration.setAttribute(IDebugUIConstants.ATTR_LAUNCH_IN_BACKGROUND, fLaunchInBackgroundButton.getSelection()); Index: External Tools Base/org/eclipse/ui/externaltools/internal/launchConfigurations/ExternalToolsLaunchConfigurationMessages.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.ui.externaltools/External Tools Base/org/eclipse/ui/externaltools/internal/launchConfigurations/ExternalToolsLaunchConfigurationMessages.java,v retrieving revision 1.7 diff -u -r1.7 ExternalToolsLaunchConfigurationMessages.java --- External Tools Base/org/eclipse/ui/externaltools/internal/launchConfigurations/ExternalToolsLaunchConfigurationMessages.java 18 Jan 2006 22:04:04 -0000 1.7 +++ External Tools Base/org/eclipse/ui/externaltools/internal/launchConfigurations/ExternalToolsLaunchConfigurationMessages.java 26 Jul 2007 14:38:16 -0000 @@ -37,6 +37,17 @@ public static String ExternalToolsMainTab_31; public static String ExternalToolsMainTab_32; + public static String ExternalToolsBuildTab_1; + public static String ExternalToolsBuildTab_2; + public static String ExternalToolsBuildTab_3; + public static String ExternalToolsBuildTab_4; + public static String ExternalToolsBuildTab_5; + public static String ExternalToolsBuildTab_6; + public static String ExternalToolsBuildTab_7; + public static String ExternalToolsBuildTab_8; + public static String ExternalToolsBuildTab_9; + + public static String ExternalToolsUtil_Location_not_specified_by__0__1; public static String ExternalToolsUtil_invalidLocation__0_; public static String ExternalToolsUtil_invalidDirectory__0_; Index: External Tools Base/org/eclipse/ui/externaltools/internal/launchConfigurations/ExternalToolsLaunchConfigurationMessages.properties =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.ui.externaltools/External Tools Base/org/eclipse/ui/externaltools/internal/launchConfigurations/ExternalToolsLaunchConfigurationMessages.properties,v retrieving revision 1.36 diff -u -r1.36 ExternalToolsLaunchConfigurationMessages.properties --- External Tools Base/org/eclipse/ui/externaltools/internal/launchConfigurations/ExternalToolsLaunchConfigurationMessages.properties 18 Jan 2006 22:04:04 -0000 1.36 +++ External Tools Base/org/eclipse/ui/externaltools/internal/launchConfigurations/ExternalToolsLaunchConfigurationMessages.properties 26 Jul 2007 14:38:16 -0000 @@ -32,6 +32,16 @@ ExternalToolsMainTab_31=Var&iables... ExternalToolsMainTab_32=Varia&bles... +ExternalToolsBuildTab_1=&Build before launch +ExternalToolsBuildTab_2=The &entire workspace +ExternalToolsBuildTab_3=The &project containing the selected resource +ExternalToolsBuildTab_4=&Specific projects +ExternalToolsBuildTab_5=P&rojects... +ExternalToolsBuildTab_6=Include referenced pro&jects +ExternalToolsBuildTab_7=Select &Projects: +ExternalToolsBuildTab_8=Build +ExternalToolsBuildTab_9=No projects specified + ExternalToolsUtil_Location_not_specified_by__0__1=Location not specified by {0} ExternalToolsUtil_invalidLocation__0_ = The file does not exist for the external tool named {0}. ExternalToolsUtil_invalidDirectory__0_ = The working directory {0} does not exist for the external tool named {1}. Index: Program Tools Support/org/eclipse/ui/externaltools/internal/program/launchConfigurations/ProgramTabGroup.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.ui.externaltools/Program Tools Support/org/eclipse/ui/externaltools/internal/program/launchConfigurations/ProgramTabGroup.java,v retrieving revision 1.14 diff -u -r1.14 ProgramTabGroup.java --- Program Tools Support/org/eclipse/ui/externaltools/internal/program/launchConfigurations/ProgramTabGroup.java 23 Feb 2005 16:02:16 -0000 1.14 +++ Program Tools Support/org/eclipse/ui/externaltools/internal/program/launchConfigurations/ProgramTabGroup.java 26 Jul 2007 14:38:22 -0000 @@ -16,6 +16,7 @@ import org.eclipse.debug.ui.ILaunchConfigurationDialog; import org.eclipse.debug.ui.ILaunchConfigurationTab; import org.eclipse.debug.ui.RefreshTab; +import org.eclipse.ui.externaltools.internal.launchConfigurations.ExternalToolsBuildTab; public class ProgramTabGroup extends AbstractLaunchConfigurationTabGroup { @@ -26,6 +27,7 @@ ILaunchConfigurationTab[] tabs = new ILaunchConfigurationTab[] { new ProgramMainTab(), new RefreshTab(), + new ExternalToolsBuildTab(), new EnvironmentTab(), new CommonTab() }; Index: Program Tools Support/org/eclipse/ui/externaltools/internal/program/launchConfigurations/ProgramLaunchDelegate.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.ui.externaltools/Program Tools Support/org/eclipse/ui/externaltools/internal/program/launchConfigurations/ProgramLaunchDelegate.java,v retrieving revision 1.37 diff -u -r1.37 ProgramLaunchDelegate.java --- Program Tools Support/org/eclipse/ui/externaltools/internal/program/launchConfigurations/ProgramLaunchDelegate.java 21 Jul 2006 22:28:42 -0000 1.37 +++ Program Tools Support/org/eclipse/ui/externaltools/internal/program/launchConfigurations/ProgramLaunchDelegate.java 26 Jul 2007 14:38:20 -0000 @@ -16,6 +16,7 @@ import java.util.HashMap; import java.util.Map; +import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IProgressMonitor; @@ -35,6 +36,7 @@ import org.eclipse.ui.IWindowListener; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.PlatformUI; +import org.eclipse.ui.externaltools.internal.launchConfigurations.ExternalToolsBuildTab; import org.eclipse.ui.externaltools.internal.launchConfigurations.ExternalToolsUtil; import org.eclipse.ui.externaltools.internal.model.IExternalToolConstants; @@ -165,11 +167,11 @@ if (p != null) { monitor.beginTask(NLS.bind(ExternalToolsProgramMessages.ProgramLaunchDelegate_3, new String[] {configuration.getName()}), IProgressMonitor.UNKNOWN); process = DebugPlugin.newProcess(launch, p, location.toOSString(), processAttributes); - if (process == null) { + } + if (p == null || process == null) { + if (p != null) p.destroy(); - throw new CoreException(new Status(IStatus.ERROR, IExternalToolConstants.PLUGIN_ID, IExternalToolConstants.ERR_INTERNAL_ERROR, ExternalToolsProgramMessages.ProgramLaunchDelegate_4, null)); - } - + throw new CoreException(new Status(IStatus.ERROR, IExternalToolConstants.PLUGIN_ID, IExternalToolConstants.ERR_INTERNAL_ERROR, ExternalToolsProgramMessages.ProgramLaunchDelegate_4, null)); } process.setAttribute(IProcess.ATTR_CMDLINE, generateCommandLine(cmdLine)); @@ -226,4 +228,17 @@ return buf.toString(); } + /* (non-Javadoc) + * @see org.eclipse.debug.core.model.LaunchConfigurationDelegate#getBuildOrder(org.eclipse.debug.core.ILaunchConfiguration, java.lang.String) + */ + protected IProject[] getBuildOrder(ILaunchConfiguration configuration, String mode) throws CoreException { + IProject[] projects = ExternalToolsBuildTab.getBuildProjects(configuration, null); + if (projects == null) + return null ; + boolean isRef = ExternalToolsBuildTab.isIncludeReferencedProjects(configuration, null); + if (isRef) { + return computeReferencedBuildOrder(projects); + } + return computeBuildOrder(projects); + } } Index: External Tools Base/org/eclipse/ui/externaltools/internal/model/ExternalToolsImages.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.ui.externaltools/External Tools Base/org/eclipse/ui/externaltools/internal/model/ExternalToolsImages.java,v retrieving revision 1.35 diff -u -r1.35 ExternalToolsImages.java --- External Tools Base/org/eclipse/ui/externaltools/internal/model/ExternalToolsImages.java 12 Apr 2005 16:37:23 -0000 1.35 +++ External Tools Base/org/eclipse/ui/externaltools/internal/model/ExternalToolsImages.java 26 Jul 2007 14:38:20 -0000 @@ -51,6 +51,7 @@ private static void declareImages() { // Objects declareRegistryImage(IExternalToolConstants.IMG_TAB_MAIN, OBJECT + "main_tab.gif"); //$NON-NLS-1$ + declareRegistryImage(IExternalToolConstants.IMG_TAB_BUILD, OBJECT + "build_tab.gif"); //$NON-NLS-1$ } /** Index: External Tools Base/org/eclipse/ui/externaltools/internal/model/IExternalToolsHelpContextIds.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.ui.externaltools/External Tools Base/org/eclipse/ui/externaltools/internal/model/IExternalToolsHelpContextIds.java,v retrieving revision 1.19 diff -u -r1.19 IExternalToolsHelpContextIds.java --- External Tools Base/org/eclipse/ui/externaltools/internal/model/IExternalToolsHelpContextIds.java 23 Feb 2005 16:02:16 -0000 1.19 +++ External Tools Base/org/eclipse/ui/externaltools/internal/model/IExternalToolsHelpContextIds.java 26 Jul 2007 14:38:20 -0000 @@ -34,4 +34,5 @@ //Launch configuration dialog tabs public static final String EXTERNAL_TOOLS_LAUNCH_CONFIGURATION_DIALOG_BUILDER_TAB = PREFIX + "builders_tab_context"; //$NON-NLS-1$ public static final String EXTERNAL_TOOLS_LAUNCH_CONFIGURATION_DIALOG_PROGRAM_MAIN_TAB = PREFIX + "program_main_tab_context"; //$NON-NLS-1$ + public static final String EXTERNAL_TOOLS_LAUNCH_CONFIGURATION_DIALOG_BUILD_TAB = PREFIX + "build_tab_context"; //$NON-NLS-1$ } Index: External Tools Base/org/eclipse/ui/externaltools/internal/model/IExternalToolConstants.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.ui.externaltools/External Tools Base/org/eclipse/ui/externaltools/internal/model/IExternalToolConstants.java,v retrieving revision 1.23 diff -u -r1.23 IExternalToolConstants.java --- External Tools Base/org/eclipse/ui/externaltools/internal/model/IExternalToolConstants.java 23 Feb 2005 16:00:19 -0000 1.23 +++ External Tools Base/org/eclipse/ui/externaltools/internal/model/IExternalToolConstants.java 26 Jul 2007 14:38:20 -0000 @@ -93,7 +93,12 @@ * Main tab image. */ public static final String IMG_TAB_MAIN = PLUGIN_ID + ".IMG_TAB_MAIN"; //$NON-NLS-1$ - + + /** + * Build tab image + */ + public static final String IMG_TAB_BUILD = PLUGIN_ID + ".IMG_TAB_BUILD"; //$NON-NLS-1$ + // ------- Launch configuration types -------- /** * Program launch configuration type identifier. @@ -158,9 +163,8 @@ * external tool to run. Default value is null * indicating that the builder will be triggered for all changes. */ - public static final String ATTR_BUILD_SCOPE = PLUGIN_ID + ".ATTR_BUILD_SCOPE"; //$NON-NLS-1$ + public static final String ATTR_BUILDER_SCOPE = PLUGIN_ID + ".ATTR_BUILDER_SCOPE"; //$NON-NLS-1$ - /** * String attribute containing an array of build kinds for which an * external tool builder should be run. @@ -210,4 +214,17 @@ * @since 3.1 */ public static final String ATTR_TRIGGERS_CONFIGURED = PLUGIN_ID + ".ATTR_TRIGGERS_CONFIGURED"; //$NON-NLS-1$ + + /** + * String attribute identifying the build scope for this launch configuration. + * null indicates the default workspace build. + */ + public static final String ATTR_BUILD_SCOPE = PLUGIN_ID + ".ATTR_BUILD_SCOPE"; //$NON-NLS-1$ + + /** + * Attribute identifier specifying whether referenced projects should be + * considered when computing the projects to build. Default value is + * true. + */ + public static final String ATTR_INCLUDE_REFERENCED_PROJECTS = PLUGIN_ID + ".ATTR_INCLUDE_REFERENCED_PROJECTS"; //$NON-NLS-1$ } Index: icons/full/obj16/build_tab.gif =================================================================== RCS file: icons/full/obj16/build_tab.gif diff -N icons/full/obj16/build_tab.gif --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ icons/full/obj16/build_tab.gif 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,5 @@ +GIF89ag}jmtsz…2]đljȏԲhԲiڽ|ղi!@,@8@8 =88& + +.&>?9 ';><67!**:4 + +4532)21%%؃0--/$$+,,@"((}aA|  ,\p!A ; Index: External Tools Base/org/eclipse/ui/externaltools/internal/launchConfigurations/ExternalToolsBuildTab.java =================================================================== RCS file: External Tools Base/org/eclipse/ui/externaltools/internal/launchConfigurations/ExternalToolsBuildTab.java diff -N External Tools Base/org/eclipse/ui/externaltools/internal/launchConfigurations/ExternalToolsBuildTab.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ External Tools Base/org/eclipse/ui/externaltools/internal/launchConfigurations/ExternalToolsBuildTab.java 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,433 @@ +/******************************************************************************* + * Copyright (c) 2000, 2005 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.ui.externaltools.internal.launchConfigurations; + + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +import org.eclipse.core.resources.IProject; +import org.eclipse.core.resources.IResource; +import org.eclipse.core.resources.IWorkspace; +import org.eclipse.core.resources.IWorkspaceRoot; +import org.eclipse.core.resources.ResourcesPlugin; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.debug.core.ILaunchConfiguration; +import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; +import org.eclipse.debug.ui.AbstractLaunchConfigurationTab; +import org.eclipse.debug.ui.DebugUITools; +import org.eclipse.jface.viewers.IStructuredContentProvider; +import org.eclipse.jface.viewers.Viewer; +import org.eclipse.jface.window.Window; +import org.eclipse.swt.SWT; +import org.eclipse.swt.events.SelectionAdapter; +import org.eclipse.swt.events.SelectionEvent; +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.Composite; +import org.eclipse.swt.widgets.Group; +import org.eclipse.ui.PlatformUI; +import org.eclipse.ui.dialogs.ListSelectionDialog; +import org.eclipse.ui.externaltools.internal.model.ExternalToolsImages; +import org.eclipse.ui.externaltools.internal.model.ExternalToolsPlugin; +import org.eclipse.ui.externaltools.internal.model.IExternalToolConstants; +import org.eclipse.ui.externaltools.internal.model.IExternalToolsHelpContextIds; +import org.eclipse.ui.model.WorkbenchLabelProvider; + +/** + * A launch configuration tab which allows the user to specify + * which resources should be built before a build (a build scope) + *

+ * This class may be instantiated; this class is not intended + * to be subclassed. + *

+ * @since 3.0 + */ +public class ExternalToolsBuildTab extends AbstractLaunchConfigurationTab { + // Check Buttons + private Button fBuildButton; + + // Group box + private Group fGroup; + + // Radio Buttons + private Button fProjectButton; + private Button fSpecificProjectsButton; + private Button fWorkspaceButton; + + // Push Button + private Button fSelectButton; + + // whether to include referenced projects + private Button fReferencedProjects; + + // projects to build (empty if none) + private List fProjects = new ArrayList(); + + class ProjectsContentProvider implements IStructuredContentProvider { + + /* (non-Javadoc) + * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object) + */ + public Object[] getElements(Object inputElement) { + return ((IWorkspace)inputElement).getRoot().getProjects(); + } + + /* (non-Javadoc) + * @see org.eclipse.jface.viewers.IContentProvider#dispose() + */ + public void dispose() { + } + + /* (non-Javadoc) + * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object) + */ + public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { + } + + } + /** + * @see org.eclipse.debug.ui.ILaunchConfigurationTab#createControl(org.eclipse.swt.widgets.Composite) + */ + public void createControl(Composite parent) { + Composite mainComposite = new Composite(parent, SWT.NONE); + setControl(mainComposite); + PlatformUI.getWorkbench().getHelpSystem().setHelp(getControl(), IExternalToolsHelpContextIds.EXTERNAL_TOOLS_LAUNCH_CONFIGURATION_DIALOG_BUILD_TAB); + + GridLayout layout = new GridLayout(); + GridData gd = new GridData(GridData.FILL_HORIZONTAL); + mainComposite.setLayout(layout); + mainComposite.setLayoutData(gd); + mainComposite.setFont(parent.getFont()); + + fBuildButton = createCheckButton(mainComposite, ExternalToolsLaunchConfigurationMessages.ExternalToolsBuildTab_1); + fBuildButton.addSelectionListener(new SelectionAdapter() { + public void widgetSelected(SelectionEvent e) { + updateEnabledState(); + updateLaunchConfigurationDialog(); + } + }); + + fGroup = new Group(mainComposite, SWT.NONE); + fGroup.setFont(mainComposite.getFont()); + layout = new GridLayout(); + layout.numColumns = 2; + layout.makeColumnsEqualWidth = false; + fGroup.setLayout(layout); + gd = new GridData(GridData.FILL_HORIZONTAL); + gd.horizontalSpan = 2; + fGroup.setLayoutData(gd); + + SelectionAdapter adapter = new SelectionAdapter() { + public void widgetSelected(SelectionEvent e) { + if (((Button)e.getSource()).getSelection()) { + updateEnabledState(); + updateLaunchConfigurationDialog(); + } + } + }; + + fWorkspaceButton = createRadioButton(fGroup, ExternalToolsLaunchConfigurationMessages.ExternalToolsBuildTab_2); + gd = new GridData(GridData.FILL_HORIZONTAL); + gd.horizontalSpan = 2; + fWorkspaceButton.setLayoutData(gd); + fWorkspaceButton.addSelectionListener(adapter); + + fProjectButton = createRadioButton(fGroup, ExternalToolsLaunchConfigurationMessages.ExternalToolsBuildTab_3); + gd = new GridData(GridData.FILL_HORIZONTAL); + gd.horizontalSpan = 2; + fProjectButton.setLayoutData(gd); + fProjectButton.addSelectionListener(adapter); + + fSpecificProjectsButton = createRadioButton(fGroup, ExternalToolsLaunchConfigurationMessages.ExternalToolsBuildTab_4); + gd = new GridData(GridData.FILL_HORIZONTAL); + gd.horizontalSpan = 1; + fSpecificProjectsButton.setLayoutData(gd); + fSpecificProjectsButton.addSelectionListener(adapter); + + fSelectButton = createPushButton(fGroup, ExternalToolsLaunchConfigurationMessages.ExternalToolsBuildTab_5, null); + gd = (GridData)fSelectButton.getLayoutData(); + gd.horizontalAlignment = GridData.HORIZONTAL_ALIGN_END; + fSelectButton.addSelectionListener(new SelectionAdapter() { + public void widgetSelected(SelectionEvent e) { + selectResources(); + } + }); + + createVerticalSpacer(mainComposite, 1); + fReferencedProjects = createCheckButton(mainComposite, ExternalToolsLaunchConfigurationMessages.ExternalToolsBuildTab_6); + } + + /** + * Prompts the user to select the projects to build. + */ + private void selectResources() { + ListSelectionDialog dialog = new ListSelectionDialog(getShell(), ResourcesPlugin.getWorkspace(), new ProjectsContentProvider(), new WorkbenchLabelProvider(), ExternalToolsLaunchConfigurationMessages.ExternalToolsBuildTab_7); + dialog.setInitialElementSelections(fProjects); + if (dialog.open() == Window.CANCEL) { + return; + } + Object[] res = dialog.getResult(); + fProjects = new ArrayList(res.length); + for (int i = 0; i < res.length; i++) { + fProjects.add(res[i]); + } + updateLaunchConfigurationDialog(); + } + + /** + * @see org.eclipse.debug.ui.ILaunchConfigurationTab#setDefaults(org.eclipse.debug.core.ILaunchConfigurationWorkingCopy) + */ + public void setDefaults(ILaunchConfigurationWorkingCopy configuration) { + } + + /** + * @see org.eclipse.debug.ui.ILaunchConfigurationTab#initializeFrom(org.eclipse.debug.core.ILaunchConfiguration) + */ + public void initializeFrom(ILaunchConfiguration configuration) { + updateScope(configuration); + updateReferencedProjects(configuration); + updateEnabledState(); + } + + private void updateReferencedProjects(ILaunchConfiguration configuration) { + boolean ref = false; + try { + ref = configuration.getAttribute(getAttrIncludeReferencedProjectsId(), true); + } catch (CoreException e) { + ExternalToolsPlugin.getDefault().log("Exception reading launch configuration", e); //$NON-NLS-1$ + } + fReferencedProjects.setSelection(ref); + } + + /** + * Updates the tab to display the build scope specified by the launch config + */ + private void updateScope(ILaunchConfiguration configuration) { + String scope = null; + try { + scope= configuration.getAttribute(getAttrBuildScopeId(), (String)null); + } catch (CoreException ce) { + ExternalToolsPlugin.getDefault().log("Exception reading launch configuration", ce); //$NON-NLS-1$ + } + fBuildButton.setSelection(scope != null); + fWorkspaceButton.setSelection(false); + fProjectButton.setSelection(false); + fSpecificProjectsButton.setSelection(false); + fProjects.clear(); + if (scope == null) { + // select the workspace by default + fBuildButton.setSelection(true); + fWorkspaceButton.setSelection(true); + } else { + if (scope.equals("${none}")) { //$NON-NLS-1$ + fBuildButton.setSelection(false); + } else if (scope.equals("${project}")) { //$NON-NLS-1$ + fProjectButton.setSelection(true); + } else if (scope.startsWith("${projects:")) { //$NON-NLS-1$ + fSpecificProjectsButton.setSelection(true); + IProject[] projects = getBuildProjects(configuration, getAttrBuildScopeId()); + fProjects = new ArrayList(projects.length); + for (int i = 0; i < projects.length; i++) { + fProjects.add(projects[i]); + } + } + } + } + /** + * @see org.eclipse.debug.ui.ILaunchConfigurationTab#performApply(org.eclipse.debug.core.ILaunchConfigurationWorkingCopy) + */ + public void performApply(ILaunchConfigurationWorkingCopy configuration) { + String scope = generateScopeMemento(); + configuration.setAttribute(getAttrBuildScopeId(), scope); + if (fReferencedProjects.getSelection()) { + // default is true + configuration.setAttribute(getAttrIncludeReferencedProjectsId(), (String)null); + } else { + configuration.setAttribute(getAttrIncludeReferencedProjectsId(), false); + } + } + + /** + * Generates a memento for the build scope. + */ + private String generateScopeMemento() { + if (fBuildButton.getSelection()) { + if (fWorkspaceButton.getSelection()) { + return null; + } + if (fProjectButton.getSelection()) { + return "${project}"; //$NON-NLS-1$ + } + if (fSpecificProjectsButton.getSelection()) { + return getBuildScopeAttribute(fProjects); + } + return null; + + } + return "${none}"; //$NON-NLS-1$ + } + + /** + * @see org.eclipse.debug.ui.ILaunchConfigurationTab#getName() + */ + public String getName() { + return ExternalToolsLaunchConfigurationMessages.ExternalToolsBuildTab_8; + } + + /** + * Updates the enablement state of the fields. + */ + private void updateEnabledState() { + boolean enabled= fBuildButton.getSelection(); + fGroup.setEnabled(enabled); + fWorkspaceButton.setEnabled(enabled); + fProjectButton.setEnabled(enabled); + fSpecificProjectsButton.setEnabled(enabled); + fSelectButton.setEnabled(enabled && fSpecificProjectsButton.getSelection()); + if (!enabled) { + super.setErrorMessage(null); + } + if (enabled) { + if (!fWorkspaceButton.getSelection() && !fProjectButton.getSelection() && + !fSpecificProjectsButton.getSelection()) { + fWorkspaceButton.setSelection(true); + } + } + fReferencedProjects.setEnabled(fBuildButton.getSelection() && (fProjectButton.getSelection() || fSpecificProjectsButton.getSelection())); + } + + /** + * @see org.eclipse.debug.ui.ILaunchConfigurationTab#getImage() + */ + public Image getImage() { + return ExternalToolsImages.getImage(IExternalToolConstants.IMG_TAB_BUILD); + } + + public boolean isValid(ILaunchConfiguration launchConfig) { + setErrorMessage(null); + setMessage(null); + if (fBuildButton.getSelection() && fSpecificProjectsButton.getSelection() && fProjects.isEmpty()) { + setErrorMessage(ExternalToolsLaunchConfigurationMessages.ExternalToolsBuildTab_9); + return false; + } + return true; + } + + /** + * Returns a collection of projects referenced by a build scope attribute. + * + * @return collection of projects referred to by configuration + */ + public static IProject[] getBuildProjects(ILaunchConfiguration configuration, String buildScopeId) { + String scope = null; + String id = buildScopeId ; + if (id == null) + id = IExternalToolConstants.ATTR_BUILD_SCOPE ; + try { + scope = configuration.getAttribute(id, (String)null); + } catch (CoreException e) { + return null; + } + if (scope == null) { + return null; + } + if (scope.startsWith("${projects:")) { //$NON-NLS-1$ + String pathString = scope.substring(11, scope.length() - 1); + if (pathString.length() > 1) { + String[] names = pathString.split(","); //$NON-NLS-1$ + IProject[] projects = new IProject[names.length]; + IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot(); + for (int i = 0; i < names.length; i++) { + projects[i] = root.getProject(names[i]); + } + return projects; + } + } else if (scope.equals("${project}")) { //$NON-NLS-1$ + IResource resource = DebugUITools.getSelectedResource(); + if (resource != null) { + return new IProject[]{resource.getProject()}; + } + } + return new IProject[0]; + } + + /** + * Whether referenced projects should be considered when building. Only valid + * when a set of projects is to be built. + * + * @param configuration + * @return whether referenced projects should be considerd when building + * @throws CoreException if unable to access the associated attribute + */ + public static boolean isIncludeReferencedProjects(ILaunchConfiguration configuration, String includeReferencedProjectsId) throws CoreException { + String id = includeReferencedProjectsId; + if (id == null) + id = IExternalToolConstants.ATTR_INCLUDE_REFERENCED_PROJECTS ; + return configuration.getAttribute(id, true); + } + + /** + * Creates and returns a memento for the given project set, to be used as a + * build scope attribute. + * + * @param projects list of projects + * @return an equivalent refresh attribute + */ + public static String getBuildScopeAttribute(List projects) { + StringBuffer buf = new StringBuffer(); + buf.append("${projects:"); //$NON-NLS-1$ + Iterator iterator = projects.iterator(); + while (iterator.hasNext()) { + IProject project = (IProject) iterator.next(); + buf.append(project.getName()); + if (iterator.hasNext()) { + buf.append(","); //$NON-NLS-1$ + } + } + buf.append("}"); //$NON-NLS-1$ + return buf.toString(); + } + + /* (non-Javadoc) + * @see org.eclipse.debug.ui.ILaunchConfigurationTab#activated(org.eclipse.debug.core.ILaunchConfigurationWorkingCopy) + */ + public void activated(ILaunchConfigurationWorkingCopy workingCopy) { + // do nothing on activation + } + + /* (non-Javadoc) + * @see org.eclipse.debug.ui.ILaunchConfigurationTab#deactivated(org.eclipse.debug.core.ILaunchConfigurationWorkingCopy) + */ + public void deactivated(ILaunchConfigurationWorkingCopy workingCopy) { + // do nothing on deactivation + } + + /** + * For backward compatibility - overridden in AntBuildTab + * @return id for referenced projects + */ + protected String getAttrIncludeReferencedProjectsId() { + return IExternalToolConstants.ATTR_INCLUDE_REFERENCED_PROJECTS; + } + + /** + * For backward compatibility - overridden in AntBuildTab + * @return id for build scope + */ + protected String getAttrBuildScopeId() { + return IExternalToolConstants.ATTR_BUILD_SCOPE; + } + +}