DGP - Stage overrides for CG and CP in Rocksim export
[debian/openrocket] / core / src / net / sf / openrocket / file / rocksim / export / StageDTO.java
1 package net.sf.openrocket.file.rocksim.export;
2
3 import net.sf.openrocket.file.rocksim.RocksimCommonConstants;
4 import net.sf.openrocket.rocketcomponent.BodyTube;
5 import net.sf.openrocket.rocketcomponent.NoseCone;
6 import net.sf.openrocket.rocketcomponent.RocketComponent;
7 import net.sf.openrocket.rocketcomponent.Stage;
8 import net.sf.openrocket.rocketcomponent.Transition;
9 import net.sf.openrocket.util.ArrayList;
10
11 import javax.xml.bind.annotation.XmlAccessType;
12 import javax.xml.bind.annotation.XmlAccessorType;
13 import javax.xml.bind.annotation.XmlElementRef;
14 import javax.xml.bind.annotation.XmlElementRefs;
15 import java.util.List;
16
17 /**
18  * Placeholder for a Rocksim Stage.
19  */
20 @XmlAccessorType(XmlAccessType.FIELD)
21 public class StageDTO {
22
23     @XmlElementRefs({
24             @XmlElementRef(name = RocksimCommonConstants.BODY_TUBE, type = BodyTubeDTO.class),
25             @XmlElementRef(name = RocksimCommonConstants.NOSE_CONE, type = NoseConeDTO.class),
26             @XmlElementRef(name = RocksimCommonConstants.TRANSITION, type = TransitionDTO.class)
27     })
28     private List<BasePartDTO> externalPart = new ArrayList<BasePartDTO>();
29
30     /**
31      * Default constructor.
32      */
33     public StageDTO() {
34     }
35
36     public StageDTO(Stage stage, RocketDesignDTO design, int stageNumber) {
37
38         if (stageNumber == 3) {
39             if (stage.isMassOverridden()) {
40                 design.setStage3Mass(stage.getMass() * RocksimCommonConstants.ROCKSIM_TO_OPENROCKET_MASS);
41                 design.setUseKnownMass(1);
42             }
43             if (stage.isCGOverridden()) {
44                 design.setStage3CG(stage.getOverrideCGX() * RocksimCommonConstants.ROCKSIM_TO_OPENROCKET_LENGTH);
45             }
46         }
47         
48         if (stageNumber == 2) {
49             if (stage.isMassOverridden()) {
50                 design.setStage2Mass(stage.getMass() * RocksimCommonConstants.ROCKSIM_TO_OPENROCKET_MASS);
51                 design.setUseKnownMass(1);
52             }
53             if (stage.isCGOverridden()) {
54                 design.setStage2CGAlone(stage.getOverrideCGX() * RocksimCommonConstants.ROCKSIM_TO_OPENROCKET_LENGTH);
55             }
56         }
57
58         if (stageNumber == 1) {
59             if (stage.isMassOverridden()) {
60                 design.setStage1Mass(stage.getMass() * RocksimCommonConstants.ROCKSIM_TO_OPENROCKET_MASS);
61                 design.setUseKnownMass(1);
62             }
63             if (stage.isCGOverridden()) {
64                 design.setStage1CGAlone(stage.getOverrideCGX() * RocksimCommonConstants.ROCKSIM_TO_OPENROCKET_LENGTH);
65             }
66         }
67
68         List<RocketComponent> children = stage.getChildren();
69         for (int i = 0; i < children.size(); i++) {
70             RocketComponent rocketComponents = children.get(i);
71             if (rocketComponents instanceof NoseCone) {
72                 addExternalPart(toNoseConeDTO((NoseCone) rocketComponents));
73             } else if (rocketComponents instanceof BodyTube) {
74                 addExternalPart(toBodyTubeDTO((BodyTube) rocketComponents));
75             } else if (rocketComponents instanceof Transition) {
76                 addExternalPart(toTransitionDTO((Transition) rocketComponents));
77             }
78         }
79     }
80
81     public List<BasePartDTO> getExternalPart() {
82         return externalPart;
83     }
84
85     public void addExternalPart(BasePartDTO theExternalPartDTO) {
86         externalPart.add(theExternalPartDTO);
87     }
88
89     private NoseConeDTO toNoseConeDTO(NoseCone nc) {
90         return new NoseConeDTO(nc);
91     }
92
93     private BodyTubeDTO toBodyTubeDTO(BodyTube bt) {
94         return new BodyTubeDTO(bt);
95     }
96
97     private TransitionDTO toTransitionDTO(Transition tran) {
98         return new TransitionDTO(tran);
99     }
100 }