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 aProcess
.The annotations supported are:
DescribeProcess
- describes the process functionalityDescribeResult
- describes a process resultDescribeParameter
- describes a process parameter
- Author:
- jody, aaime
-
-
Constructor Summary
Constructors Constructor Description AnnotationDrivenProcessFactory(InternationalString title, String namespace)
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description Process
create(Name name)
Cerate a process (for the indicated name).protected abstract Object
createProcessBean(Name name)
Creates the bean upon which the process execution method will be invoked.InternationalString
getDescription(Name name)
Human readable description of the specified processMap<RenderingHints.Key,?>
getImplementationHints()
Map of hints (maybe unmodifiable) used by this factory to customize its use.Map<String,Parameter<?>>
getParameterInfo(Name name)
Description of the Map parameter to use when executing.protected abstract DescribeProcess
getProcessDescription(Name name)
Map<String,Parameter<?>>
getResultInfo(Name name, Map<String,Object> parameters)
Description of the results returnedInternationalString
getTitle()
Name suitable for display to end user.InternationalString
getTitle(Name name)
Human readable title suitable for display for the specified processString
getVersion(Name name)
Return the version of the processboolean
isAvailable()
Returnstrue
if this factory is ready for use.protected Method
lookupClipOnRenderingArea(Object targetObject, String methodName)
Used to recogniseRenderingProcess
implementations; returns a non null method forRenderingProcess.clipOnRenderingArea(Map)
.protected Method
lookupCustomizeReadParams(Object targetObject, String methodName)
Used to recogniseRenderingProcess
implementations; returns a non null method forRenderingProcess.customizeReadParams(Map, GridCoverageReader, GeneralParameterValue[])
.protected Method
lookupInvertGridGeometry(Object targetObject, String methodName)
Used to recogniseRenderingProcess
implementations; returns a non null method forRenderingProcess.invertGridGeometry(Map, Query, GridGeometry)
.protected Method
lookupInvertQuery(Object targetObject, String methodName)
Used to recogniseRenderingProcess
implementations; returns a non null method forRenderingProcess.invertQuery(Map, Query, GridGeometry)
.protected abstract Method
method(String localPart)
boolean
supportsProgress(Name name)
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-
Methods inherited from class Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface ProcessFactory
getNames
-
-
-
-
Field Detail
-
namespace
protected String namespace
-
-
Constructor Detail
-
AnnotationDrivenProcessFactory
public AnnotationDrivenProcessFactory(InternationalString title, String namespace)
-
-
Method Detail
-
getProcessDescription
protected abstract DescribeProcess getProcessDescription(Name name)
-
getTitle
public InternationalString getTitle()
Description copied from interface:ProcessFactory
Name suitable for display to end user.- Specified by:
getTitle
in interfaceProcessFactory
- 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 interfaceProcessFactory
- 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 interfaceProcessFactory
- 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 interfaceProcessFactory
- Parameters:
name
- the process identifierparameters
- 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 processPlease 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 interfaceProcessFactory
- 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 interfaceProcessFactory
- 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 interfaceProcessFactory
- Parameters:
name
- the process identifier- Returns:
- true if it supports progress monitoring
-
isAvailable
public boolean isAvailable()
Description copied from interface:OptionalFactory
Returnstrue
if this factory is ready for use. An optional factory may returnsfalse
for now but returnstrue
later. However, the converse is not recommended.- Specified by:
isAvailable
in interfaceOptionalFactory
-
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 helpsFactoryRegistry
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 interfaceFactory
- 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:
method(String)
: must return a non null methodcreateProcessBean(Name)
: return a bean to use; or null for static methods
- Specified by:
create
in interfaceProcessFactory
- Parameters:
name
- the process identifier- Returns:
- Process implementation
-
lookupInvertGridGeometry
protected Method lookupInvertGridGeometry(Object targetObject, String methodName)
Used to recogniseRenderingProcess
implementations; returns a non null method forRenderingProcess.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 lookupmethodName
- 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 recogniseRenderingProcess
implementations; returns a non null method forRenderingProcess.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 lookupmethodName
- 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 recogniseRenderingProcess
implementations; returns a non null method forRenderingProcess.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 lookupmethodName
- 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 recogniseRenderingProcess
implementations; returns a non null method forRenderingProcess.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 lookupmethodName
- 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
-
-