Added XStream and MotorIO
authorBill Kuker <bkuker@billkuker.com>
Wed, 15 Apr 2009 21:52:00 +0000 (21:52 +0000)
committerBill Kuker <bkuker@billkuker.com>
Wed, 15 Apr 2009 21:52:00 +0000 (21:52 +0000)
.classpath
MotorIOTest.xml [new file with mode: 0644]
src/com/billkuker/rocketry/motorsim/io/MotorIO.java [new file with mode: 0644]
src/com/billkuker/rocketry/motorsim/test/MotorIOTest.java [new file with mode: 0644]
xpp3_min-1.1.4c.jar [new file with mode: 0644]
xstream-1.3.jar [new file with mode: 0644]

index 7b7173fdfe3a983a0b46c0fb7b5fc1aa29a36d96..3a22977ae6d175eebc36ec172b1088addd716146 100644 (file)
@@ -7,6 +7,8 @@
        <classpathentry kind="lib" path="jcommon-1.0.15.jar"/>\r
        <classpathentry kind="lib" path="log4j-1.2.15.jar"/>\r
        <classpathentry kind="lib" path="l2fprod-common-sheet.jar"/>\r
+       <classpathentry kind="lib" path="xstream-1.3.jar"/>\r
+       <classpathentry kind="lib" path="xpp3_min-1.1.4c.jar"/>\r
        <classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/4"/>\r
        <classpathentry kind="output" path="bin"/>\r
 </classpath>\r
diff --git a/MotorIOTest.xml b/MotorIOTest.xml
new file mode 100644 (file)
index 0000000..786105e
--- /dev/null
@@ -0,0 +1,32 @@
+<object-stream>
+  <com.billkuker.rocketry.motorsim.motors.kuker.PVC9>
+    <chamber class="com.billkuker.rocketry.motorsim.CylindricalChamber">
+      <length>200 mm</length>
+      <iD>30 mm</iD>
+    </chamber>
+    <grain class="com.billkuker.rocketry.motorsim.grain.MultiGrain">
+      <grain class="com.billkuker.rocketry.motorsim.grain.CoredCylindricalGrain">
+        <foreEndInhibited>false</foreEndInhibited>
+        <aftEndInhibited>false</aftEndInhibited>
+        <length>70 mm</length>
+        <endLight>0 mm</endLight>
+        <oD>29 mm</oD>
+        <iD>8 mm</iD>
+        <outerSurfaceInhibited>true</outerSurfaceInhibited>
+        <innerSurfaceInhibited>false</innerSurfaceInhibited>
+      </grain>
+      <count>2</count>
+      <flush>1.0</flush>
+      <delay>0 mm</delay>
+    </grain>
+    <nozzle class="com.billkuker.rocketry.motorsim.ConvergentDivergentNozzle">
+      <throatDiameter>7.9 mm</throatDiameter>
+      <exitDiameter>9 mm</exitDiameter>
+      <efficiency>0.87</efficiency>
+    </nozzle>
+    <fuel class="com.billkuker.rocketry.motorsim.fuel.KNSU">
+      <t>English</t>
+    </fuel>
+    <name>PVC9</name>
+  </com.billkuker.rocketry.motorsim.motors.kuker.PVC9>
+</object-stream>
\ 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 (file)
index 0000000..602dae9
--- /dev/null
@@ -0,0 +1,77 @@
+package com.billkuker.rocketry.motorsim.io;\r
+\r
+import java.io.File;\r
+import java.io.FileReader;\r
+import java.io.FileWriter;\r
+import java.io.IOError;\r
+import java.io.IOException;\r
+import java.io.ObjectInputStream;\r
+import java.io.ObjectOutputStream;\r
+import java.io.StringWriter;\r
+\r
+import org.jscience.physics.amount.Amount;\r
+\r
+import com.billkuker.rocketry.motorsim.Motor;\r
+import com.billkuker.rocketry.motorsim.MotorPart;\r
+import com.thoughtworks.xstream.XStream;\r
+import com.thoughtworks.xstream.converters.Converter;\r
+import com.thoughtworks.xstream.converters.MarshallingContext;\r
+import com.thoughtworks.xstream.converters.UnmarshallingContext;\r
+import com.thoughtworks.xstream.io.HierarchicalStreamReader;\r
+import com.thoughtworks.xstream.io.HierarchicalStreamWriter;\r
+\r
+public class MotorIO {\r
+       static class AmountConverter implements Converter{\r
+               \r
+               public void marshal(Object o, HierarchicalStreamWriter w, MarshallingContext c) {\r
+                       Amount a = (Amount)o;\r
+                       String text;\r
+                       //Leave off the fractional part if it is not relevant so we get exact values back\r
+                       if (a.isExact())\r
+                               text = a.getExactValue() + " " + a.getUnit();\r
+                       else\r
+                               text = a.doubleValue(a.getUnit()) + " " + a.getUnit();\r
+                       w.setValue(text);\r
+               }\r
+\r
+               public Object unmarshal(HierarchicalStreamReader r, UnmarshallingContext c) {\r
+                       String text = r.getValue();\r
+                       return Amount.valueOf(text);\r
+               }\r
+\r
+               public boolean canConvert(Class c) {\r
+                       return c.equals(Amount.class);\r
+               }\r
+               \r
+       \r
+       }\r
+       \r
+       private static XStream getXStream(){\r
+               XStream xstream = new XStream();\r
+               xstream.setMode(XStream.XPATH_ABSOLUTE_REFERENCES);\r
+               xstream.omitField(MotorPart.class, "pcs");\r
+               xstream.omitField(MotorPart.class, "vcs");\r
+               xstream.registerConverter(new AmountConverter());\r
+               return xstream;\r
+       }\r
+       \r
+       public static void writeMotor(Motor m, File f) throws IOException{\r
+               FileWriter fout = new FileWriter(f);\r
+               ObjectOutputStream out = getXStream().createObjectOutputStream(fout);\r
+               out.writeObject(m);\r
+               out.close();\r
+               fout.close();\r
+       }\r
+       \r
+       public static Motor readMotor(File f) throws IOException{\r
+               ObjectInputStream in = getXStream().createObjectInputStream(new FileReader(f));\r
+               Motor m;\r
+               try {\r
+                       m = (Motor)in.readObject();\r
+               } catch (ClassNotFoundException e) {\r
+                       throw new IOException("Can not read motor: Class not found.", e);\r
+               }\r
+               return m;\r
+       }\r
+       \r
+}\r
diff --git a/src/com/billkuker/rocketry/motorsim/test/MotorIOTest.java b/src/com/billkuker/rocketry/motorsim/test/MotorIOTest.java
new file mode 100644 (file)
index 0000000..efcd31f
--- /dev/null
@@ -0,0 +1,25 @@
+package com.billkuker.rocketry.motorsim.test;\r
+\r
+import java.io.File;\r
+\r
+import org.junit.Test;\r
+\r
+import com.billkuker.rocketry.motorsim.Motor;\r
+import com.billkuker.rocketry.motorsim.io.MotorIO;\r
+import com.billkuker.rocketry.motorsim.motors.kuker.PVC9;\r
+\r
+\r
+public class MotorIOTest {\r
+\r
+       @Test\r
+       public void testReadWrite() throws Exception{\r
+               Motor m = new PVC9();\r
+               File f = new File("MotorIOTest.xml");\r
+               \r
+               MotorIO.writeMotor(m, f);\r
+               \r
+               Motor r = MotorIO.readMotor(f);\r
+               \r
+       \r
+       }\r
+}\r
diff --git a/xpp3_min-1.1.4c.jar b/xpp3_min-1.1.4c.jar
new file mode 100644 (file)
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 (file)
index 0000000..e5a3234
Binary files /dev/null and b/xstream-1.3.jar differ