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 UndoableCreateEdit extends AbstractUndoableEdit {
private final AbstractController data;
private boolean disposeOnDie = false;
public UndoableCreateEdit(AbstractController ac) {
if (ac == null)
throw new IllegalArgumentException("Argument must not be null.");
if (!ac.isDeletable())
throw new IllegalArgumentException("The controller is not deletable.");
data = ac;
}
@Override
public String getPresentationName() {
return String.format("create %s", data.getClass().getSimpleName());
}
@Override
public void undo() throws CannotUndoException {
super.undo();
Manager.getCurrentShip().delete(data);
disposeOnDie = true;
}
@Override
public void redo() throws CannotRedoException {
super.redo();
Manager.getCurrentShip().restore(data, -1);
disposeOnDie = false;
}
@Override
public void die() {
super.die();
if (disposeOnDie)
Manager.getCurrentShip().dispose(data);
}
}