Change toLowerCase() to toLowerCase(Locale.ENGLISH)
[debian/openrocket] / core / src / net / sf / openrocket / file / openrocket / savers / RocketComponentSaver.java
1 package net.sf.openrocket.file.openrocket.savers;
2
3 import java.util.ArrayList;
4 import java.util.Collections;
5 import java.util.List;
6 import java.util.Locale;
7
8 import net.sf.openrocket.file.RocketSaver;
9 import net.sf.openrocket.material.Material;
10 import net.sf.openrocket.motor.Motor;
11 import net.sf.openrocket.motor.ThrustCurveMotor;
12 import net.sf.openrocket.rocketcomponent.ComponentAssembly;
13 import net.sf.openrocket.rocketcomponent.MotorMount;
14 import net.sf.openrocket.rocketcomponent.Rocket;
15 import net.sf.openrocket.rocketcomponent.RocketComponent;
16 import net.sf.openrocket.util.BugException;
17 import net.sf.openrocket.util.Color;
18 import net.sf.openrocket.util.LineStyle;
19
20
21 public class RocketComponentSaver {
22         
23         protected RocketComponentSaver() {
24                 // Prevent instantiation from outside the package
25         }
26         
27         protected void addParams(net.sf.openrocket.rocketcomponent.RocketComponent c, List<String> elements) {
28                 elements.add("<name>" + RocketSaver.escapeXML(c.getName()) + "</name>");
29                 
30                 
31                 // Save color and line style if significant
32                 if (!(c instanceof Rocket || c instanceof ComponentAssembly)) {
33                         Color color = c.getColor();
34                         if (color != null) {
35                                 elements.add("<color red=\"" + color.getRed() + "\" green=\"" + color.getGreen()
36                                                 + "\" blue=\"" + color.getBlue() + "\"/>");
37                         }
38                         
39                         LineStyle style = c.getLineStyle();
40                         if (style != null) {
41                                 // Type names currently equivalent to the enum names except for case.
42                                 elements.add("<linestyle>" + style.name().toLowerCase(Locale.ENGLISH) + "</linestyle>");
43                         }
44                 }
45                 
46                 
47                 // Save position unless "AFTER"
48                 if (c.getRelativePosition() != RocketComponent.Position.AFTER) {
49                         // The type names are currently equivalent to the enum names except for case.
50                         String type = c.getRelativePosition().name().toLowerCase(Locale.ENGLISH);
51                         elements.add("<position type=\"" + type + "\">" + c.getPositionValue() + "</position>");
52                 }
53                 
54                 
55                 // Overrides
56                 boolean overridden = false;
57                 if (c.isMassOverridden()) {
58                         elements.add("<overridemass>" + c.getOverrideMass() + "</overridemass>");
59                         overridden = true;
60                 }
61                 if (c.isCGOverridden()) {
62                         elements.add("<overridecg>" + c.getOverrideCGX() + "</overridecg>");
63                         overridden = true;
64                 }
65                 if (overridden) {
66                         elements.add("<overridesubcomponents>" + c.getOverrideSubcomponents()
67                                         + "</overridesubcomponents>");
68                 }
69                 
70                 
71                 // Comment
72                 if (c.getComment().length() > 0) {
73                         elements.add("<comment>" + RocketSaver.escapeXML(c.getComment()) + "</comment>");
74                 }
75                 
76         }
77         
78         
79         
80         
81         protected final String materialParam(Material mat) {
82                 return materialParam("material", mat);
83         }
84         
85         
86         protected final String materialParam(String tag, Material mat) {
87                 String str = "<" + tag;
88                 
89                 switch (mat.getType()) {
90                 case LINE:
91                         str += " type=\"line\"";
92                         break;
93                 case SURFACE:
94                         str += " type=\"surface\"";
95                         break;
96                 case BULK:
97                         str += " type=\"bulk\"";
98                         break;
99                 default:
100                         throw new BugException("Unknown material type: " + mat.getType());
101                 }
102                 
103                 return str + " density=\"" + mat.getDensity() + "\">" + RocketSaver.escapeXML(mat.getName()) + "</" + tag + ">";
104         }
105         
106         
107         protected final List<String> motorMountParams(MotorMount mount) {
108                 if (!mount.isMotorMount())
109                         return Collections.emptyList();
110                 
111                 String[] motorConfigIDs = ((RocketComponent) mount).getRocket().getMotorConfigurationIDs();
112                 List<String> elements = new ArrayList<String>();
113                 
114                 elements.add("<motormount>");
115                 
116                 for (String id : motorConfigIDs) {
117                         Motor motor = mount.getMotor(id);
118                         
119                         // Nothing is stored if no motor loaded
120                         if (motor == null)
121                                 continue;
122                         
123                         elements.add("  <motor configid=\"" + id + "\">");
124                         if (motor.getMotorType() != Motor.Type.UNKNOWN) {
125                                 elements.add("    <type>" + motor.getMotorType().name().toLowerCase(Locale.ENGLISH) + "</type>");
126                         }
127                         if (motor instanceof ThrustCurveMotor) {
128                                 ThrustCurveMotor m = (ThrustCurveMotor) motor;
129                                 elements.add("    <manufacturer>" + RocketSaver.escapeXML(m.getManufacturer().getSimpleName()) +
130                                                 "</manufacturer>");
131                                 elements.add("    <digest>" + m.getDigest() + "</digest>");
132                         }
133                         elements.add("    <designation>" + RocketSaver.escapeXML(motor.getDesignation()) + "</designation>");
134                         elements.add("    <diameter>" + motor.getDiameter() + "</diameter>");
135                         elements.add("    <length>" + motor.getLength() + "</length>");
136                         
137                         // Motor delay
138                         if (mount.getMotorDelay(id) == Motor.PLUGGED) {
139                                 elements.add("    <delay>none</delay>");
140                         } else {
141                                 elements.add("    <delay>" + mount.getMotorDelay(id) + "</delay>");
142                         }
143                         
144                         elements.add("  </motor>");
145                 }
146                 
147                 elements.add("  <ignitionevent>"
148                                 + mount.getIgnitionEvent().name().toLowerCase(Locale.ENGLISH).replace("_", "")
149                                 + "</ignitionevent>");
150                 
151                 elements.add("  <ignitiondelay>" + mount.getIgnitionDelay() + "</ignitiondelay>");
152                 elements.add("  <overhang>" + mount.getMotorOverhang() + "</overhang>");
153                 
154                 elements.add("</motormount>");
155                 
156                 return elements;
157         }
158         
159 }