Ignore:
Timestamp:
2018-12-09T20:06:53+01:00 (5 years ago)
Author:
Don-vip
Message:

see #16073 - check response contents
see #16854 - stability of created primitive IDs (accidental commit...)

Location:
trunk/src/org/openstreetmap/josm/io
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/io/AbstractReader.java

    r14119 r14535  
    1414import java.util.Map;
    1515import java.util.Map.Entry;
     16import java.util.OptionalLong;
    1617import java.util.function.Consumer;
    1718
     
    323324            throw new IllegalDataException(e);
    324325        } finally {
     326            OptionalLong minId = externalIdMap.values().stream().mapToLong(AbstractPrimitive::getUniqueId).min();
     327            if (minId.isPresent() && minId.getAsLong() < AbstractPrimitive.currentUniqueId()) {
     328                AbstractPrimitive.advanceUniqueId(minId.getAsLong());
     329            }
    325330            progressMonitor.finishTask();
    326331            progressMonitor.removeCancelListener(cancelListener);
     
    604609    }
    605610
     611    @SuppressWarnings("unchecked")
     612    private <T extends OsmPrimitive> T buildPrimitive(PrimitiveData pd) {
     613        OsmPrimitive p;
     614        if (pd.getUniqueId() < AbstractPrimitive.currentUniqueId()) {
     615            p = pd.getType().newInstance(pd.getUniqueId(), true);
     616        } else {
     617            p = pd.getType().newVersionedInstance(pd.getId(), pd.getVersion());
     618        }
     619        p.setVisible(pd.isVisible());
     620        p.load(pd);
     621        externalIdMap.put(pd.getPrimitiveId(), p);
     622        return (T) p;
     623    }
     624
    606625    private Node addNode(NodeData nd, NodeReader nodeReader) throws IllegalDataException {
    607         Node n = new Node(nd.getId(), nd.getVersion());
    608         n.setVisible(nd.isVisible());
    609         n.load(nd);
     626        Node n = buildPrimitive(nd);
    610627        nodeReader.accept(n);
    611         externalIdMap.put(nd.getPrimitiveId(), n);
    612628        return n;
    613629    }
     
    615631    protected final Node parseNode(double lat, double lon, CommonReader commonReader, NodeReader nodeReader)
    616632            throws IllegalDataException {
    617         NodeData nd = new NodeData();
     633        NodeData nd = new NodeData(0);
    618634        LatLon ll = null;
    619635        if (areLatLonDefined(lat, lon)) {
     
    654670
    655671    protected final Way parseWay(CommonReader commonReader, WayReader wayReader) throws IllegalDataException {
    656         WayData wd = new WayData();
     672        WayData wd = new WayData(0);
    657673        commonReader.accept(wd);
    658         Way w = new Way(wd.getId(), wd.getVersion());
    659         w.setVisible(wd.isVisible());
    660         w.load(wd);
    661         externalIdMap.put(wd.getPrimitiveId(), w);
     674        Way w = buildPrimitive(wd);
    662675
    663676        Collection<Long> nodeIds = new ArrayList<>();
     
    672685
    673686    protected final Relation parseRelation(CommonReader commonReader, RelationReader relationReader) throws IllegalDataException {
    674         RelationData rd = new RelationData();
     687        RelationData rd = new RelationData(0);
    675688        commonReader.accept(rd);
    676         Relation r = new Relation(rd.getId(), rd.getVersion());
    677         r.setVisible(rd.isVisible());
    678         r.load(rd);
    679         externalIdMap.put(rd.getPrimitiveId(), r);
     689        Relation r = buildPrimitive(rd);
    680690
    681691        Collection<RelationMemberData> members = new ArrayList<>();
  • trunk/src/org/openstreetmap/josm/io/CachedFile.java

    r14480 r14535  
    55
    66import java.io.BufferedReader;
    7 import java.io.ByteArrayOutputStream;
    87import java.io.Closeable;
    98import java.io.File;
     
    245244     */
    246245    public byte[] getByteContent() throws IOException {
    247         try (InputStream is = getInputStream()) {
    248             ByteArrayOutputStream buffer = new ByteArrayOutputStream();
    249             int nRead;
    250             byte[] data = new byte[8192];
    251             while ((nRead = is.read(data, 0, data.length)) != -1) {
    252                 buffer.write(data, 0, nRead);
    253             }
    254             buffer.flush();
    255             return buffer.toByteArray();
    256         }
     246        return Utils.readBytesFromStream(getInputStream());
    257247    }
    258248
Note: See TracChangeset for help on using the changeset viewer.