package net.sf.openrocket.file.openrocket.importt;
import java.util.HashMap;
import java.util.Locale;
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.IgnitionConfiguration;
import net.sf.openrocket.rocketcomponent.IgnitionConfiguration.IgnitionEvent;
import org.xml.sax.SAXException;
class IgnitionConfigurationHandler extends AbstractElementHandler {
private Double ignitionDelay = null;
private IgnitionEvent ignitionEvent = null;
public IgnitionConfigurationHandler(DocumentLoadingContext context) {
}
@Override
public ElementHandler openElement(String element, HashMap<String, String> attributes,
WarningSet warnings) {
return PlainTextHandler.INSTANCE;
}
public IgnitionConfiguration getConfiguration(IgnitionConfiguration def) {
IgnitionConfiguration config = def.clone();
if (ignitionEvent != null) {
config.setIgnitionEvent(ignitionEvent);
}
if (ignitionDelay != null) {
config.setIgnitionDelay(ignitionDelay);
}
return config;
}
@Override
public void closeElement(String element, HashMap<String, String> attributes,
String content, WarningSet warnings) throws SAXException {
content = content.trim();
if (element.equals("ignitionevent")) {
for (IgnitionEvent e : IgnitionEvent.values()) {
if (e.name().toLowerCase(Locale.ENGLISH).replaceAll("_", "").equals(content)) {
ignitionEvent = e;
break;
}
}
if (ignitionEvent == null) {
warnings.add(Warning.fromString("Unknown ignition event type '" + content + "', ignoring."));
}
} else if (element.equals("ignitiondelay")) {
try {
ignitionDelay = Double.parseDouble(content);
} catch (NumberFormatException nfe) {
warnings.add(Warning.fromString("Illegal ignition delay specified, ignoring."));
}
} else {
super.closeElement(element, attributes, content, warnings);
}
}
}