Changeset 32865 in osm for applications/editors


Ignore:
Timestamp:
2016-08-21T23:36:28+02:00 (8 years ago)
Author:
donvip
Message:

fix #josm11169 - NPE trying to save invalid/incomplete data as .osm.pbf (patch by Gerd Petermann, modified)

Location:
applications/editors/josm/plugins/pbf
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • applications/editors/josm/plugins/pbf/src/org/openstreetmap/josm/plugins/pbf/io/PbfWriter.java

    r32862 r32865  
    77import java.util.ArrayList;
    88import java.util.Collection;
     9import java.util.Comparator;
    910import java.util.List;
    1011import java.util.Map.Entry;
     
    9899                        stable.incr(tag.getValue());
    99100                    }
    100                     if (!omit_metadata && i.getUser() != null) {
    101                         stable.incr(i.getUser().getName());
    102                     }
    103                 }
     101                    if (!omit_metadata) {
     102                        stable.incr(getUserId(i));
     103                    }
     104                }
     105            }
     106
     107            private String getUserId(OsmPrimitive osm) {
     108                String userId = osm.getUser() != null ? osm.getUser().getName() : null;
     109                if (userId == null)
     110                    userId = "";
     111                return userId;
    104112            }
    105113
     
    117125
    118126                    int uid = e.getUser() == null ? -1 : (int) e.getUser().getId();
    119                     int userSid = stable.getIndex(e.getUser() == null ? "" : e.getUser().getName());
     127                    int userSid = stable.getIndex(getUserId(e));
    120128                    int timestamp = (int) (e.getTimestamp().getTime() / date_granularity);
    121129                    int version = e.getVersion();
     
    187195
    188196                for (Node i : contents) {
    189                     long id = i.getId();
     197                    long id = i.getUniqueId();
    190198                    bi.addId(id - lastid);
    191199                    lastid = id;
     
    225233                Osmformat.PrimitiveGroup.Builder builder = Osmformat.PrimitiveGroup.newBuilder();
    226234                for (Node i : contents) {
    227                     long id = i.getId();
     235                    long id = i.getUniqueId();
    228236                    LatLon coor = i.getCoor();
    229237                    int lat = mapDegrees(coor.lat());
     
    258266                for (Way i : contents) {
    259267                    Osmformat.Way.Builder bi = Osmformat.Way.newBuilder();
    260                     bi.setId(i.getId());
     268                    bi.setId(i.getUniqueId());
    261269                    long lastid = 0;
    262270                    for (Node j : i.getNodes()) {
    263                         long id = j.getId();
     271                        long id = j.getUniqueId();
    264272                        bi.addRefs(id - lastid);
    265273                        lastid = id;
     
    300308                for (Relation i : contents) {
    301309                    Osmformat.Relation.Builder bi = Osmformat.Relation.newBuilder();
    302                     bi.setId(i.getId());
     310                    bi.setId(i.getUniqueId());
    303311                    RelationMember[] arr = new RelationMember[i.getMembers().size()];
    304312                    i.getMembers().toArray(arr);
    305313                    long lastid = 0;
    306314                    for (RelationMember j : i.getMembers()) {
    307                         long id = j.getMember().getId();
     315                        long id = j.getMember().getUniqueId();
    308316                        bi.addMemids(id - lastid);
    309317                        lastid = id;
     
    477485        public void process(DataSet ds) {
    478486            processor.processSources(ds.dataSources);
    479             for (Node n : ds.getNodes()) {
    480                 processor.processNode(n);
    481             }
    482             for (Way w : ds.getWays()) {
    483                 processor.processWay(w);
    484             }
    485             for (Relation r : ds.getRelations()) {
    486                 processor.processRelation(r);
    487             }
     487            Comparator<OsmPrimitive> cmp = Comparator.comparingLong(OsmPrimitive::getUniqueId);
     488            ds.getNodes().stream().sorted(cmp).filter(n -> n.isLatLonKnown()).forEach(processor::processNode);
     489            ds.getWays().stream().sorted(cmp).filter(w -> w.getNodesCount() > 0).forEach(processor::processWay);
     490            ds.getRelations().stream().sorted(cmp).filter(r -> r.getMembersCount() > 0).forEach(processor::processRelation);
    488491        }
    489492
  • applications/editors/josm/plugins/pbf/test/unit/org/openstreetmap/josm/plugins/pbf/io/PbfExporterTest.java

    r32862 r32865  
    77import java.nio.file.Path;
    88
    9 import org.junit.Ignore;
    109import org.junit.Rule;
    1110import org.junit.Test;
     
    3332     */
    3433    @Test
    35     @Ignore("TODO: to fix")
    3634    public void testTicket11169() throws Exception {
    3735        try (InputStream is = Compression.ZIP.getUncompressedInputStream(
Note: See TracChangeset for help on using the changeset viewer.