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