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("https?://.*/.*\\.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("https?://.*/.*\\.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("https?://.*/(.*\\.osc.(gz|bz2?))", url);
042 return Main.worker.submit(downloadTask);
043 }
044 }