source: josm/src/org/openstreetmap/josm/actions/OpenAction.java@ 286

Last change on this file since 286 was 286, checked in by imi, 17 years ago
  • added saving/loading of download areas (DataSource)
File size: 4.2 KB
Line 
1package org.openstreetmap.josm.actions;
2
3import static org.openstreetmap.josm.tools.I18n.tr;
4
5import java.awt.event.ActionEvent;
6import java.awt.event.InputEvent;
7import java.awt.event.KeyEvent;
8import java.io.File;
9import java.io.FileInputStream;
10import java.io.FileReader;
11import java.io.IOException;
12import java.util.Collection;
13import java.util.LinkedList;
14import java.util.zip.GZIPInputStream;
15
16import javax.swing.JFileChooser;
17import javax.swing.JOptionPane;
18
19import org.openstreetmap.josm.Main;
20import org.openstreetmap.josm.data.osm.DataSet;
21import org.openstreetmap.josm.gui.layer.OsmDataLayer;
22import org.openstreetmap.josm.gui.layer.RawGpsLayer;
23import org.openstreetmap.josm.gui.layer.RawGpsLayer.GpsPoint;
24import org.openstreetmap.josm.gui.layer.markerlayer.Marker;
25import org.openstreetmap.josm.gui.layer.markerlayer.MarkerLayer;
26import org.openstreetmap.josm.io.OsmReader;
27import org.openstreetmap.josm.io.RawCsvReader;
28import org.openstreetmap.josm.io.RawGpsReader;
29import org.xml.sax.SAXException;
30
31/**
32 * Open a file chooser dialog and select an file to import. Than call the gpx-import
33 * driver. Finally open an internal frame into the main window with the gpx data shown.
34 *
35 * @author imi
36 */
37public class OpenAction extends DiskAccessAction {
38
39 /**
40 * Create an open action. The name is "Open a file".
41 */
42 public OpenAction() {
43 super(tr("Open"), "open", tr("Open a file."), KeyEvent.VK_O, InputEvent.CTRL_DOWN_MASK);
44 }
45
46 public void actionPerformed(ActionEvent e) {
47 JFileChooser fc = createAndOpenFileChooser(true, true);
48 if (fc == null)
49 return;
50 File[] files = fc.getSelectedFiles();
51 for (int i = files.length; i > 0; --i)
52 openFile(files[i-1]);
53 }
54
55 /**
56 * Open the given file.
57 */
58 public void openFile(File file) {
59 String fn = file.getName();
60 try {
61 if (asRawData(fn)) {
62 Collection<Collection<GpsPoint>> gpsData = null;
63 Collection<Marker> markerData = null;
64 if (ExtensionFileFilter.filters[ExtensionFileFilter.GPX].acceptName(fn)) {
65 RawGpsReader r = null;
66 // Check to see if we are opening a compressed file
67 if(file.getName().endsWith(".gpx.gz")) {
68 r = new RawGpsReader(new GZIPInputStream(new FileInputStream(file)), file.getAbsoluteFile().getParentFile());
69 } else {
70 r = new RawGpsReader(new FileInputStream(file), file.getAbsoluteFile().getParentFile());
71 }
72 gpsData = r.trackData;
73 markerData = r.markerData;
74 } else if (ExtensionFileFilter.filters[ExtensionFileFilter.CSV].acceptName(fn)) {
75 gpsData = new LinkedList<Collection<GpsPoint>>();
76 gpsData.add(new RawCsvReader(new FileReader(file)).parse());
77 } else
78 throw new IllegalStateException();
79 if ((gpsData != null) && (!gpsData.isEmpty()))
80 Main.main.addLayer(new RawGpsLayer(gpsData, tr("Tracks from {0}", file.getName()), file));
81 if ((markerData != null) && (!markerData.isEmpty()))
82 Main.main.addLayer(new MarkerLayer(markerData, tr ("Markers from {0}", file.getName()), file));
83
84 } else {
85 DataSet dataSet;
86 if (ExtensionFileFilter.filters[ExtensionFileFilter.OSM].acceptName(fn)) {
87 dataSet = OsmReader.parseDataSet(new FileInputStream(file), null, Main.pleaseWaitDlg);
88 } else if (ExtensionFileFilter.filters[ExtensionFileFilter.CSV].acceptName(fn)) {
89 JOptionPane.showMessageDialog(Main.parent, fn+": "+tr("CSV Data import for non-GPS data is not implemented yet."));
90 return;
91 } else {
92 JOptionPane.showMessageDialog(Main.parent, fn+": "+tr("Unknown file extension: {0}", fn.substring(file.getName().lastIndexOf('.')+1)));
93 return;
94 }
95 Main.main.addLayer(new OsmDataLayer(dataSet, file.getName(), file));
96 }
97 } catch (SAXException x) {
98 x.printStackTrace();
99 JOptionPane.showMessageDialog(Main.parent, tr("Error while parsing {0}",fn)+": "+x.getMessage());
100 } catch (IOException x) {
101 x.printStackTrace();
102 JOptionPane.showMessageDialog(Main.parent, tr("Could not read \"{0}\"",fn)+"\n"+x.getMessage());
103 }
104 }
105
106 /**
107 * @return Return whether the file should be opened as raw gps data. May ask the
108 * user, if unsure.
109 */
110 private boolean asRawData(String fn) {
111 if (ExtensionFileFilter.filters[ExtensionFileFilter.CSV].acceptName(fn))
112 return true;
113 if (!ExtensionFileFilter.filters[ExtensionFileFilter.GPX].acceptName(fn))
114 return false;
115 return true;
116 }
117}
Note: See TracBrowser for help on using the repository browser.