Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKevin Macguire2002-06-07 06:00:25 +0000
committerKevin Macguire2002-06-07 06:00:25 +0000
commit254c42c5b4c53e1700d91dc031fc0e18daaeb321 (patch)
tree43077f8f7408a9b9e89b152cbddf3aa59e7b28e7
parent6022357f6a007fe22637080b8a560dee20eaad3d (diff)
downloadeclipse.platform.team-254c42c5b4c53e1700d91dc031fc0e18daaeb321.tar.gz
eclipse.platform.team-254c42c5b4c53e1700d91dc031fc0e18daaeb321.tar.xz
eclipse.platform.team-254c42c5b4c53e1700d91dc031fc0e18daaeb321.zip
*** empty log message ***
-rw-r--r--bundles/org.eclipse.team.ui/plugin.properties8
-rw-r--r--bundles/org.eclipse.team.ui/plugin.xml14
-rw-r--r--bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/messages.properties26
-rw-r--r--bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/sync/CatchupReleaseViewer.java4
-rw-r--r--bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/ConfigureTargetWizard.java32
-rw-r--r--bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/DiscardSiteAction.java37
-rw-r--r--bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/GetAction.java178
-rw-r--r--bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/GetSyncAction.java9
-rw-r--r--bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/MappingSelectionPage.java2
-rw-r--r--bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/RemoteResourceElement.java53
-rw-r--r--bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/SiteElement.java6
-rw-r--r--bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/SiteExplorerView.java69
-rw-r--r--bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/SiteExplorerViewLabelProvider.java6
-rw-r--r--bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/SiteRootsElement.java23
-rw-r--r--bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/SiteSelectionPage.java23
-rw-r--r--bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/TargetAction.java28
-rw-r--r--bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/UploadAction.java38
17 files changed, 363 insertions, 193 deletions
diff --git a/bundles/org.eclipse.team.ui/plugin.properties b/bundles/org.eclipse.team.ui/plugin.properties
index 24fe573a9..2105357fe 100644
--- a/bundles/org.eclipse.team.ui/plugin.properties
+++ b/bundles/org.eclipse.team.ui/plugin.properties
@@ -24,14 +24,14 @@ SiteExplorerView.name=Site Explorer
Deployment.viewCategory=Target Management
Deployment.group=Depl&oy
-Deployment.getAction=&Replace with Target
+Deployment.getAction=&Target
Deployment.uploadAction=&Upload
Deployment.configSite=&Target Site...
Deployment.synchronize=&Synchronize with Target...
-SiteExplorerGetAs.label=Get &As...
+SiteExplorerGetAs.label=Download &As...
SiteExplorerGetAs.tooltip=Download the selected remote folder with a user specified project type and name.
-SiteExplorerGetAsProject.label=&Get As Project
+SiteExplorerGetAsProject.label=&Download As Project
SiteExplorerGetAsProject.tooltip=Download the selected remote folder and create a project with the same name.
-SiteExplorerDiscardSite.label=&Discard Site
+SiteExplorerDiscardSite.label=D&iscard Site
SiteExplorerDiscardSite.tooltip=Discard the site \ No newline at end of file
diff --git a/bundles/org.eclipse.team.ui/plugin.xml b/bundles/org.eclipse.team.ui/plugin.xml
index ea4e05005..fa0fe7648 100644
--- a/bundles/org.eclipse.team.ui/plugin.xml
+++ b/bundles/org.eclipse.team.ui/plugin.xml
@@ -96,7 +96,7 @@
value="org.eclipse.team.target=basic">
</filter>
<action
- menubarPath="team.main/targetGroup"
+ menubarPath="replaceWithMenu/replaceWithGroup"
class="org.eclipse.team.internal.ui.target.GetAction"
id="org.eclipse.team.target.getAction"
label="%Deployment.getAction">
@@ -132,14 +132,14 @@
objectClass="org.eclipse.team.internal.ui.target.RemoteResourceElement"
id="org.eclipse.team.internal.ui.target.RemoteResourceElement">
<action
- label="Get As..."
- tooltip="Get As..."
+ label="%SiteExplorerGetAs.label"
+ tooltip="%SiteExplorerGetAs.tooltip"
class="org.eclipse.team.internal.ui.target.GetAsAction"
id="org.eclipse.team.internal.ui.target.GetAsAction">
</action>
<action
- label="Get As Project"
- tooltip="Get As Project"
+ label="%SiteExplorerGetAsProject.label"
+ tooltip="%SiteExplorerGetAsProject.tooltip"
class="org.eclipse.team.internal.ui.target.GetAsProjectAction"
id="org.eclipse.team.internal.ui.target.GetAsProjectAction">
</action>
@@ -149,8 +149,8 @@
objectClass="org.eclipse.team.internal.ui.target.SiteElement"
id="org.eclipse.team.internal.ui.target.SiteElement">
<action
- label="Discard Site"
- tooltip="Discard this Site"
+ label="%SiteExplorerDiscardSite.label"
+ tooltip="%SiteExplorerDiscardSite.tooltip"
class="org.eclipse.team.internal.ui.target.DiscardSiteAction"
id="org.eclipse.team.internal.ui.target.DiscardSiteAction">
</action>
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/messages.properties b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/messages.properties
index 0220a49d4..0cc40347a 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/messages.properties
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/messages.properties
@@ -145,14 +145,14 @@ SiteSelectionPage.disconnectTarget=&Disconnect from Site
GetAsProject.thisResourceExists=The resource ''{0}'' already exists in the workspace. Overwrite?
GetAsProject.thisExternalFileExists=The folder ''{0}'' exists in the local file system. Overwrite?
GetAsProject.confirmOverwrite=Confirm Overwrite
-GetAsProject.taskName1=Receiving ''{0}''
-GetAsProject.taskNameN=Receiving {0} folders
+GetAsProject.taskName1=Downloading ''{0}''
+GetAsProject.taskNameN=Downloading {0} folders
GetAsProject.errorCreatingProject=Error creating project: {0}
GetAsProject.errorGettingResources=Error getting resources
GetAs.checkoutFailed=Problems encountered receiving the remote folder
-GetAs.enterProjectTitle=Get ''{0}'' As...
-GetAs.taskname=Receiving ''{0}'' as ''{1}''
+GetAs.enterProjectTitle=Downloading ''{0}'' As...
+GetAs.taskname=Downloading ''{0}'' as ''{1}''
Error=Error
@@ -161,10 +161,10 @@ CreateNewFolderAction.title=New Remote Folder
CreateNewFolderAction.message=Enter the name for the new remote folder:
CreateNewFolderAction.newFolderName=New Folder
-GetAction.title=Get
+GetAction.title=Download
GetAction.working=Downloading from ''{0}''...
-PutAction.title=Put
+PutAction.title=Upload
PutAction.working=Uploading to ''{0}''...
SiteExplorerView.addSiteAction=Target &Site
@@ -191,7 +191,7 @@ SiteExplorerViewLabelProvider.fileSize={0} KB
MappingSelectionPage.description=Specify the location on the site where you want to target your resources.
MappingSelectionPage.label=Select the site or a folder:
-MappingSelectionPage.newFolderLabel=&New Folder...
+MappingSelectionPage.newFolderLabel=&Create Folder...
MappingSelectionPage.mappingTitle=Select the location on the site
ConfigureTargetWizardQuestion_2=Question
@@ -205,12 +205,16 @@ ConfigureTargetWizard.errorOccurred=An error occured connecting to ''{0}''.\n\nC
ConfigureTargetWizard.errorUnmappingProject=An error occured trying to disconnect this project.
GetAction.Exception_getting_provider_2=Exception getting provider
-GetSyncAction.Getting..._1=Getting...
+GetAction.confirmFileOverwrite=You have local changes which you are about to overwrite. Do you wish to continue?
+GetAction.confirmFileOverwriteTitle=Confirm Overwrite
+
+
+GetSyncAction.Getting..._1=Downloading...
PutAction.Exception_getting_provider_2=Exception getting provider
-PutSyncAction.Putting..._1=Putting...
+PutSyncAction.Putting..._1=Uploading...
-TargetCatchupReleaseViewer.Get_1=&Get
-TargetCatchupReleaseViewer.Put_2=&Put
+TargetCatchupReleaseViewer.Get_1=&Download
+TargetCatchupReleaseViewer.Put_2=&Upload
SiteSelectionPage.siteLabelCurrentWithMapping={0} (currently as {1})
SiteSelectionPage.siteLabelCurrent={0} (current)
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/sync/CatchupReleaseViewer.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/sync/CatchupReleaseViewer.java
index 3a8b30d85..814b584e7 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/sync/CatchupReleaseViewer.java
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/sync/CatchupReleaseViewer.java
@@ -324,7 +324,7 @@ public abstract class CatchupReleaseViewer extends DiffTreeViewer implements ISe
refresh.setToolTipText(Policy.bind("CatchupReleaseViewer.refreshAction")); //$NON-NLS-1$
// Expand action
- expandAll = new ExpandAllAction(Policy.bind("CatchupReleaseViewer.expand"), null);
+ expandAll = new ExpandAllAction(Policy.bind("CatchupReleaseViewer.expand"), null); //$NON-NLS-1$
// Toggle granularity
image = TeamImages.getImageDescriptor(UIConstants.IMG_CONTENTS);
@@ -338,7 +338,7 @@ public abstract class CatchupReleaseViewer extends DiffTreeViewer implements ISe
compareFileContents = diffModel.getSyncGranularity() != IRemoteSyncElement.GRANULARITY_TIMESTAMP;
toggleGranularity.setChecked(compareFileContents);
- removeFromTree = new RemoveFromTreeAction(Policy.bind("CatchupReleaseViewer.removeFromView"), null);
+ removeFromTree = new RemoveFromTreeAction(Policy.bind("CatchupReleaseViewer.removeFromView"), null); //$NON-NLS-1$
copyAllRightToLeft = new Action(Policy.bind("CatchupReleaseViewer.copyAllRightToLeft"), null) { //$NON-NLS-1$
public void run() {
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/ConfigureTargetWizard.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/ConfigureTargetWizard.java
index 4b5191dd1..e3ede870a 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/ConfigureTargetWizard.java
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/ConfigureTargetWizard.java
@@ -68,8 +68,6 @@ public class ConfigureTargetWizard extends Wizard implements IConfigurationWizar
public static final String MAPPING_PAGE_NAME = "mapping-page"; //$NON-NLS-1$
protected SiteSelectionPage siteSelectionPage = null;
- protected IWizardPage firstTargetPage = null;
-
/**
* @see ConfigureProjectWizard#getExtensionPoint()
*/
@@ -108,7 +106,6 @@ public class ConfigureTargetWizard extends Wizard implements IConfigurationWizar
public void addPages() {
Site[] sites = TargetManager.getSites();
AdaptableList wizards = getAvailableWizards();
- setWindowTitle(getWizardWindowTitle());
if(sites.length > 0 && project != null) {
TargetProvider provider = null;
@@ -153,29 +150,10 @@ public class ConfigureTargetWizard extends Wizard implements IConfigurationWizar
}
public IWizardPage getNextPage(IWizardPage page) {
- // This is what we really want to do, but will have to rework the
- // target wizards first.
- // if(getPage(page.getName()) != null) {
- // // this is one of our pages
- // // 1. site selection
- // // 2. target selection
- // // 3. mapping
- // } else {
- // // not one of our pages, is a target specific page
- // IWizardPage nextPage;
- // if(wizard != null) {
- // nextPage = wizard.getNextPage(page);
- // } else {
- // nextPage = mainPage.getSelectedWizard().getNextPage(page);
- // }
- // if(nextPage != null) {
- // return nextPage;
- // } else {
- // MappingSelectionPage mappingPage = getMappingPage();
- // mappingPage.setPreviousPage(page);
- // }
- // }
if(page == siteSelectionPage) {
+ if(siteSelectionPage.isDisconnect()) {
+ return null;
+ }
if(siteSelectionPage.getSite() != null) {
mappingPage.setSite(siteSelectionPage.getSite());
mappingPage.setPreviousPage(page);
@@ -205,8 +183,10 @@ public class ConfigureTargetWizard extends Wizard implements IConfigurationWizar
}
return false;
} else if(currentPage == siteSelectionPage) {
- if(siteSelectionPage.getSite() != null) {
+ if(siteSelectionPage.getSite() != null || siteSelectionPage.isDisconnect()) {
return true;
+ } else {
+ return false;
}
}
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/DiscardSiteAction.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/DiscardSiteAction.java
index c1fd3ebb2..cc361b3ab 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/DiscardSiteAction.java
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/DiscardSiteAction.java
@@ -19,8 +19,8 @@ import org.eclipse.jface.action.IAction;
import org.eclipse.jface.dialogs.ErrorDialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
@@ -85,8 +85,28 @@ public class DiscardSiteAction extends TargetAction {
return composite;
}
- protected void createMainDialogArea(Composite composite) {
- Label label = new Label(composite, SWT.WRAP);
+ protected void createMainDialogArea(Composite top) {
+ Composite parent = new Composite(top, SWT.NONE);
+ GridLayout layout = new GridLayout();
+ layout.marginHeight = 0;
+ layout.marginWidth = 0;
+ layout.numColumns = 2;
+ parent.setLayout(layout);
+ parent.setLayoutData(new GridData(GridData.FILL_BOTH));
+ parent.setFont(parent.getFont());
+
+ // create image
+ Image image = getImage(DLG_IMG_WARNING);
+ if (image != null) {
+ Label label = new Label(parent, 0);
+ image.setBackground(label.getBackground());
+ label.setImage(image);
+ label.setLayoutData(new GridData(
+ GridData.HORIZONTAL_ALIGN_CENTER |
+ GridData.VERTICAL_ALIGN_BEGINNING));
+ }
+
+ Label label = new Label(parent, SWT.WRAP);
label.setText(Policy.bind("SiteExplorerView.projectsAlreadyMapped")); //$NON-NLS-1$
GridData data = new GridData(
GridData.GRAB_HORIZONTAL |
@@ -95,9 +115,16 @@ public class DiscardSiteAction extends TargetAction {
GridData.VERTICAL_ALIGN_CENTER);
data.widthHint = convertHorizontalDLUsToPixels(IDialogConstants.MINIMUM_MESSAGE_AREA_WIDTH);
label.setLayoutData(data);
- label.setFont(composite.getFont());
+ label.setFont(parent.getFont());
- unmap = new Button(composite, SWT.CHECK);
+ unmap = new Button(parent, SWT.CHECK);
+ data = new GridData(
+ GridData.GRAB_HORIZONTAL |
+ GridData.GRAB_VERTICAL |
+ GridData.HORIZONTAL_ALIGN_FILL |
+ GridData.VERTICAL_ALIGN_CENTER);
+ data.horizontalSpan = 2;
+ unmap.setLayoutData(data);
unmap.setText(Policy.bind("SiteExplorerView.unmapProjectsAndDisconnect")); //$NON-NLS-1$
unmap.setSelection(false);
unmap.addListener(SWT.Selection, new Listener() {
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/GetAction.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/GetAction.java
index 0f91747fa..80ce5e052 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/GetAction.java
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/GetAction.java
@@ -6,55 +6,183 @@ package org.eclipse.team.internal.ui.target;
*/
import java.lang.reflect.InvocationTargetException;
+import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
+import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.SubProgressMonitor;
import org.eclipse.jface.action.IAction;
-import org.eclipse.team.core.RepositoryProvider;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.swt.SWT;
+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.Event;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Shell;
import org.eclipse.team.core.TeamException;
import org.eclipse.team.core.target.TargetManager;
import org.eclipse.team.core.target.TargetProvider;
-import org.eclipse.team.internal.core.*;
+import org.eclipse.team.internal.core.InfiniteSubProgressMonitor;
import org.eclipse.team.internal.core.TeamPlugin;
+import org.eclipse.team.internal.ui.DetailsDialog;
+import org.eclipse.team.internal.ui.IPromptCondition;
import org.eclipse.team.internal.ui.Policy;
-import org.eclipse.team.internal.ui.actions.TeamAction;
+import org.eclipse.team.internal.ui.PromptingDialog;
+import org.eclipse.team.internal.ui.TeamUIPlugin;
import org.eclipse.ui.actions.WorkspaceModifyOperation;
/**
* Action for getting the contents of the selected resources
*/
-public class GetAction extends TeamAction {
- public void run(IAction action) {
- run(new WorkspaceModifyOperation() {
- public void execute(IProgressMonitor monitor) throws InterruptedException, InvocationTargetException {
- try {
- Hashtable table = getTargetProviderMapping();
- Set keySet = table.keySet();
- monitor.beginTask("", keySet.size() * 1000); //$NON-NLS-1$
- Iterator iterator = keySet.iterator();
- while (iterator.hasNext()) {
- IProgressMonitor subMonitor = new InfiniteSubProgressMonitor(monitor, 1000);
- TargetProvider provider = (TargetProvider)iterator.next();
- monitor.setTaskName(Policy.bind("GetAction.working", provider.getURL().toExternalForm())); //$NON-NLS-1$
- List list = (List)table.get(provider);
- IResource[] providerResources = (IResource[])list.toArray(new IResource[list.size()]);
+public class GetAction extends TargetAction {
+
+ private class OutgoingChangesDialog extends DetailsDialog {
+ private IResource[] outgoingChanges;
+ private org.eclipse.swt.widgets.List detailsList;
+
+ public OutgoingChangesDialog(Shell shell, IResource[] outgoingChanges) {
+ super(shell, Policy.bind("GetAction.confirmFileOverwriteTitle")); //$NON-NLS-1$
+ this.outgoingChanges = outgoingChanges;
+ }
+
+ protected Composite createDropDownDialogArea(Composite parent) {
+ // create a composite with standard margins and spacing
+ Composite composite = new Composite(parent, SWT.NONE);
+ GridLayout layout = new GridLayout();
+ layout.marginHeight = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_MARGIN);
+ layout.marginWidth = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_MARGIN);
+ layout.verticalSpacing = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_SPACING);
+ layout.horizontalSpacing = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING);
+ composite.setLayout(layout);
+ composite.setLayoutData(new GridData(GridData.FILL_BOTH));
+ composite.setFont(parent.getFont());
+
+ detailsList = new org.eclipse.swt.widgets.List(composite, SWT.BORDER | SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
+ GridData data = new GridData ();
+ data.heightHint = 75;
+ data.horizontalAlignment = GridData.FILL;
+ data.grabExcessHorizontalSpace = true;
+ detailsList.setLayoutData(data);
+
+ for (int i = 0; i < outgoingChanges.length; i++) {
+ detailsList.add(outgoingChanges[i].getFullPath().toString()); //$NON-NLS-1$
+ }
+ return composite;
+ }
+
+ protected void createMainDialogArea(Composite top) {
+ Composite parent = new Composite(top, SWT.NONE);
+ GridLayout layout = new GridLayout();
+ layout.marginHeight = 0;
+ layout.marginWidth = 0;
+ layout.numColumns = 2;
+ parent.setLayout(layout);
+ parent.setLayoutData(new GridData(GridData.FILL_BOTH));
+ parent.setFont(parent.getFont());
+
+ // create image
+ Image image = getImage(DLG_IMG_QUESTION);
+ if (image != null) {
+ Label label = new Label(parent, 0);
+ image.setBackground(label.getBackground());
+ label.setImage(image);
+ label.setLayoutData(new GridData(
+ GridData.HORIZONTAL_ALIGN_CENTER |
+ GridData.VERTICAL_ALIGN_BEGINNING));
+ }
+
+ Label label = new Label(parent, SWT.WRAP);
+ label.setText(Policy.bind("GetAction.confirmFileOverwrite")); //$NON-NLS-1$
+ GridData data = new GridData(
+ GridData.GRAB_HORIZONTAL |
+ GridData.GRAB_VERTICAL |
+ GridData.HORIZONTAL_ALIGN_FILL |
+ GridData.VERTICAL_ALIGN_CENTER);
+ data.widthHint = convertHorizontalDLUsToPixels(IDialogConstants.MINIMUM_MESSAGE_AREA_WIDTH);
+ label.setLayoutData(data);
+ label.setFont(parent.getFont());
+ setPageComplete(true);
+ }
+
+ protected void updateEnablements() {
+ }
+ }
+
+ public void run(IAction action) {
+ if(promptForOutgoingChanges()) {
+ run(new WorkspaceModifyOperation() {
+ public void execute(IProgressMonitor monitor) throws InterruptedException, InvocationTargetException {
+ try {
+ Hashtable table = getTargetProviderMapping();
+ Set keySet = table.keySet();
+ monitor.beginTask(null, keySet.size() * 1000);
- provider.get(providerResources, subMonitor);
+ // perform the get on each provider
+ Iterator iterator = keySet.iterator();
+ while (iterator.hasNext()) {
+ TargetProvider provider = (TargetProvider)iterator.next();
+ monitor.setTaskName(Policy.bind("GetAction.working", provider.getURL().toExternalForm())); //$NON-NLS-1$
+ List list = (List)table.get(provider);
+ IResource[] providerResources = (IResource[])list.toArray(new IResource[list.size()]);
+ provider.get(providerResources, Policy.subInfiniteMonitorFor(monitor, 1000));
+ }
+ } catch (TeamException e) {
+ throw new InvocationTargetException(e);
+ } finally {
+ monitor.done();
}
- } catch (TeamException e) {
- throw new InvocationTargetException(e);
- } finally {
- monitor.done();
}
+ }, Policy.bind("GetAction.title"), this.PROGRESS_DIALOG); //$NON-NLS-1$
+ }
+ }
+
+ private boolean promptForOutgoingChanges() {
+ try {
+ // find any outgoing changes that will be overwritten and prompt
+ Hashtable table = getTargetProviderMapping();
+ Set keySet = table.keySet();
+
+ Iterator iterator = keySet.iterator();
+ List outgoingChanges = new ArrayList();
+ while (iterator.hasNext()) {
+ TargetProvider provider = (TargetProvider)iterator.next();
+ List list = (List)table.get(provider);
+ IResource[] providerResources = (IResource[])list.toArray(new IResource[list.size()]);
+ outgoingChanges.addAll(Arrays.asList(findResourcesWithOutgoingChanges(providerResources)));
+ }
+ if(! outgoingChanges.isEmpty()) {
+ final OutgoingChangesDialog dialog = new OutgoingChangesDialog(getShell(),
+ (IResource[]) outgoingChanges.toArray(new IResource[outgoingChanges.size()]));
+ final boolean okToContinue[] = {true};
+ getShell().getDisplay().syncExec(new Runnable() {
+ public void run() {
+ if(dialog.open() != dialog.OK) {
+ okToContinue[0] = false;
+ }
+ }
+ });
+ return okToContinue[0];
}
- }, Policy.bind("GetAction.title"), this.PROGRESS_DIALOG); //$NON-NLS-1$
+ return true;
+ } catch(CoreException e) {
+ TeamUIPlugin.handle(e);
+ } catch(TeamException e) {
+ TeamUIPlugin.handle(e);
+ }
+ return false;
}
+
/**
* @see TeamAction#isEnabled()
*/
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/GetSyncAction.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/GetSyncAction.java
index 6a77152d8..620ea3022 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/GetSyncAction.java
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/GetSyncAction.java
@@ -45,16 +45,15 @@ public class GetSyncAction extends TargetSyncAction {
*/
protected boolean isEnabled(ITeamNode node) {
// Get action is enabled for any changed nodes.
- return new SyncSet(new StructuredSelection(node)).getChangedNodes().length > 0;
+ SyncSet set = new SyncSet(new StructuredSelection(node));
+ return set.hasIncomingChanges() || set.hasConflicts();
}
/**
* @see TargetSyncAction#removeNonApplicableNodes(SyncSet, int)
*/
protected void removeNonApplicableNodes(SyncSet set, int syncMode) {
- if (syncMode == SyncView.SYNC_INCOMING) {
- set.removeOutgoingNodes();
- }
+ set.removeOutgoingNodes();
}
/**
@@ -107,4 +106,4 @@ public class GetSyncAction extends TargetSyncAction {
monitor.done();
}
}
-}
+} \ No newline at end of file
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/MappingSelectionPage.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/MappingSelectionPage.java
index 3e4fce861..8d3865f9c 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/MappingSelectionPage.java
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/MappingSelectionPage.java
@@ -175,7 +175,7 @@ public class MappingSelectionPage extends TargetWizardPage {
private void setViewerInput() {
if(this.site == null || viewer == null)
return;
- viewer.setInput(new SiteRootsElement(new Site[] {site}));
+ viewer.setInput(new SiteRootsElement(new Site[] {site}, getContainer()));
}
/**
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/RemoteResourceElement.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/RemoteResourceElement.java
index 83b3c50ce..d7d474b71 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/RemoteResourceElement.java
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/RemoteResourceElement.java
@@ -16,6 +16,8 @@ import java.util.List;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.jface.action.IStatusLineManager;
+import org.eclipse.jface.operation.IRunnableContext;
import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.jface.operation.ModalContext;
import org.eclipse.jface.resource.ImageDescriptor;
@@ -49,14 +51,18 @@ public class RemoteResourceElement implements IWorkbenchAdapter, IAdaptable {
private int size = 0;
private String lastModified = null;
- // embeded progress monitoring support
- private Shell shell;
- private IProgressMonitor monitor;
+ // context in which to perform long-running operations
+ private IRunnableContext runContext;
public RemoteResourceElement(IRemoteTargetResource remote) {
this.remote = remote;
}
+ public RemoteResourceElement(IRemoteTargetResource remote, IRunnableContext runContext) {
+ this(remote);
+ this.runContext = runContext;
+ }
+
public IRemoteTargetResource getRemoteResource() {
return remote;
}
@@ -72,26 +78,23 @@ public class RemoteResourceElement implements IWorkbenchAdapter, IAdaptable {
IRunnableWithProgress runnable = new IRunnableWithProgress() {
public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
try {
- monitor.beginTask(null, 100);
+ // progress for fetching remote children is always unknown
+ // let's not bother even trying to guess.
+ monitor.beginTask(null, IProgressMonitor.UNKNOWN);
if(children == null) {
setCachedChildren(remote.members(Policy.subMonitorFor(monitor, 50)));
}
List remoteElements = new ArrayList();
for (int i = 0; i < children.length; i++) {
IRemoteTargetResource child = (IRemoteTargetResource)children[i];
- RemoteResourceElement element = new RemoteResourceElement(child);
-
- // setup progress monitors
- element.setShell(shell);
- element.setProgressMonitor(monitor);
-
- // decide which children to return based on filter settings
- element.setLastModified(child.getLastModified(Policy.subMonitorFor(monitor, 25)));
+ RemoteResourceElement element = new RemoteResourceElement(child, runContext);
+
// cache size and last modified
+ element.setLastModified(child.getLastModified(Policy.subMonitorFor(monitor, 25)));
element.setSize(child.getSize(Policy.subMonitorFor(monitor, 25)));
remoteElements.add(element);
- }
- result[0] = (RemoteResourceElement[])remoteElements.toArray(new RemoteResourceElement[remoteElements.size()]);
+ }
+ result[0] = (RemoteResourceElement[])remoteElements.toArray(new RemoteResourceElement[remoteElements.size()]);
} catch (TeamException e) {
throw new InvocationTargetException(e);
} finally {
@@ -100,7 +103,11 @@ public class RemoteResourceElement implements IWorkbenchAdapter, IAdaptable {
}
};
- TeamUIPlugin.runWithProgress(null, true /*cancelable*/, runnable);
+ if(runContext == null) {
+ TeamUIPlugin.runWithProgress(null, true /*cancelable*/, runnable);
+ } else {
+ runContext.run(true, true, runnable);
+ }
} catch (InterruptedException e) {
return new Object[0];
} catch (InvocationTargetException e) {
@@ -155,22 +162,6 @@ public class RemoteResourceElement implements IWorkbenchAdapter, IAdaptable {
this.remote = remote;
}
- public void setShell(Shell shell) {
- this.shell = shell;
- }
-
- public void setProgressMonitor(IProgressMonitor monitor) {
- this.monitor = monitor;
- }
-
- public Shell getShell() {
- return shell;
- }
-
- public IProgressMonitor getProgressMonitor() {
- return monitor;
- }
-
public String getLastModified() {
return lastModified;
}
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/SiteElement.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/SiteElement.java
index 91f37eaed..84d27d820 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/SiteElement.java
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/SiteElement.java
@@ -15,6 +15,7 @@ import java.lang.reflect.InvocationTargetException;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.Path;
+import org.eclipse.jface.operation.IRunnableContext;
import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.resource.ImageDescriptor;
@@ -40,6 +41,11 @@ public class SiteElement extends RemoteResourceElement {
this.site = site;
}
+ public SiteElement(Site site, IRunnableContext runContext) {
+ super(null, runContext);
+ this.site = site;
+ }
+
public Site getSite() {
return site;
}
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/SiteExplorerView.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/SiteExplorerView.java
index a5fbb287c..4f12420d3 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/SiteExplorerView.java
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/SiteExplorerView.java
@@ -69,6 +69,9 @@ import org.eclipse.ui.part.ViewPart;
* Is a view that allows browsing remote target sites. It is modeled after
* a file explorer: a tree of folders is show with a table of the folder's
* contents.
+ * <p>
+ * Progress is shown in the main workbench window's status line progress
+ * monitor.</p>
*
* @see Site
* @see IRemoteTargetResource
@@ -109,8 +112,8 @@ public class SiteExplorerView extends ViewPart implements ISiteListener {
// column headings: "Name" "Size" "Modified"
private int[][] SORT_ORDERS_BY_COLUMN = {
- {NAME, SIZE, MODIFIED}, /* name */
- {SIZE, NAME, MODIFIED}, /* size */
+ {NAME}, /* name */
+ {SIZE, NAME}, /* size */
{MODIFIED, NAME, SIZE}, /* modified */
};
@@ -155,7 +158,7 @@ public class SiteExplorerView extends ViewPart implements ISiteListener {
}
protected int compareNames(IRemoteTargetResource resource1, IRemoteTargetResource resource2) {
- return collator.compare(resource1.getName(), resource2.getName());
+ return resource1.getName().compareTo(resource2.getName());
}
/**
@@ -238,8 +241,8 @@ public class SiteExplorerView extends ViewPart implements ISiteListener {
folderTree.setSorter(new ViewerSorter() {
public int compare(Viewer viewer, Object e1, Object e2) {
- String name1 = "";
- String name2 = "";
+ String name1 = ""; //$NON-NLS-1$
+ String name2 = ""; //$NON-NLS-1$
if(e1 instanceof RemoteResourceElement) {
name1 = ((RemoteResourceElement)e1).getRemoteResource().getName();
} else if(e1 instanceof SiteElement) {
@@ -266,31 +269,29 @@ public class SiteExplorerView extends ViewPart implements ISiteListener {
});
Table table = new Table(sash, SWT.FULL_SELECTION | SWT.H_SCROLL | SWT.V_SCROLL);
+ TableLayout layout = new TableLayout();
+ table.setLayout(layout);
+ table.setHeaderVisible(true);
TableColumn tableColumn = new TableColumn(table, SWT.NULL);
tableColumn.setText(Policy.bind("SiteExplorerView.Name_1")); //$NON-NLS-1$
tableColumn.addSelectionListener(getColumnListener());
+ layout.addColumnData(new ColumnWeightData(30, true));
tableColumn = new TableColumn(table, SWT.NULL);
tableColumn.setText(Policy.bind("SiteExplorerView.Size_2")); //$NON-NLS-1$
tableColumn.setAlignment(SWT.RIGHT);
tableColumn.addSelectionListener(getColumnListener());
+ layout.addColumnData(new ColumnWeightData(10, true));
tableColumn = new TableColumn(table, SWT.NULL);
tableColumn.setText(Policy.bind("SiteExplorerView.Modified_3")); //$NON-NLS-1$
tableColumn.addSelectionListener(getColumnListener());
+ layout.addColumnData(new ColumnWeightData(30, true));
tableColumn = new TableColumn(table, SWT.NULL);
tableColumn.setText(Policy.bind("SiteExplorerView.URL_4")); //$NON-NLS-1$
-
- TableLayout layout = new TableLayout();
- layout.addColumnData(new ColumnWeightData(30, true));
- layout.addColumnData(new ColumnWeightData(10, true));
layout.addColumnData(new ColumnWeightData(30, true));
- layout.addColumnData(new ColumnWeightData(30, true));
-
- table.setLayout(layout);
- table.setHeaderVisible(true);
folderContentsTable = new TableViewer(table);
folderContentsTable.setContentProvider(new SiteLazyContentProvider());
@@ -328,8 +329,10 @@ public class SiteExplorerView extends ViewPart implements ISiteListener {
sash.setWeights(new int[] {33, 67});
TargetManager.addSiteListener(this);
- initializeTreeInput();
+
+ root = new SiteRootsElement(getViewSite().getWorkbenchWindow());
initalizeActions();
+ folderTree.setInput(root);
}
private Shell getShell() {
@@ -399,18 +402,21 @@ public class SiteExplorerView extends ViewPart implements ISiteListener {
Object currentSelection = selection.getFirstElement();
RemoteResourceElement selectedFolder;
- if(selection.isEmpty()) {
+ if(!selection.isEmpty()) {
selectedFolder = getSelectedRemoteFolder(selection)[0];
} else {
selectedFolder = (RemoteResourceElement)folderContentsTable.getInput();
}
- IRemoteTargetResource newFolder = CreateNewFolderAction.createDir(shell, selectedFolder.getRemoteResource(), Policy.bind("CreateNewFolderAction.newFolderName"));
+ IRemoteTargetResource newFolder = CreateNewFolderAction.createDir(shell, selectedFolder.getRemoteResource(), Policy.bind("CreateNewFolderAction.newFolderName")); //$NON-NLS-1$
if (newFolder == null)
return;
+
+ // force a refresh
selectedFolder.setCachedChildren(null);
+
+ // select the newly added folder
RemoteResourceElement newFolderUIElement = new RemoteResourceElement(newFolder);
-
folderTree.refresh(currentSelection);
expandInTreeCurrentSelection(new StructuredSelection(currentSelection), false);
folderTree.setSelection(new StructuredSelection(newFolderUIElement));
@@ -459,13 +465,20 @@ public class SiteExplorerView extends ViewPart implements ISiteListener {
}
/**
+ * Add the new site to the viewer and make it the current selection.
+ *
* @see ISiteListener#siteAdded(Site)
*/
public void siteAdded(Site site) {
- initializeTreeInput();
+ SiteElement element = new SiteElement(site, getViewSite().getWorkbenchWindow());
+ folderTree.add(root, element);
+ folderTree.setSelection(new StructuredSelection(element));
}
/**
+ * Remote the site from the viewer and select the next site in the
+ * tree.
+ *
* @see ISiteListener#siteRemoved(Site)
*/
public void siteRemoved(Site site) {
@@ -482,11 +495,6 @@ public class SiteExplorerView extends ViewPart implements ISiteListener {
}
}
- private void initializeTreeInput() {
- root = new SiteRootsElement(TargetManager.getSites());
- folderTree.setInput(root);
- }
-
/**
* Adds the listener that sets the sorter.
*/
@@ -510,13 +518,16 @@ public class SiteExplorerView extends ViewPart implements ISiteListener {
*/
public void widgetSelected(SelectionEvent e) {
// column selected - need to sort
+ // only allow sorting on name for now
int column = folderContentsTable.getTable().indexOf((TableColumn) e.widget);
- FolderListingSorter oldSorter = (FolderListingSorter)folderContentsTable.getSorter();
- if (oldSorter != null && column == oldSorter.getColumnNumber()) {
- oldSorter.setReversed(!oldSorter.isReversed());
- folderContentsTable.refresh();
- } else {
- folderContentsTable.setSorter(new FolderListingSorter(column));
+ if(column == FolderListingSorter.NAME) {
+ FolderListingSorter oldSorter = (FolderListingSorter)folderContentsTable.getSorter();
+ if (oldSorter != null && column == oldSorter.getColumnNumber()) {
+ oldSorter.setReversed(!oldSorter.isReversed());
+ folderContentsTable.refresh();
+ } else {
+ folderContentsTable.setSorter(new FolderListingSorter(column));
+ }
}
}
};
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/SiteExplorerViewLabelProvider.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/SiteExplorerViewLabelProvider.java
index ff79825b9..54a8e01db 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/SiteExplorerViewLabelProvider.java
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/SiteExplorerViewLabelProvider.java
@@ -30,7 +30,11 @@ public class SiteExplorerViewLabelProvider extends WorkbenchLabelProvider implem
return super.getText(element);
case 1 :
if(element instanceof RemoteResourceElement) {
- int size = ((RemoteResourceElement)element).getSize();
+ RemoteResourceElement remote = ((RemoteResourceElement)element);
+ if(remote.getRemoteResource().isContainer()) {
+ return ""; //$NON-NLS-1$
+ }
+ int size = remote.getSize();
int sizeKb = size / 1000;
if(sizeKb == 0 && size % 1000 > 0) {
sizeKb = 1;
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/SiteRootsElement.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/SiteRootsElement.java
index 0074fdbc9..6e166ee77 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/SiteRootsElement.java
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/SiteRootsElement.java
@@ -12,6 +12,7 @@ package org.eclipse.team.internal.ui.target;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.jface.operation.IRunnableContext;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.team.core.target.Site;
@@ -25,15 +26,15 @@ public class SiteRootsElement implements IWorkbenchAdapter, IAdaptable {
private Site[] sites = null;
// progress monitoring support
- private IProgressMonitor monitor;
- private Shell shell;
+ private IRunnableContext runContext;
- public SiteRootsElement(Site[] sites) {
+ public SiteRootsElement(Site[] sites, IRunnableContext runContext) {
this.sites = sites;
+ this.runContext = runContext;
}
- public SiteRootsElement() {
- this.sites = null;
+ public SiteRootsElement(IRunnableContext runContext) {
+ this(null, runContext);
}
public ImageDescriptor getImageDescriptor(Object object) {
@@ -49,21 +50,11 @@ public class SiteRootsElement implements IWorkbenchAdapter, IAdaptable {
}
SiteElement[] siteElements = new SiteElement[childSites.length];
for (int i = 0; i < childSites.length; i++) {
- siteElements[i] = new SiteElement(childSites[i]);
- siteElements[i].setShell(shell);
- siteElements[i].setProgressMonitor(monitor);
+ siteElements[i] = new SiteElement(childSites[i], runContext);
}
return siteElements;
}
- public void setProgressMonitor(IProgressMonitor monitor) {
- this.monitor = monitor;
- }
-
- public void setShell(Shell shell) {
- this.shell = shell;
- }
-
public String getLabel(Object o) {
return null;
}
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/SiteSelectionPage.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/SiteSelectionPage.java
index d5cb2ef68..999dbeb02 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/SiteSelectionPage.java
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/SiteSelectionPage.java
@@ -100,6 +100,9 @@ public class SiteSelectionPage extends TargetWizardPage {
SiteElement siteElement = (SiteElement)((IStructuredSelection)table.getSelection()).getFirstElement();
if(siteElement != null) {
site = siteElement.getSite();
+ setPageComplete(true);
+ } else {
+ setPageComplete(false);
}
}
});
@@ -120,12 +123,19 @@ public class SiteSelectionPage extends TargetWizardPage {
}
});
+ useNewRepo.addListener(SWT.Selection, new Listener() {
+ public void handleEvent(Event event) {
+ SiteSelectionPage.this.setPageComplete(! useNewRepo.getSelection());
+ }
+ });
+
if(currentProvider != null ) {
disconnectTarget = createRadioButton(composite, Policy.bind("SiteSelectionPage.disconnectTarget"), 2); //$NON-NLS-1$
disconnectTarget.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event event) {
disconnect = disconnectTarget.getSelection();
+ SiteSelectionPage.this.setPageComplete(true);
}
});
}
@@ -139,7 +149,7 @@ public class SiteSelectionPage extends TargetWizardPage {
*/
private void initializeValues() {
Site[] sites = TargetManager.getSites();
- table.setInput(new SiteRootsElement());
+ table.setInput(new SiteRootsElement(null /* no progress monitoring required */));
if (sites.length == 0) {
useNewRepo.setSelection(true);
} else {
@@ -159,4 +169,15 @@ public class SiteSelectionPage extends TargetWizardPage {
public boolean isDisconnect() {
return disconnect;
}
+
+ /**
+ * @see org.eclipse.jface.wizard.IWizardPage#canFlipToNextPage()
+ */
+ public boolean canFlipToNextPage() {
+ if(isDisconnect()) {
+ return false;
+ } else {
+ return true;
+ }
+ }
} \ No newline at end of file
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/TargetAction.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/TargetAction.java
index b5277b780..bc678eb1e 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/TargetAction.java
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/TargetAction.java
@@ -12,11 +12,17 @@ package org.eclipse.team.internal.ui.target;
import java.util.ArrayList;
import java.util.Iterator;
+import java.util.List;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IResourceVisitor;
+import org.eclipse.core.runtime.CoreException;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.team.core.TeamException;
import org.eclipse.team.core.target.IRemoteTargetResource;
import org.eclipse.team.core.target.Site;
+import org.eclipse.team.core.target.TargetManager;
+import org.eclipse.team.core.target.TargetProvider;
import org.eclipse.team.internal.ui.TeamUIPlugin;
import org.eclipse.team.internal.ui.actions.TeamAction;
@@ -71,4 +77,26 @@ public abstract class TargetAction extends TeamAction {
}
return (Site[])sites.toArray(new Site[sites.size()]);
}
+
+ protected IResource[] findResourcesWithOutgoingChanges(IResource[] resources) throws TeamException, CoreException {
+ // Collect the dirty resource
+ final List dirtyResources = new ArrayList();
+ for (int i = 0; i < resources.length; i++) {
+ IResource resource = resources[i];
+ final TargetProvider provider = TargetManager.getProvider(resource.getProject());
+ resource.accept(new IResourceVisitor() {
+ public boolean visit(IResource resource) throws CoreException {
+ if (resource.getType() == IResource.FILE) {
+ if (provider.isDirty(resource)) {
+ dirtyResources.add(resource);
+ }
+ } else {
+ // Check for outgoing folder deletions?
+ }
+ return true;
+ }
+ }, IResource.DEPTH_INFINITE, true /* include phantoms */);
+ }
+ return (IResource[]) dirtyResources.toArray(new IResource[dirtyResources.size()]);
+ }
}
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/UploadAction.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/UploadAction.java
index 643b80d2b..6e28cb595 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/UploadAction.java
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/UploadAction.java
@@ -11,14 +11,12 @@
package org.eclipse.team.internal.ui.target;
import java.lang.reflect.InvocationTargetException;
-import java.util.ArrayList;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.IResourceVisitor;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
@@ -32,10 +30,9 @@ import org.eclipse.team.internal.core.TeamPlugin;
import org.eclipse.team.internal.ui.IPromptCondition;
import org.eclipse.team.internal.ui.Policy;
import org.eclipse.team.internal.ui.PromptingDialog;
-import org.eclipse.team.internal.ui.actions.TeamAction;
import org.eclipse.ui.actions.WorkspaceModifyOperation;
-public class UploadAction extends TeamAction {
+public class UploadAction extends TargetAction {
/**
* @see TeamAction#isEnabled()
@@ -74,33 +71,17 @@ public class UploadAction extends TeamAction {
while (iterator.hasNext()) {
IProgressMonitor subMonitor = new InfiniteSubProgressMonitor(monitor, 1024);
final TargetProvider provider = (TargetProvider)iterator.next();
- monitor.setTaskName(Policy.bind("UploadAction.working", provider.getURL().toExternalForm())); //$NON-NLS-1$
+ subMonitor.setTaskName(Policy.bind("UploadAction.working", provider.getURL().toExternalForm())); //$NON-NLS-1$
- // Collect the dirty resource
- List list = (List)table.get(provider);
- final List dirtyResources = new ArrayList();
- for (Iterator iter = list.iterator(); iter.hasNext();) {
- IResource resource = (IResource) iter.next();
- resource.accept(new IResourceVisitor() {
- public boolean visit(IResource resource) throws CoreException {
- if (resource.getType() == IResource.FILE) {
- if (provider.isDirty(resource)) {
- dirtyResources.add(resource);
- }
- } else {
- // Check for outgoing folder deletions?
- }
- return true;
- }
- }, IResource.DEPTH_INFINITE, true /* include phantoms */);
- }
- if (dirtyResources.isEmpty()) {
+ IResource[] providerResources = (IResource[])((List)table.get(provider)).toArray(new IResource[0]);
+ IResource[] outgoingChanges = findResourcesWithOutgoingChanges(providerResources);
+ if (outgoingChanges.length == 0) {
getShell().getDisplay().syncExec(
new Runnable() {
public void run() {
MessageDialog.openInformation(getShell(),
- Policy.bind("UploadAction.noDirtyTitle"),
- Policy.bind("UploadAction.noDirtyMessage"));
+ Policy.bind("UploadAction.noDirtyTitle"), //$NON-NLS-1$
+ Policy.bind("UploadAction.noDirtyMessage")); //$NON-NLS-1$
}
});
return;
@@ -109,13 +90,13 @@ public class UploadAction extends TeamAction {
// Prompt for any outgoing deletions
PromptingDialog prompt = new PromptingDialog(
getShell(),
- (IResource[])dirtyResources.toArray(new IResource[list.size()]),
+ outgoingChanges,
new IPromptCondition() {
public boolean needsPrompt(IResource resource) {
return ! resource.exists();
}
public String promptMessage(IResource resource) {
- return Policy.bind("UploadAction.confirmFileDeletionMessage", resource.getFullPath().toString());
+ return Policy.bind("UploadAction.confirmFileDeletionMessage", resource.getFullPath().toString()); //$NON-NLS-1$
}
},
Policy.bind("UploadAction.confirmDeletionTitle"));//$NON-NLS-1$
@@ -133,5 +114,4 @@ public class UploadAction extends TeamAction {
}
}, Policy.bind("UploadAction.problemMessage"), this.PROGRESS_DIALOG); //$NON-NLS-1$
}
-
}

Back to the top