Changeset 4695 in josm for trunk/src/org/openstreetmap/josm/io/GpxImporter.java
- Timestamp:
- 2011-12-22T11:49:23+01:00 (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/openstreetmap/josm/io/GpxImporter.java
r4310 r4695 19 19 import org.openstreetmap.josm.gui.layer.markerlayer.MarkerLayer; 20 20 import org.openstreetmap.josm.gui.progress.ProgressMonitor; 21 import org.openstreetmap.josm.gui.util.GuiHelper; 21 22 import org.xml.sax.SAXException; 22 23 23 24 public class GpxImporter extends FileImporter { 25 26 protected GpxLayer gpxLayer; 27 protected MarkerLayer markerLayer; 28 protected Runnable postLayerTask; 24 29 25 30 public GpxImporter() { … … 27 32 } 28 33 29 @Override public void importData(final File file, ProgressMonitor progressMonitor) throws IOException { 30 final String fn = file.getName(); 34 @Override public void importData(File file, ProgressMonitor progressMonitor) throws IOException { 35 InputStream is; 36 if (file.getName().endsWith(".gpx.gz")) { 37 is = new GZIPInputStream(new FileInputStream(file)); 38 } else { 39 is = new FileInputStream(file); 40 } 41 String fileName = file.getName(); 42 loadLayers(is, file, fileName, tr("Markers from {0}", fileName), progressMonitor); 31 43 44 // FIXME: remove UI stuff from the IO subsystem 45 GuiHelper.runInEDT(new Runnable() { 46 public void run() { 47 if (markerLayer != null) { 48 Main.main.addLayer(markerLayer); 49 } 50 if (gpxLayer != null) { 51 Main.main.addLayer(gpxLayer); 52 } 53 postLayerTask.run(); 54 } 55 }); 56 } 57 58 public void loadLayers(InputStream is, final File associatedFile, 59 final String gpxLayerName, String markerLayerName, ProgressMonitor progressMonitor) throws IOException { 32 60 try { 33 InputStream is;34 if (file.getName().endsWith(".gpx.gz")) {35 is = new GZIPInputStream(new FileInputStream(file));36 } else {37 is = new FileInputStream(file);38 }39 61 final GpxReader r = new GpxReader(is); 40 62 final boolean parsedProperly = r.parse(true); 41 r.data.storageFile = file; 42 final GpxLayer gpxLayer = new GpxLayer(r.data, fn, true); 43 44 // FIXME: remove UI stuff from the IO subsystem 45 // 46 Runnable task = new Runnable() { 63 r.data.storageFile = associatedFile; 64 if (r.data.hasRoutePoints() || r.data.hasTrackPoints()) { 65 gpxLayer = new GpxLayer(r.data, gpxLayerName, associatedFile != null); 66 } 67 if (Main.pref.getBoolean("marker.makeautomarkers", true) && !r.data.waypoints.isEmpty()) { 68 markerLayer = new MarkerLayer(r.data, markerLayerName, associatedFile, gpxLayer); 69 if (markerLayer.data.size() == 0) { 70 markerLayer = null; 71 } 72 } 73 postLayerTask = new Runnable() { 74 @Override 47 75 public void run() { 48 if (r.data.hasRoutePoints() || r.data.hasTrackPoints()) { 49 Main.main.addLayer(gpxLayer); 50 } 51 if (Main.pref.getBoolean("marker.makeautomarkers", true) && !r.data.waypoints.isEmpty()) { 52 MarkerLayer ml = new MarkerLayer(r.data, tr("Markers from {0}", fn), file, gpxLayer); 53 if (ml.data.size() > 0) { 54 Main.main.addLayer(ml); 76 if (!parsedProperly) { 77 String msg; 78 if (associatedFile == null) { 79 msg = tr("Error occurred while parsing gpx data for layer ''{0}''. Only a part of the file will be available.", 80 gpxLayerName); 81 } else { 82 msg = tr("Error occurred while parsing gpx file ''{0}''. Only a part of the file will be available.", 83 associatedFile.getPath()); 55 84 } 56 } 57 if (!parsedProperly) { 58 JOptionPane.showMessageDialog(null, tr("Error occurred while parsing gpx file {0}. Only a part of the file will be available.", file.getName())); 85 JOptionPane.showMessageDialog(null, msg); 59 86 } 60 87 } 61 88 }; 62 if (SwingUtilities.isEventDispatchThread()) {63 task.run();64 } else {65 SwingUtilities.invokeLater(task);66 }67 } catch (FileNotFoundException e) {68 e.printStackTrace();69 throw new IOException(tr("File \"{0}\" does not exist", file.getName()));70 89 } catch (SAXException e) { 71 90 e.printStackTrace(); 72 throw new IOException(tr("Parsing file \"{0}\" failed", file.getName()));91 throw new IOException(tr("Parsing data for layer ''{0}'' failed", gpxLayerName)); 73 92 } 74 93 } 94 95 public GpxLayer getGpxLayer() { 96 return gpxLayer; 97 } 98 99 public MarkerLayer getMarkerLayer() { 100 return markerLayer; 101 } 102 103 public Runnable getPostLayerTask() { 104 return postLayerTask; 105 } 75 106 }
Note:
See TracChangeset
for help on using the changeset viewer.