You are viewing a plain text version of this content. The canonical link for it is here.
Posted to xbean-scm@geronimo.apache.org by dj...@apache.org on 2010/08/18 22:29:51 UTC

svn commit: r986916 - /geronimo/xbean/trunk/xbean-bundleutils/src/main/java/org/apache/xbean/osgi/bundle/util/BundleResourceFinder.java

Author: djencks
Date: Wed Aug 18 20:29:51 2010
New Revision: 986916

URL: http://svn.apache.org/viewvc?rev=986916&view=rev
Log:
XBEAN-155 make finding more consistent

Modified:
    geronimo/xbean/trunk/xbean-bundleutils/src/main/java/org/apache/xbean/osgi/bundle/util/BundleResourceFinder.java

Modified: geronimo/xbean/trunk/xbean-bundleutils/src/main/java/org/apache/xbean/osgi/bundle/util/BundleResourceFinder.java
URL: http://svn.apache.org/viewvc/geronimo/xbean/trunk/xbean-bundleutils/src/main/java/org/apache/xbean/osgi/bundle/util/BundleResourceFinder.java?rev=986916&r1=986915&r2=986916&view=diff
==============================================================================
--- geronimo/xbean/trunk/xbean-bundleutils/src/main/java/org/apache/xbean/osgi/bundle/util/BundleResourceFinder.java (original)
+++ geronimo/xbean/trunk/xbean-bundleutils/src/main/java/org/apache/xbean/osgi/bundle/util/BundleResourceFinder.java Wed Aug 18 20:29:51 2010
@@ -48,17 +48,37 @@ public class BundleResourceFinder {
     private final PackageAdmin packageAdmin;
     private final String prefix;
     private final String suffix;
+    private final String osgiSuffix;
+    private final boolean extendedMatching;
     private ResourceDiscoveryFilter discoveryFilter;
 
     public BundleResourceFinder(PackageAdmin packageAdmin, Bundle bundle, String prefix, String suffix) {
         this(packageAdmin, bundle, prefix, suffix, FULL_DISCOVERY_FILTER);
     }
 
+    /**
+     * Set up a BundleResourceFinder
+     * The suffix may contain a path fragment, unlike the bundle.findEntries method.
+     *
+     * @param packageAdmin package admin for finding fragments
+     * @param bundle bundle to search
+     * @param prefix search only paths and zip files starting with this prefix
+     * @param suffix return only entries ending in this suffix.
+     * @param discoveryFilter filter for matching directories and zip files.
+     */
     public BundleResourceFinder(PackageAdmin packageAdmin, Bundle bundle, String prefix, String suffix, ResourceDiscoveryFilter discoveryFilter) {
         this.packageAdmin = packageAdmin;
         this.bundle = bundle;
-        this.prefix = prefix.trim();
+        this.prefix = addSlash(prefix.trim());
         this.suffix = suffix.trim();
+        int pos = this.suffix.lastIndexOf("/");
+        if (pos > -1) {
+            osgiSuffix = this.suffix.substring(pos + 1, this.suffix.length());
+            extendedMatching = true;
+        } else {
+            osgiSuffix = "*" + this.suffix;
+            extendedMatching = false;
+        }
         this.discoveryFilter = discoveryFilter;
     }
 
@@ -103,7 +123,7 @@ public class BundleResourceFinder {
                     scanZip(callback, bundle, name);
                 } else {
                     // assume it's a directory
-                    scanDirectory(callback, bundle, addSlash(prefix) + name);
+                    scanDirectory(callback, bundle, name + prefix);
                 }
             }
         }
@@ -113,10 +133,13 @@ public class BundleResourceFinder {
         if (!discoveryFilter.directoryDiscoveryRequired(basePath)) {
             return;
         }
-        Enumeration e = bundle.findEntries(basePath, "*" + suffix, true);
+        Enumeration e = bundle.findEntries(basePath, osgiSuffix, true);
         if (e != null) {
             while (e.hasMoreElements()) {
-                callback.foundInDirectory(bundle, basePath, (URL) e.nextElement());
+                URL url = (URL) e.nextElement();
+                if (!extendedMatching || suffixMatches(url.getPath())) {
+                    callback.foundInDirectory(bundle, basePath, url);
+                }
             }
         }
     }
@@ -168,7 +191,9 @@ public class BundleResourceFinder {
     }
 
     private static String addSlash(String name) {
-        if (!name.endsWith("/")) {
+        if (name == null ) return "";
+        name = name.trim();
+        if (!name.isEmpty() && !name.endsWith("/")) {
             name = name + "/";
         }
         return name;