Ticket #16995: josm_WayPoint.java_to-use_Date_exclusively_for_PT_TIME_attribute.patch

File josm_WayPoint.java_to-use_Date_exclusively_for_PT_TIME_attribute.patch, 7.9 KB (added by cmuelle8, 5 years ago)

fix regressions of r14445, fix GpxReader.java to put Date object into WayPoint HashMaps, fix unit tests (exactly those shown as failures in https://josm.openstreetmap.de/jenkins/job/JOSM/4748/testReport/)

  • src/org/openstreetmap/josm/data/gpx/WayPoint.java

     
    178178                final Date date = (Date) obj;
    179179                time = date.getTime() / 1000.;
    180180                return date;
     181            } else if (obj == null) {
     182                Logging.info("Waypoint {0} value unset", PT_TIME);
    181183            } else {
    182184                Logging.warn("Unsupported waypoint {0} value: {1}", PT_TIME, obj);
    183185                time = 0;
  • src/org/openstreetmap/josm/gui/layer/gpx/ConvertFromGpxLayerAction.java

     
    3333import org.openstreetmap.josm.gui.layer.OsmDataLayer;
    3434import org.openstreetmap.josm.spi.preferences.Config;
    3535import org.openstreetmap.josm.tools.GBC;
    36 import org.openstreetmap.josm.tools.Logging;
    37 import org.openstreetmap.josm.tools.UncheckedParseException;
    3836import org.openstreetmap.josm.tools.date.DateUtils;
    3937
    4038/**
     
    8078                                // only convert when required
    8179                                n.put(key, str);
    8280                            }
    83                             if (GpxConstants.PT_TIME.equals(key)) {
    84                                 // timestamps should always be converted
    85                                 try {
    86                                     n.setTimestamp(DateUtils.fromString(str));
    87                                 } catch (UncheckedParseException e) {
    88                                     Logging.log(Logging.LEVEL_WARN, e);
    89                                 }
    90                             }
    9181                        } else if (obj instanceof Date && GpxConstants.PT_TIME.equals(key)) {
    9282                            // timestamps should always be converted
    9383                            Date date = (Date) obj;
  • src/org/openstreetmap/josm/gui/layer/markerlayer/Marker.java

     
    1212import java.text.DateFormat;
    1313import java.util.ArrayList;
    1414import java.util.Collection;
    15 import java.util.Date;
    1615import java.util.HashMap;
    1716import java.util.LinkedList;
    1817import java.util.List;
     
    259258     */
    260259    public WayPoint convertToWayPoint() {
    261260        WayPoint wpt = new WayPoint(getCoor());
    262         wpt.put(GpxConstants.PT_TIME, timeFormatter.format(new Date(Math.round(time * 1000))));
     261        wpt.setTime((long) (time*1000));
    263262        if (text != null) {
    264263            wpt.addExtension("text", text);
    265264        } else if (dataProvider != null) {
  • src/org/openstreetmap/josm/io/GpxReader.java

     
    2626import org.openstreetmap.josm.data.gpx.ImmutableGpxTrack;
    2727import org.openstreetmap.josm.data.gpx.WayPoint;
    2828import org.openstreetmap.josm.tools.Logging;
     29import org.openstreetmap.josm.tools.UncheckedParseException;
    2930import org.openstreetmap.josm.tools.XmlUtils;
     31import org.openstreetmap.josm.tools.date.DateUtils;
    3032import org.xml.sax.Attributes;
    3133import org.xml.sax.InputSource;
    3234import org.xml.sax.SAXException;
     
    440442                        currentWayPoint.put(localName, 0f);
    441443                    }
    442444                    break;
    443                 case "time":
     445                case GpxConstants.PT_TIME:
     446                    try {
     447                        currentWayPoint.setTime(DateUtils.fromString(accumulator.toString()));
     448                    } catch (UncheckedParseException e) {
     449                        Logging.error(e);
     450                    }
     451                    break;
    444452                case "cmt":
    445453                case "desc":
    446454                    currentWayPoint.put(localName, accumulator.toString());
    447                     currentWayPoint.setTimeFromAttribute();
    448455                    break;
    449456                case "rtept":
    450457                    currentState = states.pop();
  • test/unit/org/openstreetmap/josm/gui/layer/OsmDataLayerTest.java

     
    220220                "    <tag k='ele' v='456' />\n" +
    221221                "    <tag k='time' v='2018-08-01T10:01:00Z' />\n" +
    222222                "  </node>\n" +
    223                 "  <way id='-546308'>\n" +
     223                "  <node id='-546308' timestamp='2018-08-01T10:02:00Z' lat='47.05' lon='9.05'>\n" +
     224                "    <tag k='ele' v='789' />\n" +
     225                "  </node>\n" +
     226                "  <way id='-546309'>\n" +
    224227                "    <nd ref='-546306' />\n" +
    225228                "    <nd ref='-546307' />\n" +
     229                "    <nd ref='-546308' />\n" +
    226230                "  </way>\r\n" +
    227231                "</osm>").getBytes(StandardCharsets.UTF_8)), null));
    228232        GpxData gpx = layer.toGpxData();
     
    237241        Collection<GpxTrackSegment> segments = track.getSegments();
    238242        assertEquals(1, segments.size());
    239243        Collection<WayPoint> trackpoints = segments.iterator().next().getWayPoints();
    240         assertEquals(2, trackpoints.size());
     244        assertEquals(3, trackpoints.size());
    241245        Iterator<WayPoint> it = trackpoints.iterator();
    242246        DateFormat gpxFormat = DateUtils.getGpxFormat();
    243247        WayPoint p1 = it.next();
     
    248252        assertEquals(new LatLon(47.1, 9.1), p2.getCoor());
    249253        assertEquals("456", p2.get(GpxConstants.PT_ELE));
    250254        assertEquals("2018-08-01T10:01:00.000Z", gpxFormat.format(p2.get(GpxConstants.PT_TIME)));
     255        WayPoint p3 = it.next();
     256        assertEquals(new LatLon(47.05, 9.05), p3.getCoor());
     257        assertEquals("789", p3.get(GpxConstants.PT_ELE));
     258        assertEquals("2018-08-01T10:02:00.000Z", gpxFormat.format(p3.get(GpxConstants.PT_TIME)));
    251259    }
    252260
    253261    /**
  • test/unit/org/openstreetmap/josm/io/nmea/NmeaReaderTest.java

     
    6666        assertEquals(0, in.getParserMalformed());
    6767
    6868        final List<WayPoint> wayPoints = new ArrayList<>(in.data.tracks.iterator().next().getSegments().iterator().next().getWayPoints());
    69         assertEquals("2016-01-25T05:05:09.2Z", wayPoints.get(0).get(GpxConstants.PT_TIME));
    70         assertEquals("2016-01-25T05:05:09.4Z", wayPoints.get(1).get(GpxConstants.PT_TIME));
    71         assertEquals("2016-01-25T05:05:09.6Z", wayPoints.get(2).get(GpxConstants.PT_TIME));
    72         assertEquals(wayPoints.get(0).getTime(), DateUtils.fromString(wayPoints.get(0).get(GpxConstants.PT_TIME).toString()));
     69        assertEquals(DateUtils.fromString("2016-01-25T05:05:09.200Z"), wayPoints.get(0).get(GpxConstants.PT_TIME));
     70        assertEquals(DateUtils.fromString("2016-01-25T05:05:09.400Z"), wayPoints.get(1).get(GpxConstants.PT_TIME));
     71        assertEquals(DateUtils.fromString("2016-01-25T05:05:09.600Z"), wayPoints.get(2).get(GpxConstants.PT_TIME));
     72        assertEquals(wayPoints.get(0).getTime(), wayPoints.get(0).get(GpxConstants.PT_TIME));
    7373
    7474        assertEquals("2016-01-25T05:05:09.200Z", iso8601.format(wayPoints.get(0).getTime()));
    7575        assertEquals("2016-01-25T05:05:09.400Z", iso8601.format(wayPoints.get(1).getTime()));