Changeset 7326 in josm for trunk/src


Ignore:
Timestamp:
2014-07-22T00:17:42+02:00 (10 years ago)
Author:
Don-vip
Message:

fix #10292 - allow to load a session with NMEA file + enhance reading/writing unit tests for sessions

Location:
trunk/src/org/openstreetmap/josm
Files:
7 edited

Legend:

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

    r7048 r7326  
    104104        @Override
    105105        public void cancel() {
    106             Thread.dumpStack();
    107106            canceled = true;
    108107        }
     
    179178            }
    180179        }
    181        
     180
    182181        private void handleException(String dialogTitle, Exception e) {
    183182            Main.error(e);
  • trunk/src/org/openstreetmap/josm/gui/layer/markerlayer/MarkerLayer.java

    r7310 r7326  
    7373    public AudioMarker syncAudioMarker = null;
    7474
     75    /**
     76     * Constructs a new {@code MarkerLayer}.
     77     * @param indata The GPX data for this layer
     78     * @param name The marker layer name
     79     * @param associatedFile The associated GPX file
     80     * @param fromLayer The associated GPX layer
     81     */
    7582    public MarkerLayer(GpxData indata, String name, File associatedFile, GpxLayer fromLayer) {
    7683        super(name);
  • trunk/src/org/openstreetmap/josm/io/NMEAImporter.java

    r7033 r7326  
    2020import org.openstreetmap.josm.gui.progress.ProgressMonitor;
    2121import org.openstreetmap.josm.gui.util.GuiHelper;
     22import org.openstreetmap.josm.io.GpxImporter.GpxImporterData;
    2223
     24/**
     25 * File importer allowing to import NMEA-0183 files (*.nmea/nme/nma/log/txt files).
     26 * @since 1637
     27 */
    2328public class NMEAImporter extends FileImporter {
    2429
     30    /**
     31     * The NMEA file filter (*.nmea *.nme *.nma *.log *.txt files).
     32     */
    2533    public static final ExtensionFileFilter FILE_FILTER = new ExtensionFileFilter(
    2634            "nmea,nme,nma,log,txt", "nmea", tr("NMEA-0183 Files") + " (*.nmea *.nme *.nma *.log *.txt)");
     
    4250                final GpxLayer gpxLayer = new GpxLayer(r.data, fn, true);
    4351                final File fileFinal = file;
    44    
     52
    4553                GuiHelper.runInEDT(new Runnable() {
    4654                    @Override
     
    8896        }
    8997    }
     98
     99    public static GpxImporterData loadLayers(InputStream is, final File associatedFile,
     100            final String gpxLayerName, String markerLayerName) throws IOException {
     101        final NmeaReader r = new NmeaReader(is);
     102        final boolean parsedProperly = r.getNumberOfCoordinates() > 0;
     103        r.data.storageFile = associatedFile;
     104        return GpxImporter.loadLayers(r.data, parsedProperly, gpxLayerName, markerLayerName);
     105    }
    90106}
  • trunk/src/org/openstreetmap/josm/io/session/GpxTracksSessionImporter.java

    r7033 r7326  
    1313import javax.xml.xpath.XPathFactory;
    1414
    15 import org.w3c.dom.Element;
    16 
    1715import org.openstreetmap.josm.gui.layer.Layer;
    1816import org.openstreetmap.josm.gui.progress.ProgressMonitor;
    1917import org.openstreetmap.josm.io.GpxImporter;
    2018import org.openstreetmap.josm.io.IllegalDataException;
     19import org.openstreetmap.josm.io.NMEAImporter;
     20import org.w3c.dom.Element;
    2121
    2222public class GpxTracksSessionImporter implements SessionLayerImporter {
     
    3838
    3939            try (InputStream in = support.getInputStream(fileStr)) {
    40                 GpxImporter.GpxImporterData importData = GpxImporter.loadLayers(in, support.getFile(fileStr), support.getLayerName(), null, progressMonitor);
    41    
     40                GpxImporter.GpxImporterData importData = null;
     41
     42                if (NMEAImporter.FILE_FILTER.acceptName(fileStr)) {
     43                    importData = NMEAImporter.loadLayers(in, support.getFile(fileStr), support.getLayerName(), null);
     44                } else {
     45                    importData = GpxImporter.loadLayers(in, support.getFile(fileStr), support.getLayerName(), null, progressMonitor);
     46                }
     47
    4248                support.addPostLayersTask(importData.getPostLayerTask());
    4349                return importData.getGpxLayer();
     
    4551
    4652        } catch (XPathExpressionException e) {
    47             throw new RuntimeException(e);
     53            throw new IllegalDataException(e);
    4854        }
    4955    }
  • trunk/src/org/openstreetmap/josm/io/session/MarkerSessionImporter.java

    r7033 r7326  
    1414import javax.xml.xpath.XPathFactory;
    1515
    16 import org.w3c.dom.Element;
    17 
    1816import org.openstreetmap.josm.gui.layer.GpxLayer;
    1917import org.openstreetmap.josm.gui.layer.Layer;
     
    2321import org.openstreetmap.josm.io.IllegalDataException;
    2422import org.openstreetmap.josm.io.session.SessionReader.ImportSupport;
     23import org.w3c.dom.Element;
    2524
    2625public class MarkerSessionImporter implements SessionLayerImporter {
     
    3029        String version = elem.getAttribute("version");
    3130        if (!"0.1".equals(version)) {
    32             throw new IllegalDataException(tr("Version ''{0}'' of meta data for imagery layer is not supported. Expected: 0.1", version));
     31            throw new IllegalDataException(tr("Version ''{0}'' of meta data for marker layer is not supported. Expected: 0.1", version));
    3332        }
    3433        try {
     
    4342            try (InputStream in = support.getInputStream(fileStr)) {
    4443                GpxImporter.GpxImporterData importData = GpxImporter.loadLayers(in, support.getFile(fileStr), support.getLayerName(), null, progressMonitor);
    45    
     44
    4645                support.addPostLayersTask(importData.getPostLayerTask());
    47    
     46
    4847                GpxLayer gpxLayer = null;
    4948                List<SessionReader.LayerDependency> deps = support.getLayerDependencies();
     
    5453                    }
    5554                }
    56    
     55
    5756                MarkerLayer markerLayer = importData.getMarkerLayer();
    58                 markerLayer.fromLayer = gpxLayer;
    59    
     57                if (markerLayer != null) {
     58                    markerLayer.fromLayer = gpxLayer;
     59                }
     60
    6061                return markerLayer;
    6162            }
    6263        } catch (XPathExpressionException e) {
    63             throw new RuntimeException(e);
     64            throw new IllegalDataException(e);
    6465        }
    6566    }
  • trunk/src/org/openstreetmap/josm/io/session/OsmDataSessionImporter.java

    r7033 r7326  
    1313import javax.xml.xpath.XPathFactory;
    1414
    15 import org.w3c.dom.Element;
    16 
    1715import org.openstreetmap.josm.gui.layer.Layer;
    1816import org.openstreetmap.josm.gui.progress.ProgressMonitor;
     
    2018import org.openstreetmap.josm.io.OsmImporter;
    2119import org.openstreetmap.josm.io.session.SessionReader.ImportSupport;
     20import org.w3c.dom.Element;
    2221
    2322public class OsmDataSessionImporter implements SessionLayerImporter {
     
    4140            try (InputStream in = support.getInputStream(fileStr)) {
    4241                OsmImporter.OsmImporterData importData = importer.loadLayer(in, support.getFile(fileStr), support.getLayerName(), progressMonitor);
    43    
     42
    4443                support.addPostLayersTask(importData.getPostLayerTask());
    4544                return importData.getLayer();
    4645            }
    4746        } catch (XPathExpressionException e) {
    48             throw new RuntimeException(e);
     47            throw new IllegalDataException(e);
    4948        }
    5049    }
  • trunk/src/org/openstreetmap/josm/io/session/SessionReader.java

    r7089 r7326  
    44import static org.openstreetmap.josm.tools.I18n.tr;
    55
     6import java.awt.GraphicsEnvironment;
    67import java.io.BufferedInputStream;
    78import java.io.File;
     
    413414            String type = e.getAttribute("type");
    414415            SessionLayerImporter imp = getSessionLayerImporter(type);
    415             if (imp == null) {
     416            if (imp == null && !GraphicsEnvironment.isHeadless()) {
    416417                CancelOrContinueDialog dialog = new CancelOrContinueDialog();
    417418                dialog.show(
     
    427428                    continue;
    428429                }
    429             } else {
     430            } else if (imp != null) {
    430431                importers.put(idx, imp);
    431432                List<LayerDependency> depsImp = new ArrayList<>();
     
    459460                if (exception != null) {
    460461                    Main.error(exception);
    461                     CancelOrContinueDialog dialog = new CancelOrContinueDialog();
    462                     dialog.show(
    463                             tr("Error loading layer"),
    464                             tr("<html>Could not load layer {0} ''{1}''.<br>Error is:<br>{2}</html>", idx, name, exception.getMessage()),
    465                             JOptionPane.ERROR_MESSAGE,
    466                             progressMonitor
    467                             );
    468                     if (dialog.isCancel()) {
    469                         progressMonitor.cancel();
    470                         return;
    471                     } else {
    472                         continue;
     462                    if (!GraphicsEnvironment.isHeadless()) {
     463                        CancelOrContinueDialog dialog = new CancelOrContinueDialog();
     464                        dialog.show(
     465                                tr("Error loading layer"),
     466                                tr("<html>Could not load layer {0} ''{1}''.<br>Error is:<br>{2}</html>", idx, name, exception.getMessage()),
     467                                JOptionPane.ERROR_MESSAGE,
     468                                progressMonitor
     469                                );
     470                        if (dialog.isCancel()) {
     471                            progressMonitor.cancel();
     472                            return;
     473                        } else {
     474                            continue;
     475                        }
    473476                    }
    474477                }
Note: See TracChangeset for help on using the changeset viewer.