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

Last change on this file since 6162 was 6084, checked in by bastiK, 11 years ago

see #8902 - add missing @Override annotations (patch by shinigami)

  • 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 @Override
35 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");
38 if (fc == null) return;
39 File file = fc.getSelectedFile();
40 boolean zip = file.getName().toLowerCase().endsWith(".joz");
41 Main.worker.submit(new Loader(file, zip));
42 }
43
44 public static class Loader extends PleaseWaitRunnable {
45
46 private boolean canceled;
47 private File file;
48 private boolean zip;
49 private List<Layer> layers;
50 private List<Runnable> postLoadTasks;
51 private ViewportData viewport;
52
53 public Loader(File file, boolean zip) {
54 super(tr("Loading session ''{0}''", file.getName()));
55 this.file = file;
56 this.zip = zip;
57 }
58
59 @Override
60 protected void cancel() {
61 Thread.dumpStack();
62 canceled = true;
63 }
64
65 @Override
66 protected void finish() {
67 SwingUtilities.invokeLater(new Runnable() {
68 @Override
69 public void run() {
70 if (canceled) return;
71 if (!layers.isEmpty()) {
72 Layer firstLayer = layers.iterator().next();
73 boolean noMap = Main.map == null;
74 if (noMap) {
75 Main.main.createMapFrame(firstLayer, viewport);
76 }
77 for (Layer l : layers) {
78 if (canceled) return;
79 Main.main.addLayer(l);
80 }
81 if (noMap) {
82 Main.map.setVisible(true);
83 }
84 }
85 for (Runnable task : postLoadTasks) {
86 if (canceled) return;
87 if (task == null) {
88 continue;
89 }
90 task.run();
91 }
92 }
93 });
94 }
95
96 @Override
97 protected void realRun() {
98 try {
99 ProgressMonitor monitor = getProgressMonitor();
100 SessionReader reader = new SessionReader();
101 reader.loadSession(file, zip, monitor);
102 layers = reader.getLayers();
103 postLoadTasks = reader.getPostLoadTasks();
104 viewport = reader.getViewport();
105 } catch (IllegalDataException e) {
106 e.printStackTrace();
107 HelpAwareOptionPane.showMessageDialogInEDT(
108 Main.parent,
109 tr("<html>Could not load session file ''{0}''.<br>Error is:<br>{1}</html>", file.getName(), e.getMessage()),
110 tr("Data Error"),
111 JOptionPane.ERROR_MESSAGE,
112 null
113 );
114 cancel();
115 } catch (IOException e) {
116 e.printStackTrace();
117 HelpAwareOptionPane.showMessageDialogInEDT(
118 Main.parent,
119 tr("<html>Could not load session file ''{0}''.<br>Error is:<br>{1}</html>", file.getName(), e.getMessage()),
120 tr("IO Error"),
121 JOptionPane.ERROR_MESSAGE,
122 null
123 );
124 cancel();
125 } catch (RuntimeException e) {
126 cancel();
127 throw e;
128 } catch (Error e) {
129 cancel();
130 throw e;
131 }
132 }
133 }
134}
135
Note: See TracBrowser for help on using the repository browser.