samer@0: package samer.core; samer@0: samer@0: import samer.core.types.*; samer@0: import java.io.*; samer@0: samer@0: /** An Agent that manages saving and loading of a Saveable object */ samer@0: samer@0: public class Saver implements Agent { samer@0: Saveable obj; samer@0: VFile file, txtfile; samer@0: samer@0: public Saver(Saveable obj) { init(obj); } samer@0: public Saver(Saveable obj, Node node) { samer@0: Shell.push(node); init(obj); Shell.pop(); samer@0: } samer@0: samer@0: public void setName(String n) { file.setFile(new File(n)); } samer@0: public File getFile() { return file.getFile(); } samer@0: samer@0: private void init(Saveable obj) { samer@0: this.obj=obj; samer@0: file = new VFile("file","",0); samer@0: txtfile = new VFile("text file","",0); samer@0: } samer@0: samer@0: public void load() throws Exception { samer@0: Shell.print("loading "+obj+" from "+file); samer@0: FileInputStream f=new FileInputStream(file.getFile()); samer@0: try { obj.load(new BufferedInputStream(f)); } finally { f.close(); } samer@0: } samer@0: samer@0: public void save() throws Exception { samer@0: Shell.print("saving "+obj+" to "+file); samer@0: OutputStream f=new BufferedOutputStream( new FileOutputStream(file.getFile())); samer@0: try { obj.save(f); } finally { f.close(); } samer@0: } samer@0: samer@0: public void read() throws Exception { samer@0: Shell.print("loading "+obj+" as text from "+txtfile); samer@0: FileReader f=new FileReader(txtfile.getFile()); samer@0: try { obj.read(f); } finally { f.close(); } samer@0: } samer@0: samer@0: public void write() throws Exception { samer@0: Shell.print("saving "+obj+" as text to "+txtfile); samer@0: Writer w=new BufferedWriter(new FileWriter(txtfile.getFile())); samer@0: try { obj.write(w); } finally { w.close(); } samer@0: } samer@0: samer@0: public void getCommands(Registry r) samer@0: { samer@0: r.add("load").add("load text"); samer@0: r.group(); samer@0: r.add("save as").add("save").add("save text"); samer@0: } samer@0: samer@0: public void execute(String cmd, Environment env) throws Exception samer@0: { samer@0: if (cmd.equals("load")) { samer@0: try { env.datum().get(file); load(); } samer@0: catch (Exception x) { Shell.print("Error loading: "+x); } samer@0: } else if (cmd.equals("save as")) { samer@0: try { env.datum().get(file); txtfile.decode(file.string()+".txt"); save(); } samer@0: catch (Exception x) { Shell.print("Error saving: "+x); } samer@0: } else if (cmd.equals("save")) { samer@0: try { save(); } samer@0: catch (Exception x) { Shell.print("Error saving: "+x); } samer@0: } else if (cmd.equals("load text")) { samer@0: try { env.datum().get(txtfile); read(); } samer@0: catch (Exception x) { Shell.print("Error reading: "+x); } samer@0: } else if (cmd.equals("save text")) { samer@0: try { env.datum().get(txtfile); write(); } samer@0: catch (Exception x) { Shell.print("Error writing: "+x); } samer@0: } samer@0: } samer@0: }