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