001// License: Apache 2.0. For details, see LICENSE file. 002package org.openstreetmap.josm.plugins.wkt; 003 004import org.openstreetmap.josm.actions.downloadtasks.DownloadOsmTask; 005import org.openstreetmap.josm.actions.downloadtasks.DownloadParams; 006import org.openstreetmap.josm.data.Bounds; 007import org.openstreetmap.josm.data.osm.DataSet; 008import org.openstreetmap.josm.gui.MainApplication; 009import org.openstreetmap.josm.gui.layer.OsmDataLayer; 010import org.openstreetmap.josm.gui.progress.ProgressMonitor; 011import org.openstreetmap.josm.tools.Utils; 012 013import java.util.Optional; 014import java.util.concurrent.Future; 015 016import static org.openstreetmap.josm.tools.I18n.tr; 017 018/** 019 * WKT download task. 020 * Modified version of geojson plugin. Thanks to the geojson author: 021 * @author Omar Vega Ramos <ovruni@riseup.net> 022 */ 023public class WktDownloadTask extends DownloadOsmTask { 024 025 private static final String PATTERN_COMPRESS = "https?://.*/(.*\\.(wkt|txt)(\\.(gz|xz|bz2?|zip))?)"; 026 027 @Override 028 public String[] getPatterns() { 029 return new String[]{PATTERN_COMPRESS}; 030 } 031 032 @Override 033 public String getTitle() { 034 return tr("Download Wkt"); 035 } 036 037 @Override 038 public Future<?> download(DownloadParams settings, Bounds downloadArea, ProgressMonitor progressMonitor) { 039 return null; 040 } 041 042 @Override 043 public Future<?> loadUrl(DownloadParams settings, String url, ProgressMonitor progressMonitor) { 044 downloadTask = new InternalDownloadTask(settings, url, progressMonitor); 045 return MainApplication.worker.submit(downloadTask); 046 } 047 048 class InternalDownloadTask extends DownloadTask { 049 050 private final String url; 051 052 InternalDownloadTask(DownloadParams settings, String url, ProgressMonitor progressMonitor) { 053 super(settings, new WktServerReader(url), progressMonitor); 054 this.url = url; 055 } 056 057 @Override 058 protected String generateLayerName() { 059 return Optional.of(url.substring(url.lastIndexOf('/')+1)) 060 .filter(it -> !Utils.isStripEmpty(it)) 061 .orElse(super.generateLayerName()); 062 } 063 064 @Override 065 protected OsmDataLayer createNewLayer(final DataSet dataSet, final Optional<String> layerName) { 066 if (layerName.filter(Utils::isStripEmpty).isPresent()) { 067 throw new IllegalArgumentException("Blank layer name!"); 068 } 069 return new OsmDataLayer(dataSet, layerName.orElseGet(this::generateLayerName), null); 070 } 071 } 072}