package net.sf.openrocket.preset.xml; import java.util.List; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; import net.sf.openrocket.preset.ComponentPreset; import net.sf.openrocket.preset.ComponentPresetFactory; import net.sf.openrocket.preset.InvalidComponentPresetException; import net.sf.openrocket.preset.TypedPropertyMap; /** * A NoseCone preset XML handler. */ @XmlRootElement(name = "NoseCone") @XmlAccessorType(XmlAccessType.FIELD) public class NoseConeDTO extends BaseComponentDTO { @XmlElement(name = "Shape") private ShapeDTO shape; @XmlElement(name = "OutsideDiameter") private AnnotatedLengthDTO outsideDiameter; @XmlElement(name = "ShoulderDiameter") private AnnotatedLengthDTO shoulderDiameter; @XmlElement(name = "ShoulderLength") private AnnotatedLengthDTO shoulderLength; @XmlElement(name = "Length") private AnnotatedLengthDTO length; @XmlElement(name = "Thickness") private AnnotatedLengthDTO thickness; /** * Default constructor. */ public NoseConeDTO() { } /** * Constructor that * * @param thePreset * * @throws net.sf.openrocket.util.BugException thrown if the expected body tube keys are not in the preset */ public NoseConeDTO(final ComponentPreset thePreset) { super(thePreset); setShape(ShapeDTO.asDTO(thePreset.get(ComponentPreset.SHAPE))); setOutsideDiameter(thePreset.get(ComponentPreset.AFT_OUTER_DIAMETER)); if ( thePreset.has(ComponentPreset.AFT_SHOULDER_DIAMETER)) { setShoulderDiameter(thePreset.get(ComponentPreset.AFT_SHOULDER_DIAMETER)); } if ( thePreset.has(ComponentPreset.AFT_SHOULDER_LENGTH)) { setShoulderLength(thePreset.get(ComponentPreset.AFT_SHOULDER_LENGTH)); } setLength(thePreset.get(ComponentPreset.LENGTH)); if ( thePreset.has(ComponentPreset.THICKNESS)) { setThickness(thePreset.get(ComponentPreset.THICKNESS)); } } public ShapeDTO getShape() { return shape; } public void setShape(final ShapeDTO theShape) { shape = theShape; } public double getOutsideDiameter() { return outsideDiameter.getValue(); } public void setOutsideDiameter(final AnnotatedLengthDTO theOutsideDiameter) { outsideDiameter = theOutsideDiameter; } public void setOutsideDiameter(final double theOutsideDiameter) { outsideDiameter = new AnnotatedLengthDTO(theOutsideDiameter); } public double getShoulderDiameter() { return shoulderDiameter.getValue(); } public void setShoulderDiameter(final AnnotatedLengthDTO theShoulderDiameter) { shoulderDiameter = theShoulderDiameter; } public void setShoulderDiameter(final double theShoulderDiameter) { shoulderDiameter = new AnnotatedLengthDTO(theShoulderDiameter); } public double getShoulderLength() { return shoulderLength.getValue(); } public void setShoulderLength(final AnnotatedLengthDTO theShoulderLength) { shoulderLength = theShoulderLength; } public void setShoulderLength(final double theShoulderLength) { shoulderLength = new AnnotatedLengthDTO(theShoulderLength); } public double getLength() { return length.getValue(); } public void setLength(final AnnotatedLengthDTO theLength) { length = theLength; } public void setLength(final double theLength) { length = new AnnotatedLengthDTO(theLength); } public double getThickness() { return thickness.getValue(); } public void setThickness(AnnotatedLengthDTO thickness) { this.thickness = thickness; } public void setThickness(double thickness) { this.thickness = new AnnotatedLengthDTO(thickness); } @Override public ComponentPreset asComponentPreset(List<MaterialDTO> materials) throws InvalidComponentPresetException { TypedPropertyMap props = new TypedPropertyMap(); addProps(props, materials); props.put(ComponentPreset.SHAPE, shape.getORShape()); props.put(ComponentPreset.AFT_OUTER_DIAMETER, this.getOutsideDiameter()); if ( shoulderLength != null ) { props.put(ComponentPreset.AFT_SHOULDER_LENGTH, this.getShoulderLength()); } if ( shoulderDiameter != null ) { props.put(ComponentPreset.AFT_SHOULDER_DIAMETER, this.getShoulderDiameter()); } props.put(ComponentPreset.LENGTH, this.getLength()); props.put(ComponentPreset.TYPE, ComponentPreset.Type.NOSE_CONE); if ( thickness != null ) { props.put(ComponentPreset.THICKNESS, this.getThickness()); } return ComponentPresetFactory.create(props); } }