annotate src/samer/core_/Saver.java @ 8:5e3cbbf173aa tip

Reorganise some more
author samer
date Fri, 05 Apr 2019 22:41:58 +0100
parents bf79fb79ee13
children
rev   line source
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 }