From: Bill Kuker Date: Wed, 15 Apr 2009 21:52:00 +0000 (+0000) Subject: Added XStream and MotorIO X-Git-Url: https://git.gag.com/?a=commitdiff_plain;h=0b442f1b389c7203a404c8aff2a4452b9f5225f1;p=sw%2Fmotorsim Added XStream and MotorIO --- diff --git a/.classpath b/.classpath index 7b7173f..3a22977 100644 --- a/.classpath +++ b/.classpath @@ -7,6 +7,8 @@ + + diff --git a/MotorIOTest.xml b/MotorIOTest.xml new file mode 100644 index 0000000..786105e --- /dev/null +++ b/MotorIOTest.xml @@ -0,0 +1,32 @@ + + + + 200 mm + 30 mm + + + + false + false + 70 mm + 0 mm + 29 mm + 8 mm + true + false + + 2 + 1.0 + 0 mm + + + 7.9 mm + 9 mm + 0.87 + + + English + + PVC9 + + \ No newline at end of file diff --git a/src/com/billkuker/rocketry/motorsim/io/MotorIO.java b/src/com/billkuker/rocketry/motorsim/io/MotorIO.java new file mode 100644 index 0000000..602dae9 --- /dev/null +++ b/src/com/billkuker/rocketry/motorsim/io/MotorIO.java @@ -0,0 +1,77 @@ +package com.billkuker.rocketry.motorsim.io; + +import java.io.File; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.IOError; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.io.StringWriter; + +import org.jscience.physics.amount.Amount; + +import com.billkuker.rocketry.motorsim.Motor; +import com.billkuker.rocketry.motorsim.MotorPart; +import com.thoughtworks.xstream.XStream; +import com.thoughtworks.xstream.converters.Converter; +import com.thoughtworks.xstream.converters.MarshallingContext; +import com.thoughtworks.xstream.converters.UnmarshallingContext; +import com.thoughtworks.xstream.io.HierarchicalStreamReader; +import com.thoughtworks.xstream.io.HierarchicalStreamWriter; + +public class MotorIO { + static class AmountConverter implements Converter{ + + public void marshal(Object o, HierarchicalStreamWriter w, MarshallingContext c) { + Amount a = (Amount)o; + String text; + //Leave off the fractional part if it is not relevant so we get exact values back + if (a.isExact()) + text = a.getExactValue() + " " + a.getUnit(); + else + text = a.doubleValue(a.getUnit()) + " " + a.getUnit(); + w.setValue(text); + } + + public Object unmarshal(HierarchicalStreamReader r, UnmarshallingContext c) { + String text = r.getValue(); + return Amount.valueOf(text); + } + + public boolean canConvert(Class c) { + return c.equals(Amount.class); + } + + + } + + private static XStream getXStream(){ + XStream xstream = new XStream(); + xstream.setMode(XStream.XPATH_ABSOLUTE_REFERENCES); + xstream.omitField(MotorPart.class, "pcs"); + xstream.omitField(MotorPart.class, "vcs"); + xstream.registerConverter(new AmountConverter()); + return xstream; + } + + public static void writeMotor(Motor m, File f) throws IOException{ + FileWriter fout = new FileWriter(f); + ObjectOutputStream out = getXStream().createObjectOutputStream(fout); + out.writeObject(m); + out.close(); + fout.close(); + } + + public static Motor readMotor(File f) throws IOException{ + ObjectInputStream in = getXStream().createObjectInputStream(new FileReader(f)); + Motor m; + try { + m = (Motor)in.readObject(); + } catch (ClassNotFoundException e) { + throw new IOException("Can not read motor: Class not found.", e); + } + return m; + } + +} diff --git a/src/com/billkuker/rocketry/motorsim/test/MotorIOTest.java b/src/com/billkuker/rocketry/motorsim/test/MotorIOTest.java new file mode 100644 index 0000000..efcd31f --- /dev/null +++ b/src/com/billkuker/rocketry/motorsim/test/MotorIOTest.java @@ -0,0 +1,25 @@ +package com.billkuker.rocketry.motorsim.test; + +import java.io.File; + +import org.junit.Test; + +import com.billkuker.rocketry.motorsim.Motor; +import com.billkuker.rocketry.motorsim.io.MotorIO; +import com.billkuker.rocketry.motorsim.motors.kuker.PVC9; + + +public class MotorIOTest { + + @Test + public void testReadWrite() throws Exception{ + Motor m = new PVC9(); + File f = new File("MotorIOTest.xml"); + + MotorIO.writeMotor(m, f); + + Motor r = MotorIO.readMotor(f); + + + } +} diff --git a/xpp3_min-1.1.4c.jar b/xpp3_min-1.1.4c.jar new file mode 100644 index 0000000..813a9a8 Binary files /dev/null and b/xpp3_min-1.1.4c.jar differ diff --git a/xstream-1.3.jar b/xstream-1.3.jar new file mode 100644 index 0000000..e5a3234 Binary files /dev/null and b/xstream-1.3.jar differ