Class CatalogFactory<C extends Context>

java.lang.Object
org.apache.commons.chain.CatalogFactory<C>
Type Parameters:
C - Type of the context associated with this command
Direct Known Subclasses:
CatalogFactoryBase

public abstract class CatalogFactory<C extends Context> extends Object
A CatalogFactory is a class used to store and retrieve Catalogs. The factory allows for a default Catalog as well as Catalogs stored with a name key. Follows the Factory pattern (see GoF).

The base CatalogFactory implementation also implements a resolution mechanism which allows lookup of a command based on a single String which encodes both the catalog and command names.

Version:
$Revision$ $Date$
Author:
Sean Schofield
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    static final String
    Values passed to the getCommand(String) method should use this as the delimiter between the "catalog" name and the "command" name.
  • Constructor Summary

    Constructors
    Constructor
    Description
    The Default-Constructor for this class.
  • Method Summary

    Modifier and Type
    Method
    Description
    abstract void
    addCatalog(String name, Catalog<C> catalog)
    Adds a named instance of Catalog to the factory (for subsequent retrieval later).
    static void
    Clear all references to registered catalogs, as well as to the relevant class loader.
    abstract Catalog<C>
    Gets the default instance of Catalog associated with the factory (if any); otherwise, return null.
    abstract Catalog<C>
    Retrieves a Catalog instance by name (if any); otherwise return null.
    <CMD extends Command<C>>
    CMD
    getCommand(String commandID)
    Return a Command based on the given commandID.
    static <C extends Context>
    CatalogFactory<C>
    Return the singleton CatalogFactory instance for the relevant ClassLoader.
    abstract Iterator<String>
    Return an Iterator over the set of named Catalogs known to this CatalogFactory.
    abstract void
    setCatalog(Catalog<C> catalog)
    Sets the default instance of Catalog associated with the factory.

    Methods inherited from class java.lang.Object

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

    • DELIMITER

      public static final String DELIMITER
      Values passed to the getCommand(String) method should use this as the delimiter between the "catalog" name and the "command" name.
      See Also:
  • Constructor Details

    • CatalogFactory

      public CatalogFactory()
      The Default-Constructor for this class.
  • Method Details

    • getCatalog

      public abstract Catalog<C> getCatalog()
      Gets the default instance of Catalog associated with the factory (if any); otherwise, return null.
      Returns:
      the default Catalog instance
    • setCatalog

      public abstract void setCatalog(Catalog<C> catalog)
      Sets the default instance of Catalog associated with the factory.
      Parameters:
      catalog - the default Catalog instance
    • getCatalog

      public abstract Catalog<C> getCatalog(String name)
      Retrieves a Catalog instance by name (if any); otherwise return null.
      Parameters:
      name - the name of the Catalog to retrieve
      Returns:
      the specified Catalog
    • addCatalog

      public abstract void addCatalog(String name, Catalog<C> catalog)
      Adds a named instance of Catalog to the factory (for subsequent retrieval later).
      Parameters:
      name - the name of the Catalog to add
      catalog - the Catalog to add
    • getNames

      public abstract Iterator<String> getNames()
      Return an Iterator over the set of named Catalogs known to this CatalogFactory. If there are no known catalogs, an empty Iterator is returned.
      Returns:
      An Iterator of the names of the Catalogs known by this factory.
    • getCommand

      public <CMD extends Command<C>> CMD getCommand(String commandID)
      Return a Command based on the given commandID.

      At this time, the structure of commandID is relatively simple: if the commandID contains a DELIMITER, treat the segment of the commandID up to (but not including) the DELIMITER as the name of a catalog, and the segment following the DELIMITER as a command name within that catalog. If the commandID contains no DELIMITER, treat the commandID as the name of a command in the default catalog.

      To preserve the possibility of future extensions to this lookup mechanism, the DELIMITER string should be considered reserved, and should not be used in command names. commandID values which contain more than one DELIMITER will cause an IllegalArgumentException to be thrown.

      Type Parameters:
      CMD - the expected Command type to be returned
      Parameters:
      commandID - the identifier of the command to return
      Returns:
      the command located with commandID, or null if either the command name or the catalog name cannot be resolved
      Throws:
      IllegalArgumentException - if the commandID contains more than one DELIMITER
      Since:
      Chain 1.1
    • getInstance

      public static <C extends Context> CatalogFactory<C> getInstance()
      Return the singleton CatalogFactory instance for the relevant ClassLoader. For applications that use a thread context class loader (such as web applications running inside a servet container), this will return a separate instance for each application, even if this class is loaded from a shared parent class loader.
      Type Parameters:
      C - Type of the context associated with this command
      Returns:
      the per-application singleton instance of CatalogFactory
    • clear

      public static void clear()
      Clear all references to registered catalogs, as well as to the relevant class loader. This method should be called, for example, when a web application utilizing this class is removed from service, to allow for garbage collection.