Changeset 7326 in josm


Ignore:
Timestamp:
2014-07-22T00:17:42+02:00 (5 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
Files:
13 added
10 edited

Legend:

Unmodified
Added
Removed
  • trunk/.settings/sf.eclipse.javacc.prefs

    r6921 r7326  
    11CLEAR_CONSOLE=true
    2 JAVACC_OPTIONS=-GRAMMAR_ENCODING\=UTF-8
     2JAVACC_OPTIONS=-JDK_VERSION\=1.7 -GRAMMAR_ENCODING\=UTF-8
    33JJDOC_OPTIONS=
    44JJTREE_OPTIONS=
  • 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                }
  • trunk/test/config/performance-josm.home

    • Property svn:ignore
      •  

        old new  
        22preferences.xml_backup
        33preferences.xml_tmp
         4cache
         5validator
  • trunk/test/unit/org/openstreetmap/josm/io/session/SessionWriterTest.java

    r7081 r7326  
    1313import org.openstreetmap.josm.JOSMFixture;
    1414import org.openstreetmap.josm.Main;
     15import org.openstreetmap.josm.data.coor.LatLon;
    1516import org.openstreetmap.josm.data.gpx.GpxData;
     17import org.openstreetmap.josm.data.gpx.WayPoint;
    1618import org.openstreetmap.josm.data.osm.DataSet;
    1719import org.openstreetmap.josm.gui.MainApplication;
     
    1921import org.openstreetmap.josm.gui.layer.Layer;
    2022import org.openstreetmap.josm.gui.layer.OsmDataLayer;
     23import org.openstreetmap.josm.gui.layer.markerlayer.MarkerLayer;
    2124import org.openstreetmap.josm.gui.preferences.ToolbarPreferences;
    2225import org.openstreetmap.josm.gui.preferences.projection.ProjectionPreference;
    2326import org.openstreetmap.josm.tools.MultiMap;
     27import org.openstreetmap.josm.tools.Pair;
    2428
    2529/**
     
    106110
    107111    private OsmDataLayer createOsmLayer() {
    108         OsmDataLayer layer = new OsmDataLayer(new DataSet(), null, null);
     112        OsmDataLayer layer = new OsmDataLayer(new DataSet(), "OSM layer name", null);
    109113        layer.setAssociatedFile(new File("data.osm"));
    110114        return layer;
     
    112116
    113117    private GpxLayer createGpxLayer() {
    114         GpxLayer layer = new GpxLayer(new GpxData());
     118        GpxData data = new GpxData();
     119        data.waypoints.add(new WayPoint(new LatLon(42.72665, -0.00747)));
     120        data.waypoints.add(new WayPoint(new LatLon(42.72659, -0.00749)));
     121        GpxLayer layer = new GpxLayer(data, "GPX layer name");
    115122        layer.setAssociatedFile(new File("data.gpx"));
    116123        return layer;
     124    }
     125
     126    private MarkerLayer createMarkerLayer(GpxLayer gpx) {
     127        return new MarkerLayer(gpx.data, "Marker layer name", gpx.getAssociatedFile(), gpx);
    117128    }
    118129
     
    170181        testWrite(Collections.<Layer>singletonList(createGpxLayer()), true);
    171182    }
     183
     184    /**
     185     * Tests to write a .joz file containing GPX and marker data.
     186     * @throws IOException if any I/O error occurs
     187     */
     188    @Test
     189    public void testWriteGpxAndMarkerJoz() throws IOException {
     190        GpxLayer gpx = createGpxLayer();
     191        testWrite(Pair.toArrayList(new Pair<Layer, Layer>(gpx, createMarkerLayer(gpx))), true);
     192    }
    172193}
Note: See TracChangeset for help on using the changeset viewer.