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

Last change on this file since 5299 was 4874, checked in by jttt, 12 years ago

Use static class were appropriate

  • Property svn:eol-style set to native
File size: 4.8 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.List;
11
12import javax.swing.JFileChooser;
13import javax.swing.JOptionPane;
14import javax.swing.SwingUtilities;
15import javax.swing.filechooser.FileFilter;
16
17import org.openstreetmap.josm.Main;
18import org.openstreetmap.josm.gui.HelpAwareOptionPane;
19import org.openstreetmap.josm.gui.PleaseWaitRunnable;
20import org.openstreetmap.josm.gui.layer.Layer;
21import org.openstreetmap.josm.gui.progress.ProgressMonitor;
22import org.openstreetmap.josm.io.IllegalDataException;
23import org.openstreetmap.josm.io.session.SessionReader;
24
25public class SessionLoadAction extends JosmAction {
26 public SessionLoadAction() {
27 super(tr("Load Session"), "open", tr("Load a session from file."), null, true, "load-session", true);
28 putValue("help", ht("/Action/SessionLoad"));
29 }
30
31 public void actionPerformed(ActionEvent e) {
32 String curDir = Main.pref.get("lastDirectory");
33 if (curDir.equals("")) {
34 curDir = ".";
35 }
36 JFileChooser fc = new JFileChooser(new File(curDir));
37 fc.setDialogTitle(tr("Open session"));
38 fc.setFileSelectionMode(JFileChooser.FILES_ONLY);
39 fc.setMultiSelectionEnabled(false);
40 fc.setAcceptAllFileFilterUsed(true);
41 FileFilter ff = new ExtensionFileFilter("jos,joz", "jos", tr("Session file (*.jos, *.joz)"));
42 fc.addChoosableFileFilter(ff);
43 int answer = fc.showOpenDialog(Main.parent);
44 if (answer != JFileChooser.APPROVE_OPTION)
45 return;
46
47 if (!fc.getCurrentDirectory().getAbsolutePath().equals(curDir)) {
48 Main.pref.put("lastDirectory", fc.getCurrentDirectory().getAbsolutePath());
49 }
50 File file = fc.getSelectedFile();
51 boolean zip = true;
52 if (file.getName().toLowerCase().endsWith(".jos")) {
53 zip = false;
54 }
55 Main.worker.submit(new Loader(file, zip));
56 }
57
58 public static class Loader extends PleaseWaitRunnable {
59
60 private boolean canceled;
61 private File file;
62 private boolean zip;
63 private List<Layer> layers;
64 private List<Runnable> postLoadTasks;
65
66 public Loader(File file, boolean zip) {
67 super(tr("Loading session ''{0}''", file.getName()));
68 this.file = file;
69 this.zip = zip;
70 }
71
72 @Override
73 protected void cancel() {
74 Thread.currentThread().dumpStack();
75 canceled = true;
76 }
77
78 @Override
79 protected void finish() {
80 SwingUtilities.invokeLater(new Runnable() {
81 @Override
82 public void run() {
83 if (canceled) return;
84 for (Layer l : layers) {
85 if (canceled) return;
86 Main.main.addLayer(l);
87 }
88 for (Runnable task : postLoadTasks) {
89 if (canceled) return;
90 if (task == null) {
91 continue;
92 }
93 task.run();
94 }
95 }
96 });
97 }
98
99 @Override
100 protected void realRun() {
101 try {
102 ProgressMonitor monitor = getProgressMonitor();
103 SessionReader reader = new SessionReader();
104 reader.loadSession(file, zip, monitor);
105 layers = reader.getLayers();
106 postLoadTasks = reader.getPostLoadTasks();
107 } catch (IllegalDataException e) {
108 e.printStackTrace();
109 HelpAwareOptionPane.showMessageDialogInEDT(
110 Main.parent,
111 tr("<html>Could not load session file ''{0}''.<br>Error is:<br>{1}</html>", file.getName(), e.getMessage()),
112 tr("Data Error"),
113 JOptionPane.ERROR_MESSAGE,
114 null
115 );
116 cancel();
117 } catch (IOException e) {
118 e.printStackTrace();
119 HelpAwareOptionPane.showMessageDialogInEDT(
120 Main.parent,
121 tr("<html>Could not load session file ''{0}''.<br>Error is:<br>{1}</html>", file.getName(), e.getMessage()),
122 tr("IO Error"),
123 JOptionPane.ERROR_MESSAGE,
124 null
125 );
126 cancel();
127 } catch (RuntimeException e) {
128 cancel();
129 throw e;
130 } catch (Error e) {
131 cancel();
132 throw e;
133 }
134 }
135 }
136}
137
Note: See TracBrowser for help on using the repository browser.