package maps.gml.editor; import javax.swing.undo.AbstractUndoableEdit; import java.util.HashSet; import java.util.Collection; import maps.gml.GMLEdge; import rescuecore2.log.Logger; /** A function for pruning edges that are not attached to any shapes. */ public class PruneOrphanEdgesFunction extends AbstractFunction { /** Construct a PruneOrphanEdgesFunction. @param editor The editor instance. */ public PruneOrphanEdgesFunction(GMLEditor editor) { super(editor); } @Override public String getName() { return "Prune orphaned edges"; } @Override public void execute() { // Go through all edges and remove any that are not attached to shapes. final Collection<GMLEdge> remaining = new HashSet<GMLEdge>(editor.getMap().getEdges()); final Collection<GMLEdge> deleted = new HashSet<GMLEdge>(); for (GMLEdge next : remaining) { if (editor.getMap().getAttachedShapes(next).isEmpty()) { editor.getMap().removeEdge(next); deleted.add(next); } } if (!deleted.isEmpty()) { editor.setChanged(); editor.getViewer().repaint(); } Logger.debug("Removed " + deleted.size() + " edges"); editor.addEdit(new DeleteEdgesEdit(deleted)); } private class DeleteEdgesEdit extends AbstractUndoableEdit { private Collection<GMLEdge> edges; public DeleteEdgesEdit(Collection<GMLEdge> edges) { this.edges = edges; } @Override public void undo() { super.undo(); editor.getMap().add(edges); editor.getViewer().repaint(); } @Override public void redo() { super.redo(); editor.getMap().remove(edges); editor.getViewer().repaint(); } } }