From e77a193982472c3e6400717949b27090256fd633 Mon Sep 17 00:00:00 2001 From: David McKnight Date: Mon, 3 Dec 2007 20:34:46 +0000 Subject: [PATCH] [143503] [updating] need a synchronize cache operation --- .../SynchronizeCacheActionDelegate.java | 39 +++++++++++++++++-- .../UniversalFileTransferUtility.java | 2 +- 2 files changed, 36 insertions(+), 5 deletions(-) diff --git a/rse/plugins/org.eclipse.rse.files.ui/src/org/eclipse/rse/files/ui/actions/SynchronizeCacheActionDelegate.java b/rse/plugins/org.eclipse.rse.files.ui/src/org/eclipse/rse/files/ui/actions/SynchronizeCacheActionDelegate.java index 6ac0de2b3da..f5703c7e250 100644 --- a/rse/plugins/org.eclipse.rse.files.ui/src/org/eclipse/rse/files/ui/actions/SynchronizeCacheActionDelegate.java +++ b/rse/plugins/org.eclipse.rse.files.ui/src/org/eclipse/rse/files/ui/actions/SynchronizeCacheActionDelegate.java @@ -15,7 +15,11 @@ package org.eclipse.rse.files.ui.actions; import java.lang.reflect.InvocationTargetException; +import java.util.ArrayList; +import java.util.HashMap; import java.util.Iterator; +import java.util.List; +import java.util.Map; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IAdaptable; @@ -33,6 +37,7 @@ import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.rse.core.model.SystemRemoteResourceSet; import org.eclipse.rse.internal.files.ui.Activator; import org.eclipse.rse.subsystems.files.core.subsystems.IRemoteFile; +import org.eclipse.rse.subsystems.files.core.subsystems.IRemoteFileSubSystem; import org.eclipse.rse.ui.view.ISystemViewElementAdapter; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; @@ -72,12 +77,38 @@ public class SynchronizeCacheActionDelegate implements IActionDelegate { private void cacheRemoteFiles(IRemoteFile[] files, IProgressMonitor monitor) { - IRemoteFile firstFile = files[0]; - ISystemViewElementAdapter adapter = (ISystemViewElementAdapter)((IAdaptable)firstFile).getAdapter(ISystemViewElementAdapter.class); - SystemRemoteResourceSet set = new SystemRemoteResourceSet(firstFile.getParentRemoteFileSubSystem(), files); - adapter.doDrag(set, monitor); + SystemRemoteResourceSet[] sets = getResourceSetsFor(files); + for (int i = 0; i < sets.length; i++){ + SystemRemoteResourceSet set = sets[i]; + set.getAdapter().doDrag(set, monitor); + } } + private SystemRemoteResourceSet[] getResourceSetsFor(IRemoteFile[] files) + { + ISystemViewElementAdapter adapter = null; + Map sets = new HashMap(); + for (int i = 0; i < files.length; i++){ + IRemoteFile file = files[i]; + if (adapter == null){ + adapter = (ISystemViewElementAdapter)((IAdaptable)file).getAdapter(ISystemViewElementAdapter.class); + } + IRemoteFileSubSystem ss = file.getParentRemoteFileSubSystem(); + SystemRemoteResourceSet set = (SystemRemoteResourceSet)sets.get(ss); + if (set == null){ + set = new SystemRemoteResourceSet(ss, adapter); + sets.put(ss, set); + } + set.addResource(file); + } + Iterator iterator = sets.values().iterator(); + List results = new ArrayList(); + while (iterator.hasNext()){ + results.add(iterator.next()); + } + return (SystemRemoteResourceSet[])results.toArray(new SystemRemoteResourceSet[results.size()]); + } + boolean performCacheRemoteFiles(final IRemoteFile[] files) { IRunnableWithProgress op = new IRunnableWithProgress() { public void run(IProgressMonitor monitor) throws InterruptedException, InvocationTargetException { 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 c3740dd1105..bb443578479 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 @@ -464,7 +464,7 @@ public class UniversalFileTransferUtility try { if (broadestContainer != null && !broadestContainer.isSynchronized(IResource.DEPTH_INFINITE)){ - broadestContainer.refreshLocal(IResource.DEPTH_INFINITE, monitor); + broadestContainer.refreshLocal(IResource.DEPTH_INFINITE, null);//monitor); } } catch (Exception e)