package net.sf.openrocket.file.openrocket.savers;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import net.sf.openrocket.rocketcomponent.Rocket;
import net.sf.openrocket.rocketcomponent.RocketComponent;
import net.sf.openrocket.rocketcomponent.Stage;
import net.sf.openrocket.rocketcomponent.StageSeparationConfiguration;
public class StageSaver extends ComponentAssemblySaver {
private static final StageSaver instance = new StageSaver();
public static ArrayList<String> getElements(net.sf.openrocket.rocketcomponent.RocketComponent c) {
ArrayList<String> list = new ArrayList<String>();
list.add("<stage>");
instance.addParams(c, list);
list.add("</stage>");
return list;
}
@Override
protected void addParams(RocketComponent c, List<String> elements) {
super.addParams(c, elements);
Stage stage = (Stage) c;
if (stage.getStageNumber() > 0) {
// NOTE: Default config must be BEFORE overridden config for proper backward compatibility later on
elements.addAll(separationConfig(stage.getStageSeparationConfiguration().getDefault(), false));
Rocket rocket = stage.getRocket();
// Note - getFlightConfigurationIDs returns at least one element. The first element
// is null and means "default".
String[] configs = rocket.getFlightConfigurationIDs();
if (configs.length > 1) {
for (String id : configs) {
if (id == null) {
continue;
}
if (stage.getStageSeparationConfiguration().isDefault(id)) {
continue;
}
StageSeparationConfiguration config = stage.getStageSeparationConfiguration().get(id);
elements.add("<separationconfiguration configid=\"" + id + "\">");
elements.addAll(separationConfig(config, true));
elements.add("</separationconfiguration>");
}
}
}
}
private List<String> separationConfig(StageSeparationConfiguration config, boolean indent) {
List<String> elements = new ArrayList<String>(2);
elements.add((indent ? " " : "") + "<separationevent>"
+ config.getSeparationEvent().name().toLowerCase(Locale.ENGLISH).replace("_", "")
+ "</separationevent>");
elements.add((indent ? " " : "") + "<separationdelay>" + config.getSeparationDelay() + "</separationdelay>");
return elements;
}
}