Changeset 29553 in osm for applications/editors


Ignore:
Timestamp:
2013-05-01T02:51:44+02:00 (12 years ago)
Author:
donvip
Message:

[josm_reverter] should fix #josm7845, #josm7934, #josm7968, #josm8164, #josm8219, #josm8240 (nodes without coordinates)

Location:
applications/editors/josm/plugins/reverter/src/reverter
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • applications/editors/josm/plugins/reverter/src/reverter/ChangesetReverter.java

    r29551 r29553  
    55import java.net.HttpURLConnection;
    66import java.util.Arrays;
     7import java.util.Collection;
    78import java.util.Collections;
    89import java.util.HashSet;
     
    174175        addMissingHistoryIds(deleted);
    175176    }
     177   
     178    private void readObjectVersion(OsmServerMultiObjectReader rdr, PrimitiveId id, int version, ProgressMonitor progressMonitor) throws OsmTransferException {
     179        boolean readOK = false;
     180        while (!readOK && version >= 1) {
     181            try {
     182                rdr.readObject(id, version, progressMonitor.createSubTaskMonitor(1, true));
     183                readOK = true;
     184            } catch (OsmApiException e) {
     185                if (e.getResponseCode() != HttpURLConnection.HTTP_FORBIDDEN) {
     186                    throw e;
     187                }
     188                String message = "Version "+version+" of "+id+" is unauthorized";
     189                if (version > 1) {
     190                    message += ", requesting previous one";
     191                }
     192                Main.info(message);
     193                version--;
     194            }
     195        }
     196        if (!readOK) {
     197            Main.warn("Cannot retrieve any previous version of "+id);
     198        }
     199    }
    176200
    177201    /**
     
    188212                for (HistoryOsmPrimitive entry : collection) {
    189213                    PrimitiveId id = entry.getPrimitiveId();
    190                     int version = cds.getEarliestVersion(id)-1;
    191                     boolean readOK = false;
    192                     while (!readOK && version >= 1) {
    193                         try {
    194                             rdr.readObject(id, version, progressMonitor.createSubTaskMonitor(1, true));
    195                             readOK = true;
    196                         } catch (OsmApiException e) {
    197                             if (e.getResponseCode() != HttpURLConnection.HTTP_FORBIDDEN) {
    198                                 throw e;
    199                             }
    200                             String message = "Version "+version+" of "+id+" is unauthorized";
    201                             if (version > 1) {
    202                                 message += ", requesting previous one";
    203                             }
    204                             Main.info(message);
    205                             version--;
    206                         }
    207                     }
    208                     if (!readOK) {
    209                         Main.warn("Cannot retrieve any previous version of "+id);
    210                     }
     214                    readObjectVersion(rdr, id, cds.getEarliestVersion(id)-1, progressMonitor);
    211215                    if (progressMonitor.isCanceled()) return;
    212216                }
     
    412416        return !missing.isEmpty();
    413417    }
     418   
     419    public void fixNodesWithoutCoordinates(ProgressMonitor progressMonitor) throws OsmTransferException {
     420        for (Node n : nds.getNodes()) {
     421            if (!n.isDeleted() && n.getCoor() == null) {
     422                PrimitiveId id = n.getPrimitiveId();
     423                OsmPrimitive p = ds.getPrimitiveById(id);
     424                if (p instanceof Node && p.getVersion() > 1) {
     425                    final OsmServerMultiObjectReader rdr = new OsmServerMultiObjectReader();
     426                    readObjectVersion(rdr, id, p.getVersion()-1, progressMonitor);
     427                    Collection<OsmPrimitive> result = rdr.parseOsm(progressMonitor.createSubTaskMonitor(1, true)).allPrimitives();
     428                    if (!result.isEmpty()) {
     429                        n.setCoor(((Node)result.iterator().next()).getCoor());
     430                    }
     431                }
     432            }
     433        }
     434    }
    414435}
  • applications/editors/josm/plugins/reverter/src/reverter/RevertChangesetTask.java

    r29359 r29553  
    8585        if (progressMonitor.isCanceled()) return;
    8686        if (!checkAndDownloadMissing()) return;
     87        rev.fixNodesWithoutCoordinates(progressMonitor);
    8788        List<Command> cmds = rev.getCommands();
    8889        final Command cmd = new RevertChangesetCommand(tr(revertType == RevertType.FULL ? "Revert changeset #{0}" :
Note: See TracChangeset for help on using the changeset viewer.