1 package net.sf.openrocket.file.openrocket.savers;
4 import java.util.ArrayList;
5 import java.util.Collections;
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.rocketcomponent.ComponentAssembly;
12 import net.sf.openrocket.rocketcomponent.MotorMount;
13 import net.sf.openrocket.rocketcomponent.Rocket;
14 import net.sf.openrocket.rocketcomponent.RocketComponent;
15 import net.sf.openrocket.util.LineStyle;
18 public class RocketComponentSaver {
20 protected RocketComponentSaver() {
21 // Prevent instantiation from outside the package
24 protected void addParams(net.sf.openrocket.rocketcomponent.RocketComponent c, List<String> elements) {
25 elements.add("<name>" + RocketSaver.escapeXML(c.getName()) + "</name>");
28 // Save color and line style if significant
29 if (!(c instanceof Rocket || c instanceof ComponentAssembly)) {
30 Color color = c.getColor();
32 elements.add("<color red=\"" + color.getRed() + "\" green=\"" + color.getGreen()
33 + "\" blue=\"" + color.getBlue() + "\"/>");
36 LineStyle style = c.getLineStyle();
38 // Type names currently equivalent to the enum names except for case.
39 elements.add("<linestyle>" + style.name().toLowerCase() + "</linestyle>");
44 // Save position unless "AFTER"
45 if (c.getRelativePosition() != RocketComponent.Position.AFTER) {
46 // The type names are currently equivalent to the enum names except for case.
47 String type = c.getRelativePosition().name().toLowerCase();
48 elements.add("<position type=\"" + type + "\">" + c.getPositionValue() + "</position>");
53 boolean overridden = false;
54 if (c.isMassOverridden()) {
55 elements.add("<overridemass>" + c.getOverrideMass() + "</overridemass>");
58 if (c.isCGOverridden()) {
59 elements.add("<overridecg>" + c.getOverrideCGX() + "</overridecg>");
63 elements.add("<overridesubcomponents>" + c.getOverrideSubcomponents()
64 + "</overridesubcomponents>");
69 if (c.getComment().length() > 0) {
70 elements.add("<comment>" + RocketSaver.escapeXML(c.getComment()) + "</comment>");
78 protected final String materialParam(Material mat) {
79 return materialParam("material", mat);
83 protected final String materialParam(String tag, Material mat) {
84 String str = "<" + tag;
86 switch (mat.getType()) {
88 str += " type=\"line\"";
91 str += " type=\"surface\"";
94 str += " type=\"bulk\"";
97 throw new RuntimeException("Unknown material type: " + mat.getType());
100 return str + " density=\"" + mat.getDensity() + "\">" + RocketSaver.escapeXML(mat.getName()) + "</"+tag+">";
104 protected final List<String> motorMountParams(MotorMount mount) {
105 if (!mount.isMotorMount())
106 return Collections.emptyList();
108 String[] motorConfigIDs = ((RocketComponent) mount).getRocket().getMotorConfigurationIDs();
109 List<String> elements = new ArrayList<String>();
111 elements.add("<motormount>");
113 for (String id : motorConfigIDs) {
114 Motor motor = mount.getMotor(id);
116 // Nothing is stored if no motor loaded
120 elements.add(" <motor configid=\"" + id + "\">");
121 if (motor.getMotorType() != Motor.Type.UNKNOWN) {
122 elements.add(" <type>" + motor.getMotorType().name().toLowerCase() + "</type>");
124 elements.add(" <manufacturer>" + RocketSaver.escapeXML(motor.getManufacturer().getSimpleName()) + "</manufacturer>");
125 elements.add(" <designation>" + RocketSaver.escapeXML(motor.getDesignation()) + "</designation>");
126 elements.add(" <diameter>" + motor.getDiameter() + "</diameter>");
127 elements.add(" <length>" + motor.getLength() + "</length>");
130 if (mount.getMotorDelay(id) == Motor.PLUGGED) {
131 elements.add(" <delay>none</delay>");
133 elements.add(" <delay>" + mount.getMotorDelay(id) + "</delay>");
136 elements.add(" </motor>");
139 elements.add(" <ignitionevent>"
140 + mount.getIgnitionEvent().name().toLowerCase().replace("_", "")
141 + "</ignitionevent>");
143 elements.add(" <ignitiondelay>" + mount.getIgnitionDelay() + "</ignitiondelay>");
144 elements.add(" <overhang>" + mount.getMotorOverhang() + "</overhang>");
146 elements.add("</motormount>");