package org.springframework.webflow.execution.repository.impl;
import java.io.Serializable;
import org.springframework.webflow.execution.repository.snapshot.FlowExecutionSnapshot;
import org.springframework.webflow.execution.repository.snapshot.SnapshotNotFoundException;
/**
* A group of flow execution snapshots. A SPI interface that encapsulates the storage management for a group of flow
* execution snapshots.
*
* @author Keith Donald
*/
public interface FlowExecutionSnapshotGroup {
/**
* Returns the snapshot with the provided <code>id</code>, or <code>null</code> if no such snapshot exists with that
* id.
* @param snapshotId the snapshot id
* @return the continuation
* @throws SnapshotNotFoundException if the id does not match a continuation in this group
*/
public FlowExecutionSnapshot getSnapshot(Serializable snapshotId) throws SnapshotNotFoundException;
/**
* Add a flow execution snapshot with given id to this group.
* @param snapshotId the snapshot id
* @param snapshot the snapshot
*/
public void addSnapshot(Serializable snapshotId, FlowExecutionSnapshot snapshot);
/**
* Update the snapshot with the given id. Does nothing if no snapshot has been added with the id provided.
* @param snapshotId the snapshot id
* @param snapshot the new snapshot
*/
public void updateSnapshot(Serializable snapshotId, FlowExecutionSnapshot snapshot);
/**
* Remove the snapshot with the given id. Does nothing if no snapshot has been added with the id provided.
* @param snapshotId the continuation id
*/
public void removeSnapshot(Serializable snapshotId);
/**
* Remove all snapshots in this group. Does nothing if no snapshots have been added to this group.
*/
public void removeAllSnapshots();
/**
* Returns the count of snapshots in this group.
*/
public int getSnapshotCount();
/**
* Gets the next snapshot id for new snapshot to add to this group.
* @return the next snapshot id
*/
public Serializable nextSnapshotId();
}