package be.ac.chaq.model.snapshot; import java.util.Collection; import java.util.Date; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; import be.ac.chaq.model.entity.ComponentIdentifier; import be.ac.chaq.model.entity.EntityIdentifier; import be.ac.chaq.model.entity.EntityState; public class Snapshot { private Date timeStamp; private ComponentIdentifier component; private Map<EntityIdentifier, EntityState> identifierToState; private Set<Snapshot> predecessors; private Set<Snapshot> successors; public Snapshot() { identifierToState = new HashMap<EntityIdentifier, EntityState>(); predecessors = new HashSet<Snapshot>(); successors = new HashSet<Snapshot>(); } public Snapshot createSuccessor() { Snapshot successor = new Snapshot(); successor.addPredecessor(this); this.addSuccessor(successor); successor.identifierToState = new HashMap<EntityIdentifier, EntityState>(this.identifierToState); return successor; } public Date getTimeStamp() { return timeStamp; } public void setTimeStamp(Date timeStamp) { this.timeStamp = timeStamp; } public boolean addSuccessor(Snapshot successor) { return successors.add(successor); } public boolean addPredecessor(Snapshot predecessor) { return predecessors.add(predecessor); } public ComponentIdentifier getComponent() { return component; } public void setComponent(ComponentIdentifier component) { this.component = component; } public Set<Snapshot> getPredecessors() { return predecessors; } public Set<Snapshot> getSuccessors() { return successors; } public EntityState lookup(EntityIdentifier id) { return identifierToState.get(id); } public boolean exists(EntityIdentifier id) { return identifierToState.containsKey(id); } public void update(EntityState s) { identifierToState.put(s.getID(), s); s.setSnapshotForLookup(this); } public Collection<EntityState> getEntities() { return identifierToState.values(); } }