// License: GPL. For details, see LICENSE file. package org.openstreetmap.josm.actions.downloadtasks; import static org.openstreetmap.josm.tools.I18n.tr; import java.io.IOException; import java.net.URISyntaxException; import java.net.URL; import java.util.concurrent.Future; import org.openstreetmap.josm.Main; import org.openstreetmap.josm.actions.SessionLoadAction.Loader; import org.openstreetmap.josm.data.Bounds; import org.openstreetmap.josm.gui.progress.ProgressMonitor; import org.openstreetmap.josm.tools.HttpClient; /** * Task allowing to download JOSM session (*.jos, *.joz file). * @since 6215 */ public class DownloadSessionTask extends AbstractDownloadTask<Object> { private static final String PATTERN_SESSION = "https?://.*/.*\\.jo(s|z)"; private Loader loader; @Override public String getTitle() { return tr("Download session"); } @Override public String[] getPatterns() { return new String[]{PATTERN_SESSION}; } @Override public Future<?> download(boolean newLayer, Bounds downloadArea, ProgressMonitor progressMonitor) { return null; } @Override public Future<?> loadUrl(boolean newLayer, String url, ProgressMonitor progressMonitor) { if (url != null && (url.matches(PATTERN_SESSION))) { try { URL u = new URL(url); loader = new Loader(HttpClient.create(u).connect().getContent(), u.toURI(), url.endsWith(".joz")); return Main.worker.submit(loader); } catch (URISyntaxException | IOException e) { Main.error(e); } } return null; } @Override public void cancel() { if (loader != null) { loader.cancel(); } } @Override public String getConfirmationMessage(URL url) { // TODO return null; } /** * Do not allow to load a session file via remotecontrol. * * Session importers can be added by plugins and there is currently * no way to ensure that these are safe for remotecontol. * @return <code>true</code> if session import is allowed */ @Override public boolean isSafeForRemotecontrolRequests() { return Main.pref.getBoolean("remotecontrol.import.allow_session", false); } }