samer@0
|
1 package samer.core;
|
samer@0
|
2
|
samer@0
|
3 import samer.core.types.*;
|
samer@0
|
4 import java.io.*;
|
samer@0
|
5
|
samer@0
|
6 /** An Agent that manages saving and loading of a Saveable object */
|
samer@0
|
7
|
samer@0
|
8 public class Saver implements Agent {
|
samer@0
|
9 Saveable obj;
|
samer@0
|
10 VFile file, txtfile;
|
samer@0
|
11
|
samer@0
|
12 public Saver(Saveable obj) { init(obj); }
|
samer@0
|
13 public Saver(Saveable obj, Node node) {
|
samer@0
|
14 Shell.push(node); init(obj); Shell.pop();
|
samer@0
|
15 }
|
samer@0
|
16
|
samer@0
|
17 public void setName(String n) { file.setFile(new File(n)); }
|
samer@0
|
18 public File getFile() { return file.getFile(); }
|
samer@0
|
19
|
samer@0
|
20 private void init(Saveable obj) {
|
samer@0
|
21 this.obj=obj;
|
samer@0
|
22 file = new VFile("file","",0);
|
samer@0
|
23 txtfile = new VFile("text file","",0);
|
samer@0
|
24 }
|
samer@0
|
25
|
samer@0
|
26 public void load() throws Exception {
|
samer@0
|
27 Shell.print("loading "+obj+" from "+file);
|
samer@0
|
28 FileInputStream f=new FileInputStream(file.getFile());
|
samer@0
|
29 try { obj.load(new BufferedInputStream(f)); } finally { f.close(); }
|
samer@0
|
30 }
|
samer@0
|
31
|
samer@0
|
32 public void save() throws Exception {
|
samer@0
|
33 Shell.print("saving "+obj+" to "+file);
|
samer@0
|
34 OutputStream f=new BufferedOutputStream( new FileOutputStream(file.getFile()));
|
samer@0
|
35 try { obj.save(f); } finally { f.close(); }
|
samer@0
|
36 }
|
samer@0
|
37
|
samer@0
|
38 public void read() throws Exception {
|
samer@0
|
39 Shell.print("loading "+obj+" as text from "+txtfile);
|
samer@0
|
40 FileReader f=new FileReader(txtfile.getFile());
|
samer@0
|
41 try { obj.read(f); } finally { f.close(); }
|
samer@0
|
42 }
|
samer@0
|
43
|
samer@0
|
44 public void write() throws Exception {
|
samer@0
|
45 Shell.print("saving "+obj+" as text to "+txtfile);
|
samer@0
|
46 Writer w=new BufferedWriter(new FileWriter(txtfile.getFile()));
|
samer@0
|
47 try { obj.write(w); } finally { w.close(); }
|
samer@0
|
48 }
|
samer@0
|
49
|
samer@0
|
50 public void getCommands(Registry r)
|
samer@0
|
51 {
|
samer@0
|
52 r.add("load").add("load text");
|
samer@0
|
53 r.group();
|
samer@0
|
54 r.add("save as").add("save").add("save text");
|
samer@0
|
55 }
|
samer@0
|
56
|
samer@0
|
57 public void execute(String cmd, Environment env) throws Exception
|
samer@0
|
58 {
|
samer@0
|
59 if (cmd.equals("load")) {
|
samer@0
|
60 try { env.datum().get(file); load(); }
|
samer@0
|
61 catch (Exception x) { Shell.print("Error loading: "+x); }
|
samer@0
|
62 } else if (cmd.equals("save as")) {
|
samer@0
|
63 try { env.datum().get(file); txtfile.decode(file.string()+".txt"); save(); }
|
samer@0
|
64 catch (Exception x) { Shell.print("Error saving: "+x); }
|
samer@0
|
65 } else if (cmd.equals("save")) {
|
samer@0
|
66 try { save(); }
|
samer@0
|
67 catch (Exception x) { Shell.print("Error saving: "+x); }
|
samer@0
|
68 } else if (cmd.equals("load text")) {
|
samer@0
|
69 try { env.datum().get(txtfile); read(); }
|
samer@0
|
70 catch (Exception x) { Shell.print("Error reading: "+x); }
|
samer@0
|
71 } else if (cmd.equals("save text")) {
|
samer@0
|
72 try { env.datum().get(txtfile); write(); }
|
samer@0
|
73 catch (Exception x) { Shell.print("Error writing: "+x); }
|
samer@0
|
74 }
|
samer@0
|
75 }
|
samer@0
|
76 }
|