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}