source: josm/trunk/src/org/openstreetmap/josm/io/session/OsmDataSessionImporter.java@ 18208

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

global use of Utils.isEmpty/isBlank

  • Property svn:eol-style set to native
File size: 3.6 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.IOException;
7import java.io.InputStream;
8
9import javax.xml.xpath.XPath;
10import javax.xml.xpath.XPathConstants;
11import javax.xml.xpath.XPathExpression;
12import javax.xml.xpath.XPathExpressionException;
13import javax.xml.xpath.XPathFactory;
14
15import org.openstreetmap.josm.gui.io.importexport.OsmImporter;
16import org.openstreetmap.josm.gui.layer.Layer;
17import org.openstreetmap.josm.gui.layer.OsmDataLayer;
18import org.openstreetmap.josm.gui.progress.ProgressMonitor;
19import org.openstreetmap.josm.io.IllegalDataException;
20import org.openstreetmap.josm.io.session.SessionReader.ImportSupport;
21import org.openstreetmap.josm.tools.Utils;
22import org.w3c.dom.Element;
23
24/**
25 * Session importer for {@link OsmDataLayer}.
26 * @since 4685
27 */
28public class OsmDataSessionImporter implements SessionLayerImporter {
29
30 @Override
31 public Layer load(Element elem, ImportSupport support, ProgressMonitor progressMonitor) throws IOException, IllegalDataException {
32 checkMetaVersion(elem);
33 String fileStr = extractFileName(elem, support);
34 return importData(new OsmImporter(), support, fileStr, progressMonitor);
35 }
36
37 /**
38 * Checks that element defines the expected version number.
39 * @param elem element to check
40 * @throws IllegalDataException if version is not the expected one
41 * @since 15377
42 */
43 public static void checkMetaVersion(Element elem) throws IllegalDataException {
44 String version = elem.getAttribute("version");
45 if (!"0.1".equals(version)) {
46 throw new IllegalDataException(tr("Version ''{0}'' of meta data for osm data layer is not supported. Expected: 0.1", version));
47 }
48 }
49
50 /**
51 * Extract file name from element.
52 * @param elem element to parse
53 * @param support import/export support
54 * @return file name, if present
55 * @throws IllegalDataException if file name missing or empty
56 * @since 15377
57 */
58 public static String extractFileName(Element elem, ImportSupport support) throws IllegalDataException {
59 try {
60 XPathFactory xPathFactory = XPathFactory.newInstance();
61 XPath xpath = xPathFactory.newXPath();
62 XPathExpression fileExp = xpath.compile("file/text()");
63 String fileStr = (String) fileExp.evaluate(elem, XPathConstants.STRING);
64 if (Utils.isEmpty(fileStr)) {
65 throw new IllegalDataException(tr("File name expected for layer no. {0}", support.getLayerIndex()));
66 }
67 return fileStr;
68 } catch (XPathExpressionException e) {
69 throw new IllegalDataException(e);
70 }
71 }
72
73 /**
74 * Import data as a new layer.
75 * @param osmImporter OSM importer
76 * @param support import/export support
77 * @param fileStr file name to import
78 * @param progressMonitor progress monitor
79 * @return new layer
80 * @throws IOException in case of I/O error
81 * @throws IllegalDataException in case of illegal data
82 * @since 15377
83 */
84 public static Layer importData(OsmImporter osmImporter, ImportSupport support, String fileStr, ProgressMonitor progressMonitor)
85 throws IOException, IllegalDataException {
86 try (InputStream in = support.getInputStream(fileStr)) {
87 OsmImporter.OsmImporterData importData = osmImporter.loadLayer(
88 in, support.getFile(fileStr), support.getLayerName(), progressMonitor);
89
90 support.addPostLayersTask(importData.getPostLayerTask());
91 return importData.getLayer();
92 }
93 }
94}
Note: See TracBrowser for help on using the repository browser.