--- /dev/null
+package net.sf.openrocket.preset.xml;
+
+import java.util.ArrayList;
+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.XmlElementRef;
+import javax.xml.bind.annotation.XmlElementRefs;
+import javax.xml.bind.annotation.XmlElementWrapper;
+import javax.xml.bind.annotation.XmlRootElement;
+
+import net.sf.openrocket.material.Material;
+import net.sf.openrocket.preset.ComponentPreset;
+import net.sf.openrocket.preset.InvalidComponentPresetException;
+
+/**
+ * The real 'root' element in an XML document.
+ */
+@XmlRootElement(name = "OpenRocketComponent")
+@XmlAccessorType(XmlAccessType.FIELD)
+public class OpenRocketComponentDTO {
+
+ @XmlElement(name = "Version")
+ private final String version = "0.1";
+
+ @XmlElementWrapper(name = "Materials")
+ @XmlElement(name = "Material")
+ List<MaterialDTO> materials = new ArrayList<MaterialDTO>();
+
+ @XmlElementWrapper(name = "Components")
+ @XmlElementRefs({
+ @XmlElementRef(name = "BodyTubes", type = BodyTubeDTO.class),
+ @XmlElementRef(name = "TubeCouplers", type = TubeCouplerDTO.class),
+ @XmlElementRef(name = "NoseCones", type = NoseConeDTO.class),
+ @XmlElementRef(name = "Transitions", type = TransitionDTO.class),
+ @XmlElementRef(name = "BulkHeads", type = BulkHeadDTO.class),
+ @XmlElementRef(name = "CenteringRings", type = CenteringRingDTO.class),
+ @XmlElementRef(name = "EngineBlocks", type = EngineBlockDTO.class),
+ @XmlElementRef(name = "LaunchLugs", type = LaunchLugDTO.class),
+ @XmlElementRef(name = "Streamers", type = StreamerDTO.class),
+ @XmlElementRef(name = "Parachutes", type = ParachuteDTO.class)})
+ private List<BaseComponentDTO> components = new ArrayList<BaseComponentDTO>();
+
+ public OpenRocketComponentDTO() {
+ }
+
+ public OpenRocketComponentDTO(final List<MaterialDTO> theMaterials, final List<BaseComponentDTO> theComponents) {
+ materials = theMaterials;
+ components = theComponents;
+ }
+
+ public List<MaterialDTO> getMaterials() {
+ return materials;
+ }
+
+ public void addMaterial(final MaterialDTO theMaterial) {
+ materials.add(theMaterial);
+ }
+
+ public void setMaterials(final List<MaterialDTO> theMaterials) {
+ materials = theMaterials;
+ }
+
+ public List<BaseComponentDTO> getComponents() {
+ return components;
+ }
+
+ public void addComponent(final BaseComponentDTO theComponent) {
+ components.add(theComponent);
+ }
+
+ public void setComponents(final List<BaseComponentDTO> theComponents) {
+ components = theComponents;
+ }
+
+ public List<ComponentPreset> asComponentPresets() throws InvalidComponentPresetException {
+ List<ComponentPreset> result = new ArrayList<ComponentPreset>(components.size());
+ for (int i = 0; i < components.size(); i++) {
+ result.add(components.get(i).asComponentPreset(materials));
+ }
+ return result;
+ }
+
+ public List<Material> asMaterialList() {
+ List<Material> result = new ArrayList<Material>( materials.size() );
+ for( MaterialDTO material : materials ) {
+ result.add( material.asMaterial() );
+ }
+ return result;
+ }
+}