package org.esa.snap.rcp.nodes; import com.bc.ceres.core.Assert; import org.esa.snap.core.datamodel.ProductNode; import org.esa.snap.core.datamodel.ProductNodeGroup; import org.openide.util.NbBundle; import javax.swing.undo.AbstractUndoableEdit; import javax.swing.undo.CannotRedoException; import javax.swing.undo.CannotUndoException; /** * An undoable insertion of a {@code ProductNode}. * * @param <T> The product node type. * @author Norman Fomferra * @author Tonio Fincke */ @NbBundle.Messages("LBL_UndoableProductNodeDeletionName=Delete ''{0}''") public class UndoableProductNodeDeletion<T extends ProductNode> extends AbstractUndoableEdit { private ProductNodeGroup<T> productNodeGroup; private T productNode; private final int index; @SuppressWarnings("unchecked") public UndoableProductNodeDeletion(ProductNodeGroup<T> productNodeGroup, T productNode, int index) { Assert.notNull(productNodeGroup, "group"); Assert.notNull(productNode, "node"); this.productNodeGroup = productNodeGroup; this.productNode = productNode; this.index = index; } public T getProductNode() { return productNode; } @Override public String getPresentationName() { return Bundle.LBL_UndoableProductNodeDeletionName(productNode.getName()); } @Override public void undo() throws CannotUndoException { super.undo(); if (index < productNodeGroup.getNodeCount()) { productNodeGroup.add(index, productNode); } else { productNodeGroup.add(productNode); } } @Override public void redo() throws CannotRedoException { super.redo(); productNodeGroup.remove(productNode); } @Override public void die() { productNodeGroup = null; productNode = null; } }