Ticket #5293: ticket5293.patch
File ticket5293.patch, 2.4 KB (added by , 13 years ago) |
---|
-
src/org/openstreetmap/josm/actions/downloadtasks/DownloadReferrersTask.java
7 7 import java.io.IOException; 8 8 import java.text.MessageFormat; 9 9 import java.util.Collection; 10 import java.util.Set; 11 import java.util.HashSet; 10 12 import java.util.HashMap; 11 13 import java.util.Map; 12 14 import java.util.Map.Entry; … … 17 19 import org.openstreetmap.josm.Main; 18 20 import org.openstreetmap.josm.data.osm.DataSet; 19 21 import org.openstreetmap.josm.data.osm.DataSetMerger; 22 import org.openstreetmap.josm.data.osm.Node; 20 23 import org.openstreetmap.josm.data.osm.OsmPrimitive; 21 24 import org.openstreetmap.josm.data.osm.OsmPrimitiveType; 22 25 import org.openstreetmap.josm.data.osm.PrimitiveId; … … 192 195 reader = null; 193 196 } 194 197 Collection<Way> ways = ds.getWays(); 198 195 199 DataSetMerger merger; 196 200 if (!ways.isEmpty()) { 197 reader = new MultiFetchServerObjectReader();201 Set<Node> nodes = new HashSet<Node>(); 198 202 for (Way w: ways) { 199 ((MultiFetchServerObjectReader)reader).append(w.getNodes()); 203 // Ensure each node is only listed once 204 nodes.addAll(w.getNodes()); 200 205 } 201 DataSet wayNodes = reader.parseOsm(progressMonitor.createSubTaskMonitor(1, false)); 202 synchronized(this) { // avoid race condition in cancel() 203 reader = null; 206 // Don't retrieve any nodes we've already grabbed 207 nodes.removeAll(parents.getNodes()); 208 if (!nodes.isEmpty()) { 209 reader = new MultiFetchServerObjectReader(); 210 ((MultiFetchServerObjectReader)reader).append(nodes); 211 DataSet wayNodes = reader.parseOsm(progressMonitor.createSubTaskMonitor(1, false)); 212 synchronized(this) { // avoid race condition in cancel() 213 reader = null; 214 } 215 merger = new DataSetMerger(ds, wayNodes); 216 merger.merge(); 204 217 } 205 merger = new DataSetMerger(ds, wayNodes);206 merger.merge();207 218 } 208 219 merger = new DataSetMerger(parents, ds); 209 220 merger.merge();