From cfd86803bb668aceb3f76094ee7478193ae1f513 Mon Sep 17 00:00:00 2001 From: Kushal Munir < kmunir@ca.ibm.com> Date: Mon, 12 Feb 2007 21:09:09 +0000 Subject: [PATCH] [173905] Remote file getContents() does not account for file type filters. It processes all filters as name filters. This is fixed. --- .../files/core/subsystems/RemoteFile.java | 65 +++++++++++++------ 1 file changed, 46 insertions(+), 19 deletions(-) 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 20e58928ee0..9be005625fb 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 @@ -772,7 +772,6 @@ public abstract class RemoteFile implements IRemoteFile, IAdaptable, Comparable } ArrayList calculatedResults = new ArrayList(); - StringComparePatternMatcher fmatcher = new StringComparePatternMatcher(filter); @@ -786,29 +785,44 @@ public abstract class RemoteFile implements IRemoteFile, IAdaptable, Comparable // KM: we need to match with the key to ensure that the filter is a subset StringComparePatternMatcher matcher = new StringComparePatternMatcher(key); - if (matcher.stringMatches(filter)) - { + if (matcher.stringMatches(filter)) { // get all children, i.e. the superset - Object[] all = (Object[])filters.get(key); - + Object[] all = (Object[]) filters.get(key); + if (all != null) { - + for (int s = 0; s < all.length; s++) { - - Object subContent = all[s]; - - if (!calculatedResults.contains(subContent)) - { - if (subContent instanceof IRemoteFile) - { - // match with the filter to take out those that do not match the filter - if (fmatcher.stringMatches(((IRemoteFile)subContent).getName())) - { + + Object subContent = all[s]; + + if (!calculatedResults.contains(subContent)) { + + if (subContent instanceof IRemoteFile) { + + IRemoteFile temp = (IRemoteFile) subContent; + + if (temp.isFile()) { + String compareTo = null; + boolean filterForFileTypes = isFilterForFileTypes(filter); + + if (!filterForFileTypes) { + compareTo = temp.getName(); + } + else { + compareTo = temp.getExtension(); + } + + // match with the filter to take out those + // that do not match the filter + if (compareTo != null && fmatcher.stringMatches(compareTo)) { + calculatedResults.add(subContent); + } + } + else { calculatedResults.add(subContent); } } - else - { + else { calculatedResults.add(subContent); } } @@ -820,7 +834,20 @@ public abstract class RemoteFile implements IRemoteFile, IAdaptable, Comparable return calculatedResults.toArray(); } - + /** + * Returns whether filter is for file types. + * @param filter the filter. + * @return true if filter is for file types, false otherwise. + */ + private boolean isFilterForFileTypes(String filter) { + + if (filter.endsWith(",")) { + return true; + } + else { + return false; + } + } public void setIsContainer(boolean con) { isContainer = con;