package net.sf.openrocket.file.openrocket.importt;
import java.util.HashMap;
import net.sf.openrocket.aerodynamics.Warning;
import net.sf.openrocket.aerodynamics.WarningSet;
import net.sf.openrocket.file.DocumentLoadingContext;
import net.sf.openrocket.file.simplesax.AbstractElementHandler;
import net.sf.openrocket.file.simplesax.ElementHandler;
import net.sf.openrocket.file.simplesax.PlainTextHandler;
import net.sf.openrocket.rocketcomponent.Stage;
import net.sf.openrocket.rocketcomponent.StageSeparationConfiguration;
import net.sf.openrocket.rocketcomponent.StageSeparationConfiguration.SeparationEvent;
import org.xml.sax.SAXException;
class StageSeparationConfigurationHandler extends AbstractElementHandler {
private final Stage stage;
private SeparationEvent event = null;
private double delay = Double.NaN;
public StageSeparationConfigurationHandler(Stage stage, DocumentLoadingContext context) {
this.stage = stage;
}
public StageSeparationConfiguration getConfiguration(StageSeparationConfiguration def) {
StageSeparationConfiguration config = def.clone();
if (event != null) {
config.setSeparationEvent(event);
}
if (!Double.isNaN(delay)) {
config.setSeparationDelay(delay);
}
return config;
}
@Override
public ElementHandler openElement(String element, HashMap<String, String> attributes, WarningSet warnings)
throws SAXException {
return PlainTextHandler.INSTANCE;
}
@Override
public void closeElement(String element, HashMap<String, String> attributes, String content,
WarningSet warnings) throws SAXException {
content = content.trim();
if ("separationevent".equals(element)) {
event = (SeparationEvent) DocumentConfig.findEnum(content, SeparationEvent.class);
if (event == null) {
warnings.add(Warning.FILE_INVALID_PARAMETER);
return;
}
return;
} else if ("separationdelay".equals(element)) {
delay = parseDouble(content, warnings, Warning.FILE_INVALID_PARAMETER);
return;
}
super.closeElement(element, attributes, content, warnings);
}
@Override
public void endHandler(String element, HashMap<String, String> attributes, String content, WarningSet warnings) throws SAXException {
String configId = attributes.get("configid");
StageSeparationConfiguration def = stage.getStageSeparationConfiguration().getDefault();
stage.getStageSeparationConfiguration().set(configId, getConfiguration(def));
}
}