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 , 5 years ago) |
---|
-
src/org/openstreetmap/josm/data/gpx/WayPoint.java
178 178 final Date date = (Date) obj; 179 179 time = date.getTime() / 1000.; 180 180 return date; 181 } else if (obj == null) { 182 Logging.info("Waypoint {0} value unset", PT_TIME); 181 183 } else { 182 184 Logging.warn("Unsupported waypoint {0} value: {1}", PT_TIME, obj); 183 185 time = 0; -
src/org/openstreetmap/josm/gui/layer/gpx/ConvertFromGpxLayerAction.java
33 33 import org.openstreetmap.josm.gui.layer.OsmDataLayer; 34 34 import org.openstreetmap.josm.spi.preferences.Config; 35 35 import org.openstreetmap.josm.tools.GBC; 36 import org.openstreetmap.josm.tools.Logging;37 import org.openstreetmap.josm.tools.UncheckedParseException;38 36 import org.openstreetmap.josm.tools.date.DateUtils; 39 37 40 38 /** … … 80 78 // only convert when required 81 79 n.put(key, str); 82 80 } 83 if (GpxConstants.PT_TIME.equals(key)) {84 // timestamps should always be converted85 try {86 n.setTimestamp(DateUtils.fromString(str));87 } catch (UncheckedParseException e) {88 Logging.log(Logging.LEVEL_WARN, e);89 }90 }91 81 } else if (obj instanceof Date && GpxConstants.PT_TIME.equals(key)) { 92 82 // timestamps should always be converted 93 83 Date date = (Date) obj; -
src/org/openstreetmap/josm/gui/layer/markerlayer/Marker.java
12 12 import java.text.DateFormat; 13 13 import java.util.ArrayList; 14 14 import java.util.Collection; 15 import java.util.Date;16 15 import java.util.HashMap; 17 16 import java.util.LinkedList; 18 17 import java.util.List; … … 259 258 */ 260 259 public WayPoint convertToWayPoint() { 261 260 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)); 263 262 if (text != null) { 264 263 wpt.addExtension("text", text); 265 264 } else if (dataProvider != null) { -
src/org/openstreetmap/josm/io/GpxReader.java
26 26 import org.openstreetmap.josm.data.gpx.ImmutableGpxTrack; 27 27 import org.openstreetmap.josm.data.gpx.WayPoint; 28 28 import org.openstreetmap.josm.tools.Logging; 29 import org.openstreetmap.josm.tools.UncheckedParseException; 29 30 import org.openstreetmap.josm.tools.XmlUtils; 31 import org.openstreetmap.josm.tools.date.DateUtils; 30 32 import org.xml.sax.Attributes; 31 33 import org.xml.sax.InputSource; 32 34 import org.xml.sax.SAXException; … … 440 442 currentWayPoint.put(localName, 0f); 441 443 } 442 444 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; 444 452 case "cmt": 445 453 case "desc": 446 454 currentWayPoint.put(localName, accumulator.toString()); 447 currentWayPoint.setTimeFromAttribute();448 455 break; 449 456 case "rtept": 450 457 currentState = states.pop(); -
test/unit/org/openstreetmap/josm/gui/layer/OsmDataLayerTest.java
220 220 " <tag k='ele' v='456' />\n" + 221 221 " <tag k='time' v='2018-08-01T10:01:00Z' />\n" + 222 222 " </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" + 224 227 " <nd ref='-546306' />\n" + 225 228 " <nd ref='-546307' />\n" + 229 " <nd ref='-546308' />\n" + 226 230 " </way>\r\n" + 227 231 "</osm>").getBytes(StandardCharsets.UTF_8)), null)); 228 232 GpxData gpx = layer.toGpxData(); … … 237 241 Collection<GpxTrackSegment> segments = track.getSegments(); 238 242 assertEquals(1, segments.size()); 239 243 Collection<WayPoint> trackpoints = segments.iterator().next().getWayPoints(); 240 assertEquals( 2, trackpoints.size());244 assertEquals(3, trackpoints.size()); 241 245 Iterator<WayPoint> it = trackpoints.iterator(); 242 246 DateFormat gpxFormat = DateUtils.getGpxFormat(); 243 247 WayPoint p1 = it.next(); … … 248 252 assertEquals(new LatLon(47.1, 9.1), p2.getCoor()); 249 253 assertEquals("456", p2.get(GpxConstants.PT_ELE)); 250 254 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))); 251 259 } 252 260 253 261 /** -
test/unit/org/openstreetmap/josm/io/nmea/NmeaReaderTest.java
66 66 assertEquals(0, in.getParserMalformed()); 67 67 68 68 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)); 73 73 74 74 assertEquals("2016-01-25T05:05:09.200Z", iso8601.format(wayPoints.get(0).getTime())); 75 75 assertEquals("2016-01-25T05:05:09.400Z", iso8601.format(wayPoints.get(1).getTime()));