Class ResourceFinder

java.lang.Object
org.apache.xbean.finder.ResourceFinder

public class ResourceFinder extends Object
Version:
$Rev: 1778104 $ $Date: 2017-01-10 11:05:25 +0100 (Tue, 10 Jan 2017) $
  • Field Details

    • urls

      private final URL[] urls
    • path

      private final String path
    • classLoader

      private final ClassLoader classLoader
    • resourcesNotLoaded

      private final List<String> resourcesNotLoaded
  • Constructor Details

    • ResourceFinder

      public ResourceFinder(URL... urls)
    • ResourceFinder

      public ResourceFinder(String path)
    • ResourceFinder

      public ResourceFinder(String path, URL... urls)
    • ResourceFinder

      public ResourceFinder(String path, ClassLoader classLoader)
    • ResourceFinder

      public ResourceFinder(String path, ClassLoader classLoader, URL... urls)
  • Method Details

    • isDirectory

      private static boolean isDirectory(URL url)
    • getResourcesNotLoaded

      public List<String> getResourcesNotLoaded()
      Returns a list of resources that could not be loaded in the last invoked findAvailable* or mapAvailable* methods.

      The list will only contain entries of resources that match the requirements of the last invoked findAvailable* or mapAvailable* methods, but were unable to be loaded and included in their results.

      The list returned is unmodifiable and the results of this method will change after each invocation of a findAvailable* or mapAvailable* methods.

      This method is not thread safe.

    • find

      public URL find(String uri) throws IOException
      Throws:
      IOException
    • findAll

      public List<URL> findAll(String uri) throws IOException
      Throws:
      IOException
    • findString

      public String findString(String uri) throws IOException
      Reads the contents of the URL as a String's and returns it.
      Parameters:
      uri -
      Returns:
      a stringified content of a resource
      Throws:
      IOException - if a resource pointed out by the uri param could not be find
      See Also:
    • findAllStrings

      public List<String> findAllStrings(String uri) throws IOException
      Reads the contents of the found URLs as a list of String's and returns them.
      Parameters:
      uri -
      Returns:
      a list of the content of each resource URL found
      Throws:
      IOException - if any of the found URLs are unable to be read.
    • findAvailableStrings

      public List<String> findAvailableStrings(String uri) throws IOException
      Reads the contents of the found URLs as a Strings and returns them. Individual URLs that cannot be read are skipped and added to the list of 'resourcesNotLoaded'
      Parameters:
      uri -
      Returns:
      a list of the content of each resource URL found
      Throws:
      IOException - if classLoader.getResources throws an exception
    • mapAllStrings

      public Map<String,String> mapAllStrings(String uri) throws IOException
      Reads the contents of all non-directory URLs immediately under the specified location and returns them in a map keyed by the file name.

      Any URLs that cannot be read will cause an exception to be thrown.

      Example classpath:

      META-INF/serializables/one META-INF/serializables/two META-INF/serializables/three META-INF/serializables/four/foo.txt

      ResourceFinder finder = new ResourceFinder("META-INF/"); Map map = finder.mapAvailableStrings("serializables"); map.contains("one"); // true map.contains("two"); // true map.contains("three"); // true map.contains("four"); // false

      Parameters:
      uri -
      Returns:
      a list of the content of each resource URL found
      Throws:
      IOException - if any of the urls cannot be read
    • mapAvailableStrings

      public Map<String,String> mapAvailableStrings(String uri) throws IOException
      Reads the contents of all non-directory URLs immediately under the specified location and returns them in a map keyed by the file name.

      Individual URLs that cannot be read are skipped and added to the list of 'resourcesNotLoaded'

      Example classpath:

      META-INF/serializables/one META-INF/serializables/two # not readable META-INF/serializables/three META-INF/serializables/four/foo.txt

      ResourceFinder finder = new ResourceFinder("META-INF/"); Map map = finder.mapAvailableStrings("serializables"); map.contains("one"); // true map.contains("two"); // false map.contains("three"); // true map.contains("four"); // false

      Parameters:
      uri -
      Returns:
      a list of the content of each resource URL found
      Throws:
      IOException - if classLoader.getResources throws an exception
    • findClass

      public Class<?> findClass(String uri) throws IOException, ClassNotFoundException
      Executes findString(String) assuming the contents URL found is the name of a class that should be loaded and returned.
      Parameters:
      uri -
      Returns:
      Throws:
      IOException
      ClassNotFoundException
    • findAllClasses

      public List<Class<?>> findAllClasses(String uri) throws IOException, ClassNotFoundException
      Executes findAllStrings assuming the strings are the names of a classes that should be loaded and returned.

      Any URL or class that cannot be loaded will cause an exception to be thrown.

      Parameters:
      uri -
      Returns:
      Throws:
      IOException
      ClassNotFoundException
    • findAvailableClasses

      public List<Class<?>> findAvailableClasses(String uri) throws IOException
      Executes findAvailableStrings assuming the strings are the names of a classes that should be loaded and returned.

      Any class that cannot be loaded will be skipped and placed in the 'resourcesNotLoaded' collection.

      Parameters:
      uri -
      Returns:
      Throws:
      IOException - if classLoader.getResources throws an exception
    • mapAllClasses

      public Map<String,Class<?>> mapAllClasses(String uri) throws IOException, ClassNotFoundException
      Executes mapAllStrings assuming the value of each entry in the map is the name of a class that should be loaded.

      Any class that cannot be loaded will be cause an exception to be thrown.

      Example classpath:

      META-INF/xmlparsers/xerces META-INF/xmlparsers/crimson

      ResourceFinder finder = new ResourceFinder("META-INF/"); Map map = finder.mapAvailableStrings("xmlparsers"); map.contains("xerces"); // true map.contains("crimson"); // true Class xercesClass = map.get("xerces"); Class crimsonClass = map.get("crimson");

      Parameters:
      uri -
      Returns:
      Throws:
      IOException
      ClassNotFoundException
    • mapAvailableClasses

      public Map<String,Class<?>> mapAvailableClasses(String uri) throws IOException
      Executes mapAvailableStrings assuming the value of each entry in the map is the name of a class that should be loaded.

      Any class that cannot be loaded will be skipped and placed in the 'resourcesNotLoaded' collection.

      Example classpath:

      META-INF/xmlparsers/xerces META-INF/xmlparsers/crimson

      ResourceFinder finder = new ResourceFinder("META-INF/"); Map map = finder.mapAvailableStrings("xmlparsers"); map.contains("xerces"); // true map.contains("crimson"); // true Class xercesClass = map.get("xerces"); Class crimsonClass = map.get("crimson");

      Parameters:
      uri -
      Returns:
      Throws:
      IOException - if classLoader.getResources throws an exception
    • findImplementation

      public Class<?> findImplementation(Class<?> interfase) throws IOException, ClassNotFoundException
      Assumes the class specified points to a file in the classpath that contains the name of a class that implements or is a subclass of the specfied class.

      Any class that cannot be loaded will be cause an exception to be thrown.

      Example classpath:

      META-INF/java.io.InputStream # contains the classname org.acme.AcmeInputStream META-INF/java.io.OutputStream

      ResourceFinder finder = new ResourceFinder("META-INF/"); Class clazz = finder.findImplementation(java.io.InputStream.class); clazz.getName(); // returns "org.acme.AcmeInputStream"

      Parameters:
      interfase - a superclass or interface
      Returns:
      Throws:
      IOException - if the URL cannot be read
      ClassNotFoundException - if the class found is not loadable
      ClassCastException - if the class found is not assignable to the specified superclass or interface
    • findAllImplementations

      public <T> List<Class<? extends T>> findAllImplementations(Class<T> interfase) throws IOException, ClassNotFoundException
      Assumes the class specified points to a file in the classpath that contains the name of a class that implements or is a subclass of the specfied class.

      Any class that cannot be loaded or assigned to the specified interface will be cause an exception to be thrown.

      Example classpath:

      META-INF/java.io.InputStream # contains the classname org.acme.AcmeInputStream META-INF/java.io.InputStream # contains the classname org.widget.NeatoInputStream META-INF/java.io.InputStream # contains the classname com.foo.BarInputStream

      ResourceFinder finder = new ResourceFinder("META-INF/"); List classes = finder.findAllImplementations(java.io.InputStream.class); classes.contains("org.acme.AcmeInputStream"); // true classes.contains("org.widget.NeatoInputStream"); // true classes.contains("com.foo.BarInputStream"); // true

      Parameters:
      interfase - a superclass or interface
      Returns:
      Throws:
      IOException - if the URL cannot be read
      ClassNotFoundException - if the class found is not loadable
      ClassCastException - if the class found is not assignable to the specified superclass or interface
    • findAvailableImplementations

      public <T> List<Class<? extends T>> findAvailableImplementations(Class<T> interfase) throws IOException
      Assumes the class specified points to a file in the classpath that contains the name of a class that implements or is a subclass of the specfied class.

      Any class that cannot be loaded or are not assignable to the specified class will be skipped and placed in the 'resourcesNotLoaded' collection.

      Example classpath:

      META-INF/java.io.InputStream # contains the classname org.acme.AcmeInputStream META-INF/java.io.InputStream # contains the classname org.widget.NeatoInputStream META-INF/java.io.InputStream # contains the classname com.foo.BarInputStream

      ResourceFinder finder = new ResourceFinder("META-INF/"); List classes = finder.findAllImplementations(java.io.InputStream.class); classes.contains("org.acme.AcmeInputStream"); // true classes.contains("org.widget.NeatoInputStream"); // true classes.contains("com.foo.BarInputStream"); // true

      Parameters:
      interfase - a superclass or interface
      Returns:
      Throws:
      IOException - if classLoader.getResources throws an exception
    • mapAllImplementations

      public <T> Map<String,Class<? extends T>> mapAllImplementations(Class<T> interfase) throws IOException, ClassNotFoundException
      Assumes the class specified points to a directory in the classpath that holds files containing the name of a class that implements or is a subclass of the specfied class.

      Any class that cannot be loaded or assigned to the specified interface will be cause an exception to be thrown.

      Example classpath:

      META-INF/java.net.URLStreamHandler/jar META-INF/java.net.URLStreamHandler/file META-INF/java.net.URLStreamHandler/http

      ResourceFinder finder = new ResourceFinder("META-INF/"); Map map = finder.mapAllImplementations(java.net.URLStreamHandler.class); Class jarUrlHandler = map.get("jar"); Class fileUrlHandler = map.get("file"); Class httpUrlHandler = map.get("http");

      Parameters:
      interfase - a superclass or interface
      Returns:
      Throws:
      IOException - if the URL cannot be read
      ClassNotFoundException - if the class found is not loadable
      ClassCastException - if the class found is not assignable to the specified superclass or interface
    • mapAvailableImplementations

      public <T> Map<String,Class<? extends T>> mapAvailableImplementations(Class<T> interfase) throws IOException
      Assumes the class specified points to a directory in the classpath that holds files containing the name of a class that implements or is a subclass of the specfied class.

      Any class that cannot be loaded or are not assignable to the specified class will be skipped and placed in the 'resourcesNotLoaded' collection.

      Example classpath:

      META-INF/java.net.URLStreamHandler/jar META-INF/java.net.URLStreamHandler/file META-INF/java.net.URLStreamHandler/http

      ResourceFinder finder = new ResourceFinder("META-INF/"); Map map = finder.mapAllImplementations(java.net.URLStreamHandler.class); Class jarUrlHandler = map.get("jar"); Class fileUrlHandler = map.get("file"); Class httpUrlHandler = map.get("http");

      Parameters:
      interfase - a superclass or interface
      Returns:
      Throws:
      IOException - if classLoader.getResources throws an exception
    • findProperties

      public Properties findProperties(String uri) throws IOException
      Finds the corresponding resource and reads it in as a properties file

      Example classpath:

      META-INF/widget.properties

      ResourceFinder finder = new ResourceFinder("META-INF/"); Properties widgetProps = finder.findProperties("widget.properties");

      Parameters:
      uri -
      Returns:
      Throws:
      IOException - if the URL cannot be read or is not in properties file format
    • findAllProperties

      public List<Properties> findAllProperties(String uri) throws IOException
      Finds the corresponding resources and reads them in as a properties files

      Any URL that cannot be read in as a properties file will cause an exception to be thrown.

      Example classpath:

      META-INF/app.properties META-INF/app.properties META-INF/app.properties

      ResourceFinder finder = new ResourceFinder("META-INF/"); List appProps = finder.findAllProperties("app.properties");

      Parameters:
      uri -
      Returns:
      Throws:
      IOException - if the URL cannot be read or is not in properties file format
    • findAvailableProperties

      public List<Properties> findAvailableProperties(String uri) throws IOException
      Finds the corresponding resources and reads them in as a properties files

      Any URL that cannot be read in as a properties file will be added to the 'resourcesNotLoaded' collection.

      Example classpath:

      META-INF/app.properties META-INF/app.properties META-INF/app.properties

      ResourceFinder finder = new ResourceFinder("META-INF/"); List appProps = finder.findAvailableProperties("app.properties");

      Parameters:
      uri -
      Returns:
      Throws:
      IOException - if classLoader.getResources throws an exception
    • mapAllProperties

      public Map<String,Properties> mapAllProperties(String uri) throws IOException
      Finds the corresponding resources and reads them in as a properties files

      Any URL that cannot be read in as a properties file will cause an exception to be thrown.

      Example classpath:

      - META-INF/jdbcDrivers/oracle.properties - META-INF/jdbcDrivers/mysql.props - META-INF/jdbcDrivers/derby

      ResourceFinder finder = new ResourceFinder("META-INF/"); List driversList = finder.findAvailableProperties("jdbcDrivers"); Properties oracleProps = driversList.get("oracle.properties"); Properties mysqlProps = driversList.get("mysql.props"); Properties derbyProps = driversList.get("derby");

      Parameters:
      uri -
      Returns:
      Throws:
      IOException - if the URL cannot be read or is not in properties file format
    • mapAvailableProperties

      public Map<String,Properties> mapAvailableProperties(String uri) throws IOException
      Finds the corresponding resources and reads them in as a properties files

      Any URL that cannot be read in as a properties file will be added to the 'resourcesNotLoaded' collection.

      Example classpath:

      META-INF/jdbcDrivers/oracle.properties META-INF/jdbcDrivers/mysql.props META-INF/jdbcDrivers/derby

      ResourceFinder finder = new ResourceFinder("META-INF/"); List driversList = finder.findAvailableProperties("jdbcDrivers"); Properties oracleProps = driversList.get("oracle.properties"); Properties mysqlProps = driversList.get("mysql.props"); Properties derbyProps = driversList.get("derby");

      Parameters:
      uri -
      Returns:
      Throws:
      IOException - if classLoader.getResources throws an exception
    • getResourcesMap

      public Map<String,URL> getResourcesMap(String uri) throws IOException
      Throws:
      IOException
    • readDirectoryEntries

      private static void readDirectoryEntries(URL location, Map<String,URL> resources) throws MalformedURLException
      Throws:
      MalformedURLException
    • readJarEntries

      private static void readJarEntries(URL location, String basePath, Map<String,URL> resources) throws IOException
      Throws:
      IOException
    • loadProperties

      private Properties loadProperties(URL resource) throws IOException
      Throws:
      IOException
    • readContents

      private String readContents(URL resource) throws IOException
      Throws:
      IOException
    • getResource

      public URL getResource(String fullUri)
    • getResources

      private Enumeration<URL> getResources(String fulluri) throws IOException
      Throws:
      IOException
    • findResource

      private URL findResource(String resourceName, URL... search)
    • targetURL

      private URL targetURL(URL base, String name) throws MalformedURLException
      Throws:
      MalformedURLException
    • decode

      public static String decode(String fileName)