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.Bounds; 008 import org.openstreetmap.josm.data.osm.DataSet; 009 import org.openstreetmap.josm.gui.progress.ProgressMonitor; 010 import org.openstreetmap.josm.io.OsmServerLocationReader; 011 import org.openstreetmap.josm.io.OsmTransferException; 012 013 public class DownloadOsmCompressedTask extends DownloadOsmTask { 014 015 /* (non-Javadoc) 016 * @see org.openstreetmap.josm.actions.downloadtasks.DownloadTask#acceptsUrl(java.lang.String) 017 */ 018 @Override 019 public boolean acceptsUrl(String url) { 020 return url != null && url.matches("http://.*/.*\\.osm.(gz|bz2?)"); // Remote .osm.gz / .osm.bz / .osm.bz2 files 021 } 022 023 /* (non-Javadoc) 024 * @see org.openstreetmap.josm.actions.downloadtasks.DownloadOsmTask#download(boolean, org.openstreetmap.josm.data.Bounds, org.openstreetmap.josm.gui.progress.ProgressMonitor) 025 */ 026 @Override 027 public Future<?> download(boolean newLayer, Bounds downloadArea, 028 ProgressMonitor progressMonitor) { 029 return null; 030 } 031 032 /** 033 * Loads a given URL 034 * @param True if the data should be saved to a new layer 035 * @param The URL as String 036 */ 037 public Future<?> loadUrl(boolean new_layer, final String url, ProgressMonitor progressMonitor) { 038 downloadTask = new DownloadTask(new_layer, 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("http://.*/.*\\.osm.bz2?")) { 043 return reader.parseOsmBzip2(subTaskMonitor); 044 } else { 045 return reader.parseOsmGzip(subTaskMonitor); 046 } 047 } 048 }; 049 currentBounds = null; 050 // Extract .osm.gz/bz/bz2 filename from URL to set the new layer name 051 extractOsmFilename("http://.*/(.*\\.osm.(gz|bz2?))", url); 052 return Main.worker.submit(downloadTask); 053 } 054 }