Ignore:
Timestamp:
2013-09-22T16:59:52+02:00 (6 years ago)
Author:
Don-vip
Message:

see #9032, see #4029 - Allow to load session from standard I/O mechanisms (local and remote files) + javadoc

Location:
trunk/src/org/openstreetmap/josm/actions
Files:
1 added
4 edited

Legend:

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

    r6084 r6245  
    5353                "org.openstreetmap.josm.io.JpgImporter",
    5454                "org.openstreetmap.josm.io.WMSLayerImporter",
    55                 "org.openstreetmap.josm.io.AllFormatsImporter"
     55                "org.openstreetmap.josm.io.AllFormatsImporter",
     56                "org.openstreetmap.josm.io.session.SessionImporter"
    5657        };
    5758
  • trunk/src/org/openstreetmap/josm/actions/OpenLocationAction.java

    r6104 r6245  
    2828import org.openstreetmap.josm.actions.downloadtasks.DownloadOsmTask;
    2929import org.openstreetmap.josm.actions.downloadtasks.DownloadOsmUrlTask;
     30import org.openstreetmap.josm.actions.downloadtasks.DownloadSessionTask;
    3031import org.openstreetmap.josm.actions.downloadtasks.DownloadTask;
    3132import org.openstreetmap.josm.actions.downloadtasks.PostDownloadHandler;
     
    6263        addDownloadTaskClass(DownloadOsmCompressedTask.class);
    6364        addDownloadTaskClass(DownloadOsmChangeCompressedTask.class);
     65        addDownloadTaskClass(DownloadSessionTask.class);
    6466    }
    6567
  • trunk/src/org/openstreetmap/josm/actions/SessionLoadAction.java

    r6084 r6245  
    77import java.awt.event.ActionEvent;
    88import java.io.File;
     9import java.io.FileOutputStream;
    910import java.io.IOException;
     11import java.io.InputStream;
     12import java.net.URI;
    1013import java.util.Arrays;
    1114import java.util.List;
     
    2326import org.openstreetmap.josm.gui.util.FileFilterAllFiles;
    2427import org.openstreetmap.josm.io.IllegalDataException;
     28import org.openstreetmap.josm.io.session.SessionImporter;
    2529import org.openstreetmap.josm.io.session.SessionReader;
    26 
     30import org.openstreetmap.josm.tools.CheckParameterUtil;
     31import org.openstreetmap.josm.tools.Utils;
     32
     33/**
     34 * Loads a JOSM session
     35 * @since 4668
     36 */
    2737public class SessionLoadAction extends DiskAccessAction {
    2838
     39    /**
     40     * Constructs a new {@code SessionLoadAction}.
     41     */
    2942    public SessionLoadAction() {
    3043        super(tr("Load Session"), "open", tr("Load a session from file."), null, true, "load-session", true);
     
    3447    @Override
    3548    public void actionPerformed(ActionEvent e) {
    36         ExtensionFileFilter ff = new ExtensionFileFilter("jos,joz", "jos", tr("Session file (*.jos, *.joz)"));
    37         JFileChooser fc = createAndOpenFileChooser(true, false, tr("Open session"), Arrays.asList(ff, FileFilterAllFiles.getInstance()), ff, JFileChooser.FILES_ONLY, "lastDirectory");
     49        JFileChooser fc = createAndOpenFileChooser(true, false, tr("Open session"),
     50                Arrays.asList(SessionImporter.FILE_FILTER, FileFilterAllFiles.getInstance()),
     51                SessionImporter.FILE_FILTER, JFileChooser.FILES_ONLY, "lastDirectory");
    3852        if (fc == null) return;
    3953        File file = fc.getSelectedFile();
     
    4256    }
    4357
     58    /**
     59     * JOSM session loader
     60     */
    4461    public static class Loader extends PleaseWaitRunnable {
    4562
    4663        private boolean canceled;
    4764        private File file;
    48         private boolean zip;
     65        private final URI uri;
     66        private final InputStream is;
     67        private final boolean zip;
    4968        private List<Layer> layers;
    5069        private List<Runnable> postLoadTasks;
    5170        private ViewportData viewport;
    5271
     72        /**
     73         * Constructs a new {@code Loader} for local session file.
     74         * @param file The JOSM session file
     75         * @param zip {@code true} if the file is a session archive file (*.joz)
     76         */
    5377        public Loader(File file, boolean zip) {
    5478            super(tr("Loading session ''{0}''", file.getName()));
     79            CheckParameterUtil.ensureParameterNotNull(file, "file");
    5580            this.file = file;
     81            this.uri = null;
     82            this.is = null;
    5683            this.zip = zip;
    5784        }
    5885
     86        /**
     87         * Constructs a new {@code Loader} for session file input stream (may be a remote file).
     88         * @param is The input stream to session file
     89         * @param uri The file URI
     90         * @param zip {@code true} if the file is a session archive file (*.joz)
     91         * @since 6245
     92         */
     93        public Loader(InputStream is, URI uri, boolean zip) {
     94            super(tr("Loading session ''{0}''", uri));
     95            CheckParameterUtil.ensureParameterNotNull(is, "is");
     96            CheckParameterUtil.ensureParameterNotNull(uri, "uri");
     97            this.file = null;
     98            this.uri = uri;
     99            this.is = is;
     100            this.zip = zip;
     101        }
     102
    59103        @Override
    60         protected void cancel() {
     104        public void cancel() {
    61105            Thread.dumpStack();
    62106            canceled = true;
     
    99143                ProgressMonitor monitor = getProgressMonitor();
    100144                SessionReader reader = new SessionReader();
    101                 reader.loadSession(file, zip, monitor);
    102                 layers = reader.getLayers();
    103                 postLoadTasks = reader.getPostLoadTasks();
    104                 viewport = reader.getViewport();
     145                boolean tempFile = false;
     146                try {
     147                    if (file == null) {
     148                        // Download and write entire joz file as a temp file on disk as we need random access later
     149                        file = File.createTempFile("session_", ".joz", Utils.getJosmTempDir());
     150                        tempFile = true;
     151                        FileOutputStream out = new FileOutputStream(file);
     152                        try {
     153                            Utils.copyStream(is, out);
     154                        } finally {
     155                            Utils.close(out);
     156                        }
     157                    }
     158                    reader.loadSession(file, zip, monitor);
     159                    layers = reader.getLayers();
     160                    postLoadTasks = reader.getPostLoadTasks();
     161                    viewport = reader.getViewport();
     162                } finally {
     163                    if (tempFile) {
     164                        if (!file.delete()) {
     165                            file.deleteOnExit();
     166                        }
     167                        file = null;
     168                    }
     169                }
    105170            } catch (IllegalDataException e) {
    106171                e.printStackTrace();
    107172                HelpAwareOptionPane.showMessageDialogInEDT(
    108173                        Main.parent,
    109                         tr("<html>Could not load session file ''{0}''.<br>Error is:<br>{1}</html>", file.getName(), e.getMessage()),
     174                        tr("<html>Could not load session file ''{0}''.<br>Error is:<br>{1}</html>", uri != null ? uri : file.getName(), e.getMessage()),
    110175                        tr("Data Error"),
    111176                        JOptionPane.ERROR_MESSAGE,
     
    117182                HelpAwareOptionPane.showMessageDialogInEDT(
    118183                        Main.parent,
    119                         tr("<html>Could not load session file ''{0}''.<br>Error is:<br>{1}</html>", file.getName(), e.getMessage()),
     184                        tr("<html>Could not load session file ''{0}''.<br>Error is:<br>{1}</html>", uri != null ? uri : file.getName(), e.getMessage()),
    120185                        tr("IO Error"),
    121186                        JOptionPane.ERROR_MESSAGE,
  • trunk/src/org/openstreetmap/josm/actions/SessionSaveAsAction.java

    r6149 r6245  
    4242import org.openstreetmap.josm.tools.WindowGeometry;
    4343
     44/**
     45 * Saves a JOSM session
     46 * @since 4685
     47 */
    4448public class SessionSaveAsAction extends DiskAccessAction {
    4549
     
    5054    private boolean zipRequired;
    5155
     56    /**
     57     * Constructs a new {@code SessionSaveAsAction}.
     58     */
    5259    public SessionSaveAsAction() {
    5360        super(tr("Save Session As..."), "save_as", tr("Save the current session to a new file."), null, true, "save_as-session", true);
     
    134141    }
    135142
     143    /**
     144     * The "Save Session" dialog
     145     */
    136146    public class SessionSaveAsDialog extends ExtendedDialog {
    137147
     148        /**
     149         * Constructs a new {@code SessionSaveAsDialog}.
     150         */
    138151        public SessionSaveAsDialog() {
    139152            super(Main.parent, tr("Save Session"), new String[] {tr("Save As"), tr("Cancel")});
     
    229242        setEnabled(Main.isDisplayingMapView());
    230243    }
    231 
    232244}
Note: See TracChangeset for help on using the changeset viewer.