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

Last change on this file since 175 was 175, checked in by imi, 17 years ago
  • fixed bug where cancelling download made other download attempts impossible
  • fixed bug under Linux when download finished while in different virtual desktop
  • fixed concurrent exception sometime arise when downloading incomplete data
File size: 3.5 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;
14
15import javax.swing.JFileChooser;
16import javax.swing.JOptionPane;
17
18import org.openstreetmap.josm.Main;
19import org.openstreetmap.josm.data.osm.DataSet;
20import org.openstreetmap.josm.gui.layer.OsmDataLayer;
21import org.openstreetmap.josm.gui.layer.RawGpsLayer;
22import org.openstreetmap.josm.gui.layer.RawGpsLayer.GpsPoint;
23import org.openstreetmap.josm.io.OsmReader;
24import org.openstreetmap.josm.io.RawCsvReader;
25import org.openstreetmap.josm.io.RawGpsReader;
26import org.xml.sax.SAXException;
27
28/**
29 * Open a file chooser dialog and select an file to import. Than call the gpx-import
30 * driver. Finally open an internal frame into the main window with the gpx data shown.
31 *
32 * @author imi
33 */
34public class OpenAction extends DiskAccessAction {
35
36 /**
37 * Create an open action. The name is "Open a file".
38 */
39 public OpenAction() {
40 super(tr("Open"), "open", tr("Open a file."), KeyEvent.VK_O, InputEvent.CTRL_DOWN_MASK);
41 }
42
43 public void actionPerformed(ActionEvent e) {
44 JFileChooser fc = createAndOpenFileChooser(true, true);
45 if (fc == null)
46 return;
47 File[] files = fc.getSelectedFiles();
48 for (int i = files.length; i > 0; --i)
49 openFile(files[i-1]);
50 }
51
52 /**
53 * Open the given file.
54 */
55 public void openFile(File file) {
56 String fn = file.getName();
57 try {
58 if (asRawData(fn)) {
59 Collection<Collection<GpsPoint>> data;
60 if (ExtensionFileFilter.filters[ExtensionFileFilter.GPX].acceptName(fn)) {
61 data = RawGpsReader.parse(new FileInputStream(file));
62 } else if (ExtensionFileFilter.filters[ExtensionFileFilter.CSV].acceptName(fn)) {
63 data = new LinkedList<Collection<GpsPoint>>();
64 data.add(new RawCsvReader(new FileReader(file)).parse());
65 } else
66 throw new IllegalStateException();
67 Main.main.addLayer(new RawGpsLayer(data, file.getName(), file));
68 } else {
69 DataSet dataSet;
70 if (ExtensionFileFilter.filters[ExtensionFileFilter.OSM].acceptName(fn)) {
71 dataSet = OsmReader.parseDataSet(new FileInputStream(file), null, Main.pleaseWaitDlg);
72 } else if (ExtensionFileFilter.filters[ExtensionFileFilter.CSV].acceptName(fn)) {
73 JOptionPane.showMessageDialog(Main.parent, fn+": "+tr("CSV Data import for non-GPS data is not implemented yet."));
74 return;
75 } else {
76 JOptionPane.showMessageDialog(Main.parent, fn+": "+tr("Unknown file extension: {0}", fn.substring(file.getName().lastIndexOf('.')+1)));
77 return;
78 }
79 Main.main.addLayer(new OsmDataLayer(dataSet, file.getName(), file));
80 }
81 } catch (SAXException x) {
82 x.printStackTrace();
83 JOptionPane.showMessageDialog(Main.parent, tr("Error while parsing {0}",fn)+": "+x.getMessage());
84 } catch (IOException x) {
85 x.printStackTrace();
86 JOptionPane.showMessageDialog(Main.parent, tr("Could not read \"{0}\"",fn)+"\n"+x.getMessage());
87 }
88 }
89
90 /**
91 * @return Return whether the file should be opened as raw gps data. May ask the
92 * user, if unsure.
93 */
94 private boolean asRawData(String fn) {
95 if (ExtensionFileFilter.filters[ExtensionFileFilter.CSV].acceptName(fn))
96 return true;
97 if (!ExtensionFileFilter.filters[ExtensionFileFilter.GPX].acceptName(fn))
98 return false;
99 return true;
100 }
101}
Note: See TracBrowser for help on using the repository browser.