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.util.concurrent.Future; 008 009import org.openstreetmap.josm.Main; 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.OnlineResource; 017 018/** 019 * Action that downloads the OSM data within the current view from the server. 020 * 021 * No interaction is required. 022 */ 023public final class DownloadOsmInViewAction extends JosmAction { 024 025 /** 026 * Creates a new {@code DownloadOsmInViewAction}. 027 */ 028 public DownloadOsmInViewAction() { 029 super(tr("Download in current view"), "download_in_view", tr("Download map data from the OSM server in current view"), null, false, 030 "dialogs/download_in_view", true); 031 } 032 033 @Override 034 public void actionPerformed(ActionEvent e) { 035 final Bounds bounds = MainApplication.getMap().mapView.getRealBounds(); 036 DownloadOsmInViewTask task = new DownloadOsmInViewTask(); 037 task.setZoomAfterDownload(false); 038 Future<?> future = task.download(bounds); 039 MainApplication.worker.submit(new PostDownloadHandler(task, future)); 040 } 041 042 @Override 043 protected void updateEnabledState() { 044 setEnabled(getLayerManager().getActiveLayer() != null 045 && !Main.isOffline(OnlineResource.OSM_API)); 046 } 047 048 private static class DownloadOsmInViewTask extends DownloadOsmTask { 049 Future<?> download(Bounds downloadArea) { 050 return download(new DownloadTask(new DownloadParams(), new BoundingBoxDownloader(downloadArea), null, false), downloadArea); 051 } 052 } 053}