org.extex.resource
Class FileFinder

java.lang.Object
  extended by org.extex.resource.AbstractFinder
      extended by org.extex.resource.FileFinder
All Implemented Interfaces:
LogEnabled, EnvironmentAware, PropertyAware, ResourceFinder

public class FileFinder
extends AbstractFinder
implements PropertyAware, EnvironmentAware

This file finder searches for the file in different directories and with several extensions.

Configuration

The file finder can be configured to influence its actions. The following example shows a configuration for a file finder:
 <Finder class="de.dante.util.resource.FileFinder"
         trace="false"
         default="default">
   <tex>
     <path property="extex.texinputs"/>
     <path property="texinputs"/>
     <path env="EXTEX_TEXINPUTS"/>
     <path env="TEXINPUTS"/>
     <path>.</path>
     <extension></extension>
     <extension>.tex</extension>
   </tex>
   <fmt>
     <path property="extex.texinputs"/>
     <path property="texinputs"/>
     <path env="EXTEX_TEXINPUTS"/>
     <path env="TEXINPUTS"/>
     <path>.</path>
     <extension></extension>
     <extension>.fmt</extension>
   </fmt>
   <default>
     <path property="extex.texinputs"/>
     <path property="texinputs"/>
     <path env="EXTEX_TEXINPUTS"/>
     <path env="TEXINPUTS"/>
     <path>.</path>
     <extension></extension>
   </default>
 </Finder>
 

Whenever a resource is sought its type is used to find the appropriate parameters for the search. If the sub-configuration with the name of the type exists then this sub-configuration is used. For instance if the resource tex with the type fmt is sought then the sub-configuration fmt determines how to find this file.

If no sub-configuration of the given type is present then the attribute default is used to find the default sub-configuration. In the example given above this default configuration is called default. Nevertheless it would also be possible to point the default configuration to another existing configuration. The attribute default is mandatory.

Each sub-configuration takes the tags path and extension in arbitrary number. path contains the path prepended before the resource name. extension contains the extension appended after the resource name.

path can carry the attribute property. In this case the value is ignored and the value is taken from the property named in the attribute. Otherwise the value of the tag is taken as path. The value taken from the property can contain several paths. They are separated by the separator specified for the platform. For instance on windows the separator ; is used and on Unix the separator : is used.

path can carry the attribute env. In this case the value is ignored and the value is taken from the environment variable named in the attribute. Otherwise the value of the tag is taken as path. The value taken from the environment variable can contain several paths. They are separated by the separator specified for the platform. For instance on windows the separator ; is used and on Unix the separator : is used.

When the full file name contains the string {type} this string is replaced by the type currently sought. This can for instance be used in default specification to attach the type as extension.

All combinations of path, resource name and extension are tried in turn. If one combination leads to a readable file then an input stream to this file is used.

The attribute trace can be used to force a tracing of the actions in the log file. The tracing is performed only if a logger is present when needed. The tracing flag can be overwritten at run-time. The attribute trace is optional.

Version:
$Revision: 7167 $
Author:
Gerd Neugebauer

Field Summary
 
Fields inherited from class org.extex.resource.AbstractFinder
ATTR_DEFAULT, ATTR_SKIP, ATTR_TRACE, EXTENSION_TAG
 
Constructor Summary
FileFinder(Configuration configuration)
          Creates a new object.
 
Method Summary
 NamedInputStream findResource(java.lang.String name, java.lang.String type)
          Find a resource which can be used for reading.
 void setEnvironment(java.util.Map<java.lang.String,java.lang.String> environment)
          Setter for the environment.
 void setProperties(java.util.Properties properties)
          Setter for the properties.
 
Methods inherited from class org.extex.resource.AbstractFinder
enableLogging, enableTracing, getConfiguration, trace
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

FileFinder

public FileFinder(Configuration configuration)
           throws ConfigurationMissingException
Creates a new object.

Parameters:
configuration - the encapsulated configuration object
Throws:
ConfigurationMissingException - in case of an error
Method Detail

findResource

public NamedInputStream findResource(java.lang.String name,
                                     java.lang.String type)
                              throws ConfigurationException
Description copied from interface: ResourceFinder
Find a resource which can be used for reading. If the search fails then null is returned.

Specified by:
findResource in interface ResourceFinder
Parameters:
name - the base name of the resource
type - the type, i.e. the extension
Returns:
the file or null if none could be found
Throws:
ConfigurationException - in case of an exception
See Also:
ResourceFinder.findResource(java.lang.String, java.lang.String)

setEnvironment

public void setEnvironment(java.util.Map<java.lang.String,java.lang.String> environment)
Setter for the environment. The default for the environment is the system environment.

Specified by:
setEnvironment in interface EnvironmentAware
Parameters:
environment - the environment

setProperties

public void setProperties(java.util.Properties properties)
Description copied from interface: PropertyAware
Setter for the properties.

Specified by:
setProperties in interface PropertyAware
Parameters:
properties - the properties to use for configuration
See Also:
PropertyAware.setProperties( java.util.Properties)