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

Last change on this file since 6990 was 6990, checked in by Don-vip, 10 years ago

sonar - place Strings literals on the left side when checking for equality (can avoid NPEs)

File size: 5.3 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.util.ArrayList;
9import java.util.Date;
10import java.util.List;
11
12import org.openstreetmap.josm.data.coor.LatLon;
13import org.openstreetmap.josm.gui.layer.GpxLayer;
14import org.openstreetmap.josm.gui.layer.Layer;
15import org.openstreetmap.josm.gui.layer.geoimage.GeoImageLayer;
16import org.openstreetmap.josm.gui.layer.geoimage.ImageEntry;
17import org.openstreetmap.josm.gui.progress.ProgressMonitor;
18import org.openstreetmap.josm.io.IllegalDataException;
19import org.w3c.dom.Element;
20import org.w3c.dom.Node;
21import org.w3c.dom.NodeList;
22
23public class GeoImageSessionImporter implements SessionLayerImporter {
24
25 @Override
26 public Layer load(Element elem, SessionReader.ImportSupport support, ProgressMonitor progressMonitor) throws IOException, IllegalDataException {
27 String version = elem.getAttribute("version");
28 if (!"0.1".equals(version)) {
29 throw new IllegalDataException(tr("Version ''{0}'' of meta data for geoimage layer is not supported. Expected: 0.1", version));
30 }
31
32 List<ImageEntry> entries = new ArrayList<ImageEntry>();
33 NodeList imgNodes = elem.getChildNodes();
34 boolean useThumbs = false;
35 for (int i=0; i<imgNodes.getLength(); ++i) {
36 Node imgNode = imgNodes.item(i);
37 if (imgNode.getNodeType() == Node.ELEMENT_NODE) {
38 Element imgElem = (Element) imgNode;
39 if ("geoimage".equals(imgElem.getTagName())) {
40 ImageEntry entry = new ImageEntry();
41 NodeList attrNodes = imgElem.getChildNodes();
42 for (int j=0; j<attrNodes.getLength(); ++j) {
43 Node attrNode = attrNodes.item(j);
44 if (attrNode.getNodeType() == Node.ELEMENT_NODE) {
45 Element attrElem = (Element) attrNode;
46 try {
47 String attrElemName = attrElem.getTagName();
48 if ("file".equals(attrElemName)) {
49 entry.setFile(new File(attrElem.getTextContent()));
50 } else if ("position".equals(attrElemName)) {
51 double lat = Double.parseDouble(attrElem.getAttribute("lat"));
52 double lon = Double.parseDouble(attrElem.getAttribute("lon"));
53 entry.setPos(new LatLon(lat, lon));
54 } else if ("speed".equals(attrElemName)) {
55 entry.setSpeed(Double.parseDouble(attrElem.getTextContent()));
56 } else if ("elevation".equals(attrElemName)) {
57 entry.setElevation(Double.parseDouble(attrElem.getTextContent()));
58 } else if ("gps-time".equals(attrElemName)) {
59 entry.setGpsTime(new Date(Long.parseLong(attrElem.getTextContent())));
60 } else if ("exif-orientation".equals(attrElemName)) {
61 entry.setExifOrientation(Integer.parseInt(attrElem.getTextContent()));
62 } else if ("exif-time".equals(attrElemName)) {
63 entry.setExifTime(new Date(Long.parseLong(attrElem.getTextContent())));
64 } else if ("exif-gps-time".equals(attrElemName)) {
65 entry.setExifGpsTime(new Date(Long.parseLong(attrElem.getTextContent())));
66 } else if ("exif-coordinates".equals(attrElemName)) {
67 double lat = Double.parseDouble(attrElem.getAttribute("lat"));
68 double lon = Double.parseDouble(attrElem.getAttribute("lon"));
69 entry.setExifCoor(new LatLon(lat, lon));
70 } else if ("exif-image-direction".equals(attrElemName)) {
71 entry.setExifImgDir(Double.parseDouble(attrElem.getTextContent()));
72 } else if ("is-new-gps-data".equals(attrElemName) && Boolean.parseBoolean(attrElem.getTextContent())) {
73 entry.flagNewGpsData();
74 }
75 // TODO: handle thumbnail loading
76 } catch (NumberFormatException e) {
77 // nothing
78 }
79 }
80 }
81 entries.add(entry);
82 } else if ("show-thumbnails".equals(imgElem.getTagName())) {
83 useThumbs = Boolean.parseBoolean(imgElem.getTextContent());
84 }
85 }
86 }
87
88 GpxLayer gpxLayer = null;
89 List<SessionReader.LayerDependency> deps = support.getLayerDependencies();
90 if (!deps.isEmpty()) {
91 Layer layer = deps.iterator().next().getLayer();
92 if (layer instanceof GpxLayer) {
93 gpxLayer = (GpxLayer) layer;
94 }
95 }
96
97 return new GeoImageLayer(entries, gpxLayer, useThumbs);
98 }
99
100}
Note: See TracBrowser for help on using the repository browser.