source: josm/trunk/src/org/openstreetmap/josm/actions/SessionLoadAction.java@ 6032

Last change on this file since 6032 was 5926, checked in by bastiK, 11 years ago

clean up imports

  • Property svn:eol-style set to native
File size: 4.9 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.actions;
3
4import static org.openstreetmap.josm.gui.help.HelpUtil.ht;
5import static org.openstreetmap.josm.tools.I18n.tr;
6
7import java.awt.event.ActionEvent;
8import java.io.File;
9import java.io.IOException;
10import java.util.Arrays;
11import java.util.List;
12
13import javax.swing.JFileChooser;
14import javax.swing.JOptionPane;
15import javax.swing.SwingUtilities;
16
17import org.openstreetmap.josm.Main;
18import org.openstreetmap.josm.gui.HelpAwareOptionPane;
19import org.openstreetmap.josm.gui.NavigatableComponent.ViewportData;
20import org.openstreetmap.josm.gui.PleaseWaitRunnable;
21import org.openstreetmap.josm.gui.layer.Layer;
22import org.openstreetmap.josm.gui.progress.ProgressMonitor;
23import org.openstreetmap.josm.gui.util.FileFilterAllFiles;
24import org.openstreetmap.josm.io.IllegalDataException;
25import org.openstreetmap.josm.io.session.SessionReader;
26
27public class SessionLoadAction extends DiskAccessAction {
28
29 public SessionLoadAction() {
30 super(tr("Load Session"), "open", tr("Load a session from file."), null, true, "load-session", true);
31 putValue("help", ht("/Action/SessionLoad"));
32 }
33
34 public void actionPerformed(ActionEvent e) {
35 ExtensionFileFilter ff = new ExtensionFileFilter("jos,joz", "jos", tr("Session file (*.jos, *.joz)"));
36 JFileChooser fc = createAndOpenFileChooser(true, false, tr("Open session"), Arrays.asList(ff, FileFilterAllFiles.getInstance()), ff, JFileChooser.FILES_ONLY, "lastDirectory");
37 if (fc == null) return;
38 File file = fc.getSelectedFile();
39 boolean zip = file.getName().toLowerCase().endsWith(".joz");
40 Main.worker.submit(new Loader(file, zip));
41 }
42
43 public static class Loader extends PleaseWaitRunnable {
44
45 private boolean canceled;
46 private File file;
47 private boolean zip;
48 private List<Layer> layers;
49 private List<Runnable> postLoadTasks;
50 private ViewportData viewport;
51
52 public Loader(File file, boolean zip) {
53 super(tr("Loading session ''{0}''", file.getName()));
54 this.file = file;
55 this.zip = zip;
56 }
57
58 @Override
59 protected void cancel() {
60 Thread.dumpStack();
61 canceled = true;
62 }
63
64 @Override
65 protected void finish() {
66 SwingUtilities.invokeLater(new Runnable() {
67 @Override
68 public void run() {
69 if (canceled) return;
70 if (!layers.isEmpty()) {
71 Layer firstLayer = layers.iterator().next();
72 boolean noMap = Main.map == null;
73 if (noMap) {
74 Main.main.createMapFrame(firstLayer, viewport);
75 }
76 for (Layer l : layers) {
77 if (canceled) return;
78 Main.main.addLayer(l);
79 }
80 if (noMap) {
81 Main.map.setVisible(true);
82 }
83 }
84 for (Runnable task : postLoadTasks) {
85 if (canceled) return;
86 if (task == null) {
87 continue;
88 }
89 task.run();
90 }
91 }
92 });
93 }
94
95 @Override
96 protected void realRun() {
97 try {
98 ProgressMonitor monitor = getProgressMonitor();
99 SessionReader reader = new SessionReader();
100 reader.loadSession(file, zip, monitor);
101 layers = reader.getLayers();
102 postLoadTasks = reader.getPostLoadTasks();
103 viewport = reader.getViewport();
104 } catch (IllegalDataException e) {
105 e.printStackTrace();
106 HelpAwareOptionPane.showMessageDialogInEDT(
107 Main.parent,
108 tr("<html>Could not load session file ''{0}''.<br>Error is:<br>{1}</html>", file.getName(), e.getMessage()),
109 tr("Data Error"),
110 JOptionPane.ERROR_MESSAGE,
111 null
112 );
113 cancel();
114 } catch (IOException e) {
115 e.printStackTrace();
116 HelpAwareOptionPane.showMessageDialogInEDT(
117 Main.parent,
118 tr("<html>Could not load session file ''{0}''.<br>Error is:<br>{1}</html>", file.getName(), e.getMessage()),
119 tr("IO Error"),
120 JOptionPane.ERROR_MESSAGE,
121 null
122 );
123 cancel();
124 } catch (RuntimeException e) {
125 cancel();
126 throw e;
127 } catch (Error e) {
128 cancel();
129 throw e;
130 }
131 }
132 }
133}
134
Note: See TracBrowser for help on using the repository browser.