Changeset 18179 in josm


Ignore:
Timestamp:
2021-08-26T04:12:30+02:00 (5 months ago)
Author:
Don-vip
Message:

fix #4282 - Support for OziExplorer Waypoint files

Location:
trunk
Files:
5 added
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/actions/ExtensionFileFilter.java

    r17548 r18179  
    2828import org.openstreetmap.josm.gui.io.importexport.OsmChangeImporter;
    2929import org.openstreetmap.josm.gui.io.importexport.OsmImporter;
     30import org.openstreetmap.josm.gui.io.importexport.OziWptImporter;
    3031import org.openstreetmap.josm.gui.io.importexport.RtkLibImporter;
    3132import org.openstreetmap.josm.gui.io.importexport.WMSLayerImporter;
     
    6869                GpxImporter.class,
    6970                NMEAImporter.class,
     71                OziWptImporter.class,
    7072                RtkLibImporter.class,
    7173                NoteImporter.class,
  • trunk/src/org/openstreetmap/josm/gui/io/importexport/NMEAImporter.java

    r16866 r18179  
    88import java.io.InputStream;
    99
    10 import javax.swing.JOptionPane;
    11 import javax.swing.SwingUtilities;
    12 
    1310import org.openstreetmap.josm.actions.ExtensionFileFilter;
    14 import org.openstreetmap.josm.gui.HelpAwareOptionPane;
    15 import org.openstreetmap.josm.gui.MainApplication;
    16 import org.openstreetmap.josm.gui.Notification;
    1711import org.openstreetmap.josm.gui.io.importexport.GpxImporter.GpxImporterData;
    18 import org.openstreetmap.josm.gui.layer.GpxLayer;
    19 import org.openstreetmap.josm.gui.layer.markerlayer.MarkerLayer;
    20 import org.openstreetmap.josm.gui.progress.ProgressMonitor;
    21 import org.openstreetmap.josm.gui.util.GuiHelper;
    22 import org.openstreetmap.josm.io.Compression;
    2312import org.openstreetmap.josm.io.nmea.NmeaReader;
    24 import org.openstreetmap.josm.spi.preferences.Config;
    25 import org.xml.sax.SAXException;
    2613
    2714/**
     
    2916 * @since 1637
    3017 */
    31 public class NMEAImporter extends FileImporter {
     18public class NMEAImporter extends GpxLikeImporter<NmeaReader> {
    3219
    3320    /**
     
    4128     */
    4229    public NMEAImporter() {
    43         super(FILE_FILTER);
     30        super(FILE_FILTER, NmeaReader.class);
    4431    }
    4532
    4633    @Override
    47     public void importData(File file, ProgressMonitor progressMonitor) throws IOException {
    48         final String fn = file.getName();
    49         try (InputStream fis = Compression.getUncompressedFileInputStream(file)) {
    50             final NmeaReader r = buildAndParse(fis);
    51             if (r.getNumberOfCoordinates() > 0) {
    52                 r.getGpxData().storageFile = file;
    53                 final GpxLayer gpxLayer = new GpxLayer(r.getGpxData(), fn, true);
    54                 final File fileFinal = file;
    55 
    56                 GuiHelper.runInEDT(() -> {
    57                     MainApplication.getLayerManager().addLayer(gpxLayer);
    58                     if (Config.getPref().getBoolean("marker.makeautomarkers", true)) {
    59                         MarkerLayer ml = new MarkerLayer(r.getGpxData(), tr("Markers from {0}", fn), fileFinal, gpxLayer);
    60                         if (!ml.data.isEmpty()) {
    61                             MainApplication.getLayerManager().addLayer(ml);
    62                         }
    63                     }
    64                 });
    65             }
    66             showNmeaInfobox(r.getNumberOfCoordinates() > 0, r);
    67         }
    68     }
    69 
    70     private static void showNmeaInfobox(boolean success, NmeaReader r) {
    71         final StringBuilder msg = new StringBuilder(160).append("<html>")
    72            .append(tr("Coordinates imported: {0}", r.getNumberOfCoordinates())).append("<br>")
    73            .append(tr("Malformed sentences: {0}", r.getParserMalformed())).append("<br>")
     34    protected void appendInfoboxContent(StringBuilder msg, boolean success, NmeaReader r) {
     35        msg.append(tr("Malformed sentences: {0}", r.getParserMalformed())).append("<br>")
    7436           .append(tr("Checksum errors: {0}", r.getParserChecksumErrors())).append("<br>");
    7537        if (!success) {
    7638            msg.append(tr("Unknown sentences: {0}", r.getParserUnknown())).append("<br>");
    7739        }
    78         msg.append(tr("Zero coordinates: {0}", r.getParserZeroCoordinates()))
    79            .append("</html>");
    80         if (success) {
    81             SwingUtilities.invokeLater(() -> new Notification(
    82                     "<h3>" + tr("NMEA import success:") + "</h3>" + msg.toString())
    83                     .setIcon(JOptionPane.INFORMATION_MESSAGE)
    84                     .show());
    85         } else {
    86             HelpAwareOptionPane.showMessageDialogInEDT(
    87                     MainApplication.getMainFrame(),
    88                     msg.toString(),
    89                     tr("NMEA import failure!"),
    90                     JOptionPane.ERROR_MESSAGE, null);
    91         }
     40        msg.append(tr("Zero coordinates: {0}", r.getParserZeroCoordinates()));
    9241    }
    9342
     
    10251    public static GpxImporterData loadLayers(InputStream is, final File associatedFile,
    10352                                             final String gpxLayerName) throws IOException {
    104         final NmeaReader r = buildAndParse(is);
     53        final NmeaReader r = buildAndParse(is, NmeaReader.class);
    10554        final boolean parsedProperly = r.getNumberOfCoordinates() > 0;
    10655        r.getGpxData().storageFile = associatedFile;
    10756        return GpxImporter.loadLayers(r.getGpxData(), parsedProperly, gpxLayerName);
    10857    }
    109 
    110     static NmeaReader buildAndParse(InputStream fis) throws IOException {
    111         final NmeaReader r = new NmeaReader(fis);
    112         try {
    113             r.parse(true);
    114         } catch (SAXException e) {
    115             throw new IOException(e);
    116         }
    117         return r;
    118     }
    11958}
  • trunk/src/org/openstreetmap/josm/gui/io/importexport/RtkLibImporter.java

    r16866 r18179  
    88import java.io.InputStream;
    99
    10 import javax.swing.JOptionPane;
    11 import javax.swing.SwingUtilities;
    12 
    1310import org.openstreetmap.josm.actions.ExtensionFileFilter;
    14 import org.openstreetmap.josm.gui.HelpAwareOptionPane;
    15 import org.openstreetmap.josm.gui.MainApplication;
    16 import org.openstreetmap.josm.gui.Notification;
    1711import org.openstreetmap.josm.gui.io.importexport.GpxImporter.GpxImporterData;
    18 import org.openstreetmap.josm.gui.layer.GpxLayer;
    19 import org.openstreetmap.josm.gui.layer.markerlayer.MarkerLayer;
    20 import org.openstreetmap.josm.gui.progress.ProgressMonitor;
    21 import org.openstreetmap.josm.gui.util.GuiHelper;
    22 import org.openstreetmap.josm.io.Compression;
    2312import org.openstreetmap.josm.io.rtklib.RtkLibPosReader;
    24 import org.openstreetmap.josm.spi.preferences.Config;
    25 import org.xml.sax.SAXException;
    2613
    2714/**
     
    2916 * @since 15247
    3017 */
    31 public class RtkLibImporter extends FileImporter {
     18public class RtkLibImporter extends GpxLikeImporter<RtkLibPosReader> {
    3219
    3320    /**
     
    4128     */
    4229    public RtkLibImporter() {
    43         super(FILE_FILTER);
    44     }
    45 
    46     @Override
    47     public void importData(File file, ProgressMonitor progressMonitor) throws IOException {
    48         final String fn = file.getName();
    49         try (InputStream fis = Compression.getUncompressedFileInputStream(file)) {
    50             final RtkLibPosReader r = buildAndParse(fis);
    51             if (r.getNumberOfCoordinates() > 0) {
    52                 r.getGpxData().storageFile = file;
    53                 final GpxLayer gpxLayer = new GpxLayer(r.getGpxData(), fn, true);
    54                 final File fileFinal = file;
    55 
    56                 GuiHelper.runInEDT(() -> {
    57                     MainApplication.getLayerManager().addLayer(gpxLayer);
    58                     if (Config.getPref().getBoolean("marker.makeautomarkers", true)) {
    59                         MarkerLayer ml = new MarkerLayer(r.getGpxData(), tr("Markers from {0}", fn), fileFinal, gpxLayer);
    60                         if (!ml.data.isEmpty()) {
    61                             MainApplication.getLayerManager().addLayer(ml);
    62                         }
    63                     }
    64                 });
    65             }
    66             showRtkLibInfobox(r.getNumberOfCoordinates() > 0, r);
    67         }
    68     }
    69 
    70     private static void showRtkLibInfobox(boolean success, RtkLibPosReader r) {
    71         final StringBuilder msg = new StringBuilder(160).append("<html>")
    72            .append(tr("Coordinates imported: {0}", r.getNumberOfCoordinates()))
    73            .append("</html>");
    74         if (success) {
    75             SwingUtilities.invokeLater(() -> new Notification(
    76                     "<h3>" + tr("RTKLib import success:") + "</h3>" + msg.toString())
    77                     .setIcon(JOptionPane.INFORMATION_MESSAGE)
    78                     .show());
    79         } else {
    80             HelpAwareOptionPane.showMessageDialogInEDT(
    81                     MainApplication.getMainFrame(),
    82                     msg.toString(),
    83                     tr("RTKLib import failure!"),
    84                     JOptionPane.ERROR_MESSAGE, null);
    85         }
     30        super(FILE_FILTER, RtkLibPosReader.class);
    8631    }
    8732
     
    9641    public static GpxImporterData loadLayers(InputStream is, final File associatedFile,
    9742                                             final String gpxLayerName) throws IOException {
    98         final RtkLibPosReader r = buildAndParse(is);
     43        final RtkLibPosReader r = buildAndParse(is, RtkLibPosReader.class);
    9944        final boolean parsedProperly = r.getNumberOfCoordinates() > 0;
    10045        r.getGpxData().storageFile = associatedFile;
    10146        return GpxImporter.loadLayers(r.getGpxData(), parsedProperly, gpxLayerName);
    10247    }
    103 
    104     static RtkLibPosReader buildAndParse(InputStream fis) throws IOException {
    105         final RtkLibPosReader r = new RtkLibPosReader(fis);
    106         try {
    107             r.parse(true);
    108         } catch (SAXException e) {
    109             throw new IOException(e);
    110         }
    111         return r;
    112     }
    11348}
  • trunk/src/org/openstreetmap/josm/gui/layer/gpx/GpxDataHelper.java

    r18051 r18179  
    7272                    JOptionPane.ERROR_MESSAGE
    7373            );
    74         } catch (IOException ex) {
     74        } catch (IOException | UnsupportedOperationException ex) {
    7575            Logging.error(ex);
    7676            JOptionPane.showMessageDialog(
  • trunk/src/org/openstreetmap/josm/io/IGpxReader.java

    r18071 r18179  
    88
    99/**
    10  * Abstraction of {@code GpxReader}, {@code NmeaReader} and {@code RtkLibPosReader}
     10 * Abstraction of {@code GpxReader}, {@code NmeaReader}, {@code OziWptReader} and {@code RtkLibPosReader}
    1111 * @since 14010
    1212 */
     
    2222     * @throws SAXException if any SAX parsing error occurs
    2323     * @throws IOException if any I/O error occurs
     24     * @throws UnsupportedOperationException if the format is not supported
    2425     */
    2526    boolean parse(boolean tryToFinish) throws SAXException, IOException;
     
    3031     */
    3132    GpxData getGpxData();
     33
     34    /**
     35     * Returns the number of coordinates that have been successfuly read.
     36     * @return the number of coordinates that have been successfuly read
     37     * @since 18179
     38     */
     39    default int getNumberOfCoordinates() {
     40        throw new UnsupportedOperationException();
     41    }
    3242}
  • trunk/src/org/openstreetmap/josm/io/nmea/NmeaReader.java

    r17841 r18179  
    215215    }
    216216
    217     /**
    218      * Returns the number of coordinates that have been successfuly read.
    219      * @return the number of coordinates that have been successfuly read
    220      */
     217    @Override
    221218    public int getNumberOfCoordinates() {
    222219        return ps.success;
  • trunk/src/org/openstreetmap/josm/io/rtklib/RtkLibPosReader.java

    r18048 r18179  
    111111    }
    112112
    113     /**
    114      * Returns the number of coordinates that have been successfully read.
    115      * @return the number of coordinates that have been successfully read
    116      */
     113    @Override
    117114    public int getNumberOfCoordinates() {
    118115        return success;
Note: See TracChangeset for help on using the changeset viewer.