001 // License: GPL. Copyright 2007 by Immanuel Scholz and others 002 package org.openstreetmap.josm.actions.downloadtasks; 003 004 import java.util.concurrent.Future; 005 006 import org.openstreetmap.josm.Main; 007 import org.openstreetmap.josm.data.osm.DataSet; 008 import org.openstreetmap.josm.gui.progress.ProgressMonitor; 009 import org.openstreetmap.josm.io.OsmServerLocationReader; 010 import org.openstreetmap.josm.io.OsmTransferException; 011 012 public class DownloadOsmChangeCompressedTask extends DownloadOsmChangeTask { 013 014 /* (non-Javadoc) 015 * @see org.openstreetmap.josm.actions.downloadtasks.DownloadTask#acceptsUrl(java.lang.String) 016 */ 017 @Override 018 public boolean acceptsUrl(String url) { 019 return url != null && url.matches("http://.*/.*\\.osc.(gz|bz2?)"); // Remote .osc.gz / .osc.bz / .osc.bz2 files 020 } 021 022 /** 023 * Loads a given URL 024 * @param True if the data should be saved to a new layer 025 * @param The URL as String 026 */ 027 public Future<?> loadUrl(boolean new_layer, final String url, ProgressMonitor progressMonitor) { 028 downloadTask = new DownloadTask(new_layer, new OsmServerLocationReader(url), progressMonitor) { 029 @Override 030 protected DataSet parseDataSet() throws OsmTransferException { 031 ProgressMonitor subTaskMonitor = progressMonitor.createSubTaskMonitor(ProgressMonitor.ALL_TICKS, false); 032 if (url.matches("http://.*/.*\\.osc.bz2?")) { 033 return reader.parseOsmChangeBzip2(subTaskMonitor); 034 } else { 035 return reader.parseOsmChangeGzip(subTaskMonitor); 036 } 037 } 038 }; 039 currentBounds = null; 040 // Extract .osc.gz/bz/bz2 filename from URL to set the new layer name 041 extractOsmFilename("http://.*/(.*\\.osc.(gz|bz2?))", url); 042 return Main.worker.submit(downloadTask); 043 } 044 }