Ignore:
Timestamp:
2020-01-27T02:35:43+01:00 (4 years ago)
Author:
Don-vip
Message:

see #18613 - rework download tasks / URL patterns

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmChangeTask.java

    r14763 r15784  
    44import static org.openstreetmap.josm.tools.I18n.tr;
    55
     6import java.util.Arrays;
    67import java.util.Date;
    78import java.util.HashMap;
     
    1213import java.util.concurrent.RejectedExecutionException;
    1314import java.util.regex.Matcher;
    14 import java.util.regex.Pattern;
    1515
    1616import org.openstreetmap.josm.data.Bounds;
     
    3434import org.openstreetmap.josm.gui.history.HistoryLoadTask;
    3535import org.openstreetmap.josm.gui.progress.ProgressMonitor;
     36import org.openstreetmap.josm.io.Compression;
    3637import org.openstreetmap.josm.io.OsmApi;
    3738import org.openstreetmap.josm.io.OsmServerLocationReader;
    3839import org.openstreetmap.josm.io.OsmServerReader;
    3940import org.openstreetmap.josm.io.OsmTransferException;
     41import org.openstreetmap.josm.io.UrlPatterns.OsmChangeUrlPattern;
    4042import org.openstreetmap.josm.tools.Logging;
    4143
     
    4648public class DownloadOsmChangeTask extends DownloadOsmTask {
    4749
    48     private static final String OSM_WEBSITE_PATTERN = "https?://www\\.(osm|openstreetmap)\\.org/changeset/(\\p{Digit}+).*";
    49 
    5050    @Override
    5151    public String[] getPatterns() {
    52         return new String[]{"https?://.*/api/0.6/changeset/\\p{Digit}+/download", // OSM API 0.6 changesets
    53             OSM_WEBSITE_PATTERN, // OSM changesets
    54             "https?://.*/.*\\.osc" // Remote .osc files
    55         };
     52        return patterns(OsmChangeUrlPattern.class);
    5653    }
    5754
     
    6764
    6865    @Override
    69     public Future<?> loadUrl(DownloadParams settings, String url, ProgressMonitor progressMonitor) {
    70         final Matcher matcher = Pattern.compile(OSM_WEBSITE_PATTERN).matcher(url);
     66    public Future<?> loadUrl(DownloadParams settings, final String url, ProgressMonitor progressMonitor) {
     67        OsmChangeUrlPattern urlPattern = Arrays.stream(OsmChangeUrlPattern.values()).filter(p -> p.matches(url)).findFirst()
     68                .orElseThrow(() -> new IllegalArgumentException("URL does not match any OSM URL pattern: " + url));
     69        String newUrl = url;
     70        final Matcher matcher = OsmChangeUrlPattern.OSM_WEBSITE.matcher(url);
    7171        if (matcher.matches()) {
    72             url = OsmApi.getOsmApi().getBaseUrl() + "changeset/" + Long.parseLong(matcher.group(2)) + "/download";
    73         }
    74         downloadTask = new DownloadTask(settings, new OsmServerLocationReader(url), progressMonitor);
     72            newUrl = OsmApi.getOsmApi().getBaseUrl() + "changeset/" + Long.parseLong(matcher.group(2)) + "/download";
     73        }
     74        downloadTask = new DownloadTask(settings, new OsmServerLocationReader(newUrl), progressMonitor, true,
     75                Compression.byExtension(newUrl));
    7576        // Extract .osc filename from URL to set the new layer name
    76         extractOsmFilename(settings, "https?://.*/(.*\\.osc)", url);
     77        extractOsmFilename(settings, urlPattern.pattern(), newUrl);
    7778        return MainApplication.worker.submit(downloadTask);
    7879    }
     
    8889         * @param reader OSM data reader
    8990         * @param progressMonitor progress monitor
     91         * @param zoomAfterDownload If true, the map view will zoom to download area after download
     92         * @param compression compression to use
    9093         */
    91         public DownloadTask(DownloadParams settings, OsmServerReader reader, ProgressMonitor progressMonitor) {
    92             super(settings, reader, progressMonitor);
     94        public DownloadTask(DownloadParams settings, OsmServerReader reader, ProgressMonitor progressMonitor,
     95                boolean zoomAfterDownload, Compression compression) {
     96            super(settings, reader, progressMonitor, zoomAfterDownload, compression);
    9397        }
    9498
    9599        @Override
    96100        protected DataSet parseDataSet() throws OsmTransferException {
    97             return reader.parseOsmChange(progressMonitor.createSubTaskMonitor(ProgressMonitor.ALL_TICKS, false));
     101            return reader.parseOsmChange(progressMonitor.createSubTaskMonitor(ProgressMonitor.ALL_TICKS, false),
     102                    compression);
    98103        }
    99104
Note: See TracChangeset for help on using the changeset viewer.