source: josm/trunk/src/org/openstreetmap/josm/actions/GpxExportAction.java@ 12936

Last change on this file since 12936 was 12671, checked in by Don-vip, 7 years ago

see #15182 - move file importers/exporters from io package to gui.io.importexport package, as they rely heavily on GUI and are mainly used from Open/Save actions

  • Property svn:eol-style set to native
File size: 3.6 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.actions;
3
4import static org.openstreetmap.josm.actions.SaveActionBase.createAndOpenSaveFileChooser;
5import static org.openstreetmap.josm.gui.help.HelpUtil.ht;
6import static org.openstreetmap.josm.tools.I18n.tr;
7
8import java.awt.event.ActionEvent;
9import java.awt.event.KeyEvent;
10import java.io.File;
11import java.io.IOException;
12import java.text.MessageFormat;
13
14import javax.swing.JOptionPane;
15
16import org.openstreetmap.josm.Main;
17import org.openstreetmap.josm.gui.io.importexport.FileExporter;
18import org.openstreetmap.josm.gui.io.importexport.GpxImporter;
19import org.openstreetmap.josm.gui.layer.GpxLayer;
20import org.openstreetmap.josm.gui.layer.Layer;
21import org.openstreetmap.josm.gui.layer.OsmDataLayer;
22import org.openstreetmap.josm.tools.CheckParameterUtil;
23import org.openstreetmap.josm.tools.Logging;
24import org.openstreetmap.josm.tools.Shortcut;
25
26/**
27 * Exports data to gpx.
28 * @since 78
29 */
30public class GpxExportAction extends DiskAccessAction {
31
32 /**
33 * Constructs a new {@code GpxExportAction}.
34 */
35 public GpxExportAction() {
36 super(tr("Export to GPX..."), "exportgpx", tr("Export the data to GPX file."),
37 Shortcut.registerShortcut("file:exportgpx", tr("Export to GPX..."), KeyEvent.VK_E, Shortcut.CTRL));
38 putValue("help", ht("/Action/GpxExport"));
39 }
40
41 /**
42 * Get the layer to export.
43 * @return The layer to export, either a {@link GpxLayer} or {@link OsmDataLayer}.
44 */
45 protected Layer getLayer() {
46 Layer layer = getLayerManager().getActiveLayer();
47 return (layer instanceof GpxLayer || layer instanceof OsmDataLayer) ? layer : null;
48 }
49
50 @Override
51 public void actionPerformed(ActionEvent e) {
52 if (!isEnabled())
53 return;
54 Layer layer = getLayer();
55 if (layer == null) {
56 JOptionPane.showMessageDialog(
57 Main.parent,
58 tr("Nothing to export. Get some data first."),
59 tr("Information"),
60 JOptionPane.INFORMATION_MESSAGE
61 );
62 return;
63 }
64 export(layer);
65 }
66
67 /**
68 * Exports a layer to a file. Launches a file chooser to request the user to enter a file name.
69 *
70 * <code>layer</code> must not be null. <code>layer</code> must be an instance of
71 * {@link OsmDataLayer} or {@link GpxLayer}.
72 *
73 * @param layer the layer
74 * @throws IllegalArgumentException if layer is null
75 * @throws IllegalArgumentException if layer is neither an instance of {@link OsmDataLayer}
76 * nor of {@link GpxLayer}
77 */
78 public void export(Layer layer) {
79 CheckParameterUtil.ensureParameterNotNull(layer, "layer");
80 if (!(layer instanceof OsmDataLayer) && !(layer instanceof GpxLayer))
81 throw new IllegalArgumentException(MessageFormat.format("Expected instance of OsmDataLayer or GpxLayer. Got ''{0}''.",
82 layer.getClass().getName()));
83
84 File file = createAndOpenSaveFileChooser(tr("Export GPX file"), GpxImporter.getFileFilter());
85 if (file == null)
86 return;
87
88 for (FileExporter exporter : ExtensionFileFilter.getExporters()) {
89 if (exporter.acceptFile(file, layer)) {
90 try {
91 exporter.exportData(file, layer);
92 } catch (IOException e) {
93 Logging.error(e);
94 }
95 }
96 }
97 }
98
99 /**
100 * Refreshes the enabled state
101 */
102 @Override
103 protected void updateEnabledState() {
104 setEnabled(getLayer() != null);
105 }
106}
Note: See TracBrowser for help on using the repository browser.