1
package org.helioviewer.vso;
3
import java.awt.event.WindowAdapter;
4
import java.awt.event.WindowEvent;
5
import java.io.EOFException;
6
import java.io.FileInputStream;
7
import java.io.FileNotFoundException;
8
import java.io.FileOutputStream;
9
import java.io.IOException;
10
import java.io.InputStream;
11
import java.io.ObjectInputStream;
12
import java.io.ObjectOutputStream;
13
import java.io.OutputStream;
14
import java.util.LinkedList;
15
import java.util.List;
17
import org.helioviewer.base.logging.Log;
18
import org.helioviewer.vso.gui.dialogs.RestartDialog;
19
import org.virtualsolar.VSO.VSOi.VSOiPort;
22
* Can be displayed as a window for a control
24
* @author Helge Dietert
26
public class Manager {
27
private static final long serialVersionUID = -2521455486509690125L;
28
private final String defaultDir;
29
private final Icons icons;
30
private final List<RequestWindow> openRequests;
31
private final VSOiPort port;
32
private final String restoreFilename;
35
* Creates a window to query VSO data
38
* Port to query the data
39
* @param restoreFilename
40
* Filename to restore and save the status, set null to suppress
43
* Default Dir to save the queries
45
public Manager(VSOiPort _port, Icons icons, String restoreFilename, String defaultDir) {
47
this.restoreFilename = restoreFilename;
48
this.defaultDir = defaultDir;
50
openRequests = new LinkedList<RequestWindow>();
52
InputStream fis = null;
54
fis = new FileInputStream(restoreFilename);
55
ObjectInputStream o = new ObjectInputStream(fis);
58
boolean askedRestore = false;
60
q = (Query) o.readObject();
62
if (!RestartDialog.askRestore()) {
63
Log.info("Do not restore from last time");
70
} catch (EOFException e) {
72
Log.info("Finished restoring from last time");
73
} catch (ClassNotFoundException e) {
74
Log.error("Error restoring from last time", e);
76
} catch (FileNotFoundException e) {
77
Log.info("No VSO config found to restore");
78
} catch (IOException e) {
79
Log.error("Error saving VSO state " + e.getMessage());
83
} catch (IOException e) {
84
Log.error("Could not close file");
85
} catch (NullPointerException e) {
86
// If the file does not exists
90
Thread hook = new Thread(new Runnable() {
92
OutputStream fos = null;
94
fos = new FileOutputStream(Manager.this.restoreFilename);
95
ObjectOutputStream o = new ObjectOutputStream(fos);
96
for (RequestWindow i : openRequests) {
97
i.getQueryControl().close();
98
o.writeObject(i.getQueryControl().getQuery());
100
} catch (IOException e) {
101
Log.error("Error saving VSO state " + e.getMessage());
105
} catch (IOException e) {
106
Log.error("Could not close file");
111
Runtime.getRuntime().addShutdownHook(hook);
114
public String getDefaultDir() {
118
public Icons getIcons() {
122
public VSOiPort getPort() {
127
* Creates a new window with the right bookkeeping and display it
129
* @return The newly created window
131
public RequestWindow newQueryWindow() {
132
// Build window and show
133
final RequestWindow win = new RequestWindow(this);
135
openRequests.add(win);
136
win.addWindowListener(new WindowAdapter() {
138
public void windowClosed(WindowEvent winEvt) {
139
openRequests.remove(win);
144
win.setVisible(true);
149
* Creates a new window corresponding to a given query
152
* @return The newly created window
154
public RequestWindow newQueryWindow(Query query) {
155
RequestWindow r = newQueryWindow();
156
r.getQueryControl().loadQuery(query);
b'\\ No newline at end of file'