From b22279e09bca198e537ec7ed396b2890eaa7e67a Mon Sep 17 00:00:00 2001 From: David McKnight Date: Thu, 29 Jan 2009 19:54:01 +0000 Subject: [PATCH] [262930] Remote System Details view not restoring filter memento input --- .../impl/RemoteProcessSubSystemImpl.java | 7 +++ .../rse/core/subsystems/SubSystem.java | 48 +++++++++++++++---- 2 files changed, 46 insertions(+), 9 deletions(-) diff --git a/rse/plugins/org.eclipse.rse.subsystems.processes.core/src/org/eclipse/rse/subsystems/processes/core/subsystem/impl/RemoteProcessSubSystemImpl.java b/rse/plugins/org.eclipse.rse.subsystems.processes.core/src/org/eclipse/rse/subsystems/processes/core/subsystem/impl/RemoteProcessSubSystemImpl.java index 701937e6c41..4665c3736e5 100644 --- a/rse/plugins/org.eclipse.rse.subsystems.processes.core/src/org/eclipse/rse/subsystems/processes/core/subsystem/impl/RemoteProcessSubSystemImpl.java +++ b/rse/plugins/org.eclipse.rse.subsystems.processes.core/src/org/eclipse/rse/subsystems/processes/core/subsystem/impl/RemoteProcessSubSystemImpl.java @@ -15,6 +15,7 @@ * Martin Oberhuber (Wind River) - [182454] improve getAbsoluteName() documentation * Martin Oberhuber (Wind River) - [186128][refactoring] Move IProgressMonitor last in public base classes * Martin Oberhuber (Wind River) - [218304] Improve deferred adapter loading + * David McKnight (IBM) - [262930] Remote System Details view not restoring filter memento input *******************************************************************************/ package org.eclipse.rse.subsystems.processes.core.subsystem.impl; @@ -175,6 +176,12 @@ public abstract class RemoteProcessSubSystemImpl extends SubSystem implements */ public Object getObjectWithAbsoluteName(String key, IProgressMonitor monitor) throws Exception { + // first attempt getting filter + Object filterRef = super.getObjectWithAbsoluteName(key, monitor); + if (filterRef != null) { + return filterRef; + } + try { long pid = Long.parseLong(key); diff --git a/rse/plugins/org.eclipse.rse.ui/subsystems/org/eclipse/rse/core/subsystems/SubSystem.java b/rse/plugins/org.eclipse.rse.ui/subsystems/org/eclipse/rse/core/subsystems/SubSystem.java index 76e2ce437e5..b1dab18d77d 100644 --- a/rse/plugins/org.eclipse.rse.ui/subsystems/org/eclipse/rse/core/subsystems/SubSystem.java +++ b/rse/plugins/org.eclipse.rse.ui/subsystems/org/eclipse/rse/core/subsystems/SubSystem.java @@ -45,6 +45,7 @@ * David McKnight (IBM) - [244270] Explicit check for isOffline and just returning block implementing a cache for Work Offline * Don Yantzi (IBM) - [244807] Delay connecting if resolving filters while restoring from cache * David McKnight (IBM) - [226787] [services] Dstore processes subsystem is empty after switching from shell processes + * David McKnight (IBM) - [262930] Remote System Details view not restoring filter memento input ********************************************************************************/ package org.eclipse.rse.core.subsystems; @@ -923,22 +924,51 @@ implements IAdaptable, ISubSystem, ISystemFilterPoolReferenceManagerProvider try { ISystemFilterPoolReferenceManager filterMgr = getFilterPoolReferenceManager(); + String modString = filterID.replace('.', ','); + + String[] segments = modString.split(","); - int indexOfDot = filterID.indexOf('.'); - if (indexOfDot > 0) + if (segments.length > 0) { - String mgrName = filterID.substring(0, indexOfDot); + // this is the profile + String mgrName = segments[0]; + // this is the filter pool manager for the profile ISystemFilterPoolManager mgr = parentSubSystemConfiguration.getSystemFilterPoolManager(mgrName); - int indexOfDot2 = filterID.indexOf('.', indexOfDot + 1); - if (mgr != null && indexOfDot2 > 0) - { - String filterPoolName = filterID.substring(indexOfDot + 1, indexOfDot2); + if (mgr != null && segments.length > 1){ + // name of the filter is the last segment + String filterName = segments[segments.length - 1]; + + // filter pool name is the 3rd and 2nd to last segment + //String filterPoolName = + // segments[segments.length - 3] + '.' + + // segments[segments.length - 2]; + + + ISystemFilterPool filterPool = null; + ISystemFilterPool[] filterPools = mgr.getSystemFilterPools(); + for (int p = 0; p < filterPools.length && filterPool == null; p++){ + ISystemFilterPool pool = filterPools[p]; + String realPoolName = pool.getName(); + + // check for match + String filterPoolName = segments[segments.length - 2]; + for (int s = 3; s < segments.length && filterPool == null; s++){ + if (filterPoolName.equals(realPoolName)){ + filterPool = pool; + } + else if (realPoolName.endsWith(filterPoolName)){ + filterPoolName = segments[segments.length - s] + '.' + filterPoolName; + } + else { + // no match + break; + } + } + } - ISystemFilterPool filterPool = mgr.getSystemFilterPool(filterPoolName); - String filterName = filterID.substring(indexOfDot2 + 1, filterID.length()); if (filterPool != null) { ISystemFilter filter = filterPool.getSystemFilter(filterName);