--- /dev/null
+
+package net.sf.openrocket.preset.xml;
+
+import net.sf.openrocket.preset.ComponentPreset;
+import net.sf.openrocket.preset.ComponentPresetFactory;
+import net.sf.openrocket.preset.InvalidComponentPresetException;
+import net.sf.openrocket.preset.TypedPropertyMap;
+
+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 java.util.List;
+
+/**
+ * Transition preset XML handler.
+ */
+@XmlRootElement(name = "Transition")
+@XmlAccessorType(XmlAccessType.FIELD)
+public class TransitionDTO extends BaseComponentDTO {
+
+ @XmlElement(name = "Shape")
+ private ShapeDTO shape;
+
+ @XmlElement(name = "ForeOutsideDiameter")
+ private AnnotatedLengthDTO foreOutsideDiameter;
+ @XmlElement(name = "ForeShoulderDiameter")
+ private AnnotatedLengthDTO foreShoulderDiameter;
+ @XmlElement(name = "ForeShoulderLength")
+ private AnnotatedLengthDTO foreShoulderLength;
+
+ @XmlElement(name = "AftOutsideDiameter")
+ private AnnotatedLengthDTO aftOutsideDiameter;
+ @XmlElement(name = "AftShoulderDiameter")
+ private AnnotatedLengthDTO aftShoulderDiameter;
+ @XmlElement(name = "AftShoulderLength")
+ private AnnotatedLengthDTO aftShoulderLength;
+
+ @XmlElement(name = "Length")
+ private AnnotatedLengthDTO length;
+
+ @XmlElement(name = "Thickness")
+ private AnnotatedLengthDTO thickness;
+
+
+ /**
+ * Default constructor.
+ */
+ public TransitionDTO() {
+ }
+
+ /**
+ * Most-useful constructor that maps a Transition preset to a TransitionDTO.
+ *
+ * @param thePreset the preset
+ *
+ * @throws net.sf.openrocket.util.BugException thrown if the expected transition keys are not in the preset
+ */
+ public TransitionDTO(final ComponentPreset thePreset) {
+ super(thePreset);
+ setShape(ShapeDTO.asDTO(thePreset.get(ComponentPreset.SHAPE)));
+ setForeOutsideDiameter(thePreset.get(ComponentPreset.FORE_OUTER_DIAMETER));
+ setForeShoulderDiameter(thePreset.get(ComponentPreset.FORE_SHOULDER_DIAMETER));
+ setForeShoulderLength(thePreset.get(ComponentPreset.FORE_SHOULDER_LENGTH));
+ setAftOutsideDiameter(thePreset.get(ComponentPreset.AFT_OUTER_DIAMETER));
+ setAftShoulderDiameter(thePreset.get(ComponentPreset.AFT_SHOULDER_DIAMETER));
+ setAftShoulderLength(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 getForeOutsideDiameter() {
+ return foreOutsideDiameter.getValue();
+ }
+
+ public void setForeOutsideDiameter(final AnnotatedLengthDTO theForeOutsideDiameter) {
+ foreOutsideDiameter = theForeOutsideDiameter;
+ }
+
+ public void setForeOutsideDiameter(final double theForeOutsideDiameter) {
+ foreOutsideDiameter = new AnnotatedLengthDTO(theForeOutsideDiameter);
+ }
+
+ public double getForeShoulderDiameter() {
+ return foreShoulderDiameter.getValue();
+ }
+
+ public void setForeShoulderDiameter(final AnnotatedLengthDTO theForeShoulderDiameter) {
+ foreShoulderDiameter = theForeShoulderDiameter;
+ }
+
+ public void setForeShoulderDiameter(final double theForeShoulderDiameter) {
+ foreShoulderDiameter = new AnnotatedLengthDTO(theForeShoulderDiameter);
+ }
+
+ public double getForeShoulderLength() {
+ return foreShoulderLength.getValue();
+ }
+
+ public void setForeShoulderLength(final AnnotatedLengthDTO theForeShoulderLength) {
+ foreShoulderLength = theForeShoulderLength;
+ }
+
+ public void setForeShoulderLength(final double theForeShoulderLength) {
+ foreShoulderLength = new AnnotatedLengthDTO(theForeShoulderLength);
+ }
+
+ public double getAftOutsideDiameter() {
+ return aftOutsideDiameter.getValue();
+ }
+
+ public void setAftOutsideDiameter(final AnnotatedLengthDTO theAftOutsideDiameter) {
+ aftOutsideDiameter = theAftOutsideDiameter;
+ }
+
+ public void setAftOutsideDiameter(final double theAftOutsideDiameter) {
+ aftOutsideDiameter = new AnnotatedLengthDTO(theAftOutsideDiameter);
+ }
+
+ public double getAftShoulderDiameter() {
+ return aftShoulderDiameter.getValue();
+ }
+
+ public void setAftShoulderDiameter(final AnnotatedLengthDTO theAftShoulderDiameter) {
+ aftShoulderDiameter = theAftShoulderDiameter;
+ }
+
+ public void setAftShoulderDiameter(final double theAftShoulderDiameter) {
+ aftShoulderDiameter = new AnnotatedLengthDTO(theAftShoulderDiameter);
+ }
+
+ public double getAftShoulderLength() {
+ return aftShoulderLength.getValue();
+ }
+
+ public void setAftShoulderLength(final AnnotatedLengthDTO theAftShoulderLength) {
+ aftShoulderLength = theAftShoulderLength;
+ }
+
+ public void setAftShoulderLength(final double theAftShoulderLength) {
+ aftShoulderLength = new AnnotatedLengthDTO(theAftShoulderLength);
+ }
+
+ 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.FORE_OUTER_DIAMETER, this.getForeOutsideDiameter());
+ props.put(ComponentPreset.FORE_SHOULDER_DIAMETER, this.getForeShoulderDiameter());
+ props.put(ComponentPreset.FORE_SHOULDER_LENGTH, this.getForeShoulderLength());
+ props.put(ComponentPreset.AFT_OUTER_DIAMETER, this.getAftOutsideDiameter());
+ props.put(ComponentPreset.AFT_SHOULDER_DIAMETER, this.getAftShoulderDiameter());
+ props.put(ComponentPreset.AFT_SHOULDER_LENGTH, this.getAftShoulderLength());
+ props.put(ComponentPreset.LENGTH, this.getLength());
+ props.put(ComponentPreset.TYPE, ComponentPreset.Type.TRANSITION);
+ if ( thickness != null ) {
+ props.put(ComponentPreset.THICKNESS, this.getThickness());
+ }
+
+ return ComponentPresetFactory.create(props);
+ }
+}