/*
* AttachedPartsHandler.java
*/
package net.sf.openrocket.file.rocksim.importt;
import net.sf.openrocket.aerodynamics.WarningSet;
import net.sf.openrocket.file.DocumentLoadingContext;
import net.sf.openrocket.file.rocksim.RocksimCommonConstants;
import net.sf.openrocket.file.simplesax.AbstractElementHandler;
import net.sf.openrocket.file.simplesax.ElementHandler;
import net.sf.openrocket.rocketcomponent.RocketComponent;
import java.util.HashMap;
/**
* A SAX handler for the Rocksim AttachedParts XML type.
*/
class AttachedPartsHandler extends AbstractElementHandler {
private final DocumentLoadingContext context;
/** The parent component. */
private final RocketComponent component;
/**
* Constructor.
*
* @param c the parent
*
* @throws IllegalArgumentException thrown if <code>c</code> is null
*/
public AttachedPartsHandler(DocumentLoadingContext context, RocketComponent c) throws IllegalArgumentException {
if (c == null) {
throw new IllegalArgumentException("The parent component of any attached part may not be null.");
}
this.context = context;
this.component = c;
}
DocumentLoadingContext getContext() {
return context;
}
RocketComponent getComponent() {
return component;
}
@Override
public ElementHandler openElement(String element, HashMap<String, String> attributes, WarningSet warnings) {
if (RocksimCommonConstants.FIN_SET.equals(element)) {
return new FinSetHandler(context, component);
}
if (RocksimCommonConstants.CUSTOM_FIN_SET.equals(element)) {
return new FinSetHandler(context, component);
}
if (RocksimCommonConstants.LAUNCH_LUG.equals(element)) {
return new LaunchLugHandler(context, component, warnings);
}
if (RocksimCommonConstants.PARACHUTE.equals(element)) {
return new ParachuteHandler(context, component, warnings);
}
if (RocksimCommonConstants.STREAMER.equals(element)) {
return new StreamerHandler(context, component, warnings);
}
if (RocksimCommonConstants.MASS_OBJECT.equals(element)) {
return new MassObjectHandler(context, component, warnings);
}
if (RocksimCommonConstants.RING.equals(element)) {
return new RingHandler(context, component, warnings);
}
if (RocksimCommonConstants.BODY_TUBE.equals(element)) {
return new InnerBodyTubeHandler(context, component, warnings);
}
if (RocksimCommonConstants.TRANSITION.equals(element)) {
return new TransitionHandler(context, component, warnings);
}
if (RocksimCommonConstants.SUBASSEMBLY.equals(element)) {
return new SubAssemblyHandler(context, component);
}
if (RocksimCommonConstants.TUBE_FIN_SET.equals(element)) {
return new TubeFinSetHandler(context, component, warnings);
}
if (RocksimCommonConstants.RING_TAIL.equals(element)) {
warnings.add("Ring tails are not currently supported. Ignoring.");
}
if (RocksimCommonConstants.EXTERNAL_POD.equals(element)) {
warnings.add("Pods are not currently supported. Ignoring.");
}
return null;
}
}