001// License: GPL. For details, see LICENSE file. 002package org.openstreetmap.josm.actions.downloadtasks; 003 004import static org.openstreetmap.josm.tools.I18n.tr; 005 006import java.util.concurrent.Future; 007 008import org.openstreetmap.josm.data.Bounds; 009import org.openstreetmap.josm.data.osm.DataSet; 010import org.openstreetmap.josm.gui.MainApplication; 011import org.openstreetmap.josm.gui.progress.ProgressMonitor; 012import org.openstreetmap.josm.io.Compression; 013import org.openstreetmap.josm.io.OsmServerLocationReader; 014import org.openstreetmap.josm.io.OsmTransferException; 015 016/** 017 * Task allowing to download compressed OSM files (gzip, xz and bzip2) 018 * @since 5317 019 */ 020public class DownloadOsmCompressedTask extends DownloadOsmTask { 021 022 private static final String PATTERN_COMPRESS = "https?://.*/(.*\\.osm\\.(gz|xz|bz2?|zip))"; 023 024 @Override 025 public String[] getPatterns() { 026 return new String[]{PATTERN_COMPRESS}; 027 } 028 029 @Override 030 public String getTitle() { 031 return tr("Download Compressed OSM"); 032 } 033 034 @Override 035 public Future<?> download(DownloadParams settings, Bounds downloadArea, ProgressMonitor progressMonitor) { 036 return null; 037 } 038 039 /** 040 * Loads a given URL 041 * @param settings download settings 042 * @param url The URL as String 043 * @param progressMonitor progress monitor for user interaction 044 */ 045 @Override 046 public Future<?> loadUrl(DownloadParams settings, final String url, ProgressMonitor progressMonitor) { 047 downloadTask = new DownloadTask(settings, new OsmServerLocationReader(url), progressMonitor) { 048 @Override 049 protected DataSet parseDataSet() throws OsmTransferException { 050 ProgressMonitor subTaskMonitor = progressMonitor.createSubTaskMonitor(ProgressMonitor.ALL_TICKS, false); 051 return reader.parseOsm(subTaskMonitor, Compression.byExtension(url)); 052 } 053 }; 054 currentBounds = null; 055 // Extract .osm.gz/bz/bz2/zip filename from URL to set the new layer name 056 extractOsmFilename(settings, PATTERN_COMPRESS, url); 057 return MainApplication.worker.submit(downloadTask); 058 } 059}