Class JarFileResourceLoader

    • Constructor Summary

      Constructors 
      Constructor Description
      JarFileResourceLoader​(java.lang.String rootName, java.util.jar.JarFile jarFile)  
      JarFileResourceLoader​(java.lang.String rootName, java.util.jar.JarFile jarFile, java.lang.String relativePath)  
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      (package private) static void addInternalIndex​(java.io.File file, boolean modify)  
      void close()
      Closes this resource, relinquishing any underlying resources.
      private java.security.CodeSource createCodeSource​(java.util.jar.JarEntry entry)  
      (package private) static void extractJarPaths​(java.util.jar.JarFile jarFile, java.lang.String relativePath, java.util.Collection<java.lang.String> index)  
      ClassSpec getClassSpec​(java.lang.String fileName)
      Get the class specification for the given class name.
      private java.util.jar.JarEntry getJarEntry​(java.lang.String fileName)  
      private static java.net.URI getJarURI​(java.net.URI original, java.lang.String nestedPath)  
      java.lang.String getLibrary​(java.lang.String name)
      Get the absolute physical filesystem path for a library with the given name.
      java.net.URI getLocation()
      Get the base location of the resources in this loader (if any).
      PackageSpec getPackageSpec​(java.lang.String name)
      Get the package specification for the given directory name.
      java.util.Collection<java.lang.String> getPaths()
      Get the collection of resource paths.
      Resource getResource​(java.lang.String name)
      Get a resource with the given name.
      java.lang.String getRootName()
      Get the name of the root represented by this resource loader.
      java.util.Iterator<Resource> iterateResources​(java.lang.String startPath, boolean recursive)
      Enumerate all the resources under the given path.
      (package private) static java.util.Collection<java.lang.String> readIndex​(java.io.InputStream stream, java.util.Collection<java.lang.String> index, java.lang.String relativePath)  
      (package private) static void writeExternalIndex​(java.io.File indexFile, java.util.Collection<java.lang.String> index)  
      • Methods inherited from class java.lang.Object

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

      • jarFile

        private final java.util.jar.JarFile jarFile
      • rootName

        private final java.lang.String rootName
      • rootUrl

        private final java.net.URL rootUrl
      • relativePath

        private final java.lang.String relativePath
      • fileOfJar

        private final java.io.File fileOfJar
    • Constructor Detail

      • JarFileResourceLoader

        JarFileResourceLoader​(java.lang.String rootName,
                              java.util.jar.JarFile jarFile)
      • JarFileResourceLoader

        JarFileResourceLoader​(java.lang.String rootName,
                              java.util.jar.JarFile jarFile,
                              java.lang.String relativePath)
    • Method Detail

      • getJarURI

        private static java.net.URI getJarURI​(java.net.URI original,
                                              java.lang.String nestedPath)
                                       throws java.net.URISyntaxException
        Throws:
        java.net.URISyntaxException
      • getClassSpec

        public ClassSpec getClassSpec​(java.lang.String fileName)
                               throws java.io.IOException
        Description copied from interface: ResourceLoader
        Get the class specification for the given class name. If no matching class is found, null is returned.
        Specified by:
        getClassSpec in interface ResourceLoader
        Overrides:
        getClassSpec in class AbstractResourceLoader
        Parameters:
        fileName - the fileName of the class, e.g. for the class org.jboss.modules.ResourceLoader the fileName will be org/jboss/modules/ResourceLoader.class
        Returns:
        the class specification, or null if the named class is not found
        Throws:
        java.io.IOException - if an I/O error occurs
      • createCodeSource

        private java.security.CodeSource createCodeSource​(java.util.jar.JarEntry entry)
      • getJarEntry

        private java.util.jar.JarEntry getJarEntry​(java.lang.String fileName)
      • getPackageSpec

        public PackageSpec getPackageSpec​(java.lang.String name)
                                   throws java.io.IOException
        Description copied from interface: ResourceLoader
        Get the package specification for the given directory name. Always returns a package specification; this method cannot be used to test for the existence of a package. A package spec should always be acquired from the same resource loader which provided the class specification. The directory name will always be specified using "/" separators.
        Specified by:
        getPackageSpec in interface ResourceLoader
        Overrides:
        getPackageSpec in class AbstractResourceLoader
        Parameters:
        name - the directory name
        Returns:
        the package specification
        Throws:
        java.io.IOException - if an I/O error occurs
      • getLibrary

        public java.lang.String getLibrary​(java.lang.String name)
        Description copied from interface: ResourceLoader
        Get the absolute physical filesystem path for a library with the given name. The resultant path should be path-separated using "/" characters.
        Specified by:
        getLibrary in interface ResourceLoader
        Overrides:
        getLibrary in class AbstractResourceLoader
        Parameters:
        name - the name
        Returns:
        the path or null if the library is not present
      • getResource

        public Resource getResource​(java.lang.String name)
        Description copied from interface: ResourceLoader
        Get a resource with the given name. If no such resource is available, null is returned. The resource name will always be specified using "/" separators for the directory segments.
        Specified by:
        getResource in interface ResourceLoader
        Overrides:
        getResource in class AbstractResourceLoader
        Parameters:
        name - the resource name
        Returns:
        the resource, or null if it is not available
      • iterateResources

        public java.util.Iterator<Resource> iterateResources​(java.lang.String startPath,
                                                             boolean recursive)
        Description copied from interface: IterableResourceLoader
        Enumerate all the resources under the given path. The given path name is relative to the root of the resource loader. If the path "escapes" the root via .., such segments will be consumed. If the path is absolute, it will be converted to a relative path by dropping the leading /.
        Specified by:
        iterateResources in interface IterableResourceLoader
        Parameters:
        startPath - the path to search under
        recursive - true to recursively descend into subdirectories, false to only read this path
        Returns:
        the resource iterator (possibly empty)
      • getPaths

        public java.util.Collection<java.lang.String> getPaths()
        Description copied from interface: ResourceLoader
        Get the collection of resource paths. Called one time only when the resource loader is initialized. The paths should use "/" characters to separate the path segments.
        Specified by:
        getPaths in interface ResourceLoader
        Overrides:
        getPaths in class AbstractResourceLoader
        Returns:
        the resource paths
      • close

        public void close()
        Description copied from interface: ResourceLoader
        Closes this resource, relinquishing any underlying resources. This method is invoked automatically on objects managed by the try-with-resources statement.
        Specified by:
        close in interface java.lang.AutoCloseable
        Specified by:
        close in interface ResourceLoader
      • getLocation

        public java.net.URI getLocation()
        Description copied from interface: ResourceLoader
        Get the base location of the resources in this loader (if any). If the location is not known, or the resource loader does not support locations, or the resource loader does not support this method, null is returned.
        Specified by:
        getLocation in interface ResourceLoader
        Returns:
        the base location of the resources in this loader, or null if not available
      • extractJarPaths

        static void extractJarPaths​(java.util.jar.JarFile jarFile,
                                    java.lang.String relativePath,
                                    java.util.Collection<java.lang.String> index)
      • writeExternalIndex

        static void writeExternalIndex​(java.io.File indexFile,
                                       java.util.Collection<java.lang.String> index)
      • readIndex

        static java.util.Collection<java.lang.String> readIndex​(java.io.InputStream stream,
                                                                java.util.Collection<java.lang.String> index,
                                                                java.lang.String relativePath)
                                                         throws java.io.IOException
        Throws:
        java.io.IOException
      • addInternalIndex

        static void addInternalIndex​(java.io.File file,
                                     boolean modify)
                              throws java.io.IOException
        Throws:
        java.io.IOException