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.osm.DataSet; 009import org.openstreetmap.josm.gui.MainApplication; 010import org.openstreetmap.josm.gui.progress.ProgressMonitor; 011import org.openstreetmap.josm.io.Compression; 012import org.openstreetmap.josm.io.OsmServerLocationReader; 013import org.openstreetmap.josm.io.OsmTransferException; 014 015/** 016 * Task allowing to download compressed OSM-Change files (gzip, xz and bzip2) 017 * @since 5361 018 */ 019public class DownloadOsmChangeCompressedTask extends DownloadOsmChangeTask { 020 021 private static final String PATTERN_COMPRESS = "https?://.*/(.*\\.osc.(gz|xz|bz2?|zip))"; 022 023 @Override 024 public String[] getPatterns() { 025 return new String[]{PATTERN_COMPRESS}; 026 } 027 028 @Override 029 public String getTitle() { 030 return tr("Download Compressed OSM Change"); 031 } 032 033 /** 034 * Loads a given URL 035 * @param settings download settings 036 * @param url The URL as String 037 * @param progressMonitor progress monitor for user interaction 038 */ 039 @Override 040 public Future<?> loadUrl(DownloadParams settings, final String url, ProgressMonitor progressMonitor) { 041 downloadTask = new DownloadTask(settings, new OsmServerLocationReader(url), progressMonitor) { 042 @Override 043 protected DataSet parseDataSet() throws OsmTransferException { 044 ProgressMonitor subTaskMonitor = progressMonitor.createSubTaskMonitor(ProgressMonitor.ALL_TICKS, false); 045 return reader.parseOsmChange(subTaskMonitor, Compression.byExtension(url)); 046 } 047 }; 048 currentBounds = null; 049 // Extract .osc.gz/xz/bz/bz2/zip filename from URL to set the new layer name 050 extractOsmFilename(settings, PATTERN_COMPRESS, url); 051 return MainApplication.worker.submit(downloadTask); 052 } 053}