001 // License: GPL. Copyright 2007 by Immanuel Scholz and others
002 package org.openstreetmap.josm.actions;
003
004 import static org.openstreetmap.josm.gui.help.HelpUtil.ht;
005 import static org.openstreetmap.josm.tools.I18n.tr;
006
007 import java.awt.event.KeyEvent;
008 import java.io.File;
009
010 import org.openstreetmap.josm.Main;
011 import org.openstreetmap.josm.gui.ExtendedDialog;
012 import org.openstreetmap.josm.gui.layer.GpxLayer;
013 import org.openstreetmap.josm.gui.layer.Layer;
014 import org.openstreetmap.josm.tools.Shortcut;
015
016 /**
017 * Export the data as an OSM xml file.
018 *
019 * @author imi
020 */
021 public class SaveAction extends SaveActionBase {
022 private static SaveAction instance = new SaveAction();
023
024 /**
025 * Construct the action with "Save" as label.
026 * @param layer Save this layer.
027 */
028 private SaveAction() {
029 super(tr("Save"), "save", tr("Save the current data."),
030 Shortcut.registerShortcut("system:save", tr("File: {0}", tr("Save")), KeyEvent.VK_S, Shortcut.CTRL));
031 putValue("help", ht("/Action/Save"));
032 }
033
034 public static SaveAction getInstance() {
035 return instance;
036 }
037
038 @Override public File getFile(Layer layer) {
039 File f = layer.getAssociatedFile();
040 if(f != null && ! f.exists()) {
041 f=null;
042 }
043
044 // Ask for overwrite in case of GpxLayer: GpxLayers usually are imports
045 // and modifying is an error most of the time.
046 if(f != null && layer instanceof GpxLayer) {
047 ExtendedDialog dialog = new ExtendedDialog(
048 Main.parent,
049 tr("Overwrite"),
050 new String[] {tr("Overwrite"), tr("Cancel")}
051 );
052 dialog.setButtonIcons(new String[] {"save_as.png", "cancel.png"});
053 dialog.setContent(tr("File {0} exists. Overwrite?", f.getName()));
054 dialog.showDialog();
055 int ret = dialog.getValue();
056 if (ret != 1) {
057 f = null;
058 }
059 }
060 return f == null ? layer.createAndOpenSaveFileChooser() : f;
061 }
062 }