Package org.apache.commons.configuration2.io

# Class CombinedLocationStrategy

java.lang.Object
org.apache.commons.configuration2.io.AbstractFileLocationStrategy
org.apache.commons.configuration2.io.CombinedLocationStrategy

All Implemented Interfaces:
  `FileLocationStrategy`

public class CombinedLocationStrategy extends AbstractFileLocationStrategy
A specialized implementation of a `FileLocationStrategy` which encapsulates an arbitrary number of `FileLocationStrategy` objects.

A collection with the wrapped `FileLocationStrategy` objects is passed at construction time. During a [`locate()` operation the wrapped strategies are called one after the other until one returns a non null URL. This URL is returned. If none of the wrapped strategies is able to resolve the passed in `FileLocator`, result is null. This is similar to the chain of responsibility design pattern.

This class, together with the provided concrete `FileLocationStrategy` implementations, offers a convenient way to customize the lookup for configuration files: Just add the desired concrete strategies to a `CombinedLocationStrategy` object. If necessary, custom strategies can be implemented if there are specific requirements. Note that the order in which strategies are added to a `CombinedLocationStrategy` matters: sub strategies are queried in the same order as they appear in the collection passed to the constructor.

See `AbstractFileLocationStrategy` learn how to grant an deny URL schemes and hosts.

Since:
  2.0
See Also:
  - `AbstractFileLocationStrategy`

- ## Nested Class Summary

  Nested Classes
  Modifier and Type
  Class
  Description
  `static class`
  `CombinedLocationStrategy.Builder`
  Builds new instances of `CombinedLocationStrategy`.

  ## Nested classes/interfaces inherited from class org.apache.commons.configuration2.io.AbstractFileLocationStrategy

  `AbstractFileLocationStrategy.AbstractBuilder<T extends FileLocationStrategy,B extends AbstractFileLocationStrategy.AbstractBuilder<T,B>>, AbstractFileLocationStrategy.StrategyBuilder<T extends FileLocationStrategy>`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `CombinedLocationStrategy(Collection<FileLocationStrategy> subs)`
  Creates a new instance of `CombinedLocationStrategy` and initializes it with the provided sub strategies.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `Collection<FileLocationStrategy>`
  `getSubStrategies()`
  Gets a (unmodifiable) collection with the sub strategies managed by this object.
  `URL`
  `locate(FileSystem fileSystem, FileLocator locator)`
  Tries to locate the specified file.

  ### Methods inherited from class org.apache.commons.configuration2.io.AbstractFileLocationStrategy

  `toString`

  ### Methods inherited from class java.lang.Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

- ## Constructor Details

  - ### CombinedLocationStrategy

    public CombinedLocationStrategy(Collection<FileLocationStrategy> subs)
    Creates a new instance of `CombinedLocationStrategy` and initializes it with the provided sub strategies. The passed in collection must not be null or contain null elements.
    Parameters:
      `subs` - the collection with sub strategies.
    Throws:
      `IllegalArgumentException` - if the collection is null or has null elements.

- ## Method Details

  - ### getSubStrategies

    public Collection<FileLocationStrategy> getSubStrategies()
    Gets a (unmodifiable) collection with the sub strategies managed by this object.
    Returns:
      the sub `FileLocationStrategy` objects

  - ### locate

    public URL locate(FileSystem fileSystem, FileLocator locator)
    Tries to locate the specified file. The method also expects the `FileSystem` to be used. Note that the `FileLocator` object may also contain a `FileSystem`, but this is optional. The passed in `FileSystem` should be used, and callers must not pass a null reference for this argument. A concrete implementation has to evaluate the properties stored in the `FileLocator` object and try to match them to an existing file. If this can be done, a corresponding URL is returned. Otherwise, result is null. Implementations should not throw an exception (unless parameters are null) as there might be alternative strategies which can find the file in question. This implementation tries to locate the file by delegating to the managed sub strategies.
    Parameters:
      `fileSystem` - the `FileSystem` to be used for this operation
      `locator` - the object describing the file to be located
    Returns:
      a URL pointing to the referenced file if location was successful; null if the file could not be resolved