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    }