source: josm/trunk/src/org/openstreetmap/josm/io/session/GeoImageSessionImporter.java@ 19050

Last change on this file since 19050 was 19050, checked in by taylor.smock, 15 months ago

Revert most var changes from r19048, fix most new compile warnings and checkstyle issues

Also, document why various ErrorProne checks were originally disabled and fix
generic SonarLint issues.

  • Property svn:eol-style set to native
File size: 4.9 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.io.session;
3
4import static org.openstreetmap.josm.tools.I18n.tr;
5
6import java.io.File;
7import java.io.IOException;
8import java.time.Instant;
9import java.util.ArrayList;
10import java.util.List;
11
12import org.openstreetmap.josm.data.coor.LatLon;
13import org.openstreetmap.josm.data.gpx.GpxImageEntry;
14import org.openstreetmap.josm.gui.layer.GpxLayer;
15import org.openstreetmap.josm.gui.layer.Layer;
16import org.openstreetmap.josm.gui.layer.geoimage.GeoImageLayer;
17import org.openstreetmap.josm.gui.layer.geoimage.ImageEntry;
18import org.openstreetmap.josm.gui.progress.ProgressMonitor;
19import org.openstreetmap.josm.io.IllegalDataException;
20import org.openstreetmap.josm.tools.Logging;
21import org.w3c.dom.Element;
22import org.w3c.dom.Node;
23import org.w3c.dom.NodeList;
24
25/**
26 * Session importer for {@link GeoImageLayer}.
27 * @since 5505
28 */
29public class GeoImageSessionImporter implements SessionLayerImporter {
30
31 @Override
32 public Layer load(Element elem, SessionReader.ImportSupport support, ProgressMonitor progressMonitor)
33 throws IOException, IllegalDataException {
34 String version = elem.getAttribute("version");
35 if (!"0.1".equals(version)) {
36 throw new IllegalDataException(tr("Version ''{0}'' of meta data for geoimage layer is not supported. Expected: 0.1", version));
37 }
38
39 List<ImageEntry> entries = new ArrayList<>();
40 NodeList imgNodes = elem.getChildNodes();
41 boolean useThumbs = false;
42 for (int i = 0; i < imgNodes.getLength(); ++i) {
43 Node imgNode = imgNodes.item(i);
44 if (imgNode.getNodeType() == Node.ELEMENT_NODE) {
45 Element imgElem = (Element) imgNode;
46 if ("geoimage".equals(imgElem.getTagName())) {
47 ImageEntry entry = new ImageEntry();
48 NodeList attrNodes = imgElem.getChildNodes();
49 for (int j = 0; j < attrNodes.getLength(); ++j) {
50 Node attrNode = attrNodes.item(j);
51 if (attrNode.getNodeType() == Node.ELEMENT_NODE) {
52 handleElement(entry, (Element) attrNode);
53 }
54 }
55 entries.add(entry);
56 } else if ("show-thumbnails".equals(imgElem.getTagName())) {
57 useThumbs = Boolean.parseBoolean(imgElem.getTextContent());
58 }
59 }
60 }
61
62 GpxLayer gpxLayer = null;
63 List<SessionReader.LayerDependency> deps = support.getLayerDependencies();
64 if (!deps.isEmpty()) {
65 Layer layer = deps.get(0).getLayer();
66 if (layer instanceof GpxLayer) {
67 gpxLayer = (GpxLayer) layer;
68 }
69 }
70
71 return new GeoImageLayer(entries, gpxLayer, useThumbs);
72 }
73
74 private static void handleElement(GpxImageEntry entry, Element attrElem) {
75 try {
76 switch (attrElem.getTagName()) {
77 case "file":
78 entry.setFile(new File(attrElem.getTextContent()));
79 break;
80 case "position":
81 double lat = Double.parseDouble(attrElem.getAttribute("lat"));
82 double lon = Double.parseDouble(attrElem.getAttribute("lon"));
83 entry.setPos(new LatLon(lat, lon));
84 break;
85 case "speed":
86 entry.setSpeed(Double.valueOf(attrElem.getTextContent()));
87 break;
88 case "elevation":
89 entry.setElevation(Double.valueOf(attrElem.getTextContent()));
90 break;
91 case "gps-time":
92 entry.setGpsTime(Instant.ofEpochMilli(Long.parseLong(attrElem.getTextContent())));
93 break;
94 case "exif-orientation":
95 entry.setExifOrientation(Integer.valueOf(attrElem.getTextContent()));
96 break;
97 case "exif-time":
98 entry.setExifTime(Instant.ofEpochMilli(Long.parseLong(attrElem.getTextContent())));
99 break;
100 case "exif-gps-time":
101 entry.setExifGpsTime(Instant.ofEpochMilli(Long.parseLong(attrElem.getTextContent())));
102 break;
103 case "exif-coordinates":
104 entry.setExifCoor(new LatLon(
105 Double.parseDouble(attrElem.getAttribute("lat")),
106 Double.parseDouble(attrElem.getAttribute("lon"))));
107 break;
108 case "exif-image-direction":
109 entry.setExifImgDir(Double.valueOf(attrElem.getTextContent()));
110 break;
111 case "is-new-gps-data":
112 if (Boolean.parseBoolean(attrElem.getTextContent())) {
113 entry.flagNewGpsData();
114 }
115 break;
116 default: // Do nothing
117 }
118 // TODO: handle thumbnail loading
119 } catch (NumberFormatException e) {
120 Logging.trace(e);
121 }
122 }
123}
Note: See TracBrowser for help on using the repository browser.