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