Package org.opensaml.core.xml.persist
Class FilesystemLoadSaveManager<T extends XMLObject>
java.lang.Object
org.opensaml.core.xml.persist.AbstractConditionalLoadXMLObjectLoadSaveManager<T>
org.opensaml.core.xml.persist.FilesystemLoadSaveManager<T>
- Type Parameters:
T
- the specific base XML object type being managed
- All Implemented Interfaces:
ConditionalLoadXMLObjectLoadSaveManager<T>
,XMLObjectLoadSaveManager<T>
@NotThreadSafe
public class FilesystemLoadSaveManager<T extends XMLObject>
extends AbstractConditionalLoadXMLObjectLoadSaveManager<T>
Implementation of
XMLObjectLoadSaveManager
which uses a local filesystem to load and store serialized XML.
The primary required configuration is a base directory path under which files of serialized XML will be located. The file name to use is simply the specified String index key, which is treated as an immediate child file name of the base directory. Callers are required to ensure that index keys are acceptable as file names on the platform(s) on which this manager is used.
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprivate class
Iterable which provides lazy iteration over the managed files.private class
Iterator which provides lazy iteration over the managed files. -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate File
The base directory used for storing individual serialized XML files.Optional strategy function which produces the intermediate directory path(s) between thebaseDirectory
and the actual file.private org.slf4j.Logger
Logger.private ParserPool
Parser pool instance for deserializing XML from the filesystem. -
Constructor Summary
ConstructorsConstructorDescriptionFilesystemLoadSaveManager
(File baseDir) Constructor.FilesystemLoadSaveManager
(File baseDir, boolean conditionalLoad) Constructor.FilesystemLoadSaveManager
(File baseDir, boolean conditionalLoad, Function<String, List<String>> dirStrategy) Constructor.Constructor.FilesystemLoadSaveManager
(File baseDir, ParserPool pp) Constructor.FilesystemLoadSaveManager
(File baseDir, ParserPool pp, boolean conditionalLoad) Constructor.FilesystemLoadSaveManager
(File baseDir, ParserPool pp, boolean conditionalLoad, Function<String, List<String>> dirStrategy) Constructor.FilesystemLoadSaveManager
(String baseDir) Constructor.FilesystemLoadSaveManager
(String baseDir, boolean conditionalLoad) Constructor.FilesystemLoadSaveManager
(String baseDir, ParserPool pp) Constructor.FilesystemLoadSaveManager
(String baseDir, ParserPool pp, boolean conditionalLoad) Constructor. -
Method Summary
Modifier and TypeMethodDescriptionprotected File
Build the target file name from the specified index key and the configured base directory.protected void
Check and create intermediate directories between thebaseDirectory
and the actual file, if necessary.boolean
Evaluate whether an object already exists indexed by the supplied key.protected boolean
Check whether the data corresponding to the specified key has been modified since the last timeXMLObjectLoadSaveManager.load(String)
was called for that key.listAll()
Return an iterable of all objects under management, along with their associated index key.listKeys()
Return a set of the index keys of all objects under management.Load a particular object based on the supplied key.boolean
Remove the object indexed by the specified key.void
Save a particular object, indexed by the supplied key.void
Save a particular object, indexed by the supplied key.boolean
Update the key under which a particular object is stored.Methods inherited from class org.opensaml.core.xml.persist.AbstractConditionalLoadXMLObjectLoadSaveManager
clearAllLoadLastModified, clearLoadLastModified, getLoadLastModified, isLoadConditionally, updateLoadLastModified, updateLoadLastModified
-
Field Details
-
log
private org.slf4j.Logger logLogger. -
baseDirectory
The base directory used for storing individual serialized XML files. -
intermediateDirectoryStrategy
Optional strategy function which produces the intermediate directory path(s) between thebaseDirectory
and the actual file. -
parserPool
Parser pool instance for deserializing XML from the filesystem.
-
-
Constructor Details
-
FilesystemLoadSaveManager
Constructor.- Parameters:
baseDir
- the base directory, must be an absolute path
-
FilesystemLoadSaveManager
public FilesystemLoadSaveManager(@ParameterName(name="baseDir") @Nonnull String baseDir, @ParameterName(name="conditionalLoad") boolean conditionalLoad) Constructor.- Parameters:
baseDir
- the base directory, must be an absolute pathconditionalLoad
- whetherload(String)
should behave as defined inConditionalLoadXMLObjectLoadSaveManager
-
FilesystemLoadSaveManager
Constructor.- Parameters:
baseDir
- the base directory, must be an absolute path
-
FilesystemLoadSaveManager
public FilesystemLoadSaveManager(@ParameterName(name="baseDirFile") @Nonnull File baseDir, @ParameterName(name="intermediateDirectoryStrategy") @Nullable Function<String, List<String>> dirStrategy) Constructor.- Parameters:
baseDir
- the base directory, must be an absolute pathdirStrategy
- the intermediate directory strategy
-
FilesystemLoadSaveManager
public FilesystemLoadSaveManager(@ParameterName(name="baseDirFile") @Nonnull File baseDir, @ParameterName(name="conditionalLoad") boolean conditionalLoad) Constructor.- Parameters:
baseDir
- the base directory, must be an absolute pathconditionalLoad
- whetherload(String)
should behave as defined inConditionalLoadXMLObjectLoadSaveManager
-
FilesystemLoadSaveManager
public FilesystemLoadSaveManager(@ParameterName(name="baseDirFile") @Nonnull File baseDir, @ParameterName(name="conditionalLoad") boolean conditionalLoad, @ParameterName(name="intermediateDirectoryStrategy") @Nullable Function<String, List<String>> dirStrategy) Constructor.- Parameters:
baseDir
- the base directory, must be an absolute pathconditionalLoad
- whetherload(String)
should behave as defined inConditionalLoadXMLObjectLoadSaveManager
dirStrategy
- the intermediate directory strategy
-
FilesystemLoadSaveManager
public FilesystemLoadSaveManager(@ParameterName(name="baseDir") @Nonnull String baseDir, @ParameterName(name="parserPool") @Nullable ParserPool pp) Constructor.- Parameters:
baseDir
- the base directory, must be an absolute pathpp
- the parser pool instance to use
-
FilesystemLoadSaveManager
public FilesystemLoadSaveManager(@ParameterName(name="baseDir") @Nonnull String baseDir, @ParameterName(name="parserPool") @Nullable ParserPool pp, @ParameterName(name="conditionalLoad") boolean conditionalLoad) Constructor.- Parameters:
baseDir
- the base directory, must be an absolute pathpp
- the parser pool instance to useconditionalLoad
- whetherload(String)
should behave as defined inConditionalLoadXMLObjectLoadSaveManager
-
FilesystemLoadSaveManager
public FilesystemLoadSaveManager(@ParameterName(name="baseDirFile") @Nonnull File baseDir, @ParameterName(name="parserPool") @Nullable ParserPool pp) Constructor.- Parameters:
baseDir
- the base directory, must be an absolute pathpp
- the parser pool instance to use
-
FilesystemLoadSaveManager
public FilesystemLoadSaveManager(@ParameterName(name="baseDirFile") @Nonnull File baseDir, @ParameterName(name="parserPool") @Nullable ParserPool pp, @ParameterName(name="conditionalLoad") boolean conditionalLoad) Constructor.- Parameters:
baseDir
- the base directory, must be an absolute pathpp
- the parser pool instance to useconditionalLoad
- whetherload(String)
should behave as defined inConditionalLoadXMLObjectLoadSaveManager
-
FilesystemLoadSaveManager
public FilesystemLoadSaveManager(@ParameterName(name="baseDirFile") @Nonnull File baseDir, @ParameterName(name="parserPool") @Nullable ParserPool pp, @ParameterName(name="conditionalLoad") boolean conditionalLoad, @ParameterName(name="intermediateDirectoryStrategy") @Nullable Function<String, List<String>> dirStrategy) Constructor.- Parameters:
baseDir
- the base directory, must be an absolute pathpp
- the parser pool instance to useconditionalLoad
- whetherload(String)
should behave as defined inConditionalLoadXMLObjectLoadSaveManager
dirStrategy
- the intermediate directory strategy
-
-
Method Details
-
listKeys
Return a set of the index keys of all objects under management.- Returns:
- a set of all indexed keys
- Throws:
IOException
- if there is a fatal error obtaining the keys
-
listAll
Return an iterable of all objects under management, along with their associated index key.- Returns:
- an iterable of all managed objects
- Throws:
IOException
- if there is a fatal error loading the managed objects
-
exists
Evaluate whether an object already exists indexed by the supplied key.- Parameters:
key
- the key of the desired object- Returns:
- true if object exists, false otherwise
- Throws:
IOException
- if there is a fatal error evaluating object existence
-
load
Load a particular object based on the supplied key.- Parameters:
key
- the key of the desired object- Returns:
- the object saved under the specified key, or null if there is no such object
- Throws:
IOException
- if there is a fatal error loading the object
-
isUnmodifiedSinceLastLoad
Check whether the data corresponding to the specified key has been modified since the last timeXMLObjectLoadSaveManager.load(String)
was called for that key.- Specified by:
isUnmodifiedSinceLastLoad
in classAbstractConditionalLoadXMLObjectLoadSaveManager<T extends XMLObject>
- Parameters:
key
- the data key- Returns:
- true if the corresponding data has been modified since the last load, false otherwise
- Throws:
IOException
- if there is a fatal error evaluating the last modified status
-
save
Save a particular object, indexed by the supplied key.An existing object indexed by the supplied key will not be overwritten. Instead an
IOException
will be thrown. For saving with the overwrite option, seeXMLObjectLoadSaveManager.save(String, XMLObject, boolean)
.- Parameters:
key
- the key under which to index the objectxmlObject
- the object to save- Throws:
IOException
- if there is a fatal error saving the object, or if an object already exists indexed by the supplied key
-
save
Save a particular object, indexed by the supplied key.- Parameters:
key
- the key under which to index the objectxmlObject
- the object to saveoverwrite
- whether or not to overwrite any existing object indexed by the supplied key- Throws:
IOException
- if there is a fatal error saving the object, or if overwrite=false, if an object already exists indexed by the supplied key
-
remove
Remove the object indexed by the specified key.- Parameters:
key
- the key of the object to remove- Returns:
- true if the object was found and successfully removed, false if no such object was found
- Throws:
IOException
- if there was a fatal error removing the object
-
updateKey
Update the key under which a particular object is stored.- Parameters:
currentKey
- the current key under which the object is storednewKey
- the new key under which the object should be stored- Returns:
- true if the object was found under the current key and the key successfully updated, false if no such object was found
- Throws:
IOException
- if there was a fatal error updating the key
-
checkAndCreateIntermediateDirectories
Check and create intermediate directories between thebaseDirectory
and the actual file, if necessary.- Parameters:
file
- the target file whose path is to be evaluated- Throws:
IOException
- if the intermediate directory creation fails
-
buildFile
Build the target file name from the specified index key and the configured base directory.- Parameters:
key
- the target file name index key- Returns:
- the constructed File instance for the target file
- Throws:
IOException
- if there is a fatal error constructing or evaluating the candidate target path
-