Changeset 36233 in osm for applications/editors/josm/plugins/reverter/src
- Timestamp:
- 2024-03-28T15:04:04+01:00 (14 months ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
applications/editors/josm/plugins/reverter/src/reverter/ChangesetReverter.java
r36230 r36233 504 504 505 505 public void fixNodesWithoutCoordinates(ProgressMonitor progressMonitor) throws OsmTransferException { 506 Collection<Node> nodes = nds.getNodes(); 506 Collection<Node> nodes = new ArrayList<>(nds.getNodes()); 507 507 int num = nodes.size(); 508 508 progressMonitor.beginTask(addChangesetIdPrefix( … … 510 510 // downloads == num ticks, then we get the downloaded data (1 tick), then we process the nodes (num ticks) 511 511 2 * num + 1); 512 513 // Remove primitives where we already know the LatLon. 514 nodes.removeIf(n -> { 515 PrimitiveId id = n.getPrimitiveId(); 516 OsmPrimitive p = ds.getPrimitiveById(id); 517 return !(p instanceof Node) || ((Node) p).isLatLonKnown(); 518 }); 519 progressMonitor.worked(num - nodes.size()); 512 520 513 521 // Do bulk version fetches first … … 526 534 versionMap.replaceAll((key, value) -> value - 1); 527 535 versionMap.values().removeIf(i -> i <= 0); 528 ds.update(() -> { 529 for (Node n : nodes) { 530 if (!n.isDeleted() && !n.isLatLonKnown()) { 531 final Node historyNode = (Node) history.getPrimitiveById(n); 532 if (historyNode != null && historyNode.isLatLonKnown() 533 && changeset.getClosedAt().isAfter(historyNode.getInstant())) { 534 n.load(historyNode.save()); 535 versionMap.remove(n.getUniqueId()); 536 progressMonitor.worked(1); 537 } 538 } 539 if (progressMonitor.isCanceled()) { 540 break; 541 } 542 } 543 }); 536 ds.update(() -> updateNodes(progressMonitor, nodes, versionMap, history)); 544 537 if (progressMonitor.isCanceled()) { 545 538 break; … … 548 541 } finally { 549 542 progressMonitor.finishTask(); 543 } 544 } 545 546 /** 547 * Update nodes lacking a lat/lon 548 * @param progressMonitor The monitor to update 549 * @param nodes The nodes to update 550 * @param versionMap The version map to update for the next round 551 * @param history The history dataset 552 */ 553 private void updateNodes(ProgressMonitor progressMonitor, Collection<Node> nodes, Map<Long, Integer> versionMap, DataSet history) { 554 for (Node n : nodes) { 555 if (!n.isDeleted() && !n.isLatLonKnown()) { 556 final Node historyNode = (Node) history.getPrimitiveById(n); 557 if (historyNode != null && historyNode.isLatLonKnown() 558 && changeset.getClosedAt().isAfter(historyNode.getInstant())) { 559 n.load(historyNode.save()); 560 versionMap.remove(n.getUniqueId()); 561 progressMonitor.worked(1); 562 } 563 } 564 if (progressMonitor.isCanceled()) { 565 break; 566 } 550 567 } 551 568 }
Note:
See TracChangeset
for help on using the changeset viewer.