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

fix #4282 - Support for OziExplorer Waypoint files

File:
1 edited

Legend:

Unmodified
Added
Removed
  • 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}
Note: See TracChangeset for help on using the changeset viewer.