Package fmpp.localdatabuilders
Class CachingLocalDataBuilder
java.lang.Object
fmpp.localdatabuilders.CachingLocalDataBuilder
- All Implemented Interfaces:
LocalDataBuilder
,ProgressListener
- Direct Known Subclasses:
TddHashLocalDataBuilder
public abstract class CachingLocalDataBuilder
extends Object
implements LocalDataBuilder, ProgressListener
Stores the returned
Map
, and reuses it
build(Engine, TemplateEnvironment)
is invoked again during the same
processing session. This is useful when the building of the local data is an
expensive operation, and the builder is used for multiple source files.
The stored Map
will be deleted at the end of the processing
session.
-
Field Summary
Fields inherited from interface fmpp.ProgressListener
EVENT_BEGIN_FILE_PROCESSING, EVENT_BEGIN_PROCESSING_SESSION, EVENT_CREATED_EMPTY_DIR, EVENT_END_FILE_PROCESSING, EVENT_END_PROCESSING_SESSION, EVENT_IGNORING_DIR, EVENT_SOURCE_NOT_MODIFIED, EVENT_WARNING
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprotected abstract Map
Override this method in your local data builder class.final Map
build
(Engine eng, TemplateEnvironment env) Takes care of caching, and callsbuild(Engine)
if no cached result is available.void
notifyProgressEvent
(Engine engine, int event, File src, int pMode, Throwable error, Object param) Discards the cached result onProgressListener.EVENT_END_PROCESSING_SESSION
.
-
Constructor Details
-
CachingLocalDataBuilder
public CachingLocalDataBuilder()
-
-
Method Details
-
build
Takes care of caching, and callsbuild(Engine)
if no cached result is available.- Specified by:
build
in interfaceLocalDataBuilder
- Returns:
- the variables to add to the local data. Can be
null
. The returned map will not be modified (although technically, badly behaved 3rd party code can modify the values soted in the map...). - Throws:
Exception
-
notifyProgressEvent
public void notifyProgressEvent(Engine engine, int event, File src, int pMode, Throwable error, Object param) throws Exception Discards the cached result onProgressListener.EVENT_END_PROCESSING_SESSION
.The
TemplateEnvironment
is not passed, to ensure that the returnedMap
doesn't depend on the source file the builder is used for, so reusing the result for other source files is safe.- Specified by:
notifyProgressEvent
in interfaceProgressListener
- Parameters:
engine
- The engine instance where the event has occurred.event
- The code of the event: anEVENT_...
constant. As new event types can be introduced with new FMPP versions (even if it happens very seldom), a progress listener implementation should survive events that it does not understand. That is, it must not stop with an error, but it should silently ignore the event.src
- Depending onevent
the source file or null.pMode
- Depending onevent
the proccessing mode (Engine.PMODE_...
constant) orEngine.PMODE_NONE
. Note that new processing modes may be added as FMPP evolvers, so values that are not known be the progress listener should be handler nicely, and never cause error.error
- The error, or null if there was no error.param
- Extra information about the event. The class and meaning of object depends on the concrete event:- For
EVENT_WARNING
it is aString
that describles the reason of warning.
- For
- Throws:
Exception
-
build
Override this method in your local data builder class.- Throws:
Exception
-