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.ActionEvent;
008 import java.awt.event.KeyEvent;
009 import java.util.concurrent.Future;
010
011 import org.openstreetmap.josm.Main;
012 import org.openstreetmap.josm.actions.downloadtasks.DownloadGpsTask;
013 import org.openstreetmap.josm.actions.downloadtasks.DownloadOsmTask;
014 import org.openstreetmap.josm.actions.downloadtasks.PostDownloadHandler;
015 import org.openstreetmap.josm.data.Bounds;
016 import org.openstreetmap.josm.gui.download.DownloadDialog;
017 import org.openstreetmap.josm.tools.Shortcut;
018
019 /**
020 * Action that opens a connection to the osm server and downloads map data.
021 *
022 * An dialog is displayed asking the user to specify a rectangle to grab.
023 * The url and account settings from the preferences are used.
024 *
025 * @author imi
026 */
027 public class DownloadAction extends JosmAction {
028 public DownloadAction() {
029 super(tr("Download from OSM..."), "download", tr("Download map data from the OSM server."),
030 Shortcut.registerShortcut("file:download", tr("File: {0}", tr("Download from OSM...")), KeyEvent.VK_DOWN, Shortcut.CTRL_SHIFT), true);
031 putValue("help", ht("/Action/Download"));
032 }
033
034 public void actionPerformed(ActionEvent e) {
035 DownloadDialog dialog = DownloadDialog.getInstance();
036 dialog.restoreSettings();
037 dialog.setVisible(true);
038 if (! dialog.isCanceled()) {
039 dialog.rememberSettings();
040 Bounds area = dialog.getSelectedDownloadArea();
041 if (dialog.isDownloadOsmData()) {
042 DownloadOsmTask task = new DownloadOsmTask();
043 Future<?> future = task.download(dialog.isNewLayerRequired(), area, null);
044 Main.worker.submit(new PostDownloadHandler(task, future));
045 }
046 if (dialog.isDownloadGpxData()) {
047 DownloadGpsTask task = new DownloadGpsTask();
048 Future<?> future = task.download(dialog.isNewLayerRequired(),area, null);
049 Main.worker.submit(new PostDownloadHandler(task, future));
050 }
051 }
052 }
053 }