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