X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=core%2Fsrc%2Fnet%2Fsf%2Fopenrocket%2Fpreset%2Fxml%2FMaterialDTO.java;fp=core%2Fsrc%2Fnet%2Fsf%2Fopenrocket%2Fpreset%2Fxml%2FMaterialDTO.java;h=abcebda70fd0d4f436109d2c7a7542d744b57f41;hb=9349577cdfdff682b2aabd6daa24fdc3a7449b58;hp=0000000000000000000000000000000000000000;hpb=30ba0a882f0c061176ba14dbf86d3d6fad096c02;p=debian%2Fopenrocket diff --git a/core/src/net/sf/openrocket/preset/xml/MaterialDTO.java b/core/src/net/sf/openrocket/preset/xml/MaterialDTO.java new file mode 100644 index 00000000..abcebda7 --- /dev/null +++ b/core/src/net/sf/openrocket/preset/xml/MaterialDTO.java @@ -0,0 +1,114 @@ +package net.sf.openrocket.preset.xml; + +import javax.xml.bind.Marshaller; +import javax.xml.bind.Unmarshaller; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAttribute; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; + +import net.sf.openrocket.database.Databases; +import net.sf.openrocket.material.Material; +import net.sf.openrocket.util.Chars; + +/** + * XML handler for materials. + */ +@XmlRootElement(name = "Material") +@XmlAccessorType(XmlAccessType.FIELD) +public class MaterialDTO { + + @XmlElement(name = "Name") + private String name; + @XmlElement(name = "Density") + private double density; + @XmlElement(name = "Type") + private MaterialTypeDTO type; + @XmlAttribute(name = "UnitsOfMeasure") + private String uom; + + /** + * Default constructor. + */ + public MaterialDTO() { + } + + public MaterialDTO(final Material theMaterial) { + this(theMaterial.getName(), theMaterial.getDensity(), MaterialTypeDTO.asDTO(theMaterial.getType()), + theMaterial.getType().getUnitGroup().getDefaultUnit().toString()); + } + + public MaterialDTO(final String theName, final double theDensity, final MaterialTypeDTO theType, final String theUom) { + name = theName; + density = theDensity; + type = theType; + uom = theUom; + } + + public String getName() { + return name; + } + + public void setName(final String theName) { + name = theName; + } + + public double getDensity() { + return density; + } + + public void setDensity(final double theDensity) { + density = theDensity; + } + + public MaterialTypeDTO getType() { + return type; + } + + public void setType(final MaterialTypeDTO theType) { + type = theType; + } + + public String getUom() { + return uom; + } + + public void setUom(final String theUom) { + uom = theUom; + } + + Material asMaterial() { + return Databases.findMaterial(type.getORMaterialType(), name, density); + } + + + /** + * Special directive to the JAXB system. After the object is parsed from xml, + * we replace the '2' with Chars.SQUARED, and '3' with Chars.CUBED. Just the + * opposite transformation as doen in beforeMarshal. + * @param unmarshaller + * @param parent + */ + @SuppressWarnings("unused") + private void afterUnmarshal(Unmarshaller unmarshaller, Object parent) { + if (uom != null) { + uom = uom.replace('2', Chars.SQUARED); + uom = uom.replace('3', Chars.CUBED); + } + } + + /** + * Special directive to the JAXB system. Before the object is serialized into xml, + * we strip out the special unicode characters for cubed and squared so they appear + * as simple "3" and "2" chars. The reverse transformation is done in afterUnmarshal. + * @param marshaller + */ + @SuppressWarnings("unused") + private void beforeMarshal(Marshaller marshaller) { + if (uom != null) { + uom = uom.replace(Chars.SQUARED, '2'); + uom = uom.replace(Chars.CUBED, '3'); + } + } +}