Class DefaultFileLocatorHelper

  • All Implemented Interfaces:
    BundleFileLocatorHelper

    public class DefaultFileLocatorHelper
    extends java.lang.Object
    implements BundleFileLocatorHelper
    DefaultFileLocatorHelper

    From a bundle to its location on the filesystem. Assumes the bundle is not a jar.

    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      java.util.Enumeration<java.net.URL> findEntries​(org.osgi.framework.Bundle bundle, java.lang.String entryPath)
      Helper method equivalent to Bundle#getEntry(String entryPath) except that it searches for entries in the fragments by using the Bundle#findEntries method.
      java.io.File getBundleInstallLocation​(org.osgi.framework.Bundle bundle)
      Works with equinox, felix, nuxeo and probably more.
      java.io.File getFileInBundle​(org.osgi.framework.Bundle bundle, java.lang.String path)
      Locate a file inside a bundle.
      java.net.URL getFileURL​(java.net.URL url)
      Only useful for equinox: on felix we get the file:// url already.
      java.net.URL getLocalURL​(java.net.URL url)
      Only useful for equinox: on felix we get the file:// or jar:// url already.
      java.io.File[] locateJarsInsideBundle​(org.osgi.framework.Bundle bundle)
      If the bundle is a jar, returns the jar.
      static boolean match​(java.lang.String name, java.lang.String... names)  
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Constructor Detail

      • DefaultFileLocatorHelper

        public DefaultFileLocatorHelper()
    • Method Detail

      • match

        public static boolean match​(java.lang.String name,
                                    java.lang.String... names)
      • getBundleInstallLocation

        public java.io.File getBundleInstallLocation​(org.osgi.framework.Bundle bundle)
                                              throws java.lang.Exception
        Works with equinox, felix, nuxeo and probably more. Not exactly in the spirit of OSGi but quite necessary to support self-contained webapps and other situations.
        Specified by:
        getBundleInstallLocation in interface BundleFileLocatorHelper
        Parameters:
        bundle - The bundle
        Returns:
        Its installation location as a file.
        Throws:
        java.lang.Exception - if unable to get the bundle install location
      • getFileInBundle

        public java.io.File getFileInBundle​(org.osgi.framework.Bundle bundle,
                                            java.lang.String path)
                                     throws java.lang.Exception
        Locate a file inside a bundle.
        Specified by:
        getFileInBundle in interface BundleFileLocatorHelper
        Parameters:
        bundle - the bundle
        path - the path
        Returns:
        file object
        Throws:
        java.lang.Exception - if unable to get the file in the bundle
      • findEntries

        public java.util.Enumeration<java.net.URL> findEntries​(org.osgi.framework.Bundle bundle,
                                                               java.lang.String entryPath)
        Helper method equivalent to Bundle#getEntry(String entryPath) except that it searches for entries in the fragments by using the Bundle#findEntries method.
        Specified by:
        findEntries in interface BundleFileLocatorHelper
        Parameters:
        bundle - the bundle
        entryPath - the entry path
        Returns:
        null or all the entries found for that path.
      • locateJarsInsideBundle

        public java.io.File[] locateJarsInsideBundle​(org.osgi.framework.Bundle bundle)
                                              throws java.lang.Exception
        If the bundle is a jar, returns the jar. If the bundle is a folder, look inside it and search for jars that it returns.

        Good enough for our purpose (TldLocationsCache when it scans for tld files inside jars alone. In fact we only support the second situation for development purpose where the bundle was imported in pde and the classes kept in a jar.

        Specified by:
        locateJarsInsideBundle in interface BundleFileLocatorHelper
        Parameters:
        bundle - the bundle
        Returns:
        The jar(s) file that is either the bundle itself, either the jars embedded inside it.
        Throws:
        java.lang.Exception - if unable to locate the jars
      • getLocalURL

        public java.net.URL getLocalURL​(java.net.URL url)
                                 throws java.lang.Exception
        Only useful for equinox: on felix we get the file:// or jar:// url already. Other OSGi implementations have not been tested

        Get a URL to the bundle entry that uses a common protocol (i.e. file: jar: or http: etc.).

        Specified by:
        getLocalURL in interface BundleFileLocatorHelper
        Parameters:
        url - the url
        Returns:
        a URL to the bundle entry that uses a common protocol
        Throws:
        java.lang.Exception - if unable to get the local url
      • getFileURL

        public java.net.URL getFileURL​(java.net.URL url)
                                throws java.lang.Exception
        Only useful for equinox: on felix we get the file:// url already. Other OSGi implementations have not been tested

        Get a URL to the content of the bundle entry that uses the file: protocol. The content of the bundle entry may be downloaded or extracted to the local file system in order to create a file: URL.

        Specified by:
        getFileURL in interface BundleFileLocatorHelper
        Parameters:
        url - the url
        Returns:
        a URL to the content of the bundle entry that uses the file: protocol

        Throws:
        java.lang.Exception - if unable to get the file url