package ru.khasang.cachoeira.commands; import java.util.Stack; public class CommandExecutor { private Stack<Command> undoStack = new Stack<>(); private Stack<Command> redoStack = new Stack<>(); public CommandExecutor() { } public void execute(Command command) { redoStack.clear(); undoStack.push(command); command.execute(); } public void undo() { if (!undoStack.isEmpty()) { Command command = undoStack.pop(); redoStack.push(command); command.undo(); } } public void redo() { if (!redoStack.isEmpty()) { Command command = redoStack.pop(); undoStack.push(command); command.execute(); } } public boolean isChanged() { return !undoStack.isEmpty(); } public void clearLists() { undoStack.clear(); redoStack.clear(); } }