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 }