package com.baselet.element;
import java.util.ArrayList;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class UndoHistory {
private final Logger log = LoggerFactory.getLogger(UndoHistory.class);
private final List<UndoInformation> history = new ArrayList<UndoInformation>();
private int currentIndex = -1;
public void add(UndoInformation undoInformation) {
while (history.size() > currentIndex + 1) {
history.remove(history.size() - 1);
}
history.add(undoInformation);
currentIndex++;
}
public UndoInformation remove() {
UndoInformation undoInformation = history.remove(currentIndex);
currentIndex = Math.min(currentIndex, history.size() - 1); // stay at current index except if it was pointing to the last element
return undoInformation;
}
public UndoInformation get(boolean undo) {
if (history.isEmpty()) {
return null;
}
if (!undo) {
currentIndex++;
}
UndoInformation undoInformation = history.get(currentIndex);
log.trace("GET " + currentIndex + " = " + undoInformation.getDiffRectangle(10, undo) + "/size" + history.size());
if (undo) {
currentIndex--;
}
return undoInformation;
}
}