Package org.opensaml.core.xml.persist

# Class MapLoadSaveManager<T extends XMLObject>

java.lang.Object
org.opensaml.core.xml.persist.AbstractConditionalLoadXMLObjectLoadSaveManager<T>
org.opensaml.core.xml.persist.MapLoadSaveManager<T>

Type Parameters:
  `T` - the specific base XML object type being managed

All Implemented Interfaces:
  `ConditionalLoadXMLObjectLoadSaveManager<T>`, `XMLObjectLoadSaveManager<T>`

@NotThreadSafe public class MapLoadSaveManager<T extends XMLObject> extends AbstractConditionalLoadXMLObjectLoadSaveManager<T>
Simple implementation of `XMLObjectLoadSaveManager` which uses an in-memory map.

## Field Summary

Fields
Modifier and Type
Field
Description
`private Map<String,T>`
`backingMap`
The backing map.
`private Map<String,Instant>`
`dataLastModified`
Storage to track last modified time of data.
`private org.slf4j.Logger`
`log`
Logger.

## Constructor Summary

Constructors
Modifier
Constructor
Description
``
`MapLoadSaveManager()`
Constructor.
``
`MapLoadSaveManager(boolean conditionalLoad)`
Constructor.
``
`MapLoadSaveManager(Map<String,T> map)`
Constructor.
`protected`
`MapLoadSaveManager(Map<String,T> map, Map<String,Instant> lastModifiedMap, boolean conditionalLoad)`
Constructor.

## Method Summary

Modifier and Type
Method
Description
`boolean`
`exists(String key)`
Evaluate whether an object already exists indexed by the supplied key.
`protected boolean`
`isUnmodifiedSinceLastLoad(String key)`
Check whether the data corresponding to the specified key has been modified since the last time `XMLObjectLoadSaveManager.load(String)` was called for that key.
`Iterable<Pair<String,T>>`
`listAll()`
Return an iterable of all objects under management, along with their associated index key.
`Set<String>`
`listKeys()`
Return a set of the index keys of all objects under management.
`T`
`load(String key)`
Load a particular object based on the supplied key.
`boolean`
`remove(String key)`
Remove the object indexed by the specified key.
`void`
`save(String key, T xmlObject)`
Save a particular object, indexed by the supplied key.
`void`
`save(String key, T xmlObject, boolean overwrite)`
Save a particular object, indexed by the supplied key.
`boolean`
`updateKey(String currentKey, String newKey)`
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`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

## Field Details

### log

@Nonnull private org.slf4j.Logger log
Logger.

### backingMap

@Nonnull private Map<String,T extends XMLObject> backingMap
The backing map.

### dataLastModified

@Nonnull private Map<String,Instant> dataLastModified
Storage to track last modified time of data.

## Constructor Details

### MapLoadSaveManager

public MapLoadSaveManager()
Constructor.

### MapLoadSaveManager

public MapLoadSaveManager(@ParameterName(name="conditionalLoad") boolean conditionalLoad)
Constructor.

Parameters:
  `conditionalLoad` - whether `load(String)` should behave as defined in `ConditionalLoadXMLObjectLoadSaveManager`

### MapLoadSaveManager

public MapLoadSaveManager(@ParameterName(name="map") @Nonnull Map<String,T> map)
Constructor.

Note: conditional load is not supported with this option, because of the need to track modify times of items stored in the backing map. Use instead `MapLoadSaveManager(boolean)`.

Parameters:
  `map` - the backing map

### MapLoadSaveManager

protected MapLoadSaveManager(@ParameterName(name="map") @Nonnull Map<String,T> map, @ParameterName(name="dataLastModified") @Nonnull Map<String,Instant> lastModifiedMap, @ParameterName(name="conditionalLoad") boolean conditionalLoad)
Constructor.

Parameters:
  `map` - the backing map
  `lastModifiedMap` - the storage for data last modified times
  `conditionalLoad` - whether `load(String)` should behave as defined in `ConditionalLoadXMLObjectLoadSaveManager`

## Method Details

### listKeys

@Nonnull @NotLive @Unmodifiable public Set<String> listKeys() throws IOException
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

@Nonnull @NotLive @Unmodifiable public Iterable<Pair<String,T>> listAll() throws IOException
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

public boolean exists(@Nonnull String key) throws IOException
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

public T load(@Nonnull String key) throws IOException
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

### save

public void save(@Nonnull String key, @Nonnull T xmlObject) throws IOException
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, see `XMLObjectLoadSaveManager.save(String, XMLObject, boolean)`.

Parameters:
  `key` - the key under which to index the object
  `xmlObject` - 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

public void save(@Nonnull String key, @Nonnull T xmlObject, boolean overwrite) throws IOException
Save a particular object, indexed by the supplied key.

Parameters:
  `key` - the key under which to index the object
  `xmlObject` - the object to save
  `overwrite` - 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

public boolean remove(@Nonnull String key) throws IOException
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

public boolean updateKey(@Nonnull String currentKey, @Nonnull String newKey) throws IOException
Update the key under which a particular object is stored.

Parameters:
  `currentKey` - the current key under which the object is stored
  `newKey` - 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

### isUnmodifiedSinceLastLoad

protected boolean isUnmodifiedSinceLastLoad(@Nonnull String key) throws IOException
Check whether the data corresponding to the specified key has been modified since the last time `XMLObjectLoadSaveManager.load(String)` was called for that key.

Specified by:
  `isUnmodifiedSinceLastLoad` in class `AbstractConditionalLoadXMLObjectLoadSaveManager<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