// License: GPL. For details, see LICENSE file.
package org.openstreetmap.josm.plugins.JunctionChecker;
import static org.openstreetmap.josm.tools.I18n.tr;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashSet;
import javax.swing.JOptionPane;
import org.openstreetmap.josm.Main;
import org.openstreetmap.josm.gui.PleaseWaitRunnable;
import org.openstreetmap.josm.io.OsmTransferException;
import org.openstreetmap.josm.plugins.JunctionChecker.datastructure.Channel;
import org.openstreetmap.josm.plugins.JunctionChecker.junctionchecking.JunctionChecker;
import org.xml.sax.SAXException;
/**
* Diese Klasse wird aufgerufen, wenn in einer Teilmenge von Channels nach Kreuzungen gesucht wird.
* @author joerg
*/
public class JunctionSearchTask extends PleaseWaitRunnable {
private final JunctionChecker jc;
private final JunctionCheckerPlugin plugin;
private final int n;
private final HashSet<Channel> subset;
private final boolean produceRelation;
private boolean canceled;
public JunctionSearchTask(JunctionCheckerPlugin plugin, int n,
HashSet<Channel> subset,
boolean produceRelation) {
super("JunctionSearch", false);
this.plugin = plugin;
this.n = n;
this.subset = subset;
this.produceRelation = produceRelation;
jc = new JunctionChecker(plugin.getChannelDigraph(), n);
}
@Override
protected void cancel() {
this.canceled = true;
progressMonitor.cancel();
}
@Override
protected void finish() {
progressMonitor.finishTask();
if (canceled) {
return;
}
ArrayList<HashSet<Channel>> junctions = jc.getJunctions();
JOptionPane.showMessageDialog(Main.parent, tr("Number of {0}-ways junctions found: {1}", n, junctions.size()));
if (produceRelation) {
for (int i = 0; i < junctions.size(); i++) {
plugin.getRelationProducer().produceRelation(junctions.get(i), n);
}
}
}
@Override
protected void realRun() throws SAXException, IOException,
OsmTransferException {
jc.junctionSearch(new ArrayList<>(subset), getProgressMonitor());
}
}