1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-07-31 21:05:37 +02:00

[188160] avoid parent refresh if not doing deferred queries

This commit is contained in:
Martin Oberhuber 2007-05-21 19:34:29 +00:00
parent 50f739ec70
commit c1d7fbe5f0

View file

@ -14,6 +14,7 @@
* Michael Berger (IBM) - 146339 Added refresh action graphic. * Michael Berger (IBM) - 146339 Added refresh action graphic.
* Martin Oberhuber (Wind River) - [168975] Move RSE Events API to Core * Martin Oberhuber (Wind River) - [168975] Move RSE Events API to Core
* Martin Oberhuber (Wind River) - [186773] split ISystemRegistryUI from ISystemRegistry * Martin Oberhuber (Wind River) - [186773] split ISystemRegistryUI from ISystemRegistry
* Martin Oberhuber (Wind River) - [188160] avoid parent refresh if not doing deferred queries
********************************************************************************/ ********************************************************************************/
package org.eclipse.rse.ui.actions; package org.eclipse.rse.ui.actions;
@ -30,7 +31,9 @@ import org.eclipse.rse.core.events.ISystemResourceChangeListener;
import org.eclipse.rse.core.events.SystemResourceChangeEvent; import org.eclipse.rse.core.events.SystemResourceChangeEvent;
import org.eclipse.rse.core.model.ISystemContainer; import org.eclipse.rse.core.model.ISystemContainer;
import org.eclipse.rse.core.model.ISystemRegistry; import org.eclipse.rse.core.model.ISystemRegistry;
import org.eclipse.rse.core.subsystems.ISubSystem;
import org.eclipse.rse.internal.ui.SystemResources; import org.eclipse.rse.internal.ui.SystemResources;
import org.eclipse.rse.internal.ui.view.SystemViewFilterReferenceAdapter;
import org.eclipse.rse.ui.ISystemContextMenuConstants; import org.eclipse.rse.ui.ISystemContextMenuConstants;
import org.eclipse.rse.ui.ISystemIconConstants; import org.eclipse.rse.ui.ISystemIconConstants;
import org.eclipse.rse.ui.RSEUIPlugin; import org.eclipse.rse.ui.RSEUIPlugin;
@ -93,14 +96,27 @@ public class SystemRefreshAction extends SystemBaseAction
// get the adapter and find out if it's a leaf node. If so, refresh the parent as well. // get the adapter and find out if it's a leaf node. If so, refresh the parent as well.
ISystemViewElementAdapter adapter = getViewAdapter(obj); ISystemViewElementAdapter adapter = getViewAdapter(obj);
if (adapter != null) { if (adapter != null) {
// choose the item to refresh -- use parent in case of leaf node // choose the item to refresh -- use parent in case of leaf node.
//
// This is because subsystems with deferred queries do not have an
// adapter call for deferred query of properties for a non-container.
//
// The problem with this code is, that we cannot know here whether it
// actually is a leaf node that can never have children, or a container
// that just happens not to have children right now. Also, this code
// adds overhead that may be an unnecessary performance hit.
Object itemToRefresh = obj; Object itemToRefresh = obj;
ISubSystem subsys = adapter.getSubSystem(obj);
if (subsys!=null && adapter.supportsDeferredQueries(subsys) && !(adapter instanceof SystemViewFilterReferenceAdapter)) {
//if deferred queries are not supported, hasChildren() goes right to the remote.
//If deferred queries are supported, it is expected to be cached.
if (!adapter.hasChildren((IAdaptable)obj)) { if (!adapter.hasChildren((IAdaptable)obj)) {
Object parent = adapter.getParent(obj); Object parent = adapter.getParent(obj);
if (parent!=null) { if (parent!=null) {
itemToRefresh = parent; itemToRefresh = parent;
} }
} }
}
// If we can REFRESH_REMOTE, add the absolute name to reselect // If we can REFRESH_REMOTE, add the absolute name to reselect
String absoluteName = adapter.getAbsoluteName(obj); String absoluteName = adapter.getAbsoluteName(obj);
@ -138,8 +154,9 @@ public class SystemRefreshAction extends SystemBaseAction
Iterator it = remoteItems.iterator(); Iterator it = remoteItems.iterator();
while (it.hasNext()) { while (it.hasNext()) {
Object obj = it.next(); Object obj = it.next();
String absName = getViewAdapter(obj).getAbsoluteName(obj); ISubSystem subsys = getViewAdapter(obj).getSubSystem(obj);
if (absName!=null) { if (subsys!=null) {
//Remote refresh works properly inside the subsystem only. Outside, we need to do local refresh.
sr.fireEvent(new SystemResourceChangeEvent(obj, ISystemResourceChangeEvents.EVENT_REFRESH_REMOTE, namesToSelect)); sr.fireEvent(new SystemResourceChangeEvent(obj, ISystemResourceChangeEvents.EVENT_REFRESH_REMOTE, namesToSelect));
} else { } else {
sr.fireEvent(new SystemResourceChangeEvent(obj, ISystemResourceChangeEvents.EVENT_REFRESH, obj)); sr.fireEvent(new SystemResourceChangeEvent(obj, ISystemResourceChangeEvents.EVENT_REFRESH, obj));