Class JarFileResourceLoader

java.lang.Object
org.jboss.modules.AbstractResourceLoader
org.jboss.modules.JarFileResourceLoader
All Implemented Interfaces:
AutoCloseable, IterableResourceLoader, ResourceLoader

final class JarFileResourceLoader extends AbstractResourceLoader implements IterableResourceLoader
  • Field Details

  • Constructor Details

    • JarFileResourceLoader

      JarFileResourceLoader(String rootName, JarFile jarFile)
    • JarFileResourceLoader

      JarFileResourceLoader(String rootName, JarFile jarFile, String relativePath)
  • Method Details

    • getJarURI

      private static URI getJarURI(URI original, String nestedPath) throws URISyntaxException
      Throws:
      URISyntaxException
    • getRootName

      public String getRootName()
      Description copied from interface: ResourceLoader
      Get the name of the root represented by this resource loader.
      Specified by:
      getRootName in interface ResourceLoader
      Overrides:
      getRootName in class AbstractResourceLoader
      Returns:
      the name of the root
    • getClassSpec

      public ClassSpec getClassSpec(String fileName) throws 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:
      IOException - if an I/O error occurs
    • createCodeSource

      private CodeSource createCodeSource(JarEntry entry)
    • getJarEntry

      private JarEntry getJarEntry(String fileName)
    • getPackageSpec

      public PackageSpec getPackageSpec(String name) throws 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:
      IOException - if an I/O error occurs
    • getLibrary

      public String getLibrary(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(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 Iterator<Resource> iterateResources(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 Collection<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 AutoCloseable
      Specified by:
      close in interface ResourceLoader
    • getLocation

      public 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(JarFile jarFile, String relativePath, Collection<String> index)
    • writeExternalIndex

      static void writeExternalIndex(File indexFile, Collection<String> index)
    • readIndex

      static Collection<String> readIndex(InputStream stream, Collection<String> index, String relativePath) throws IOException
      Throws:
      IOException
    • addInternalIndex

      static void addInternalIndex(File file, boolean modify) throws IOException
      Throws:
      IOException