From ddb2de4c9cc2c3c8eb3cd114e10ee62d8cbef579 Mon Sep 17 00:00:00 2001 From: David McKnight Date: Wed, 7 Jul 2010 16:45:26 +0000 Subject: [PATCH] [318836] Period in filter name causes wrong message on drag and drop --- .../rse/core/subsystems/SubSystem.java | 60 ++++++++++++------- 1 file changed, 38 insertions(+), 22 deletions(-) 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 59d9d64de4a..3182cebc570 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 @@ -1,5 +1,5 @@ /******************************************************************************** - * Copyright (c) 2002, 2009 IBM Corporation and others. All rights reserved. + * Copyright (c) 2002, 20010 IBM Corporation and others. All rights reserved. * This program and the accompanying materials are made available under the terms * of the Eclipse Public License v1.0 which accompanies this distribution, and is * available at http://www.eclipse.org/legal/epl-v10.html @@ -48,6 +48,7 @@ * David McKnight (IBM) - [262930] Remote System Details view not restoring filter memento input * David McKnight (IBM) - [272882] [api] Handle exceptions in IService.initService() * David McKnight (IBM) - [284018] concurrent SubSystem.connect() calls can result in double login-prompt + * David McKnight (IBM) - [318836] Period in filter name causes wrong message on drag and drop * ********************************************************************************/ package org.eclipse.rse.core.subsystems; @@ -922,7 +923,7 @@ implements IAdaptable, ISubSystem, ISystemFilterPoolReferenceManagerProvider protected Object getFilterReferenceWithAbsoluteName(String key) { // figure out if there is a filter - String filterID = key; + String filterID = key; try { ISystemFilterPoolReferenceManager filterMgr = getFilterPoolReferenceManager(); @@ -939,40 +940,55 @@ implements IAdaptable, ISubSystem, ISystemFilterPoolReferenceManagerProvider ISystemFilterPoolManager mgr = parentSubSystemConfiguration.getSystemFilterPoolManager(mgrName); 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]; + int segNo = 0; ISystemFilterPool filterPool = null; ISystemFilterPool[] filterPools = mgr.getSystemFilterPools(); for (int p = 0; p < filterPools.length && filterPool == null; p++){ + segNo = 2; // initial segment number for filter pool is 2nd to last + 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; + // check for match + + while (filterPool == null && segNo < segments.length){ + String filterPoolName = segments[segments.length - segNo]; + + for (int s = segNo + 1; 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; + } + } + if (filterPool == null){ + segNo++; // move further up the string } - else if (realPoolName.endsWith(filterPoolName)){ - filterPoolName = segments[segments.length - s] + '.' + filterPoolName; - } - else { - // no match - break; - } - } + } } if (filterPool != null) { + // name of the filter is the last segment + //String filterName = segments[segments.length - 1]; + StringBuffer filterBuf = new StringBuffer(); + for (int i = segNo - 1; i > 0; i--){ // dealing with filtername that potentially had a dot in it + String filterPartName = segments[segments.length - i]; + filterBuf.append(filterPartName); + if (i > 1){ + filterBuf.append('.'); + } + } + String filterName = filterBuf.toString(); + ISystemFilter filter = filterPool.getSystemFilter(filterName); ISystemFilterReference ref = filterMgr.getSystemFilterReference(this, filter); if (ref != null)