Initial XML generating code for .orc format.
This commit is contained in:
parent
f300023ead
commit
4f82e9e2b4
@ -12,6 +12,7 @@ import net.sf.openrocket.preset.ComponentPresetFactory;
|
||||
import net.sf.openrocket.preset.InvalidComponentPresetException;
|
||||
import net.sf.openrocket.preset.TypedKey;
|
||||
import net.sf.openrocket.preset.TypedPropertyMap;
|
||||
import net.sf.openrocket.preset.xml.OpenRocketComponentSaver;
|
||||
import net.sf.openrocket.startup.Application;
|
||||
import net.sf.openrocket.unit.UnitGroup;
|
||||
import net.sf.openrocket.util.ArrayList;
|
||||
@ -25,7 +26,6 @@ import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
@ -50,7 +50,7 @@ public class RocksimComponentFileLoader {
|
||||
* is a column (cell) in the row. The string array is in sequential order as it appeared in the file.
|
||||
*/
|
||||
public static List<String[]> load(RocksimComponentFileType type) {
|
||||
return load(RocksimComponentFileLoader.class.getResourceAsStream("/performancerocketry/" + type.getDefaultFileName()));
|
||||
return load(RocksimComponentFileLoader.class.getResourceAsStream("/giantleaprocketry/" + type.getDefaultFileName()));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -571,7 +571,7 @@ public class RocksimComponentFileLoader {
|
||||
Collection<ComponentPreset> presetTC = new TubeCouplerLoader().load(materialMap);
|
||||
Collection<ComponentPreset> presetTR = new TransitionLoader().load(materialMap);
|
||||
Collection<ComponentPreset> presetEB = new EngineBlockLoader().load(materialMap);
|
||||
|
||||
/*
|
||||
for (Iterator<ComponentPreset> iterator = presetNC.iterator(); iterator.hasNext(); ) {
|
||||
ComponentPreset next = iterator.next();
|
||||
System.err.println(next);
|
||||
@ -600,6 +600,18 @@ public class RocksimComponentFileLoader {
|
||||
ComponentPreset next = iterator.next();
|
||||
System.err.println(next);
|
||||
}
|
||||
*/
|
||||
List<ComponentPreset> allPresets = new ArrayList<ComponentPreset>();
|
||||
allPresets.addAll(presetBC);
|
||||
allPresets.addAll(presetBH);
|
||||
allPresets.addAll(presetCR);
|
||||
allPresets.addAll(presetEB);
|
||||
allPresets.addAll(presetNC);
|
||||
allPresets.addAll(presetTC);
|
||||
allPresets.addAll(presetTR);
|
||||
|
||||
String xml = new OpenRocketComponentSaver().marshalToOpenRocketComponent(new ArrayList<Material>(materialMap.values()), allPresets);
|
||||
System.err.println(xml);
|
||||
}
|
||||
}
|
||||
|
||||
|
89
core/src/net/sf/openrocket/preset/xml/BaseComponentDTO.java
Normal file
89
core/src/net/sf/openrocket/preset/xml/BaseComponentDTO.java
Normal file
@ -0,0 +1,89 @@
|
||||
|
||||
package net.sf.openrocket.preset.xml;
|
||||
|
||||
import net.sf.openrocket.preset.ComponentPreset;
|
||||
|
||||
import javax.xml.bind.annotation.XmlAccessType;
|
||||
import javax.xml.bind.annotation.XmlAccessorType;
|
||||
import javax.xml.bind.annotation.XmlElement;
|
||||
|
||||
/**
|
||||
* Base class for the external representation of all component presets.
|
||||
*/
|
||||
@XmlAccessorType(XmlAccessType.FIELD)
|
||||
public abstract class BaseComponentDTO {
|
||||
|
||||
@XmlElement(name = "Manufacturer")
|
||||
private String manufacturer;
|
||||
@XmlElement(name = "PartNumber")
|
||||
private String partNo;
|
||||
@XmlElement(name = "Description")
|
||||
private String description;
|
||||
@XmlElement(name = "Material")
|
||||
private String material;
|
||||
@XmlElement(name = "Mass")
|
||||
private double mass;
|
||||
|
||||
/**
|
||||
* Default constructor.
|
||||
*/
|
||||
protected BaseComponentDTO() {
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*
|
||||
* @param preset the preset to use to pull data values out of
|
||||
*
|
||||
* @throws net.sf.openrocket.util.BugException thrown if the expected body tube keys are not in the preset
|
||||
*/
|
||||
protected BaseComponentDTO(final ComponentPreset preset) {
|
||||
setManufacturer(preset.getManufacturer().getSimpleName());
|
||||
setPartNo(preset.getPartNo());
|
||||
setDescription(preset.get(ComponentPreset.DESCRIPTION));
|
||||
setMaterial(preset.get(ComponentPreset.MATERIAL).getName());
|
||||
if (preset.has(ComponentPreset.MASS)) {
|
||||
setMass(preset.get(ComponentPreset.MASS));
|
||||
}
|
||||
}
|
||||
|
||||
public String getManufacturer() {
|
||||
return manufacturer;
|
||||
}
|
||||
|
||||
public void setManufacturer(final String theManufacturer) {
|
||||
manufacturer = theManufacturer;
|
||||
}
|
||||
|
||||
public String getPartNo() {
|
||||
return partNo;
|
||||
}
|
||||
|
||||
public void setPartNo(final String thePartNo) {
|
||||
partNo = thePartNo;
|
||||
}
|
||||
|
||||
public String getDescription() {
|
||||
return description;
|
||||
}
|
||||
|
||||
public void setDescription(final String theDescription) {
|
||||
description = theDescription;
|
||||
}
|
||||
|
||||
public String getMaterial() {
|
||||
return material;
|
||||
}
|
||||
|
||||
public void setMaterial(final String theMaterial) {
|
||||
material = theMaterial;
|
||||
}
|
||||
|
||||
public double getMass() {
|
||||
return mass;
|
||||
}
|
||||
|
||||
public void setMass(final double theMass) {
|
||||
mass = theMass;
|
||||
}
|
||||
}
|
68
core/src/net/sf/openrocket/preset/xml/BodyTubeDTO.java
Normal file
68
core/src/net/sf/openrocket/preset/xml/BodyTubeDTO.java
Normal file
@ -0,0 +1,68 @@
|
||||
|
||||
package net.sf.openrocket.preset.xml;
|
||||
|
||||
import net.sf.openrocket.preset.ComponentPreset;
|
||||
|
||||
import javax.xml.bind.annotation.XmlAccessType;
|
||||
import javax.xml.bind.annotation.XmlAccessorType;
|
||||
import javax.xml.bind.annotation.XmlElement;
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
|
||||
/**
|
||||
* Body tube preset XML handler.
|
||||
*/
|
||||
@XmlRootElement(name = "BodyTube")
|
||||
@XmlAccessorType(XmlAccessType.FIELD)
|
||||
public class BodyTubeDTO extends BaseComponentDTO {
|
||||
|
||||
@XmlElement(name = "InsideDiameter")
|
||||
private double insideDiameter;
|
||||
@XmlElement(name = "OutsideDiameter")
|
||||
private double outsideDiameter;
|
||||
@XmlElement(name = "Length")
|
||||
private double length;
|
||||
|
||||
/**
|
||||
* Default constructor.
|
||||
*/
|
||||
public BodyTubeDTO() {
|
||||
}
|
||||
|
||||
/**
|
||||
* Most-useful constructor that maps a BodyTube preset to a BodyTubeDTO.
|
||||
*
|
||||
* @param preset the preset
|
||||
*
|
||||
* @throws net.sf.openrocket.util.BugException thrown if the expected body tube keys are not in the preset
|
||||
*/
|
||||
public BodyTubeDTO(final ComponentPreset preset) {
|
||||
super(preset);
|
||||
setInsideDiameter(preset.get(ComponentPreset.INNER_DIAMETER));
|
||||
setOutsideDiameter(preset.get(ComponentPreset.OUTER_DIAMETER));
|
||||
setLength(preset.get(ComponentPreset.LENGTH));
|
||||
}
|
||||
|
||||
public double getInsideDiameter() {
|
||||
return insideDiameter;
|
||||
}
|
||||
|
||||
public void setInsideDiameter(final double theId) {
|
||||
insideDiameter = theId;
|
||||
}
|
||||
|
||||
public double getOutsideDiameter() {
|
||||
return outsideDiameter;
|
||||
}
|
||||
|
||||
public void setOutsideDiameter(final double theOd) {
|
||||
outsideDiameter = theOd;
|
||||
}
|
||||
|
||||
public double getLength() {
|
||||
return length;
|
||||
}
|
||||
|
||||
public void setLength(final double theLength) {
|
||||
length = theLength;
|
||||
}
|
||||
}
|
54
core/src/net/sf/openrocket/preset/xml/BulkHeadDTO.java
Normal file
54
core/src/net/sf/openrocket/preset/xml/BulkHeadDTO.java
Normal file
@ -0,0 +1,54 @@
|
||||
|
||||
package net.sf.openrocket.preset.xml;
|
||||
|
||||
import net.sf.openrocket.preset.ComponentPreset;
|
||||
|
||||
import javax.xml.bind.annotation.XmlAccessType;
|
||||
import javax.xml.bind.annotation.XmlAccessorType;
|
||||
import javax.xml.bind.annotation.XmlElement;
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
|
||||
/**
|
||||
* Bulkhead preset XML handler.
|
||||
*/
|
||||
@XmlRootElement(name = "BulkHead")
|
||||
@XmlAccessorType(XmlAccessType.FIELD)
|
||||
public class BulkHeadDTO extends BaseComponentDTO {
|
||||
|
||||
@XmlElement(name = "OutsideDiameter")
|
||||
private double outsideDiameter;
|
||||
@XmlElement(name = "Length")
|
||||
private double length;
|
||||
|
||||
public BulkHeadDTO() {
|
||||
}
|
||||
|
||||
/**
|
||||
* Most-useful constructor that maps a BulkHead preset to a BulkHeadDTO.
|
||||
*
|
||||
* @param thePreset the preset
|
||||
*
|
||||
* @throws net.sf.openrocket.util.BugException thrown if the expected bulk head keys are not in the preset
|
||||
*/
|
||||
public BulkHeadDTO(final ComponentPreset thePreset) {
|
||||
super(thePreset);
|
||||
setOutsideDiameter(thePreset.get(ComponentPreset.OUTER_DIAMETER));
|
||||
setLength(thePreset.get(ComponentPreset.LENGTH));
|
||||
}
|
||||
|
||||
public double getOutsideDiameter() {
|
||||
return outsideDiameter;
|
||||
}
|
||||
|
||||
public void setOutsideDiameter(final double theOutsideDiameter) {
|
||||
outsideDiameter = theOutsideDiameter;
|
||||
}
|
||||
|
||||
public double getLength() {
|
||||
return length;
|
||||
}
|
||||
|
||||
public void setLength(final double theLength) {
|
||||
length = theLength;
|
||||
}
|
||||
}
|
68
core/src/net/sf/openrocket/preset/xml/CenteringRingDTO.java
Normal file
68
core/src/net/sf/openrocket/preset/xml/CenteringRingDTO.java
Normal file
@ -0,0 +1,68 @@
|
||||
|
||||
package net.sf.openrocket.preset.xml;
|
||||
|
||||
import net.sf.openrocket.preset.ComponentPreset;
|
||||
|
||||
import javax.xml.bind.annotation.XmlAccessType;
|
||||
import javax.xml.bind.annotation.XmlAccessorType;
|
||||
import javax.xml.bind.annotation.XmlElement;
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
|
||||
/**
|
||||
* Centering ring preset XML handler.
|
||||
*/
|
||||
@XmlRootElement(name = "CenteringRing")
|
||||
@XmlAccessorType(XmlAccessType.FIELD)
|
||||
public class CenteringRingDTO extends BaseComponentDTO {
|
||||
|
||||
@XmlElement(name = "InsideDiameter")
|
||||
private double insideDiameter;
|
||||
@XmlElement(name = "OutsideDiameter")
|
||||
private double outsideDiameter;
|
||||
@XmlElement(name = "Length")
|
||||
private double length;
|
||||
|
||||
/**
|
||||
* Default constructor.
|
||||
*/
|
||||
public CenteringRingDTO() {
|
||||
}
|
||||
|
||||
/**
|
||||
* Most-useful constructor that maps a CenteringRing preset to a CenteringRingDTO.
|
||||
*
|
||||
* @param thePreset the preset
|
||||
*
|
||||
* @throws net.sf.openrocket.util.BugException thrown if the expected centering ring keys are not in the preset
|
||||
*/
|
||||
public CenteringRingDTO(final ComponentPreset thePreset) {
|
||||
super(thePreset);
|
||||
setInsideDiameter(thePreset.get(ComponentPreset.INNER_DIAMETER));
|
||||
setOutsideDiameter(thePreset.get(ComponentPreset.OUTER_DIAMETER));
|
||||
setLength(thePreset.get(ComponentPreset.LENGTH));
|
||||
}
|
||||
|
||||
public double getInsideDiameter() {
|
||||
return insideDiameter;
|
||||
}
|
||||
|
||||
public void setInsideDiameter(final double theInsideDiameter) {
|
||||
insideDiameter = theInsideDiameter;
|
||||
}
|
||||
|
||||
public double getOutsideDiameter() {
|
||||
return outsideDiameter;
|
||||
}
|
||||
|
||||
public void setOutsideDiameter(final double theOutsideDiameter) {
|
||||
outsideDiameter = theOutsideDiameter;
|
||||
}
|
||||
|
||||
public double getLength() {
|
||||
return length;
|
||||
}
|
||||
|
||||
public void setLength(final double theLength) {
|
||||
length = theLength;
|
||||
}
|
||||
}
|
34
core/src/net/sf/openrocket/preset/xml/EngineBlockDTO.java
Normal file
34
core/src/net/sf/openrocket/preset/xml/EngineBlockDTO.java
Normal file
@ -0,0 +1,34 @@
|
||||
|
||||
package net.sf.openrocket.preset.xml;
|
||||
|
||||
import net.sf.openrocket.preset.ComponentPreset;
|
||||
|
||||
import javax.xml.bind.annotation.XmlAccessType;
|
||||
import javax.xml.bind.annotation.XmlAccessorType;
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
|
||||
/**
|
||||
* Engine block preset XML handler.
|
||||
*/
|
||||
@XmlRootElement(name = "EngineBlock")
|
||||
@XmlAccessorType(XmlAccessType.FIELD)
|
||||
public class EngineBlockDTO extends CenteringRingDTO {
|
||||
|
||||
/**
|
||||
* Default constructor.
|
||||
*/
|
||||
public EngineBlockDTO() {
|
||||
}
|
||||
|
||||
/**
|
||||
* Most-useful constructor that maps a EngineBlock preset to a EngineBlockDTO.
|
||||
*
|
||||
* @param thePreset the preset
|
||||
*
|
||||
* @throws net.sf.openrocket.util.BugException thrown if the expected engine block keys are not in the preset
|
||||
*/
|
||||
public EngineBlockDTO(ComponentPreset thePreset) {
|
||||
super(thePreset);
|
||||
}
|
||||
|
||||
}
|
77
core/src/net/sf/openrocket/preset/xml/MaterialDTO.java
Normal file
77
core/src/net/sf/openrocket/preset/xml/MaterialDTO.java
Normal file
@ -0,0 +1,77 @@
|
||||
|
||||
package net.sf.openrocket.preset.xml;
|
||||
|
||||
import net.sf.openrocket.material.Material;
|
||||
|
||||
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;
|
||||
|
||||
/**
|
||||
* 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;
|
||||
}
|
||||
}
|
32
core/src/net/sf/openrocket/preset/xml/MaterialTypeDTO.java
Normal file
32
core/src/net/sf/openrocket/preset/xml/MaterialTypeDTO.java
Normal file
@ -0,0 +1,32 @@
|
||||
|
||||
package net.sf.openrocket.preset.xml;
|
||||
|
||||
import net.sf.openrocket.material.Material;
|
||||
|
||||
/**
|
||||
* A mirror enum of Material.Type, for the purposes of mapping to/from an XML representation.
|
||||
*/
|
||||
public enum MaterialTypeDTO {
|
||||
|
||||
LINE (Material.Type.LINE),
|
||||
SURFACE (Material.Type.SURFACE),
|
||||
BULK (Material.Type.BULK);
|
||||
|
||||
private Material.Type corollary;
|
||||
|
||||
private MaterialTypeDTO(final Material.Type theCorollary) {
|
||||
corollary = theCorollary;
|
||||
}
|
||||
|
||||
public static MaterialTypeDTO asDTO(Material.Type targetType) {
|
||||
MaterialTypeDTO[] values = values();
|
||||
for (int i = 0; i < values.length; i++) {
|
||||
MaterialTypeDTO value = values[i];
|
||||
if (value.corollary.equals(targetType)) {
|
||||
return value;
|
||||
}
|
||||
}
|
||||
return BULK; //default
|
||||
}
|
||||
|
||||
}
|
78
core/src/net/sf/openrocket/preset/xml/NoseConeDTO.java
Normal file
78
core/src/net/sf/openrocket/preset/xml/NoseConeDTO.java
Normal file
@ -0,0 +1,78 @@
|
||||
package net.sf.openrocket.preset.xml;
|
||||
|
||||
import net.sf.openrocket.preset.ComponentPreset;
|
||||
|
||||
import javax.xml.bind.annotation.XmlAccessType;
|
||||
import javax.xml.bind.annotation.XmlAccessorType;
|
||||
import javax.xml.bind.annotation.XmlElement;
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
|
||||
/**
|
||||
* A NoseCone preset XML handler.
|
||||
*/
|
||||
@XmlRootElement(name = "NoseCone")
|
||||
@XmlAccessorType(XmlAccessType.FIELD)
|
||||
public class NoseConeDTO extends BaseComponentDTO {
|
||||
|
||||
@XmlElement(name = "Shape")
|
||||
private ShapeDTO shape;
|
||||
@XmlElement(name = "OutsideDiameter")
|
||||
private double outsideDiameter;
|
||||
@XmlElement(name = "ShoulderDiameter")
|
||||
private double shoulderDiameter;
|
||||
@XmlElement(name = "Length")
|
||||
private double length;
|
||||
|
||||
/**
|
||||
* Default constructor.
|
||||
*/
|
||||
public NoseConeDTO() {
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor that
|
||||
*
|
||||
* @param thePreset
|
||||
*
|
||||
* @throws net.sf.openrocket.util.BugException thrown if the expected body tube keys are not in the preset
|
||||
*/
|
||||
public NoseConeDTO(final ComponentPreset thePreset) {
|
||||
super(thePreset);
|
||||
setShape(ShapeDTO.asDTO(thePreset.get(ComponentPreset.SHAPE)));
|
||||
setOutsideDiameter(thePreset.get(ComponentPreset.AFT_OUTER_DIAMETER));
|
||||
setShoulderDiameter(thePreset.get(ComponentPreset.AFT_SHOULDER_DIAMETER));
|
||||
setLength(thePreset.get(ComponentPreset.LENGTH));
|
||||
}
|
||||
|
||||
public ShapeDTO getShape() {
|
||||
return shape;
|
||||
}
|
||||
|
||||
public void setShape(final ShapeDTO theShape) {
|
||||
shape = theShape;
|
||||
}
|
||||
|
||||
public double getOutsideDiameter() {
|
||||
return outsideDiameter;
|
||||
}
|
||||
|
||||
public void setOutsideDiameter(final double theOutsideDiameter) {
|
||||
outsideDiameter = theOutsideDiameter;
|
||||
}
|
||||
|
||||
public double getShoulderDiameter() {
|
||||
return shoulderDiameter;
|
||||
}
|
||||
|
||||
public void setShoulderDiameter(final double theShoulderDiameter) {
|
||||
shoulderDiameter = theShoulderDiameter;
|
||||
}
|
||||
|
||||
public double getLength() {
|
||||
return length;
|
||||
}
|
||||
|
||||
public void setLength(final double theLength) {
|
||||
length = theLength;
|
||||
}
|
||||
}
|
@ -0,0 +1,69 @@
|
||||
package net.sf.openrocket.preset.xml;
|
||||
|
||||
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 java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 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)})
|
||||
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;
|
||||
}
|
||||
}
|
@ -0,0 +1,121 @@
|
||||
package net.sf.openrocket.preset.xml;
|
||||
|
||||
import net.sf.openrocket.logging.LogHelper;
|
||||
import net.sf.openrocket.material.Material;
|
||||
import net.sf.openrocket.preset.ComponentPreset;
|
||||
import net.sf.openrocket.startup.Application;
|
||||
|
||||
import javax.xml.bind.JAXBContext;
|
||||
import javax.xml.bind.Marshaller;
|
||||
import java.io.BufferedWriter;
|
||||
import java.io.IOException;
|
||||
import java.io.OutputStream;
|
||||
import java.io.OutputStreamWriter;
|
||||
import java.io.StringWriter;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* The active manager class that is the entry point for writing *.orc files.
|
||||
*/
|
||||
public class OpenRocketComponentSaver {
|
||||
|
||||
/**
|
||||
* The logger.
|
||||
*/
|
||||
private static final LogHelper log = Application.getLogger();
|
||||
|
||||
/**
|
||||
* This method marshals an OpenRocketDocument (OR design) to Rocksim-compliant XML.
|
||||
*
|
||||
* @param theMaterialList the list of materials to be included
|
||||
* @param thePresetList the list of presets to be included
|
||||
*
|
||||
* @return ORC-compliant XML
|
||||
*/
|
||||
public String marshalToOpenRocketComponent(List<Material> theMaterialList, List<ComponentPreset> thePresetList) {
|
||||
|
||||
try {
|
||||
JAXBContext binder = JAXBContext.newInstance(OpenRocketComponentDTO.class);
|
||||
Marshaller marshaller = binder.createMarshaller();
|
||||
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
|
||||
StringWriter sw = new StringWriter();
|
||||
|
||||
marshaller.marshal(toOpenRocketComponentDTO(theMaterialList, thePresetList), sw);
|
||||
return sw.toString();
|
||||
}
|
||||
catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Write an XML representation of a list of presets.
|
||||
*
|
||||
* @param dest the stream to write the data to
|
||||
* @param theMaterialList the list of materials to be included
|
||||
* @param thePresetList the list of presets to be included
|
||||
*
|
||||
* @throws IOException thrown if the stream could not be written
|
||||
*/
|
||||
public void save(OutputStream dest, List<Material> theMaterialList, List<ComponentPreset> thePresetList) throws IOException {
|
||||
log.info("Saving .orc file");
|
||||
|
||||
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(dest, "UTF-8"));
|
||||
writer.write(marshalToOpenRocketComponent(theMaterialList, thePresetList));
|
||||
writer.flush();
|
||||
writer.close();
|
||||
}
|
||||
|
||||
/**
|
||||
* Root conversion method. It iterates over all subcomponents.
|
||||
*
|
||||
* @return a corresponding ORC representation
|
||||
*/
|
||||
private OpenRocketComponentDTO toOpenRocketComponentDTO(List<Material> theMaterialList, List<ComponentPreset> thePresetList) {
|
||||
OpenRocketComponentDTO rsd = new OpenRocketComponentDTO();
|
||||
|
||||
if (theMaterialList != null) {
|
||||
for (Material material : theMaterialList) {
|
||||
rsd.addMaterial(new MaterialDTO(material));
|
||||
}
|
||||
}
|
||||
|
||||
if (thePresetList != null) {
|
||||
for (ComponentPreset componentPreset : thePresetList) {
|
||||
rsd.addComponent(toComponentDTO(componentPreset));
|
||||
}
|
||||
}
|
||||
return rsd;
|
||||
}
|
||||
|
||||
/**
|
||||
* Factory method that maps a preset to the corresponding DTO handler.
|
||||
*
|
||||
* @param thePreset the preset for which a handler will be found
|
||||
*
|
||||
* @return a subclass of BaseComponentDTO that can be used for marshalling/unmarshalling a preset; null if not found
|
||||
* for the preset type
|
||||
*/
|
||||
private static BaseComponentDTO toComponentDTO(ComponentPreset thePreset) {
|
||||
switch (thePreset.getType()) {
|
||||
case BODY_TUBE:
|
||||
return new BodyTubeDTO(thePreset);
|
||||
case TUBE_COUPLER:
|
||||
return new TubeCouplerDTO(thePreset);
|
||||
case NOSE_CONE:
|
||||
return new NoseConeDTO(thePreset);
|
||||
case TRANSITION:
|
||||
return new TransitionDTO(thePreset);
|
||||
case BULK_HEAD:
|
||||
return new BulkHeadDTO(thePreset);
|
||||
case CENTERING_RING:
|
||||
return new CenteringRingDTO(thePreset);
|
||||
case ENGINE_BLOCK:
|
||||
return new EngineBlockDTO(thePreset);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
37
core/src/net/sf/openrocket/preset/xml/ShapeDTO.java
Normal file
37
core/src/net/sf/openrocket/preset/xml/ShapeDTO.java
Normal file
@ -0,0 +1,37 @@
|
||||
|
||||
package net.sf.openrocket.preset.xml;
|
||||
|
||||
import net.sf.openrocket.rocketcomponent.Transition;
|
||||
|
||||
import javax.xml.bind.annotation.XmlEnum;
|
||||
|
||||
/**
|
||||
* A mirror class to Transition.Shape to adapt that class to/from XML.
|
||||
*/
|
||||
@XmlEnum(String.class)
|
||||
public enum ShapeDTO {
|
||||
|
||||
CONICAL (Transition.Shape.CONICAL),
|
||||
OGIVE (Transition.Shape.OGIVE),
|
||||
ELLIPSOID (Transition.Shape.ELLIPSOID),
|
||||
POWER (Transition.Shape.POWER),
|
||||
PARABOLIC (Transition.Shape.PARABOLIC),
|
||||
HAACK (Transition.Shape.HAACK);
|
||||
|
||||
private Transition.Shape corollary;
|
||||
|
||||
private ShapeDTO(Transition.Shape theShape) {
|
||||
corollary = theShape;
|
||||
}
|
||||
|
||||
public static ShapeDTO asDTO(Transition.Shape targetShape) {
|
||||
ShapeDTO[] values = values();
|
||||
for (int i = 0; i < values.length; i++) {
|
||||
ShapeDTO value = values[i];
|
||||
if (value.corollary.equals(targetShape)) {
|
||||
return value;
|
||||
}
|
||||
}
|
||||
return ELLIPSOID; //default
|
||||
}
|
||||
}
|
127
core/src/net/sf/openrocket/preset/xml/TransitionDTO.java
Normal file
127
core/src/net/sf/openrocket/preset/xml/TransitionDTO.java
Normal file
@ -0,0 +1,127 @@
|
||||
|
||||
package net.sf.openrocket.preset.xml;
|
||||
|
||||
import net.sf.openrocket.preset.ComponentPreset;
|
||||
|
||||
import javax.xml.bind.annotation.XmlAccessType;
|
||||
import javax.xml.bind.annotation.XmlAccessorType;
|
||||
import javax.xml.bind.annotation.XmlElement;
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
|
||||
/**
|
||||
* 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 double foreOutsideDiameter;
|
||||
@XmlElement(name = "ForeShoulderDiameter")
|
||||
private double foreShoulderDiameter;
|
||||
@XmlElement(name = "ForeShoulderLength")
|
||||
private double foreShoulderLength;
|
||||
|
||||
@XmlElement(name = "AftOutsideDiameter")
|
||||
private double aftOutsideDiameter;
|
||||
@XmlElement(name = "AftShoulderDiameter")
|
||||
private double aftShoulderDiameter;
|
||||
@XmlElement(name = "AftShoulderLength")
|
||||
private double aftShoulderLength;
|
||||
|
||||
@XmlElement(name = "Length")
|
||||
private double length;
|
||||
|
||||
|
||||
/**
|
||||
* 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));
|
||||
}
|
||||
|
||||
public ShapeDTO getShape() {
|
||||
return shape;
|
||||
}
|
||||
|
||||
public void setShape(final ShapeDTO theShape) {
|
||||
shape = theShape;
|
||||
}
|
||||
|
||||
public double getForeOutsideDiameter() {
|
||||
return foreOutsideDiameter;
|
||||
}
|
||||
|
||||
public void setForeOutsideDiameter(final double theForeOutsideDiameter) {
|
||||
foreOutsideDiameter = theForeOutsideDiameter;
|
||||
}
|
||||
|
||||
public double getForeShoulderDiameter() {
|
||||
return foreShoulderDiameter;
|
||||
}
|
||||
|
||||
public void setForeShoulderDiameter(final double theForeShoulderDiameter) {
|
||||
foreShoulderDiameter = theForeShoulderDiameter;
|
||||
}
|
||||
|
||||
public double getForeShoulderLength() {
|
||||
return foreShoulderLength;
|
||||
}
|
||||
|
||||
public void setForeShoulderLength(final double theForeShoulderLength) {
|
||||
foreShoulderLength = theForeShoulderLength;
|
||||
}
|
||||
|
||||
public double getAftOutsideDiameter() {
|
||||
return aftOutsideDiameter;
|
||||
}
|
||||
|
||||
public void setAftOutsideDiameter(final double theAftOutsideDiameter) {
|
||||
aftOutsideDiameter = theAftOutsideDiameter;
|
||||
}
|
||||
|
||||
public double getAftShoulderDiameter() {
|
||||
return aftShoulderDiameter;
|
||||
}
|
||||
|
||||
public void setAftShoulderDiameter(final double theAftShoulderDiameter) {
|
||||
aftShoulderDiameter = theAftShoulderDiameter;
|
||||
}
|
||||
|
||||
public double getAftShoulderLength() {
|
||||
return aftShoulderLength;
|
||||
}
|
||||
|
||||
public void setAftShoulderLength(final double theAftShoulderLength) {
|
||||
aftShoulderLength = theAftShoulderLength;
|
||||
}
|
||||
|
||||
public double getLength() {
|
||||
return length;
|
||||
}
|
||||
|
||||
public void setLength(final double theLength) {
|
||||
length = theLength;
|
||||
}
|
||||
}
|
33
core/src/net/sf/openrocket/preset/xml/TubeCouplerDTO.java
Normal file
33
core/src/net/sf/openrocket/preset/xml/TubeCouplerDTO.java
Normal file
@ -0,0 +1,33 @@
|
||||
|
||||
package net.sf.openrocket.preset.xml;
|
||||
|
||||
import net.sf.openrocket.preset.ComponentPreset;
|
||||
|
||||
import javax.xml.bind.annotation.XmlAccessType;
|
||||
import javax.xml.bind.annotation.XmlAccessorType;
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
|
||||
/**
|
||||
* Tube coupler preset XML handler.
|
||||
*/
|
||||
@XmlRootElement(name = "TubeCoupler")
|
||||
@XmlAccessorType(XmlAccessType.FIELD)
|
||||
public class TubeCouplerDTO extends BodyTubeDTO {
|
||||
|
||||
/**
|
||||
* Default constructor.
|
||||
*/
|
||||
public TubeCouplerDTO() {
|
||||
}
|
||||
|
||||
/**
|
||||
* Most-useful constructor that maps a TubeCoupler preset to a TubeCouplerDTO.
|
||||
*
|
||||
* @param thePreset the preset
|
||||
*
|
||||
* @throws net.sf.openrocket.util.BugException thrown if the expected tube coupler keys are not in the preset
|
||||
*/
|
||||
public TubeCouplerDTO(ComponentPreset thePreset) {
|
||||
super(thePreset);
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user