1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-07-08 17:45:24 +02:00

drag and drop transfer operations now use Worker jobs instead of UI jobs. Allows for better ui responsiveness and concurrent operations.

This commit is contained in:
David McKnight 2006-05-31 14:34:29 +00:00
parent 2951860b14
commit 6ed9345743
5 changed files with 108 additions and 50 deletions

View file

@ -61,6 +61,7 @@ import org.eclipse.rse.ui.messages.SystemMessageDialog;
import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.PlatformUI; import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.actions.RenameResourceAction;
/** /**
@ -1492,20 +1493,41 @@ public class UniversalFileTransferUtility
if (targetFileOrFolder != null && targetFileOrFolder.exists()) if (targetFileOrFolder != null && targetFileOrFolder.exists())
{ {
ValidatorFileUniqueName validator = null; RenameRunnable rr = new RenameRunnable(targetFileOrFolder);
SystemRenameSingleDialog dlg = new SystemRenameSingleDialog(shell, true, targetFileOrFolder, validator); // true => copy-collision-mode Display.getDefault().syncExec(rr);
newName = rr.getNewName();
dlg.open();
if (!dlg.wasCancelled())
newName = dlg.getNewName();
else
newName = null;
} }
return newName; 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) protected static String checkForCollision(IRemoteFile targetFolder, String oldName)
{ {
String newName = oldName; String newName = oldName;

View file

@ -1655,8 +1655,16 @@ public class SystemViewRemoteFileAdapter
if (set.size() > 0) if (set.size() > 0)
{ {
if (fromSet instanceof SystemWorkspaceResourceSet) if (fromSet instanceof SystemWorkspaceResourceSet)
{
Shell shell = null;
try
{
shell = getShell();
}
catch (Exception e)
{ {
}
boolean doSuperTransferProperty = RSEUIPlugin.getDefault().getPreferenceStore().getBoolean(ISystemPreferencesConstants.DOSUPERTRANSFER); boolean doSuperTransferProperty = RSEUIPlugin.getDefault().getPreferenceStore().getBoolean(ISystemPreferencesConstants.DOSUPERTRANSFER);
if (!doSuperTransferProperty) if (!doSuperTransferProperty)
{ {
@ -1669,11 +1677,11 @@ public class SystemViewRemoteFileAdapter
monitor.beginTask(_uploadMessage.getLevelOneText(), size); monitor.beginTask(_uploadMessage.getLevelOneText(), size);
} }
// back to hierarchy // back to hierarchy
return UniversalFileTransferUtility.copyWorkspaceResourcesToRemote((SystemWorkspaceResourceSet)fromSet, targetFolder, monitor, getShell(), true); return UniversalFileTransferUtility.copyWorkspaceResourcesToRemote((SystemWorkspaceResourceSet)fromSet, targetFolder, monitor, shell, true);
} }
else else
{ {
return UniversalFileTransferUtility.copyWorkspaceResourcesToRemote((SystemWorkspaceResourceSet)fromSet, targetFolder, monitor, getShell(), true); return UniversalFileTransferUtility.copyWorkspaceResourcesToRemote((SystemWorkspaceResourceSet)fromSet, targetFolder, monitor, shell, true);
} }
} }
else if (fromSet instanceof SystemRemoteResourceSet) else if (fromSet instanceof SystemRemoteResourceSet)

View file

@ -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; 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}); String str = MessageFormat.format(_percentMsg, new Object[] {totalSentBuf, totalBuf, percentBuf});
monitor.subTask(str); monitor.subTask(str);
if (display != null)
{
while (display.readAndDispatch()) while (display.readAndDispatch())
{ {
} }
}
isCancelled = monitor.isCanceled(); isCancelled = monitor.isCanceled();
if (isCancelled) if (isCancelled && display != null)
{ {
while (display.readAndDispatch()) while (display.readAndDispatch())
{ {

View file

@ -62,7 +62,6 @@ public class SftpFileService extends AbstractFileService implements IFileService
return "Access a remote file system via Ssh / Sftp protocol"; return "Access a remote file system via Ssh / Sftp protocol";
} }
//TODO specify Exception more clearly
public void connect() throws Exception { public void connect() throws Exception {
Activator.trace("SftpFileService.connecting..."); //$NON-NLS-1$ Activator.trace("SftpFileService.connecting..."); //$NON-NLS-1$
try { try {
@ -78,7 +77,6 @@ public class SftpFileService extends AbstractFileService implements IFileService
} }
} }
//TODO specify Exception more clearly
protected ChannelSftp getChannel(String task) throws Exception protected ChannelSftp getChannel(String task) throws Exception
{ {
Activator.trace(task); Activator.trace(task);
@ -243,7 +241,7 @@ public class SftpFileService extends AbstractFileService implements IFileService
} }
public boolean count(long count){ public boolean count(long count){
fMonitor.worked((int)count); fMonitor.worked((int)count);
while (Display.getCurrent().readAndDispatch());
return !(fMonitor.isCanceled()); return !(fMonitor.isCanceled());
} }
public void end(){ public void end(){

View file

@ -24,11 +24,14 @@ import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.Viewer;
import org.eclipse.rse.core.RSECorePlugin;
import org.eclipse.rse.core.SystemBasePlugin; import org.eclipse.rse.core.SystemBasePlugin;
import org.eclipse.rse.core.subsystems.ISubSystem; import org.eclipse.rse.core.subsystems.ISubSystem;
import org.eclipse.rse.core.subsystems.ISubSystemConfiguration; import org.eclipse.rse.core.subsystems.ISubSystemConfiguration;
import org.eclipse.rse.core.subsystems.SubSystem;
import org.eclipse.rse.filters.ISystemFilterReference; import org.eclipse.rse.filters.ISystemFilterReference;
import org.eclipse.rse.model.IHost; import org.eclipse.rse.model.IHost;
import org.eclipse.rse.model.ISystemContainer; import org.eclipse.rse.model.ISystemContainer;
@ -50,7 +53,7 @@ import org.eclipse.ui.progress.UIJob;
* Runnable to perform actual transfer operation. * 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; public static final int SRC_TYPE_RSE_RESOURCE = 0;
@ -492,7 +495,7 @@ public class SystemDNDTransferRunnable extends UIJob
return true; return true;
} }
public IStatus runInUIThread(IProgressMonitor monitor) public IStatus run(IProgressMonitor monitor)
{ {
_ok = true; _ok = true;
@ -541,14 +544,32 @@ public class SystemDNDTransferRunnable extends UIJob
{ {
monitor.done(); monitor.done();
} }
// always refresh
ISystemRegistry registry = RSEUIPlugin.getTheSystemRegistry();
if (target != null && target instanceof ISystemContainer) if (target != null && target instanceof ISystemContainer)
{ {
((ISystemContainer)target).markStale(true); ((ISystemContainer)target).markStale(true);
} }
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)
{
super("Refresh");
_target = target;
_targetSubSystem = targetSubSystem;
}
public IStatus runInUIThread(IProgressMonitor monitor)
{
ISystemRegistry registry = RSEUIPlugin.getTheSystemRegistry();
if (_resultTgtObjects.size() > 0) if (_resultTgtObjects.size() > 0)
{ {
boolean doRefresh = _ok; boolean doRefresh = _ok;
@ -567,20 +588,27 @@ public class SystemDNDTransferRunnable extends UIJob
} }
if (_originatingViewer instanceof TreeViewer) if (_originatingViewer instanceof TreeViewer)
{
try
{ {
TreeViewer viewer = (TreeViewer) _originatingViewer; TreeViewer viewer = (TreeViewer) _originatingViewer;
viewer.setExpandedState(target, true); viewer.setExpandedState(_target, true);
}
catch (Exception e)
{
}
} }
if (doRefresh) if (doRefresh)
{ {
registry.fireRemoteResourceChangeEvent(ISystemRemoteChangeEvents.SYSTEM_REMOTE_RESOURCE_CREATED, _resultTgtObjects, target, targetSubSystem, null, _originatingViewer); registry.fireRemoteResourceChangeEvent(ISystemRemoteChangeEvents.SYSTEM_REMOTE_RESOURCE_CREATED, _resultTgtObjects, _target, _targetSubSystem, null, _originatingViewer);
} }
} }
registry.fireEvent(new SystemResourceChangeEvent(_target, ISystemResourceChangeEvents.EVENT_REFRESH, _target));
registry.fireEvent(new SystemResourceChangeEvent(target, ISystemResourceChangeEvents.EVENT_REFRESH, target));
return Status.OK_STATUS; return Status.OK_STATUS;
} }
}
private void operationFailed(IProgressMonitor monitor) private void operationFailed(IProgressMonitor monitor)
{ {