001// License: GPL. For details, see LICENSE file.
002package org.openstreetmap.josm.actions.downloadtasks;
003
004import static org.openstreetmap.josm.tools.I18n.tr;
005
006import java.io.IOException;
007import java.net.MalformedURLException;
008import java.net.URISyntaxException;
009import java.net.URL;
010import java.util.concurrent.Future;
011
012import org.openstreetmap.josm.Main;
013import org.openstreetmap.josm.actions.SessionLoadAction.Loader;
014import org.openstreetmap.josm.data.Bounds;
015import org.openstreetmap.josm.gui.progress.ProgressMonitor;
016import org.openstreetmap.josm.tools.Utils;
017
018/**
019 * Task allowing to download JOSM session (*.jos, *.joz file).
020 * @since 6215
021 */
022public class DownloadSessionTask extends AbstractDownloadTask {
023
024    private static final String PATTERN_SESSION =  "https?://.*/.*\\.jo(s|z)";
025    
026    private Loader loader;
027    
028    /**
029     * Constructs a new {@code DownloadSessionTask}.
030     */
031    public DownloadSessionTask() {
032    }
033
034    @Override
035    public String getTitle() {
036        return tr("Download session");
037    }
038
039    @Override
040    public String[] getPatterns() {
041        return new String[]{PATTERN_SESSION};
042    }
043
044    @Override
045    public Future<?> download(boolean newLayer, Bounds downloadArea, ProgressMonitor progressMonitor) {
046        return null;
047    }
048
049    @Override
050    public Future<?> loadUrl(boolean newLayer, String url, ProgressMonitor progressMonitor) {
051        if (url != null && (url.matches(PATTERN_SESSION))) {
052            try {
053                URL u = new URL(url);
054                loader = new Loader(Utils.openURL(u), u.toURI(), url.endsWith(".joz"));
055                return Main.worker.submit(loader);
056            } catch (URISyntaxException e) {
057                e.printStackTrace();
058            } catch (MalformedURLException e) {
059                e.printStackTrace();
060            } catch (IOException e) {
061                e.printStackTrace();
062            }
063        }
064        return null;
065    }
066
067    @Override
068    public void cancel() {
069        if (loader != null) {
070            loader.cancel();
071        }
072    }
073
074    @Override
075    public String getConfirmationMessage(URL url) {
076        // TODO
077        return null;
078    }
079}