001// License: GPL. For details, see LICENSE file. 002package org.openstreetmap.josm.actions; 003 004import static org.openstreetmap.josm.gui.help.HelpUtil.ht; 005import static org.openstreetmap.josm.tools.I18n.tr; 006 007import java.awt.event.ActionEvent; 008import java.awt.event.KeyEvent; 009import java.util.concurrent.Future; 010 011import org.openstreetmap.josm.Main; 012import org.openstreetmap.josm.actions.downloadtasks.DownloadGpsTask; 013import org.openstreetmap.josm.actions.downloadtasks.DownloadNotesTask; 014import org.openstreetmap.josm.actions.downloadtasks.DownloadOsmTask; 015import org.openstreetmap.josm.actions.downloadtasks.PostDownloadHandler; 016import org.openstreetmap.josm.data.Bounds; 017import org.openstreetmap.josm.gui.download.DownloadDialog; 018import org.openstreetmap.josm.tools.Shortcut; 019 020/** 021 * Action that opens a connection to the osm server and downloads map data. 022 * 023 * An dialog is displayed asking the user to specify a rectangle to grab. 024 * The url and account settings from the preferences are used. 025 * 026 * @author imi 027 */ 028public class DownloadAction extends JosmAction { 029 030 /** 031 * Constructs a new {@code DownloadAction}. 032 */ 033 public DownloadAction() { 034 super(tr("Download from OSM..."), "download", tr("Download map data from the OSM server."), 035 // CHECKSTYLE.OFF: LineLength 036 Shortcut.registerShortcut("file:download", tr("File: {0}", tr("Download from OSM...")), KeyEvent.VK_DOWN, Shortcut.CTRL_SHIFT), true); 037 // CHECKSTYLE.ON: LineLength 038 putValue("help", ht("/Action/Download")); 039 } 040 041 @Override 042 public void actionPerformed(ActionEvent e) { 043 DownloadDialog dialog = DownloadDialog.getInstance(); 044 dialog.restoreSettings(); 045 dialog.setVisible(true); 046 if (!dialog.isCanceled()) { 047 dialog.rememberSettings(); 048 Bounds area = dialog.getSelectedDownloadArea(); 049 if (dialog.isDownloadOsmData()) { 050 DownloadOsmTask task = new DownloadOsmTask(); 051 Future<?> future = task.download(dialog.isNewLayerRequired(), area, null); 052 Main.worker.submit(new PostDownloadHandler(task, future)); 053 } 054 if (dialog.isDownloadGpxData()) { 055 DownloadGpsTask task = new DownloadGpsTask(); 056 Future<?> future = task.download(dialog.isNewLayerRequired(), area, null); 057 Main.worker.submit(new PostDownloadHandler(task, future)); 058 } 059 if (dialog.isDownloadNotes()) { 060 DownloadNotesTask task = new DownloadNotesTask(); 061 Future<?> future = task.download(false, area, null); 062 Main.worker.submit(new PostDownloadHandler(task, future)); 063 } 064 } 065 } 066}