Class AnnotationDrivenProcessFactory

Object
AnnotationDrivenProcessFactory
All Implemented Interfaces:
ProcessFactory, Factory, OptionalFactory
Direct Known Subclasses:
AnnotatedBeanProcessFactory, StaticMethodsProcessFactory

public abstract class AnnotationDrivenProcessFactory extends Object implements ProcessFactory
A process factory that uses annotations to determine much of the metadata needed to describe a Process.

The annotations supported are:

Author:
jody, aaime
  • Field Details

    • namespace

      protected String namespace
  • Constructor Details

  • Method Details

    • getProcessDescription

      protected abstract DescribeProcess getProcessDescription(Name name)
    • method

      protected abstract Method method(String localPart)
    • getTitle

      public InternationalString getTitle()
      Description copied from interface: ProcessFactory
      Name suitable for display to end user.
      Specified by:
      getTitle in interface ProcessFactory
      Returns:
      A short name suitable for display in a user interface.
    • getDescription

      public InternationalString getDescription(Name name)
      Description copied from interface: ProcessFactory
      Human readable description of the specified process
      Specified by:
      getDescription in interface ProcessFactory
      Parameters:
      name - the process whose description is to be returned
    • getParameterInfo

      public Map<String,Parameter<?>> getParameterInfo(Name name)
      Description copied from interface: ProcessFactory
      Description of the Map parameter to use when executing.
      Specified by:
      getParameterInfo in interface ProcessFactory
      Parameters:
      name - the process identifier
      Returns:
      Description of required parameters
    • getResultInfo

      public Map<String,Parameter<?>> getResultInfo(Name name, Map<String,Object> parameters) throws IllegalArgumentException
      Description copied from interface: ProcessFactory
      Description of the results returned
      Specified by:
      getResultInfo in interface ProcessFactory
      Parameters:
      name - the process identifier
      parameters - the parameters to be used
      Throws:
      IllegalArgumentException
    • getTitle

      public InternationalString getTitle(Name name)
      Description copied from interface: ProcessFactory
      Human readable title suitable for display for the specified process

      Please note that this title is *not* stable across locale; if you want to remember a ProcessFactory between runs please use getName (which is dependent on the implementor to guarantee uniqueness) or use the classname

      Specified by:
      getTitle in interface ProcessFactory
      Parameters:
      name - the process identifier
    • getVersion

      public String getVersion(Name name)
      Description copied from interface: ProcessFactory
      Return the version of the process
      Specified by:
      getVersion in interface ProcessFactory
      Parameters:
      name - the process identifier
      Returns:
      String version
    • supportsProgress

      public boolean supportsProgress(Name name)
      Description copied from interface: ProcessFactory
      It is up to the process implementors to implement progress on the task, this method is used to see if the process has progress monitoring implemented
      Specified by:
      supportsProgress in interface ProcessFactory
      Parameters:
      name - the process identifier
      Returns:
      true if it supports progress monitoring
    • isAvailable

      public boolean isAvailable()
      Description copied from interface: OptionalFactory
      Returns true if this factory is ready for use. An optional factory may returns false for now but returns true later. However, the converse is not recommended.
      Specified by:
      isAvailable in interface OptionalFactory
    • getImplementationHints

      public Map<RenderingHints.Key,?> getImplementationHints()
      Description copied from interface: Factory
      Map of hints (maybe unmodifiable) used by this factory to customize its use. This map is not guaranteed to contains all the hints supplied by the user; it may be only a subset. Consequently, hints provided here are usually not suitable for creating new factories, unless the implementation make some additional garantees.

      The primary purpose of this method is to determine if an existing factory instance can be reused for a set of user-supplied hints. This method is invoked by FactoryRegistry in order to compare this factory's hints against user's hints. This is dependency introspection only; FactoryRegistry never invokes this method for creating new factories.

      Keys are usually static constants from the Hints class, while values are instances of some key-dependent class. The key set must contains at least all hints impacting functionality. While the key set may contains all hints supplied by the user, it is recommended to limit the set to only the hints used by this particular factory instance. A minimal set will helps FactoryRegistry to compare only hints that matter and avoid the creation of unnecessary instances of this factory.

      The hint values may be different than the one supplied by the user. If a user supplied a hint as a Class object, this method shall replace it by the actual instance used, if possible.

      Implementations of this method are usually quite simple. For example if a datum authority factory uses an ordinary datum factory, its method could be implemented as below (note that we should not check if the datum factory is null, since key with null value is the expected behaviour in this case). Example:

      
       Map hints = new HashMap();
       hints.put(Hints.DATUM_FACTORY, datumFactory);
       return hints;
       
      Specified by:
      getImplementationHints in interface Factory
      Returns:
      The map of hints, or an {@linkplain java.util.Collections.emptyMap() empty map} if none.
    • create

      public Process create(Name name)
      Cerate a process (for the indicated name).

      Subclasses can control the process using their implementation of:

      Specified by:
      create in interface ProcessFactory
      Parameters:
      name - the process identifier
      Returns:
      Process implementation
    • lookupInvertGridGeometry

      protected Method lookupInvertGridGeometry(Object targetObject, String methodName)
      Used to recognise RenderingProcess implementations; returns a non null method for RenderingProcess.invertGridGeometry(Map, Query, GridGeometry).

      Used to look up the method to use for "invertGridGeometry"; if a specific method name is not provided "invertGridGeometry" will be used.

      • For null method name "invertGridGeometry" will be used.
      • For "execute" method name "invertGridGeometry" will be used.
      • For "buffer" method name "bufferInvertGridGeometry" will be used
      Parameters:
      targetObject - Target object; may be null for static method lookup
      methodName - method to use for "invertGridGeometry"
      Returns:
      method to use for RenderingProcess "invertGridGeometry", or null if not a RenderingProcess
    • lookupCustomizeReadParams

      protected Method lookupCustomizeReadParams(Object targetObject, String methodName)
      Used to recognise RenderingProcess implementations; returns a non null method for RenderingProcess.customizeReadParams(Map, GridCoverageReader, GeneralParameterValue[]).

      Used to look up the method to use for "customizeReadParams"; if a specific method name is not provided "customizeReadParams" will be used.

      • For null method name "customizeReadParams" will be used.
      • For "execute" method name "customizeReadParams" will be used.
      • For "buffer" method name "customizeReadParams" will be used
      Parameters:
      targetObject - Target object; may be null for static method lookup
      methodName - method to use for "invertGridGeometry"
      Returns:
      method to use for RenderingProcess "invertGridGeometry", or null if not a RenderingProcess
    • lookupClipOnRenderingArea

      protected Method lookupClipOnRenderingArea(Object targetObject, String methodName)
      Used to recognise RenderingProcess implementations; returns a non null method for RenderingProcess.clipOnRenderingArea(Map).

      Used to look up the method to use for "clipOnRenderingArea"; if a specific method name is not provided "clipOnRenderingArea" will be used.

      • For null method name "clipOnRenderingArea" will be used.
      • For "execute" method name "clipOnRenderingArea" will be used.
      • For "buffer" method name "bufferClipOnRenderingArea" will be used
      Parameters:
      targetObject - Target object; may be null for static method lookup
      methodName - method to use for "clipOnRenderingArea"
      Returns:
      method to use for RenderingProcess "clipOnRenderingArea", or null if not a RenderingProcess
    • lookupInvertQuery

      protected Method lookupInvertQuery(Object targetObject, String methodName)
      Used to recognise RenderingProcess implementations; returns a non null method for RenderingProcess.invertQuery(Map, Query, GridGeometry).

      Used to look up the method to use for "invertQuery"; if a specific method name is not provided "invertGridGeometry" will be used.

      • For null method name "invertQuery" will be used.
      • For "execute" method name "invertQuery" will be used.
      • For "buffer" method name "bufferInvertQuery" will be used
      Parameters:
      targetObject - Target object; may be null for static method lookup
      methodName - method to use for "invertQuery"
      Returns:
      method to use for RenderingProcess "invertQuery", or null if not a RenderingProcess
    • createProcessBean

      protected abstract Object createProcessBean(Name name)
      Creates the bean upon which the process execution method will be invoked.

      Can be null in case the method is a static one

      Parameters:
      name - Name of the process bean
      Returns:
      intance of process bean; or null if the method is a static method