DGP - added DensityType parsing for recovery devices
[debian/openrocket] / src / net / sf / openrocket / file / rocksim / StreamerHandler.java
1 /*
2  * StreamerHandler.java
3  */
4 package net.sf.openrocket.file.rocksim;
5
6 import net.sf.openrocket.aerodynamics.WarningSet;
7 import net.sf.openrocket.file.simplesax.ElementHandler;
8 import net.sf.openrocket.file.simplesax.PlainTextHandler;
9 import net.sf.openrocket.rocketcomponent.RocketComponent;
10 import net.sf.openrocket.rocketcomponent.Streamer;
11 import org.xml.sax.SAXException;
12
13 import java.util.HashMap;
14
15 /**
16  * A SAX handler for Streamer components.
17  */
18 class StreamerHandler extends RecoveryDeviceHandler<Streamer> {
19
20     /**
21      * The OpenRocket Streamer.
22      */
23     private final Streamer streamer;
24
25     /**
26      * Constructor.
27      *
28      * @param c the parent component
29      * @throws IllegalArgumentException thrown if <code>c</code> is null
30      */
31     public StreamerHandler(RocketComponent c) throws IllegalArgumentException {
32         if (c == null) {
33             throw new IllegalArgumentException("The parent of a streamer may not be null.");
34         }
35         streamer = new Streamer();
36         c.addChild(streamer);
37     }
38
39     /**
40      * {@inheritDoc}
41      */
42     @Override
43     public ElementHandler openElement(String element, HashMap<String, String> attributes, WarningSet warnings) {
44         return PlainTextHandler.INSTANCE;
45     }
46
47     /**
48      * {@inheritDoc}
49      */
50     @Override
51     public void closeElement(String element, HashMap<String, String> attributes, String content, WarningSet warnings)
52             throws SAXException {
53         super.closeElement(element, attributes, content, warnings);
54
55         try {
56             if ("Width".equals(element)) {
57                 streamer.setStripWidth(Math.max(0, Double.parseDouble(content) / RocksimHandler.ROCKSIM_TO_OPENROCKET_LENGTH));
58             }
59             if ("Len".equals(element)) {
60                 streamer.setStripLength(Math.max(0, Double.parseDouble(content) / RocksimHandler.ROCKSIM_TO_OPENROCKET_LENGTH));
61             }
62             if ("DragCoefficient".equals(element)) {
63                 streamer.setCD(Double.parseDouble(content));
64             }
65             if ("Material".equals(element)) {
66                 setMaterialName(content);
67             }
68         }
69         catch (NumberFormatException nfe) {
70             warnings.add("Could not convert " + element + " value of " + content + ".  It is expected to be a number.");
71         }
72     }
73
74     /**
75      * {@inheritDoc}
76      */
77     @Override
78     public Streamer getComponent() {
79         return streamer;
80     }
81
82 }
83