diff --git a/rse/plugins/org.eclipse.rse.core/src/org/eclipse/rse/core/model/ISystemRegistry.java b/rse/plugins/org.eclipse.rse.core/src/org/eclipse/rse/core/model/ISystemRegistry.java index b379082dd01..44f2fdba12e 100644 --- a/rse/plugins/org.eclipse.rse.core/src/org/eclipse/rse/core/model/ISystemRegistry.java +++ b/rse/plugins/org.eclipse.rse.core/src/org/eclipse/rse/core/model/ISystemRegistry.java @@ -643,6 +643,11 @@ public interface ISystemRegistry extends ISchedulingRule { */ public List findFilterReferencesFor(Object resource, ISubSystem subsystem); + /** + * Returns filter references associated with this resource under the subsystem + */ + public List findFilterReferencesFor(Object resource, ISubSystem subsystem, boolean onlyCached); + /** * Marks all filters for this subsystem as stale to prevent caching * @param subsystem diff --git a/rse/plugins/org.eclipse.rse.subsystems.files.core/src/org/eclipse/rse/subsystems/files/core/servicesubsystem/FileServiceSubSystem.java b/rse/plugins/org.eclipse.rse.subsystems.files.core/src/org/eclipse/rse/subsystems/files/core/servicesubsystem/FileServiceSubSystem.java index b117ad9b611..5898c0e6b09 100644 --- a/rse/plugins/org.eclipse.rse.subsystems.files.core/src/org/eclipse/rse/subsystems/files/core/servicesubsystem/FileServiceSubSystem.java +++ b/rse/plugins/org.eclipse.rse.subsystems.files.core/src/org/eclipse/rse/subsystems/files/core/servicesubsystem/FileServiceSubSystem.java @@ -154,7 +154,11 @@ public final class FileServiceSubSystem extends RemoteFileSubSystem implements I */ public IRemoteFile getRemoteFileObject(String folderOrFileName) throws SystemMessageException { - String fofName = ArchiveHandlerManager.cleanUpVirtualPath(folderOrFileName); + String fofName = folderOrFileName; + if (folderOrFileName.length() > 1) + { + fofName = ArchiveHandlerManager.cleanUpVirtualPath(folderOrFileName); + } IRemoteFile file = getCachedRemoteFile(fofName); if (file != null && !file.isStale()) { return file; diff --git a/rse/plugins/org.eclipse.rse.subsystems.files.core/src/org/eclipse/rse/subsystems/files/core/subsystems/RemoteFile.java b/rse/plugins/org.eclipse.rse.subsystems.files.core/src/org/eclipse/rse/subsystems/files/core/subsystems/RemoteFile.java index 9be005625fb..c65c2d4eb61 100644 --- a/rse/plugins/org.eclipse.rse.subsystems.files.core/src/org/eclipse/rse/subsystems/files/core/subsystems/RemoteFile.java +++ b/rse/plugins/org.eclipse.rse.subsystems.files.core/src/org/eclipse/rse/subsystems/files/core/subsystems/RemoteFile.java @@ -189,8 +189,10 @@ public abstract class RemoteFile implements IRemoteFile, IAdaptable, Comparable parentFile = ss.getRemoteFileObject(pathOnly); else if (pathOnly.length() == 1) { - // parentFile is already null - //parentFile = null; + if (pathOnly.charAt(0) == sep) + { + parentFile = ss.getRemoteFileObject(pathOnly); // root file + } } else if (!(pathOnly.charAt(pathOnly.length()-1)==sep)) parentFile = ss.getRemoteFileObject(pathOnly+sep); diff --git a/rse/plugins/org.eclipse.rse.ui/.settings/org.eclipse.core.resources.prefs b/rse/plugins/org.eclipse.rse.ui/.settings/org.eclipse.core.resources.prefs index 217bc8e347f..39fccfdb3e8 100644 --- a/rse/plugins/org.eclipse.rse.ui/.settings/org.eclipse.core.resources.prefs +++ b/rse/plugins/org.eclipse.rse.ui/.settings/org.eclipse.core.resources.prefs @@ -1,4 +1,4 @@ -#Mon Feb 19 12:59:50 GMT+01:00 2007 +#Mon Feb 19 16:11:24 EST 2007 eclipse.preferences.version=1 encoding//UI/org/eclipse/rse/ui/SystemWidgetHelpers.java=UTF-8 encoding//UI/org/eclipse/rse/ui/wizards/newconnection/RSEMainNewConnectionWizard.java=UTF-8 diff --git a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/internal/ui/view/SystemResourceSelectionForm.java b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/internal/ui/view/SystemResourceSelectionForm.java index c9a6f878f9f..038f0861328 100644 --- a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/internal/ui/view/SystemResourceSelectionForm.java +++ b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/internal/ui/view/SystemResourceSelectionForm.java @@ -30,6 +30,7 @@ import org.eclipse.rse.core.SystemAdapterHelpers; import org.eclipse.rse.core.filters.ISystemFilterReference; import org.eclipse.rse.core.model.IHost; import org.eclipse.rse.core.model.ISystemRegistry; +import org.eclipse.rse.core.model.SystemChildrenContentsType; import org.eclipse.rse.core.subsystems.ISubSystem; import org.eclipse.rse.services.clientserver.messages.SystemMessage; import org.eclipse.rse.ui.RSEUIPlugin; @@ -48,6 +49,7 @@ import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; +import org.eclipse.swt.widgets.Item; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; @@ -309,6 +311,7 @@ public class SystemResourceSelectionForm implements ISelectionChangedListener ISystemViewElementAdapter adapter = getAdapter(selection); if (adapter != null) { + Object parent = adapter.getParent(selection); ISystemRegistry registry = RSEUIPlugin.getTheSystemRegistry(); ISubSystem ss = adapter.getSubSystem(selection); IHost connection = ss.getHost(); @@ -319,22 +322,21 @@ public class SystemResourceSelectionForm implements ISelectionChangedListener _connectionCombo.select(connection); } } - List filterRefs = registry.findFilterReferencesFor(selection, ss); + List filterRefs = registry.findFilterReferencesFor(selection, ss, false); SystemView systemView = _systemViewForm.getSystemView(); if (filterRefs.size() > 0) { ISystemFilterReference ref = (ISystemFilterReference)filterRefs.get(0); - systemView.setExpandedElements(new Object[] {ref}); - systemView.refreshRemoteObject(selection, selection, true); + systemView.expandTo(ref, selection); + return true; } else { - Object parent = adapter.getParent(selection); if (setPreSelection(parent)) - { - systemView.refreshRemoteObject(selection, selection, true); + { + systemView.expandTo(parent, selection); return true; } } diff --git a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/internal/ui/view/SystemView.java b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/internal/ui/view/SystemView.java index 45b9e8e2e06..5b1024f41ba 100644 --- a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/internal/ui/view/SystemView.java +++ b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/internal/ui/view/SystemView.java @@ -5033,6 +5033,51 @@ public class SystemView extends SafeTreeViewer implements ISystemTree, ISystemRe // ---------------------------------- // Support for EXPAND TO-> ACTIONS... // ---------------------------------- + + public void expandTo(Object parentObject, Object remoteObject) + { + SystemViewLabelAndContentProvider provider = (SystemViewLabelAndContentProvider)getContentProvider(); + provider.setEnableDeferredQueries(false); + + ISystemViewElementAdapter adapter = getViewAdapter(parentObject); + ISystemViewElementAdapter targetAdapter = getViewAdapter(remoteObject); + + + ISubSystem ss = adapter.getSubSystem(parentObject); + String parentName = adapter.getAbsoluteName(parentObject); + String remoteObjectName = targetAdapter.getAbsoluteName(remoteObject); + Item parentItem = findFirstRemoteItemReference(parentName, ss, null); + if (parentItem != null) + { + createChildren(parentItem); + Item[] children = getItems(parentItem); + setExpanded(parentItem, true); + for (int i = 0; i < children.length; i++) + { + + Item child = children[i]; + Object data = child.getData(); + if (data.equals(remoteObject)) + { + select(remoteObject, false); + provider.setEnableDeferredQueries(true); + return; + } + else + { + ISystemViewElementAdapter dataAdapter = (ISystemViewElementAdapter)((IAdaptable)data).getAdapter(ISystemViewElementAdapter.class); + String path = dataAdapter.getAbsoluteName(data); + if (remoteObjectName.startsWith(path)) + { + expandTo(data, remoteObject); + } + } + } + } + provider.setEnableDeferredQueries(true); + } + + /** * Called when user selects an Expand To action to expand the selected remote object with a quick filter */ diff --git a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/internal/ui/view/SystemViewLabelAndContentProvider.java b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/internal/ui/view/SystemViewLabelAndContentProvider.java index 23f349c648b..deaca3061fb 100644 --- a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/internal/ui/view/SystemViewLabelAndContentProvider.java +++ b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/internal/ui/view/SystemViewLabelAndContentProvider.java @@ -69,7 +69,7 @@ public class SystemViewLabelAndContentProvider extends LabelProvider private boolean filesOnly, foldersOnly; private String filterString = null; private Hashtable resolvedChildrenPerFolder = null; // local cache to improve performance - + private boolean _enableDeferredQueries = true; private SystemDeferredTreeContentManager manager; /** * The cache of images that have been dispensed by this provider. @@ -245,7 +245,13 @@ public class SystemViewLabelAndContentProvider extends LabelProvider { //IPreferenceStore store = RSEUIPlugin.getDefault().getPreferenceStore(); //return store.getBoolean(ISystemPreferencesConstants.USE_DEFERRED_QUERIES); - return true; // DKM now enforcing deferred queries + //return true; // DKM now enforcing deferred queries + return _enableDeferredQueries; + } + + public void setEnableDeferredQueries(boolean enable) + { + _enableDeferredQueries = enable; } diff --git a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/dialogs/SystemRemoteResourceDialog.java b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/dialogs/SystemRemoteResourceDialog.java index b2ca7ea6274..167b023726d 100644 --- a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/dialogs/SystemRemoteResourceDialog.java +++ b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/dialogs/SystemRemoteResourceDialog.java @@ -66,7 +66,7 @@ public abstract class SystemRemoteResourceDialog extends SystemPromptDialog public void initForm() { - _form.setPreSelection(_preSelection); + if (_customViewerFilter != null) { _form.applyViewerFilter(_customViewerFilter); @@ -75,6 +75,7 @@ public abstract class SystemRemoteResourceDialog extends SystemPromptDialog { _form.applyViewerFilter(getViewerFilter()); } + _form.setPreSelection(_preSelection); _form.setSelectionValidator(_selectionValidator); _form.setShowPropertySheet(_showPropertySheet); _form.setSelectionTreeToolTipText(getTreeTip()); diff --git a/rse/plugins/org.eclipse.rse.ui/model/org/eclipse/rse/model/SystemRegistry.java b/rse/plugins/org.eclipse.rse.ui/model/org/eclipse/rse/model/SystemRegistry.java index 49e50aba365..155c0e51a1b 100644 --- a/rse/plugins/org.eclipse.rse.ui/model/org/eclipse/rse/model/SystemRegistry.java +++ b/rse/plugins/org.eclipse.rse.ui/model/org/eclipse/rse/model/SystemRegistry.java @@ -3158,6 +3158,11 @@ public class SystemRegistry implements ISystemRegistryUI, ISystemModelChangeEven } public List findFilterReferencesFor(Object resource, ISubSystem subsystem) + { + return findFilterReferencesFor(resource, subsystem, true); + } + + public List findFilterReferencesFor(Object resource, ISubSystem subsystem, boolean onlyCached) { String elementName = getRemoteResourceAbsoluteName(resource); List results = new ArrayList(); @@ -3168,7 +3173,8 @@ public class SystemRegistry implements ISystemRegistryUI, ISystemModelChangeEven { ISystemFilterReference filterRef = refs[i]; - if (!filterRef.isStale() && filterRef.hasContents(SystemChildrenContentsType.getInstance())) + if (!onlyCached || (!filterRef.isStale() && filterRef.hasContents(SystemChildrenContentsType.getInstance()))) + { // #1 if (subsystem.doesFilterMatch(filterRef.getReferencedFilter(), elementName))