// License: GPL. For details, see LICENSE file. package org.openstreetmap.josm.io; import static org.openstreetmap.josm.tools.I18n.tr; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import javax.swing.JOptionPane; import org.openstreetmap.josm.Main; import org.openstreetmap.josm.actions.ExtensionFileFilter; import org.openstreetmap.josm.gui.layer.GpxLayer; import org.openstreetmap.josm.gui.layer.markerlayer.MarkerLayer; import org.openstreetmap.josm.gui.progress.ProgressMonitor; public class NMEAImporter extends FileImporter { public NMEAImporter() { super( new ExtensionFileFilter("nmea,nme,nma,log,txt", "nmea", tr("NMEA-0183 Files") + " (*.nmea *.nme *.nma *.log *.txt)")); } @Override public void importData(File file, ProgressMonitor progressMonitor) throws IOException { String fn = file.getName(); NmeaReader r = new NmeaReader(new FileInputStream(file), file.getAbsoluteFile().getParentFile()); if (r.getNumberOfCoordinates() > 0) { r.data.storageFile = file; GpxLayer gpxLayer = new GpxLayer(r.data, fn, true); Main.main.addLayer(gpxLayer); if (Main.pref.getBoolean("marker.makeautomarkers", true)) { MarkerLayer ml = new MarkerLayer(r.data, tr("Markers from {0}", fn), file, gpxLayer); if (ml.data.size() > 0) { Main.main.addLayer(ml); } } } showNmeaInfobox(r.getNumberOfCoordinates() > 0, r); } private void showNmeaInfobox(boolean success, NmeaReader r) { String msg = tr("Coordinates imported: ") + r.getNumberOfCoordinates() + "\n" + tr("Malformed sentences: ") + r.getParserMalformed() + "\n" + tr("Checksum errors: ") + r.getParserChecksumErrors() + "\n"; if (!success) { msg += tr("Unknown sentences: ") + r.getParserUnknown() + "\n"; } msg += tr("Zero coordinates: ") + r.getParserZeroCoordinates(); if (success) { JOptionPane.showMessageDialog( Main.parent, msg, tr("NMEA import success"), JOptionPane.INFORMATION_MESSAGE); } else { JOptionPane.showMessageDialog(Main.parent, msg, tr("NMEA import failure!"), JOptionPane.ERROR_MESSAGE); } } }