package org.esa.snap.rcp.nodes; import org.esa.snap.core.datamodel.ProductNode; import javax.swing.undo.AbstractUndoableEdit; import javax.swing.undo.CannotRedoException; import javax.swing.undo.CannotUndoException; /** * An undoable edit of a {@code ProductNode}. * * @param <T> The product node type. * @author Norman Fomferra */ public class UndoableProductNodeEdit<T extends ProductNode> extends AbstractUndoableEdit { private final String name; private final T node; private final Edit<T> undo; private final Edit<T> redo; public UndoableProductNodeEdit(String name, T node, Edit<T> undo, Edit<T> redo) { this.name = name; this.node = node; this.undo = undo; this.redo = redo; } @Override public String getPresentationName() { return name; } @Override public void undo() throws CannotUndoException { if (undo != null) { undo.edit(node); } } @Override public void redo() throws CannotRedoException { if (redo != null) { redo.edit(node); } } @Override public boolean canUndo() { return undo != null; } @Override public boolean canRedo() { return redo != null; } interface Edit<T extends ProductNode> { void edit(T node); } }