001 // License: GPL. For details, see LICENSE file. 002 package org.openstreetmap.josm.io; 003 004 import static org.openstreetmap.josm.tools.I18n.tr; 005 006 import java.io.File; 007 import java.io.FileInputStream; 008 import java.io.IOException; 009 010 import javax.swing.JOptionPane; 011 012 import org.openstreetmap.josm.Main; 013 import org.openstreetmap.josm.actions.ExtensionFileFilter; 014 import org.openstreetmap.josm.gui.HelpAwareOptionPane; 015 import org.openstreetmap.josm.gui.layer.GpxLayer; 016 import org.openstreetmap.josm.gui.layer.markerlayer.MarkerLayer; 017 import org.openstreetmap.josm.gui.progress.ProgressMonitor; 018 import org.openstreetmap.josm.gui.util.GuiHelper; 019 020 public class NMEAImporter extends FileImporter { 021 022 public static final ExtensionFileFilter FILE_FILTER = new ExtensionFileFilter( 023 "nmea,nme,nma,log,txt", "nmea", tr("NMEA-0183 Files") + " (*.nmea *.nme *.nma *.log *.txt)"); 024 025 public NMEAImporter() { 026 super(FILE_FILTER); 027 } 028 029 @Override public void importData(File file, ProgressMonitor progressMonitor) throws IOException { 030 final String fn = file.getName(); 031 final NmeaReader r = new NmeaReader(new FileInputStream(file), file.getAbsoluteFile().getParentFile()); 032 if (r.getNumberOfCoordinates() > 0) { 033 r.data.storageFile = file; 034 final GpxLayer gpxLayer = new GpxLayer(r.data, fn, true); 035 final File fileFinal = file; 036 037 GuiHelper.runInEDT(new Runnable() { 038 public void run() { 039 Main.main.addLayer(gpxLayer); 040 if (Main.pref.getBoolean("marker.makeautomarkers", true)) { 041 MarkerLayer ml = new MarkerLayer(r.data, tr("Markers from {0}", fn), fileFinal, gpxLayer); 042 if (ml.data.size() > 0) { 043 Main.main.addLayer(ml); 044 } 045 } 046 } 047 }); 048 } 049 showNmeaInfobox(r.getNumberOfCoordinates() > 0, r); 050 } 051 052 private void showNmeaInfobox(boolean success, NmeaReader r) { 053 final StringBuilder msg = new StringBuilder().append("<html>"); 054 msg.append(tr("Coordinates imported: {0}", r.getNumberOfCoordinates()) + "<br>"); 055 msg.append(tr("Malformed sentences: {0}", r.getParserMalformed()) + "<br>"); 056 msg.append(tr("Checksum errors: {0}", r.getParserChecksumErrors()) + "<br>"); 057 if (!success) { 058 msg.append(tr("Unknown sentences: {0}", r.getParserUnknown()) + "<br>"); 059 } 060 msg.append(tr("Zero coordinates: {0}", r.getParserZeroCoordinates())); 061 msg.append("</html>"); 062 if (success) { 063 HelpAwareOptionPane.showMessageDialogInEDT( 064 Main.parent, 065 msg.toString(), 066 tr("NMEA import success"), 067 JOptionPane.INFORMATION_MESSAGE, null); 068 } else { 069 HelpAwareOptionPane.showMessageDialogInEDT( 070 Main.parent, 071 msg.toString(), 072 tr("NMEA import failure!"), 073 JOptionPane.ERROR_MESSAGE, null); 074 } 075 } 076 }