Bug fixes and startup checks
[debian/openrocket] / src / net / sf / openrocket / file / openrocket / TransitionSaver.java
1 package net.sf.openrocket.file.openrocket;
2
3 import java.util.ArrayList;
4 import java.util.List;
5
6 import net.sf.openrocket.rocketcomponent.NoseCone;
7 import net.sf.openrocket.rocketcomponent.Transition;
8
9
10 public class TransitionSaver extends SymmetricComponentSaver {
11
12         private static final TransitionSaver instance = new TransitionSaver();
13
14         public static ArrayList<String> getElements(net.sf.openrocket.rocketcomponent.RocketComponent c) {
15                 ArrayList<String> list = new ArrayList<String>();
16
17                 list.add("<transition>");
18                 instance.addParams(c, list);
19                 list.add("</transition>");
20
21                 return list;
22         }
23
24
25         /*
26          * Note:  This method must be capable of handling nose cones as well.
27          */
28         @Override
29         protected void addParams(net.sf.openrocket.rocketcomponent.RocketComponent c, List<String> elements) {
30                 super.addParams(c, elements);
31                 net.sf.openrocket.rocketcomponent.Transition trans = (net.sf.openrocket.rocketcomponent.Transition) c;
32                 boolean nosecone = (trans instanceof NoseCone);
33
34
35                 Transition.Shape shape = trans.getType();
36                 elements.add("<shape>" + shape.name().toLowerCase() + "</shape>");
37                 if (shape.isClippable()) {
38                         elements.add("<shapeclipped>" + trans.isClipped() + "</shapeclipped>");
39                 }
40                 if (shape.usesParameter()) {
41                         elements.add("<shapeparameter>" + trans.getShapeParameter() + "</shapeparameter>");
42                 }
43
44
45                 if (!nosecone) {
46                         if (trans.isForeRadiusAutomatic())
47                                 elements.add("<foreradius>auto</foreradius>");
48                         else
49                                 elements.add("<foreradius>" + trans.getForeRadius() + "</foreradius>");
50                 }
51
52                 if (trans.isAftRadiusAutomatic())
53                         elements.add("<aftradius>auto</aftradius>");
54                 else
55                         elements.add("<aftradius>" + trans.getAftRadius() + "</aftradius>");
56
57
58                 if (!nosecone) {
59                         elements.add("<foreshoulderradius>" + trans.getForeShoulderRadius()
60                                         + "</foreshoulderradius>");
61                         elements.add("<foreshoulderlength>" + trans.getForeShoulderLength()
62                                         + "</foreshoulderlength>");
63                         elements.add("<foreshoulderthickness>" + trans.getForeShoulderThickness()
64                                         + "</foreshoulderthickness>");
65                         elements.add("<foreshouldercapped>" + trans.isForeShoulderCapped()
66                                         + "</foreshouldercapped>");
67                 }
68
69                 elements.add("<aftshoulderradius>" + trans.getAftShoulderRadius()
70                                 + "</aftshoulderradius>");
71                 elements.add("<aftshoulderlength>" + trans.getAftShoulderLength()
72                                 + "</aftshoulderlength>");
73                 elements.add("<aftshoulderthickness>" + trans.getAftShoulderThickness()
74                                 + "</aftshoulderthickness>");
75                 elements.add("<aftshouldercapped>" + trans.isAftShoulderCapped()
76                                 + "</aftshouldercapped>");
77         }
78
79 }