// License: GPL. For details, see LICENSE file. package org.openstreetmap.josm.plugins.pt_assistant.actions; import java.util.ArrayList; import java.util.Collection; import java.util.List; import org.openstreetmap.josm.Main; import org.openstreetmap.josm.data.osm.Node; import org.openstreetmap.josm.data.osm.OsmPrimitive; import org.openstreetmap.josm.data.osm.OsmPrimitiveType; import org.openstreetmap.josm.data.osm.PrimitiveId; import org.openstreetmap.josm.data.osm.Relation; import org.openstreetmap.josm.gui.io.DownloadPrimitivesWithReferrersTask; import org.openstreetmap.josm.plugins.pt_assistant.utils.RouteUtils; /** * Thread that downloads incomplete relation members while pausing the rest of testing * @author darya * */ public class IncompleteMembersDownloadThread extends Thread { /** * Default constructor */ public IncompleteMembersDownloadThread() { super(); } @Override public void run() { try { synchronized (this) { ArrayList<PrimitiveId> list = new ArrayList<>(); // if there are selected routes, try adding them first: for (Relation currentSelectedRelation : Main.getLayerManager().getEditDataSet() .getSelectedRelations()) { if (RouteUtils.isTwoDirectionRoute(currentSelectedRelation)) { list.add(currentSelectedRelation); } } if (list.isEmpty()) { // add all route relations that are of public_transport // version 2: Collection<Relation> allRelations = Main.getLayerManager().getEditDataSet().getRelations(); for (Relation currentRelation : allRelations) { if (RouteUtils.isTwoDirectionRoute(currentRelation)) { list.add(currentRelation); } } } // add all stop_positions: Collection<Node> allNodes = Main.getLayerManager().getEditDataSet().getNodes(); for (Node currentNode : allNodes) { if (currentNode.hasTag("public_transport", "stop_position")) { List<OsmPrimitive> referrers = currentNode.getReferrers(); boolean parentWayExists = false; for (OsmPrimitive referrer : referrers) { if (referrer.getType().equals(OsmPrimitiveType.WAY)) { parentWayExists = true; break; } } if (!parentWayExists) { list.add(currentNode); } } } DownloadPrimitivesWithReferrersTask task = new DownloadPrimitivesWithReferrersTask(false, list, false, true, null, null); Thread t = new Thread(task); t.start(); t.join(); } } catch (InterruptedException e) { // do nothing in case the download was interrupted Main.trace(e); } } }