package cz.cuni.mff.d3s.been.objectrepository.janitor;
import java.util.Collection;
import java.util.Map;
import java.util.TreeMap;
import cz.cuni.mff.d3s.been.persistence.task.PersistentContextState;
import cz.cuni.mff.d3s.been.persistence.task.PersistentTaskState;
/**
* Persistence trash cleanup planner
*
* @author darklight
*/
class TrashProcessor {
private final Map<String, TotalOutcome<PersistentTaskState>> oldTasks = new TreeMap<String, TotalOutcome<PersistentTaskState>>();
private final Map<String, TotalOutcome<PersistentContextState>> oldContexts = new TreeMap<String, TotalOutcome<PersistentContextState>>();
/**
* Add newly retrieved task outcomes from the persistence layer
*
* @param states
* States to add
*/
public void addTaskStates(Collection<PersistentTaskState> states) {
for (PersistentTaskState state : states) {
TotalOutcome<PersistentTaskState> outcome = oldTasks.get(state.getTaskId());
if (outcome == null) {
outcome = new TotalTaskOutcome();
oldTasks.put(state.getTaskId(), outcome);
}
outcome.addStateEntry(state);
}
}
/**
* Add newly retrieved context outcomes from the persistence layer
*
* @param states
* States to add
*/
public void addContextStates(Collection<PersistentContextState> states) {
for (PersistentContextState state : states) {
TotalOutcome<PersistentContextState> outcome = oldContexts.get(state.getContextId());
if (outcome == null) {
outcome = new TotalContextOutcome();
oldContexts.put(state.getContextId(), outcome);
}
outcome.addStateEntry(state);
}
}
/**
* Get a task outcome for processing
*
* @return A task outcome to be processed
*/
public synchronized TotalOutcome<PersistentTaskState> getNextTask() {
if (oldTasks.isEmpty()) {
return null;
}
return oldTasks.remove(oldTasks.keySet().iterator().next());
}
/**
* Get a context outcome for processing
*
* @return A context outcome to be processed
*/
public synchronized TotalOutcome<PersistentContextState> getNextContext() {
if (oldContexts.isEmpty()) {
return null;
}
return oldContexts.remove(oldContexts.keySet().iterator().next());
}
}