diff --git a/rse/plugins/org.eclipse.rse.files.ui/src/org/eclipse/rse/files/ui/resources/UniversalFileTransferUtility.java b/rse/plugins/org.eclipse.rse.files.ui/src/org/eclipse/rse/files/ui/resources/UniversalFileTransferUtility.java index c20d00731b6..63a530f1905 100644 --- a/rse/plugins/org.eclipse.rse.files.ui/src/org/eclipse/rse/files/ui/resources/UniversalFileTransferUtility.java +++ b/rse/plugins/org.eclipse.rse.files.ui/src/org/eclipse/rse/files/ui/resources/UniversalFileTransferUtility.java @@ -61,6 +61,7 @@ import org.eclipse.rse.ui.messages.SystemMessageDialog; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.PlatformUI; +import org.eclipse.ui.actions.RenameResourceAction; /** @@ -1492,20 +1493,41 @@ public class UniversalFileTransferUtility if (targetFileOrFolder != null && targetFileOrFolder.exists()) { - ValidatorFileUniqueName validator = null; - SystemRenameSingleDialog dlg = new SystemRenameSingleDialog(shell, true, targetFileOrFolder, validator); // true => copy-collision-mode - - dlg.open(); - if (!dlg.wasCancelled()) - newName = dlg.getNewName(); - else - newName = null; + RenameRunnable rr = new RenameRunnable(targetFileOrFolder); + Display.getDefault().syncExec(rr); + newName = rr.getNewName(); } return newName; } + public static class RenameRunnable implements Runnable + { + private IRemoteFile _targetFileOrFolder; + private String _newName; + public RenameRunnable(IRemoteFile targetFileOrFolder) + { + _targetFileOrFolder = targetFileOrFolder; + } + + public void run() { + ValidatorFileUniqueName validator = null; + SystemRenameSingleDialog dlg = new SystemRenameSingleDialog(null, true, _targetFileOrFolder, validator); // true => copy-collision-mode + + dlg.open(); + if (!dlg.wasCancelled()) + _newName = dlg.getNewName(); + else + _newName = null; + } + + public String getNewName() + { + return _newName; + } + } + protected static String checkForCollision(IRemoteFile targetFolder, String oldName) { String newName = oldName; diff --git a/rse/plugins/org.eclipse.rse.files.ui/src/org/eclipse/rse/files/ui/view/SystemViewRemoteFileAdapter.java b/rse/plugins/org.eclipse.rse.files.ui/src/org/eclipse/rse/files/ui/view/SystemViewRemoteFileAdapter.java index 83cdff322a9..eb80c7745d8 100644 --- a/rse/plugins/org.eclipse.rse.files.ui/src/org/eclipse/rse/files/ui/view/SystemViewRemoteFileAdapter.java +++ b/rse/plugins/org.eclipse.rse.files.ui/src/org/eclipse/rse/files/ui/view/SystemViewRemoteFileAdapter.java @@ -1656,7 +1656,15 @@ public class SystemViewRemoteFileAdapter { if (fromSet instanceof SystemWorkspaceResourceSet) { - + Shell shell = null; + try + { + shell = getShell(); + } + catch (Exception e) + { + + } boolean doSuperTransferProperty = RSEUIPlugin.getDefault().getPreferenceStore().getBoolean(ISystemPreferencesConstants.DOSUPERTRANSFER); if (!doSuperTransferProperty) { @@ -1669,11 +1677,11 @@ public class SystemViewRemoteFileAdapter monitor.beginTask(_uploadMessage.getLevelOneText(), size); } // back to hierarchy - return UniversalFileTransferUtility.copyWorkspaceResourcesToRemote((SystemWorkspaceResourceSet)fromSet, targetFolder, monitor, getShell(), true); + return UniversalFileTransferUtility.copyWorkspaceResourcesToRemote((SystemWorkspaceResourceSet)fromSet, targetFolder, monitor, shell, true); } else { - return UniversalFileTransferUtility.copyWorkspaceResourcesToRemote((SystemWorkspaceResourceSet)fromSet, targetFolder, monitor, getShell(), true); + return UniversalFileTransferUtility.copyWorkspaceResourcesToRemote((SystemWorkspaceResourceSet)fromSet, targetFolder, monitor, shell, true); } } else if (fromSet instanceof SystemRemoteResourceSet) diff --git a/rse/plugins/org.eclipse.rse.services.dstore/src/org/eclipse/rse/services/dstore/files/DStoreFileService.java b/rse/plugins/org.eclipse.rse.services.dstore/src/org/eclipse/rse/services/dstore/files/DStoreFileService.java index 1e38b76c5fa..1f996f52a06 100644 --- a/rse/plugins/org.eclipse.rse.services.dstore/src/org/eclipse/rse/services/dstore/files/DStoreFileService.java +++ b/rse/plugins/org.eclipse.rse.services.dstore/src/org/eclipse/rse/services/dstore/files/DStoreFileService.java @@ -448,7 +448,7 @@ public class DStoreFileService extends AbstractDStoreService implements IFileSer } - if (display != null && monitor != null) + if (/*display != null &&*/ monitor != null) { long percent = (totalSent * 100) / totalBytes; @@ -469,15 +469,17 @@ public class DStoreFileService extends AbstractDStoreService implements IFileSer String str = MessageFormat.format(_percentMsg, new Object[] {totalSentBuf, totalBuf, percentBuf}); monitor.subTask(str); - - while (display.readAndDispatch()) + if (display != null) { + while (display.readAndDispatch()) + { + } } isCancelled = monitor.isCanceled(); - if (isCancelled) + if (isCancelled && display != null) { while (display.readAndDispatch()) { diff --git a/rse/plugins/org.eclipse.rse.services.ssh/src/org/eclipse/rse/services/ssh/files/SftpFileService.java b/rse/plugins/org.eclipse.rse.services.ssh/src/org/eclipse/rse/services/ssh/files/SftpFileService.java index 797cbb991d9..1f10a8ee5db 100644 --- a/rse/plugins/org.eclipse.rse.services.ssh/src/org/eclipse/rse/services/ssh/files/SftpFileService.java +++ b/rse/plugins/org.eclipse.rse.services.ssh/src/org/eclipse/rse/services/ssh/files/SftpFileService.java @@ -62,7 +62,6 @@ public class SftpFileService extends AbstractFileService implements IFileService return "Access a remote file system via Ssh / Sftp protocol"; } - //TODO specify Exception more clearly public void connect() throws Exception { Activator.trace("SftpFileService.connecting..."); //$NON-NLS-1$ try { @@ -78,7 +77,6 @@ public class SftpFileService extends AbstractFileService implements IFileService } } - //TODO specify Exception more clearly protected ChannelSftp getChannel(String task) throws Exception { Activator.trace(task); @@ -243,7 +241,7 @@ public class SftpFileService extends AbstractFileService implements IFileService } public boolean count(long count){ fMonitor.worked((int)count); - while (Display.getCurrent().readAndDispatch()); + return !(fMonitor.isCanceled()); } public void end(){ diff --git a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/SystemDNDTransferRunnable.java b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/SystemDNDTransferRunnable.java index 508ceafd649..138e85d624c 100644 --- a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/SystemDNDTransferRunnable.java +++ b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/SystemDNDTransferRunnable.java @@ -24,11 +24,14 @@ import org.eclipse.core.runtime.IAdaptable; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; +import org.eclipse.core.runtime.jobs.Job; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.viewers.Viewer; +import org.eclipse.rse.core.RSECorePlugin; import org.eclipse.rse.core.SystemBasePlugin; import org.eclipse.rse.core.subsystems.ISubSystem; import org.eclipse.rse.core.subsystems.ISubSystemConfiguration; +import org.eclipse.rse.core.subsystems.SubSystem; import org.eclipse.rse.filters.ISystemFilterReference; import org.eclipse.rse.model.IHost; import org.eclipse.rse.model.ISystemContainer; @@ -50,7 +53,7 @@ import org.eclipse.ui.progress.UIJob; * Runnable to perform actual transfer operation. * */ -public class SystemDNDTransferRunnable extends UIJob +public class SystemDNDTransferRunnable extends Job { public static final int SRC_TYPE_RSE_RESOURCE = 0; @@ -492,7 +495,7 @@ public class SystemDNDTransferRunnable extends UIJob return true; } - public IStatus runInUIThread(IProgressMonitor monitor) + public IStatus run(IProgressMonitor monitor) { _ok = true; @@ -541,45 +544,70 @@ public class SystemDNDTransferRunnable extends UIJob { monitor.done(); } - // always refresh - ISystemRegistry registry = RSEUIPlugin.getTheSystemRegistry(); + if (target != null && target instanceof ISystemContainer) { ((ISystemContainer)target).markStale(true); } - if (_resultTgtObjects.size() > 0) + RefreshJob refresh = new RefreshJob(target, targetSubSystem); + refresh.schedule(); + return Status.OK_STATUS; + } + + public class RefreshJob extends UIJob + { + private Object _target; + private ISubSystem _targetSubSystem; + public RefreshJob(Object target, ISubSystem targetSubSystem) { - boolean doRefresh = _ok; - for (int t = 0; t < _resultTgtObjects.size() && t < _resultSrcObjects.size(); t++) - { - Object tgt = _resultTgtObjects.get(t); - Object src = _resultSrcObjects.get(t); - if (tgt == src || tgt == null) - { - doRefresh = false; - } - else - { - doRefresh = true; - } - } - - if (_originatingViewer instanceof TreeViewer) - { - TreeViewer viewer = (TreeViewer) _originatingViewer; - viewer.setExpandedState(target, true); - } - - if (doRefresh) - { - registry.fireRemoteResourceChangeEvent(ISystemRemoteChangeEvents.SYSTEM_REMOTE_RESOURCE_CREATED, _resultTgtObjects, target, targetSubSystem, null, _originatingViewer); - } + super("Refresh"); + _target = target; + _targetSubSystem = targetSubSystem; } - registry.fireEvent(new SystemResourceChangeEvent(target, ISystemResourceChangeEvents.EVENT_REFRESH, target)); - return Status.OK_STATUS; + public IStatus runInUIThread(IProgressMonitor monitor) + { + ISystemRegistry registry = RSEUIPlugin.getTheSystemRegistry(); + if (_resultTgtObjects.size() > 0) + { + boolean doRefresh = _ok; + for (int t = 0; t < _resultTgtObjects.size() && t < _resultSrcObjects.size(); t++) + { + Object tgt = _resultTgtObjects.get(t); + Object src = _resultSrcObjects.get(t); + if (tgt == src || tgt == null) + { + doRefresh = false; + } + else + { + doRefresh = true; + } + } + + if (_originatingViewer instanceof TreeViewer) + { + try + { + TreeViewer viewer = (TreeViewer) _originatingViewer; + viewer.setExpandedState(_target, true); + } + catch (Exception e) + { + + } + } + + if (doRefresh) + { + registry.fireRemoteResourceChangeEvent(ISystemRemoteChangeEvents.SYSTEM_REMOTE_RESOURCE_CREATED, _resultTgtObjects, _target, _targetSubSystem, null, _originatingViewer); + } + } + registry.fireEvent(new SystemResourceChangeEvent(_target, ISystemResourceChangeEvents.EVENT_REFRESH, _target)); + return Status.OK_STATUS; + } } private void operationFailed(IProgressMonitor monitor)