package maps.gml.editor; import java.util.Set; import java.util.HashSet; import java.util.Iterator; import maps.gml.GMLEdge; import rescuecore2.log.Logger; /** A function for fixing duplicate edges. */ public class FixDuplicateEdgesFunction extends ProgressFunction { /** Construct a FixDuplicateEdgesFunction. @param editor The editor instance. */ public FixDuplicateEdgesFunction(GMLEditor editor) { super(editor); } @Override public String getName() { return "Fix duplicate edges"; } @Override protected String getTitle() { return "Fixing duplicate edges"; } @Override protected void executeImpl() { // Go through all edges and replace any duplicates final Set<GMLEdge> remaining = new HashSet<GMLEdge>(editor.getMap().getEdges()); setProgressLimit(remaining.size()); int count = 0; while (!remaining.isEmpty()) { GMLEdge next = remaining.iterator().next(); remaining.remove(next); // Look at other edges for a duplicate Iterator<GMLEdge> it = remaining.iterator(); while (it.hasNext()) { GMLEdge test = it.next(); if ((test.getStart() == next.getStart() || test.getStart() == next.getEnd()) && (test.getEnd() == next.getStart() || test.getEnd() == next.getEnd())) { // Duplicate found editor.getMap().replaceEdge(test, next); editor.getMap().removeEdge(test); it.remove(); ++count; bumpProgress(); } } bumpProgress(); } if (count != 0) { editor.setChanged(); editor.getViewer().repaint(); } Logger.debug("Removed " + count + " duplicate edges"); } }