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("https?://.*/.*\\.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("https?://.*/.*\\.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("https?://.*/(.*\\.osm.(gz|bz2?))", url);
052 return Main.worker.submit(downloadTask);
053 }
054 }