/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package nl.fontys.sofa.limo.view.util.undoable.widget.hub; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.swing.undo.CannotRedoException; import javax.swing.undo.CannotUndoException; import nl.fontys.sofa.limo.view.chain.ChainGraphScene; import nl.fontys.sofa.limo.view.node.bean.AbstractBeanNode; import nl.fontys.sofa.limo.view.node.bean.HubNode; import nl.fontys.sofa.limo.view.widget.HubWidget; import nl.fontys.sofa.limo.view.widget.LegWidget; import org.openide.util.Pair; /** * The * {@link nl.fontys.sofa.limo.view.util.undoable.widget.hub.DeleteHubWidgetUndoableEdit} * provides undo and redo functionaltiy for when a HubWidget is delete. * * @author Christina Zenzes */ public class DeleteHubWidgetUndoableEdit extends HubWidgetUndoableEdit { private HashMap<AbstractBeanNode, Pair<HubNode, HubNode>> legs; public DeleteHubWidgetUndoableEdit(ChainGraphScene scene, HubWidget widget) { super(scene, widget); initChildUndoableEdit(); } // The methods stores all needed information for recreating a LegWidget. private void initChildUndoableEdit() { legs = new HashMap<>(); List<AbstractBeanNode> edges = (List<AbstractBeanNode>) scene.findNodeEdges(node, true, true); for (AbstractBeanNode edge : edges) { HubNode source = (HubNode) scene.getEdgeSource(edge); HubNode target = (HubNode) scene.getEdgeTarget(edge); if (source == null || target == null) { break; } Pair pair = Pair.of(source, target); legs.put(edge, pair); } } @Override public void undo() throws CannotRedoException { this.addHub(); legs.entrySet().stream().forEach((leg) -> { HubWidget source = (HubWidget) scene.findWidget(leg.getValue().first()); HubWidget target = (HubWidget) scene.findWidget(leg.getValue().second()); LegWidget legWidget = (LegWidget) scene.addEdge(leg.getKey()); scene.connectHubWidgets(source, legWidget, target); }); scene.validate(); } @Override public void redo() throws CannotUndoException { this.removeHub(); } }