package pipe.historyActions;
import javax.swing.undo.AbstractUndoableEdit;
import javax.swing.undo.UndoableEdit;
import java.util.Collection;
import java.util.LinkedList;
/**
* A class that allows for many undoable edit items to be undone/redone at once
*
* Very useful when making multiple changes in one action
*/
public class MultipleEdit extends AbstractUndoableEdit {
/**
* Multiple undoable actions to be undone/redone in one undo/redo action
*/
private final Collection<UndoableEdit> multipleEdits = new LinkedList<>();
/**
*
* @param multipleEdits actions to be undone/redone in one undo/redo action
*/
public MultipleEdit(Collection<UndoableEdit> multipleEdits) {
this.multipleEdits.addAll(multipleEdits);
}
@Override
public int hashCode() {
return multipleEdits.hashCode();
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (!(o instanceof MultipleEdit)) {
return false;
}
MultipleEdit that = (MultipleEdit) o;
if (!multipleEdits.equals(that.multipleEdits)) {
return false;
}
return true;
}
/**
* Undoes every action in the multiple edits
*/
@Override
public void undo() {
super.undo();
for (UndoableEdit edit : multipleEdits) {
edit.undo();
}
}
/**
* Redoes every action in the multiple edits
*/
@Override
public void redo() {
super.redo();
for (UndoableEdit edit : multipleEdits) {
edit.redo();
}
}
}