001// License: GPL. For details, see LICENSE file. 002package org.openstreetmap.josm.actions; 003 004import static org.openstreetmap.josm.tools.I18n.tr; 005 006import java.awt.event.ActionEvent; 007import java.awt.event.KeyEvent; 008import java.util.concurrent.Future; 009 010import org.openstreetmap.josm.actions.downloadtasks.DownloadOsmTask; 011import org.openstreetmap.josm.actions.downloadtasks.DownloadParams; 012import org.openstreetmap.josm.actions.downloadtasks.PostDownloadHandler; 013import org.openstreetmap.josm.data.Bounds; 014import org.openstreetmap.josm.gui.MainApplication; 015import org.openstreetmap.josm.io.BoundingBoxDownloader; 016import org.openstreetmap.josm.io.NetworkManager; 017import org.openstreetmap.josm.io.OnlineResource; 018import org.openstreetmap.josm.tools.Shortcut; 019 020/** 021 * Action that downloads the OSM data within the current view from the server. 022 * 023 * No interaction is required. 024 */ 025public final class DownloadOsmInViewAction extends JosmAction { 026 027 /** 028 * Creates a new {@code DownloadOsmInViewAction}. 029 */ 030 public DownloadOsmInViewAction() { 031 super(tr("Download in current view"), "download_in_view", tr("Download map data from the OSM server in current view"), 032 Shortcut.registerShortcut("file:downloadosminview", 033 tr("File: {0}", tr("Download in current view")), KeyEvent.CHAR_UNDEFINED, Shortcut.NONE), false, 034 "dialogs/download_in_view", true); 035 } 036 037 @Override 038 public void actionPerformed(ActionEvent e) { 039 final Bounds bounds = MainApplication.getMap().mapView.getRealBounds(); 040 DownloadOsmInViewTask task = new DownloadOsmInViewTask(); 041 task.setZoomAfterDownload(false); 042 Future<?> future = task.download(bounds); 043 MainApplication.worker.submit(new PostDownloadHandler(task, future)); 044 } 045 046 @Override 047 protected boolean listenToSelectionChange() { 048 return false; 049 } 050 051 @Override 052 protected void updateEnabledState() { 053 setEnabled(getLayerManager().getActiveLayer() != null 054 && !NetworkManager.isOffline(OnlineResource.OSM_API)); 055 } 056 057 private static class DownloadOsmInViewTask extends DownloadOsmTask { 058 Future<?> download(Bounds downloadArea) { 059 return download(new DownloadTask(new DownloadParams(), new BoundingBoxDownloader(downloadArea), null, false), downloadArea); 060 } 061 } 062}