1 package net.sf.openrocket.android.thrustcurve;
\r
3 import java.io.InputStream;
\r
5 import net.sf.openrocket.android.util.AndroidLogWrapper;
\r
7 import org.xml.sax.Attributes;
\r
9 import android.sax.Element;
\r
10 import android.sax.EndElementListener;
\r
11 import android.sax.EndTextElementListener;
\r
12 import android.sax.RootElement;
\r
13 import android.sax.StartElementListener;
\r
14 import android.util.Xml;
\r
16 public class DownloadResponseParser {
\r
18 private static final String thrustcurveURI = "http://www.thrustcurve.org/2009/DownloadResponse";
\r
20 private static final String root_tag = "download-response";
\r
21 private static final String results_tag = "results";
\r
22 private static final String result_tag = "result";
\r
23 private static final String motor_id_tag = "motor-id";
\r
24 private static final String simfile_id_tag = "simfile-id";
\r
25 private static final String format_tag = "format";
\r
26 private static final String source_tag = "source";
\r
27 private static final String license_tag = "license";
\r
28 private static final String data_tag = "data";
\r
29 private static final String error_tag = "error";
\r
31 public static DownloadResponse parse( InputStream in ) {
\r
33 final DownloadResponse ret = new DownloadResponse();
\r
34 final MotorBurnFile currentMotor = new MotorBurnFile();
\r
36 // Have a place to put the data string and format.
\r
37 // We hold on to these here, then push them into the currentMotor
\r
38 // only if it a supported filetype
\r
39 final StringHolder current_format = new StringHolder();
\r
40 final StringHolder current_data = new StringHolder();
\r
42 RootElement rootEl = new RootElement(thrustcurveURI, root_tag);
\r
44 rootEl.setStartElementListener(
\r
45 new StartElementListener() {
\r
46 public void start(Attributes arg0) {
\r
47 AndroidLogWrapper.d(TAG,"Start Element error");
\r
48 ret.setError("IsError");
\r
53 Element resultsEl = rootEl.getChild( thrustcurveURI, results_tag);
\r
54 Element resultEl = resultsEl.getChild( thrustcurveURI, result_tag);
\r
55 resultEl.setStartElementListener(
\r
56 new StartElementListener() {
\r
58 public void start(Attributes arg0) {
\r
59 AndroidLogWrapper.d(DownloadResponseParser.class,"Start Element result");
\r
60 currentMotor.init();
\r
65 resultEl.setEndElementListener(
\r
66 new EndElementListener() {
\r
69 if ( SupportedFileTypes.isSupportedFileType(current_format.s) ) {
\r
70 currentMotor.setFiletype(current_format.s);
\r
73 s = Base64Decoder.decodeData(current_data.s);
\r
74 } catch ( Exception ex ) {
\r
75 AndroidLogWrapper.d(DownloadResponseParser.class,"base64: " + ex.getMessage());
\r
77 currentMotor.decodeFile( s );
\r
78 ret.add((MotorBurnFile)currentMotor.clone());
\r
84 resultEl.getChild(thrustcurveURI,motor_id_tag).setEndTextElementListener(
\r
85 new EndTextElementListener() {
\r
87 public void end(String arg0) {
\r
88 currentMotor.setMotorId(Integer.parseInt(arg0));
\r
92 resultEl.getChild(thrustcurveURI,format_tag).setEndTextElementListener(
\r
93 new EndTextElementListener() {
\r
95 public void end(String arg0) {
\r
96 current_format.s = arg0;
\r
100 resultEl.getChild(thrustcurveURI,data_tag).setEndTextElementListener(
\r
101 new EndTextElementListener() {
\r
103 public void end(String arg0) {
\r
104 current_data.s = arg0;
\r
109 Xml.parse(in, Xml.Encoding.UTF_8, rootEl.getContentHandler());
\r
110 } catch (Exception e) {
\r
111 throw new RuntimeException(e);
\r
117 private static class StringHolder {
\r