<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="lib" path="rsyntaxtextarea.jar"/>\r
<classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/4"/>\r
<classpathentry kind="output" path="bin"/>\r
</classpath>\r
<object-stream>
- <com.billkuker.rocketry.motorsim.motors.kuker.PVC9>
+ <com.billkuker.rocketry.motorsim.Motor>
<chamber class="com.billkuker.rocketry.motorsim.CylindricalChamber">
<length>200 mm</length>
<iD>30 mm</iD>
<fuel class="com.billkuker.rocketry.motorsim.fuel.KNSU">
<t>English</t>
</fuel>
- <name>PVC9</name>
- </com.billkuker.rocketry.motorsim.motors.kuker.PVC9>
+ <name>IOTestMotor</name>
+ </com.billkuker.rocketry.motorsim.Motor>
</object-stream>
\ No newline at end of file
--- /dev/null
+<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
package com.billkuker.rocketry.motorsim.io;\r
\r
+import java.beans.XMLDecoder;\r
import java.io.File;\r
+import java.io.FileInputStream;\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.StringReader;\r
import java.io.StringWriter;\r
\r
import org.jscience.physics.amount.Amount;\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.converters.javabean.JavaBeanConverter;\r
import com.thoughtworks.xstream.io.HierarchicalStreamReader;\r
import com.thoughtworks.xstream.io.HierarchicalStreamWriter;\r
\r
\r
\r
}\r
+\r
\r
private static XStream getXStream(){\r
XStream xstream = new XStream();\r
xstream.omitField(MotorPart.class, "pcs");\r
xstream.omitField(MotorPart.class, "vcs");\r
xstream.registerConverter(new AmountConverter());\r
+ xstream.registerConverter(new JavaBeanConverter(xstream.getClassMapper(), "class"), -20); \r
return xstream;\r
}\r
\r
}\r
\r
public static Motor readMotor(File f) throws IOException{\r
- ObjectInputStream in = getXStream().createObjectInputStream(new FileReader(f));\r
+ FileReader fin = new FileReader(f);\r
+ ObjectInputStream in = getXStream().createObjectInputStream(fin);\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
+ throw new IOException("Class not found", e);\r
}\r
return m;\r
}\r
\r
+ public static String writeMotor(Motor m) throws IOException{\r
+ StringWriter sout = new StringWriter();\r
+ ObjectOutputStream out = getXStream().createObjectOutputStream(sout);\r
+ out.writeObject(m);\r
+ out.close();\r
+ sout.close();\r
+ return sout.toString();\r
+ }\r
+ \r
+ public static Motor readMotor(String s) throws IOException{\r
+ StringReader sin = new StringReader(s);\r
+ ObjectInputStream in = getXStream().createObjectInputStream(sin);\r
+ Motor m;\r
+ try {\r
+ m = (Motor)in.readObject();\r
+ } catch (ClassNotFoundException e) {\r
+ throw new IOException("Class not found", e);\r
+ }\r
+ return m;\r
+ }\r
}\r
package com.billkuker.rocketry.motorsim.test;\r
\r
+import java.beans.PropertyVetoException;\r
import java.io.File;\r
\r
+import javax.measure.unit.SI;\r
+\r
+import org.jscience.physics.amount.Amount;\r
import org.junit.Test;\r
\r
+import com.billkuker.rocketry.motorsim.ConvergentDivergentNozzle;\r
+import com.billkuker.rocketry.motorsim.CylindricalChamber;\r
import com.billkuker.rocketry.motorsim.Motor;\r
+import com.billkuker.rocketry.motorsim.fuel.KNSU;\r
+import com.billkuker.rocketry.motorsim.grain.CoredCylindricalGrain;\r
+import com.billkuker.rocketry.motorsim.grain.MultiGrain;\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
+ public void testReadWrite() throws Exception {\r
+ Motor m = new Motor();\r
+ m.setName("IOTestMotor");\r
+ m.setFuel(new KNSU());\r
+\r
+ CylindricalChamber c = new CylindricalChamber();\r
+ c.setLength(Amount.valueOf(200, SI.MILLIMETER));\r
+ c.setID(Amount.valueOf(30, SI.MILLIMETER));\r
+ m.setChamber(c);\r
+\r
+ CoredCylindricalGrain g = new CoredCylindricalGrain();\r
+ try {\r
+ g.setLength(Amount.valueOf(70, SI.MILLIMETER));\r
+ g.setOD(Amount.valueOf(29, SI.MILLIMETER));\r
+ g.setID(Amount.valueOf(8, SI.MILLIMETER));\r
+ } catch (PropertyVetoException v) {\r
+ throw new Error(v);\r
+ }\r
+\r
+ m.setGrain(new MultiGrain(g, 2));\r
+\r
+ ConvergentDivergentNozzle n = new ConvergentDivergentNozzle();\r
+ n.setThroatDiameter(Amount.valueOf(7.9, SI.MILLIMETER));\r
+ n.setExitDiameter(Amount.valueOf(9, SI.MILLIMETER));\r
+ n.setEfficiency(.87);\r
+ m.setNozzle(n);\r
+\r
File f = new File("MotorIOTest.xml");\r
- \r
+\r
MotorIO.writeMotor(m, f);\r
- \r
+\r
Motor r = MotorIO.readMotor(f);\r
- \r
- \r
+\r
}\r
}\r
package com.billkuker.rocketry.motorsim.visual;\r
\r
import java.awt.BorderLayout;\r
+import java.awt.FlowLayout;\r
import java.awt.event.ActionEvent;\r
import java.awt.event.ActionListener;\r
+import java.beans.PropertyVetoException;\r
import java.io.IOException;\r
\r
+import javax.measure.unit.SI;\r
import javax.swing.JButton;\r
import javax.swing.JFrame;\r
import javax.swing.JPanel;\r
import javax.swing.JTabbedPane;\r
import javax.swing.JTextArea;\r
+import javax.swing.UIManager;\r
+import javax.swing.UnsupportedLookAndFeelException;\r
import javax.swing.border.Border;\r
\r
+import org.fife.ui.rsyntaxtextarea.RSyntaxTextArea;\r
+import org.fife.ui.rsyntaxtextarea.SyntaxConstants;\r
+import org.jscience.physics.amount.Amount;\r
+\r
import com.billkuker.rocketry.motorsim.Burn;\r
-import com.billkuker.rocketry.motorsim.io.XStreamMotorIO;\r
+import com.billkuker.rocketry.motorsim.ConvergentDivergentNozzle;\r
+import com.billkuker.rocketry.motorsim.CylindricalChamber;\r
+import com.billkuker.rocketry.motorsim.Motor;\r
+import com.billkuker.rocketry.motorsim.fuel.KNSU;\r
+import com.billkuker.rocketry.motorsim.grain.CoredCylindricalGrain;\r
+import com.billkuker.rocketry.motorsim.grain.MultiGrain;\r
+import com.billkuker.rocketry.motorsim.io.MotorIO;\r
import com.billkuker.rocketry.motorsim.motors.kuker.PVC9;\r
\r
public class CrappyEditor extends JFrame {\r
- JTabbedPane tabs = new JTabbedPane();\r
- JPanel editor = new JPanel();\r
- JTextArea text = new JTextArea();\r
+ JTabbedPane tabs;\r
+ JPanel editor;\r
+ //JTextArea text = new JTextArea();\r
+ RSyntaxTextArea text;\r
public CrappyEditor(){\r
+ try {\r
+ UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());\r
+ } catch (Exception e1) {\r
+ e1.printStackTrace();\r
+ }\r
+\r
+ tabs = new JTabbedPane();\r
+ editor = new JPanel();\r
+ text = new RSyntaxTextArea();\r
+ \r
+ setTitle("MotorSim v0.1");\r
setSize(1024, 768);\r
\r
setContentPane(tabs);\r
\r
+ text.setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_XML);\r
+ \r
try {\r
- text.setText(XStreamMotorIO.writeMotor(new PVC9()));\r
+ text.setText(MotorIO.writeMotor(defaultMotor()));\r
} catch (IOException e) {\r
e.printStackTrace();\r
}\r
\r
editor.setLayout(new BorderLayout());\r
editor.add(text, BorderLayout.CENTER);\r
- editor.add(new JButton("Burn!"){\r
+ JPanel buttons = new JPanel(new FlowLayout());\r
+ buttons.add(new JButton("Burn!"){\r
{\r
addActionListener(new ActionListener(){\r
public void actionPerformed(ActionEvent arg0) {\r
}\r
});\r
}\r
+ });\r
\r
- }, BorderLayout.SOUTH);\r
+ editor.add(buttons, BorderLayout.SOUTH);\r
\r
tabs.addTab("Edit", editor);\r
\r
\r
}\r
\r
+ private Motor defaultMotor(){\r
+ Motor m = new Motor();\r
+ m.setName("PVC9");\r
+ m.setFuel(new KNSU());\r
+\r
+ CylindricalChamber c = new CylindricalChamber();\r
+ c.setLength(Amount.valueOf(200, SI.MILLIMETER));\r
+ c.setID(Amount.valueOf(30, SI.MILLIMETER));\r
+ m.setChamber(c);\r
+\r
+ CoredCylindricalGrain g = new CoredCylindricalGrain();\r
+ try {\r
+ g.setLength(Amount.valueOf(70, SI.MILLIMETER));\r
+ g.setOD(Amount.valueOf(29, SI.MILLIMETER));\r
+ g.setID(Amount.valueOf(8, SI.MILLIMETER));\r
+ } catch (PropertyVetoException v) {\r
+ throw new Error(v);\r
+ }\r
+\r
+ m.setGrain(new MultiGrain(g, 2));\r
+\r
+ ConvergentDivergentNozzle n = new ConvergentDivergentNozzle();\r
+ n.setThroatDiameter(Amount.valueOf(7.9, SI.MILLIMETER));\r
+ n.setExitDiameter(Amount.valueOf(9, SI.MILLIMETER));\r
+ n.setEfficiency(.87);\r
+ m.setNozzle(n);\r
+ \r
+ return m;\r
+ }\r
+ \r
private void burn(){\r
try {\r
- Burn b = new Burn(XStreamMotorIO.readMotor(text.getText()));\r
- tabs.addTab("Burn", new BurnPanel(b));\r
+ Motor m = MotorIO.readMotor(text.getText());\r
+ Burn b = new Burn(m);\r
+ tabs.addTab(m.getName() + " Output", new BurnPanel(b));\r
} catch (IOException e) {\r
e.printStackTrace();\r
}\r