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    }