package com.kartoflane.superluminal2.undo;
import javax.swing.undo.AbstractUndoableEdit;
import javax.swing.undo.CannotRedoException;
import javax.swing.undo.CannotUndoException;
import com.kartoflane.superluminal2.core.Manager;
import com.kartoflane.superluminal2.mvc.controllers.AbstractController;
@SuppressWarnings("serial")
public class UndoableDeleteEdit extends AbstractUndoableEdit {
private final int index;
private final AbstractController data;
private boolean disposeOnDie = true;
public UndoableDeleteEdit(AbstractController ac, int index) {
if (ac == null)
throw new IllegalArgumentException("Argument must not be null.");
if (!ac.isDeletable())
throw new IllegalArgumentException("The controller is not deletable.");
data = ac;
this.index = index;
}
@Override
public String getPresentationName() {
return String.format("delete %s", data.getClass().getSimpleName());
}
@Override
public void undo() throws CannotUndoException {
super.undo();
Manager.getCurrentShip().restore(data, index);
disposeOnDie = false;
}
@Override
public void redo() throws CannotRedoException {
super.redo();
Manager.getCurrentShip().delete(data);
disposeOnDie = true;
}
@Override
public void die() {
super.die();
if (disposeOnDie)
Manager.getCurrentShip().dispose(data);
}
}