0c937571143f12d80ca106bd5f0ff22c0fd6a385
[debian/openrocket] / src / net / sf / openrocket / android / thrustcurve / RSEBurnFile.java
1 package net.sf.openrocket.android.thrustcurve;\r
2 \r
3 import java.io.ByteArrayInputStream;\r
4 import java.io.InputStream;\r
5 import java.util.Vector;\r
6 \r
7 import org.xml.sax.Attributes;\r
8 \r
9 import android.sax.Element;\r
10 import android.sax.RootElement;\r
11 import android.sax.StartElementListener;\r
12 import android.util.Log;\r
13 import android.util.Xml;\r
14 \r
15 class RSEBurnFile extends MotorBurnFile {\r
16 \r
17         private final static String TAG = "RSEBurnFile";\r
18 \r
19         static void parse( MotorBurnFile that, String filecontents ) {\r
20 \r
21                 parse(that, new ByteArrayInputStream(filecontents.getBytes()) );\r
22         }\r
23 \r
24         private final static String root_tag = "engine-database";\r
25         private final static String engine_list_tag = "engine-list";\r
26         private final static String engine_tag = "engine";\r
27 \r
28         private final static String delays_attr = "delays";\r
29         private final static String len_attr = "len";\r
30         private final static String propwgt_attr = "propWt";\r
31         private final static String totwgt_attr = "initWt";\r
32 \r
33         private final static String data_tag = "data";\r
34         private final static String eng_data_tag = "eng-data";\r
35 \r
36         private final static String time_attr="t";\r
37         private final static String force_attr="f";\r
38 \r
39         static void parse( final MotorBurnFile that, InputStream in ) {\r
40 \r
41                 RootElement rootEl = new RootElement(root_tag);\r
42                 Element engineEl = rootEl.getChild(engine_list_tag).getChild(engine_tag);\r
43 \r
44                 final Vector<Double> datapoints = new Vector<Double>();\r
45                 \r
46                 Log.d(TAG,"parsing start");\r
47 \r
48                 engineEl.setStartElementListener(\r
49                                 new StartElementListener() {\r
50                                         @Override\r
51                                         public void start(Attributes arg0) {\r
52                                                 Log.d(TAG,"start engineEl");\r
53                                                 that.setPropWeightG(Double.parseDouble(arg0.getValue(propwgt_attr)));\r
54                                                 that.setTotWeightG(Double.parseDouble(arg0.getValue(totwgt_attr)));\r
55                                                 that.setLength(Float.parseFloat(arg0.getValue(len_attr)));\r
56                                                 that.setDelays(arg0.getValue(delays_attr));\r
57                                                 Log.d(TAG, "me is now " + that.toString());\r
58                                         }\r
59                                 }\r
60                 );\r
61 \r
62                 Element datapointEl = engineEl.getChild(data_tag).getChild(eng_data_tag);\r
63                 datapointEl.setStartElementListener(\r
64                                 new StartElementListener() {\r
65                                         @Override\r
66                                         public void start(Attributes attributes) {\r
67                                                 Double x = Double.parseDouble(attributes.getValue(time_attr));\r
68                                                 Double y = Double.parseDouble(attributes.getValue(force_attr));\r
69                                                 Log.d(TAG, "add data point " + x + "," + y);\r
70                                                 datapoints.add(x);\r
71                                                 datapoints.add(y);\r
72                                         }\r
73                                 }\r
74                 );\r
75 \r
76                 try {\r
77             Xml.parse(in, Xml.Encoding.UTF_8,  rootEl.getContentHandler());\r
78         } catch (Exception e) {\r
79             throw new RuntimeException(e);\r
80         }\r
81 \r
82                 that.setDatapoints(datapoints);\r
83         }\r
84 }\r
85 //\r
86 //      <engine-database>\r
87 //       <engine-list>\r
88 //      <engine FDiv="10" FFix="1" FStep="-1." Isp="202.11" Itot="8.919" Type="single-use" auto-calc-cg="1" auto-calc-mass="1" avgThrust="3.795" burn-time="2.35" cgDiv="10" cgFix="1" cgStep="-1." code="C4" delays="3,5,7" dia="18." exitDia="0." initWt="17." len="50." mDiv="10" mFix="1" mStep="-1." massFrac="26.47" mfg="Apogee" peakThrust="11.31" propWt="4.5" tDiv="10" tFix="1" tStep="-1." throatDia="0.">\r
89 //      <comments>Apogee C4 RASP.ENG file made from NAR published data\r
90 //      File produced September 4, 2000\r
91 //      The total impulse, peak thrust, average thrust and burn time are\r
92 //      the same as the averaged static test data on the NAR web site in\r
93 //      the certification file. The curve drawn with these data points is as\r
94 //      close to the certification curve as can be with such a limited\r
95 //      number of points (32) allowed with wRASP up to v1.6.\r
96 //      </comments>\r
97 //      <data>\r
98 //      <eng-data cg="25." f="0." m="4.5" t="0."/>\r
99 //      <eng-data cg="25." f="3.23" m="4.48533" t="0.018"/>\r
100 //      <eng-data cg="25." f="6.874" m="4.42671" t="0.041"/>\r
101 //      <eng-data cg="25." f="8.779" m="4.00814" t="0.147"/>\r
102 //      <eng-data cg="25." f="10.683" m="3.28643" t="0.294"/>\r
103 //      <eng-data cg="25." f="11.31" m="2.89252" t="0.365"/>\r
104 //      <eng-data cg="25." f="10.521" m="2.76585" t="0.388"/>\r
105 //      <eng-data cg="25." f="8.779" m="2.649" t="0.412"/>\r
106 //      <eng-data cg="25." f="7.04" m="2.53328" t="0.441"/>\r
107 //      <eng-data cg="25." f="4.555" m="2.46308" t="0.465"/>\r
108 //      <eng-data cg="25." f="3.479" m="2.33337" t="0.529"/>\r
109 //      <eng-data cg="25." f="2.981" m="2.1704" t="0.629"/>\r
110 //      <eng-data cg="25." f="3.23" m="2.1328" t="0.653"/>\r
111 //      <eng-data cg="25." f="2.816" m="2.03366" t="0.718"/>\r
112 //      <eng-data cg="25." f="2.733" m="1.84469" t="0.853"/>\r
113 //      <eng-data cg="25." f="2.65" m="1.5568" t="1.065"/>\r
114 //      <eng-data cg="25." f="2.567" m="1.30938" t="1.253"/>\r
115 //      <eng-data cg="25." f="2.401" m="1.05873" t="1.453"/>\r
116 //      <eng-data cg="25." f="2.484" m="0.761739" t="1.694"/>\r
117 //      <eng-data cg="25." f="2.484" m="0.636413" t="1.794"/>\r
118 //      <eng-data cg="25." f="2.733" m="0.612724" t="1.812"/>\r
119 //      <eng-data cg="25." f="2.401" m="0.575165" t="1.841"/>\r
120 //      <eng-data cg="25." f="2.401" m="0.446759" t="1.947"/>\r
121 //      <eng-data cg="25." f="2.401" m="0.246881" t="2.112"/>\r
122 //      <eng-data cg="25." f="2.401" m="0.0978809" t="2.235"/>\r
123 //      <eng-data cg="25." f="2.236" m="0.0429024" t="2.282"/>\r
124 //      <eng-data cg="25." f="1.656" m="0.0134478" t="2.312"/>\r
125 //      <eng-data cg="25." f="0.662" m="0.003507" t="2.329"/>\r
126 //      <eng-data cg="25." f="0." m="-0." t="2.35"/>\r
127 //      </data>\r
128 //      </engine>\r
129 //       </engine-list>\r
130 //      </engine-database>\r
131 //\r