// License: GPL. For details, see LICENSE file. package org.openstreetmap.josm.plugins.imageryxmlbounds.actions.downloadtask; import static org.openstreetmap.josm.tools.I18n.tr; import java.util.concurrent.Future; import org.openstreetmap.josm.Main; import org.openstreetmap.josm.actions.downloadtasks.DownloadOsmTask; import org.openstreetmap.josm.data.Bounds; import org.openstreetmap.josm.gui.layer.Layer; import org.openstreetmap.josm.gui.layer.OsmDataLayer; import org.openstreetmap.josm.gui.progress.ProgressMonitor; import org.openstreetmap.josm.io.OsmServerReader; import org.openstreetmap.josm.plugins.imageryxmlbounds.XmlBoundsConstants; import org.openstreetmap.josm.plugins.imageryxmlbounds.XmlBoundsLayer; import org.openstreetmap.josm.plugins.imageryxmlbounds.io.JosmServerLocationReader; /** * Download imagery XML bounds from JOSM server. */ public class DownloadXmlBoundsTask extends DownloadOsmTask implements XmlBoundsConstants { @Override public Future<?> download(boolean newLayer, Bounds downloadArea, ProgressMonitor progressMonitor) { return null; } @Override public Future<?> loadUrl(boolean newLayer, String url, ProgressMonitor progressMonitor) { downloadTask = new DownloadTask(newLayer, new JosmServerLocationReader(url), progressMonitor); // We need submit instead of execute so we can wait for it to finish and get the error // message if necessary. If no one calls getErrorMessage() it just behaves like execute. return Main.worker.submit(downloadTask); } @Override public String[] getPatterns() { return new String[]{ XML_LOCATION.replace(".", "\\."), "http://.*\\."+EXTENSION.replace(".", "\\.") }; } @Override public String getTitle() { return tr("Download imagery XML bounds"); } protected class DownloadTask extends DownloadOsmTask.DownloadTask { /** * Constructs a new {@code DownloadTask}. * @param newLayer if {@code true}, download to a new layer * @param reader server reader * @param progressMonitor progress monitor */ public DownloadTask(boolean newLayer, OsmServerReader reader, ProgressMonitor progressMonitor) { super(newLayer, reader, progressMonitor); } @Override protected OsmDataLayer getEditLayer() { OsmDataLayer editLayer = super.getEditLayer(); return editLayer instanceof XmlBoundsLayer ? editLayer : null; } @Override protected int getNumDataLayers() { int count = 0; if (!Main.isDisplayingMapView()) return 0; for (Layer layer : Main.getLayerManager().getLayers()) { if (layer instanceof XmlBoundsLayer) { count++; } } return count; } @Override protected OsmDataLayer getFirstDataLayer() { if (!Main.isDisplayingMapView()) return null; for (Layer layer : Main.getLayerManager().getLayers()) { if (layer instanceof XmlBoundsLayer) return (XmlBoundsLayer) layer; } return null; } @Override protected OsmDataLayer createNewLayer() { return new XmlBoundsLayer(dataSet, XmlBoundsLayer.createNewName(), null); } } }