X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2Fcom%2Fbillkuker%2Frocketry%2Fmotorsim%2Fio%2FMotorIO.java;h=a1eaf726dfa841129004576f24b590ac3510d74b;hb=d281e244ca2302407ee6f3a9c4fca9df238038aa;hp=c4b4ea5e512edee13e07a24f39789728977b77ca;hpb=0f8b7d440afb7ffbf9a007af40518680b6bfd3c1;p=sw%2Fmotorsim diff --git a/src/com/billkuker/rocketry/motorsim/io/MotorIO.java b/src/com/billkuker/rocketry/motorsim/io/MotorIO.java index c4b4ea5..a1eaf72 100644 --- a/src/com/billkuker/rocketry/motorsim/io/MotorIO.java +++ b/src/com/billkuker/rocketry/motorsim/io/MotorIO.java @@ -4,8 +4,10 @@ import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; +import java.io.InputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; +import java.io.OutputStream; import java.io.StringReader; import java.io.StringWriter; import java.net.URI; @@ -18,6 +20,7 @@ import com.billkuker.rocketry.motorsim.Motor; import com.billkuker.rocketry.motorsim.fuel.FuelResolver; import com.billkuker.rocketry.motorsim.fuel.FuelResolver.FuelNotFound; import com.thoughtworks.xstream.XStream; +import com.thoughtworks.xstream.converters.ConversionException; import com.thoughtworks.xstream.converters.Converter; import com.thoughtworks.xstream.converters.MarshallingContext; import com.thoughtworks.xstream.converters.UnmarshallingContext; @@ -37,22 +40,41 @@ public class MotorIO { @Override public void marshal(Object o, HierarchicalStreamWriter w, MarshallingContext ctx) { - Fuel f = (Fuel)o; - w.setValue(f.getURI().toString()); + /*Fuel f = (Fuel)o; + w.setValue(f.getURI().toString());*/ + ctx.convertAnother(((Fuel)o).getURI()); } @Override public Object unmarshal(HierarchicalStreamReader r, UnmarshallingContext ctx) { - String text = r.getValue(); + Object o = ctx.currentObject(); + Object uri = null; + Class c = ctx.getRequiredType(); + try { + uri = ctx.convertAnother(o, URI.class); + } catch ( ConversionException e ){ + e.printStackTrace(); + } + if ( uri != null && uri instanceof URI ){ + try { + return FuelResolver.getFuel((URI)uri); + } catch (FuelNotFound e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + try { - URI u = new URI(text); - return FuelResolver.getFuel(u); - } catch (URISyntaxException e) { - throw new Error("Bad Fuel URI: " + text, e); + return FuelResolver.getFuel(new URI("motorsim:" + c.getSimpleName())); } catch (FuelNotFound e) { - throw new Error("Can't find fuel: " + text, e); + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (URISyntaxException e) { + // TODO Auto-generated catch block + e.printStackTrace(); } + return null; } } @@ -94,17 +116,15 @@ public class MotorIO { return xstream; } - public static void writeMotor(Motor m, File f) throws IOException{ - FileWriter fout = new FileWriter(f); - ObjectOutputStream out = getXStream().createObjectOutputStream(fout); + public static void writeMotor(Motor m, OutputStream os) throws IOException{ + ObjectOutputStream out = getXStream().createObjectOutputStream(os); out.writeObject(m); out.close(); - fout.close(); + os.flush(); } - public static Motor readMotor(File f) throws IOException{ - FileReader fin = new FileReader(f); - ObjectInputStream in = getXStream().createObjectInputStream(fin); + public static Motor readMotor(InputStream is) throws IOException{ + ObjectInputStream in = getXStream().createObjectInputStream(is); Motor m; try { m = (Motor)in.readObject(); @@ -114,24 +134,4 @@ public class MotorIO { return m; } - public static String writeMotor(Motor m) throws IOException{ - StringWriter sout = new StringWriter(); - ObjectOutputStream out = getXStream().createObjectOutputStream(sout); - out.writeObject(m); - out.close(); - sout.close(); - return sout.toString(); - } - - public static Motor readMotor(String s) throws IOException{ - StringReader sin = new StringReader(s); - ObjectInputStream in = getXStream().createObjectInputStream(sin); - Motor m; - try { - m = (Motor)in.readObject(); - } catch (ClassNotFoundException e) { - throw new IOException("Class not found", e); - } - return m; - } }