Ticket #15316: 15316.patch
| File 15316.patch, 3.8 KB (added by , 7 years ago) |
|---|
-
src/reverter/ChangesetReverter.java
4 4 import static org.openstreetmap.josm.tools.I18n.tr; 5 5 6 6 import java.net.HttpURLConnection; 7 import java.util.ArrayList; 7 8 import java.util.Arrays; 8 9 import java.util.Collection; 9 10 import java.util.Collections; … … 23 24 import org.openstreetmap.josm.data.osm.OsmPrimitiveType; 24 25 import org.openstreetmap.josm.data.osm.PrimitiveId; 25 26 import org.openstreetmap.josm.data.osm.Relation; 26 import org.openstreetmap.josm.data.osm.RelationMember;27 27 import org.openstreetmap.josm.data.osm.RelationMemberData; 28 28 import org.openstreetmap.josm.data.osm.SimplePrimitiveId; 29 29 import org.openstreetmap.josm.data.osm.Way; … … 343 343 * 344 344 */ 345 345 public List<Command> getCommands() { 346 if (this.nds == null) return null; 346 List<Command> cmds = new ArrayList<>(); 347 if (this.nds == null) return cmds; 347 348 348 349 ////////////////////////////////////////////////////////////////////////// 349 350 // Create commands to restore/update all affected objects 350 351 DataSetCommandMerger merger = new DataSetCommandMerger(nds, ds); 351 List<Command> cmds = merger.getCommandList();352 cmds.addAll(merger.getCommandList()); 352 353 353 354 ////////////////////////////////////////////////////////////////////////// 354 355 // Create a set of objects to be deleted … … 439 440 } 440 441 441 442 public void fixNodesWithoutCoordinates(ProgressMonitor progressMonitor) throws OsmTransferException { 443 DataSet mod = new DataSet(); 442 444 for (Node n : nds.getNodes()) { 443 445 if (!n.isDeleted() && n.getCoor() == null) { 444 446 PrimitiveId id = n.getPrimitiveId(); 445 447 OsmPrimitive p = ds.getPrimitiveById(id); 446 if (p instanceof Node && p.getVersion() > 1) { 447 LatLon coor = ((Node) p).getCoor(); 448 if (coor == null) { 449 final OsmServerMultiObjectReader rdr = new OsmServerMultiObjectReader(); 450 readObjectVersion(rdr, id, p.getVersion()-1, progressMonitor); 451 Collection<OsmPrimitive> result = rdr.parseOsm(progressMonitor.createSubTaskMonitor(1, true)).allPrimitives(); 452 if (!result.isEmpty()) { 453 coor = ((Node) result.iterator().next()).getCoor(); 448 if (p instanceof Node) { 449 if (p.getVersion() == 1 && ((Node) p).isLatLonKnown()) { 450 n.cloneFrom(p); 451 } else if (p.getVersion() > 1 && !((Node) p).isLatLonKnown()) { 452 int version = p.getVersion() - 1; 453 while (version > 0) { 454 final OsmServerMultiObjectReader rdr = new OsmServerMultiObjectReader(); 455 readObjectVersion(rdr, id, version, progressMonitor); 456 DataSet history = rdr.parseOsm(progressMonitor.createSubTaskMonitor(1, true)); 457 if (!history.isEmpty() ) { 458 Node historyNode = (Node) history.allPrimitives().iterator().next(); 459 if (historyNode.isLatLonKnown() && changeset.getClosedAt().after(historyNode.getTimestamp())) { 460 mod.mergeFrom(history); 461 break; 462 } 463 } 464 --version; 454 465 } 455 466 } 456 if (coor != null) {457 n.setCoor(coor);458 }459 467 } 460 468 } 461 469 } 470 nds.mergeFrom(mod); 462 471 } 463 472 }
