Merge commit '42b2e5ca519766e37ce6941ba4faecc9691cc403' into upstream
[debian/openrocket] / core / src / net / sf / openrocket / preset / xml / OpenRocketComponentDTO.java
diff --git a/core/src/net/sf/openrocket/preset/xml/OpenRocketComponentDTO.java b/core/src/net/sf/openrocket/preset/xml/OpenRocketComponentDTO.java
new file mode 100644 (file)
index 0000000..69da4e8
--- /dev/null
@@ -0,0 +1,93 @@
+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;
+    }
+}