Ignore:
Timestamp:
2006-02-09T23:46:27+01:00 (20 years ago)
Author:
imi
Message:
  • added JUnit test cases src tree
  • fixed save/reload of GPX and OSM data of new object ids
  • GPX load does not merge nodes if JOSM namespace is found
File:
1 edited

Legend:

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

    r44 r49  
    44import java.io.Writer;
    55import java.util.Collection;
     6import java.util.HashMap;
    67import java.util.LinkedList;
    78import java.util.List;
     
    3940         */
    4041        private long newIdCounter = -1;
     42        /**
     43         * All newly created ids and their primitive that uses it. This is a back reference
     44         * map to allow references to use the correnct primitives.
     45         */
     46        private HashMap<OsmPrimitive, Long> usedNewIds = new HashMap<OsmPrimitive, Long>();
    4147
    4248        /**
     
    7278                Collection<Element> allDeleted = deleted.getChildren();
    7379                for (OsmPrimitive osm : ds.allPrimitives()) {
    74                         if (osm.isDeleted()) {
     80                        if (osm.isDeleted() && osm.id != 0) {
    7581                                osm.visit(this);
    7682                                allDeleted.add(element);
     
    103109        private void addProperties(Element e, OsmPrimitive osm) {
    104110                long id = osm.id;
    105                 if (id == 0)
     111                if (id == 0) {
    106112                        id = newIdCounter--;
     113                        usedNewIds.put(osm, id);
     114                }
    107115                e.setAttribute("uid", ""+id);
    108116                if (osm.keys != null)
     
    127135                element = new Element("segment");
    128136                addProperties(element, ls);
    129                 element.setAttribute("from", ""+ls.start.id);
    130                 element.setAttribute("to", ""+ls.end.id);
     137                element.setAttribute("from", ""+getUsedId(ls.start));
     138                element.setAttribute("to", ""+getUsedId(ls.end));
     139        }
     140
     141        /**
     142         * Return the id for the given osm primitive (may access the usedId map)
     143         */
     144        private Long getUsedId(OsmPrimitive osm) {
     145                return osm.id == 0 ? usedNewIds.get(osm) : osm.id;
    131146        }
    132147
     
    139154                addProperties(element, t);
    140155                for (LineSegment ls : t.segments)
    141                         element.getChildren().add(new Element("segment").setAttribute("uid", ""+ls.id));
     156                        element.getChildren().add(new Element("segment").setAttribute("uid", ""+getUsedId(ls)));
    142157        }
    143158
     
    147162        }
    148163}
    149 
Note: See TracChangeset for help on using the changeset viewer.