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

Last change on this file since 12346 was 10407, checked in by Don-vip, 8 years ago

sonar - squid:S2386 - Mutable fields should not be "public static"

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