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);
}
}