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

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