source: josm/trunk/src/org/openstreetmap/josm/io/NMEAImporter.java@ 9783

Last change on this file since 9783 was 8895, checked in by simon04, 9 years ago

Refactor usage of ExtensionFileFilter introduced in r8894

  • Property svn:eol-style set to native
File size: 4.2 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.io;
3
4import static org.openstreetmap.josm.tools.I18n.tr;
5
6import java.io.File;
7import java.io.IOException;
8import java.io.InputStream;
9
10import javax.swing.JOptionPane;
11import javax.swing.SwingUtilities;
12
13import org.openstreetmap.josm.Main;
14import org.openstreetmap.josm.actions.ExtensionFileFilter;
15import org.openstreetmap.josm.gui.HelpAwareOptionPane;
16import org.openstreetmap.josm.gui.Notification;
17import org.openstreetmap.josm.gui.layer.GpxLayer;
18import org.openstreetmap.josm.gui.layer.markerlayer.MarkerLayer;
19import org.openstreetmap.josm.gui.progress.ProgressMonitor;
20import org.openstreetmap.josm.gui.util.GuiHelper;
21import org.openstreetmap.josm.io.GpxImporter.GpxImporterData;
22
23/**
24 * File importer allowing to import NMEA-0183 files (*.nmea/nme/nma/log/txt files).
25 * @since 1637
26 */
27public class NMEAImporter extends FileImporter {
28
29 /**
30 * The NMEA file filter (*.nmea *.nme *.nma *.log *.txt files).
31 */
32 public static final ExtensionFileFilter FILE_FILTER = ExtensionFileFilter.newFilterWithArchiveExtensions(
33 "nmea,nme,nma,log,txt", "nmea", tr("NMEA-0183 Files"), false);
34
35 /**
36 * Constructs a new {@code NMEAImporter}.
37 */
38 public NMEAImporter() {
39 super(FILE_FILTER);
40 }
41
42 @Override
43 public void importData(File file, ProgressMonitor progressMonitor) throws IOException {
44 final String fn = file.getName();
45 try (InputStream fis = Compression.getUncompressedFileInputStream(file)) {
46 final NmeaReader r = new NmeaReader(fis);
47 if (r.getNumberOfCoordinates() > 0) {
48 r.data.storageFile = file;
49 final GpxLayer gpxLayer = new GpxLayer(r.data, fn, true);
50 final File fileFinal = file;
51
52 GuiHelper.runInEDT(new Runnable() {
53 @Override
54 public void run() {
55 Main.main.addLayer(gpxLayer);
56 if (Main.pref.getBoolean("marker.makeautomarkers", true)) {
57 MarkerLayer ml = new MarkerLayer(r.data, tr("Markers from {0}", fn), fileFinal, gpxLayer);
58 if (!ml.data.isEmpty()) {
59 Main.main.addLayer(ml);
60 }
61 }
62 }
63 });
64 }
65 showNmeaInfobox(r.getNumberOfCoordinates() > 0, r);
66 }
67 }
68
69 private void showNmeaInfobox(boolean success, NmeaReader r) {
70 final StringBuilder msg = new StringBuilder(160).append("<html>");
71 msg.append(tr("Coordinates imported: {0}", r.getNumberOfCoordinates())).append("<br>")
72 .append(tr("Malformed sentences: {0}", r.getParserMalformed())).append("<br>")
73 .append(tr("Checksum errors: {0}", r.getParserChecksumErrors())).append("<br>");
74 if (!success) {
75 msg.append(tr("Unknown sentences: {0}", r.getParserUnknown())).append("<br>");
76 }
77 msg.append(tr("Zero coordinates: {0}", r.getParserZeroCoordinates()))
78 .append("</html>");
79 if (success) {
80 SwingUtilities.invokeLater(new Runnable() {
81 @Override
82 public void run() {
83 new Notification(
84 "<h3>" + tr("NMEA import success:") + "</h3>" + msg.toString())
85 .setIcon(JOptionPane.INFORMATION_MESSAGE)
86 .show();
87 }
88 });
89 } else {
90 HelpAwareOptionPane.showMessageDialogInEDT(
91 Main.parent,
92 msg.toString(),
93 tr("NMEA import failure!"),
94 JOptionPane.ERROR_MESSAGE, null);
95 }
96 }
97
98 public static GpxImporterData loadLayers(InputStream is, final File associatedFile,
99 final String gpxLayerName, String markerLayerName) throws IOException {
100 final NmeaReader r = new NmeaReader(is);
101 final boolean parsedProperly = r.getNumberOfCoordinates() > 0;
102 r.data.storageFile = associatedFile;
103 return GpxImporter.loadLayers(r.data, parsedProperly, gpxLayerName, markerLayerName);
104 }
105}
Note: See TracBrowser for help on using the repository browser.