From 559e19586bd3c56c803effc5d4c6eafe7e663ec0 Mon Sep 17 00:00:00 2001 From: rodinia814 Date: Mon, 9 Jan 2012 04:18:59 +0000 Subject: [PATCH] DGP - cleanup git-svn-id: https://openrocket.svn.sourceforge.net/svnroot/openrocket/trunk@321 180e2498-e6e9-4542-8430-84ac67f01cd8 --- .../rocksim/export/AbstractTransitionDTO.java | 67 ++++++++++++++++++- .../file/rocksim/export/BasePartDTO.java | 10 ++- .../file/rocksim/export/RocksimSaver.java | 16 +++++ .../file/rocksim/export/TubeCouplerDTO.java | 6 ++ 4 files changed, 97 insertions(+), 2 deletions(-) diff --git a/core/src/net/sf/openrocket/file/rocksim/export/AbstractTransitionDTO.java b/core/src/net/sf/openrocket/file/rocksim/export/AbstractTransitionDTO.java index ce5db241..10386bbe 100644 --- a/core/src/net/sf/openrocket/file/rocksim/export/AbstractTransitionDTO.java +++ b/core/src/net/sf/openrocket/file/rocksim/export/AbstractTransitionDTO.java @@ -2,16 +2,35 @@ package net.sf.openrocket.file.rocksim.export; import net.sf.openrocket.file.rocksim.importt.RocksimHandler; import net.sf.openrocket.file.rocksim.importt.RocksimNoseConeCode; +import net.sf.openrocket.rocketcomponent.BodyTube; +import net.sf.openrocket.rocketcomponent.Bulkhead; +import net.sf.openrocket.rocketcomponent.CenteringRing; +import net.sf.openrocket.rocketcomponent.EngineBlock; +import net.sf.openrocket.rocketcomponent.FinSet; +import net.sf.openrocket.rocketcomponent.FreeformFinSet; +import net.sf.openrocket.rocketcomponent.InnerTube; +import net.sf.openrocket.rocketcomponent.MassObject; +import net.sf.openrocket.rocketcomponent.Parachute; +import net.sf.openrocket.rocketcomponent.RocketComponent; import net.sf.openrocket.rocketcomponent.Transition; +import net.sf.openrocket.rocketcomponent.TubeCoupler; 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 java.util.ArrayList; +import java.util.List; /** + * A common ancestor class for nose cones and transitions. This class is responsible for adapting an OpenRocket + * Transition to a Rocksim Transition. */ @XmlAccessorType(XmlAccessType.FIELD) public class AbstractTransitionDTO extends BasePartDTO { + @XmlElement(name = "ShapeCode") private int shapeCode = 1; @XmlElement(name = "ConstructionType") @@ -21,10 +40,29 @@ public class AbstractTransitionDTO extends BasePartDTO { @XmlElement(name = "ShapeParameter") private double shapeParameter = 0d; + @XmlElementWrapper(name = "AttachedParts") + @XmlElementRefs({ + @XmlElementRef(name = "BodyTube", type = BodyTubeDTO.class), + @XmlElementRef(name = "BodyTube", type = InnerBodyTubeDTO.class), + @XmlElementRef(name = "FinSet", type = FinSetDTO.class), + @XmlElementRef(name = "CustomFinSet", type = CustomFinSetDTO.class), + @XmlElementRef(name = "Ring", type = CenteringRingDTO.class), + @XmlElementRef(name = "Streamer", type = StreamerDTO.class), + @XmlElementRef(name = "Parachute", type = ParachuteDTO.class), + @XmlElementRef(name = "MassObject", type = MassObjectDTO.class)}) + List attachedParts = new ArrayList(); + + /** + * Default constructor. + */ protected AbstractTransitionDTO() { - } + /** + * Conversion constructor. + * + * @param nc the OpenRocket component to convert + */ protected AbstractTransitionDTO(Transition nc) { super(nc); setConstructionType(nc.isFilled() ? 0 : 1); @@ -38,6 +76,33 @@ public class AbstractTransitionDTO extends BasePartDTO { setWallThickness(nc.getThickness() * RocksimHandler.ROCKSIM_TO_OPENROCKET_LENGTH); + List children = nc.getChildren(); + for (int i = 0; i < children.size(); i++) { + RocketComponent rocketComponents = children.get(i); + if (rocketComponents instanceof InnerTube) { + attachedParts.add(new InnerBodyTubeDTO((InnerTube) rocketComponents)); + } else if (rocketComponents instanceof BodyTube) { + attachedParts.add(new BodyTubeDTO((BodyTube) rocketComponents)); + } else if (rocketComponents instanceof Transition) { + attachedParts.add(new TransitionDTO((Transition) rocketComponents)); + } else if (rocketComponents instanceof EngineBlock) { + attachedParts.add(new EngineBlockDTO((EngineBlock) rocketComponents)); + } else if (rocketComponents instanceof TubeCoupler) { + attachedParts.add(new TubeCouplerDTO((TubeCoupler) rocketComponents)); + } else if (rocketComponents instanceof CenteringRing) { + attachedParts.add(new CenteringRingDTO((CenteringRing) rocketComponents)); + } else if (rocketComponents instanceof Bulkhead) { + attachedParts.add(new BulkheadDTO((Bulkhead) rocketComponents)); + } else if (rocketComponents instanceof Parachute) { + attachedParts.add(new ParachuteDTO((Parachute) rocketComponents)); + } else if (rocketComponents instanceof MassObject) { + attachedParts.add(new MassObjectDTO((MassObject) rocketComponents)); + } else if (rocketComponents instanceof FreeformFinSet) { + attachedParts.add(new CustomFinSetDTO((FreeformFinSet) rocketComponents)); + } else if (rocketComponents instanceof FinSet) { + attachedParts.add(new FinSetDTO((FinSet) rocketComponents)); + } + } } public int getShapeCode() { diff --git a/core/src/net/sf/openrocket/file/rocksim/export/BasePartDTO.java b/core/src/net/sf/openrocket/file/rocksim/export/BasePartDTO.java index a76eb45c..8c79575e 100644 --- a/core/src/net/sf/openrocket/file/rocksim/export/BasePartDTO.java +++ b/core/src/net/sf/openrocket/file/rocksim/export/BasePartDTO.java @@ -17,6 +17,7 @@ import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; /** + * The base class for all OpenRocket to Rocksim conversions. */ @XmlRootElement @XmlAccessorType(XmlAccessType.FIELD) @@ -53,9 +54,17 @@ public abstract class BasePartDTO { @XmlElement(name = "FinishCode") private int finishCode = 0; + /** + * Default constructor. + */ protected BasePartDTO() { } + /** + * Copy constructor of sorts, that performs all common conversions for components. + * + * @param ec + */ protected BasePartDTO(RocketComponent ec) { setCalcCG(ec.getCG().x * RocksimHandler.ROCKSIM_TO_OPENROCKET_LENGTH); setCalcMass(ec.getComponentMass() * RocksimHandler.ROCKSIM_TO_OPENROCKET_MASS); @@ -117,7 +126,6 @@ public abstract class BasePartDTO { material = material.substring(BaseHandler.ROCKSIM_MATERIAL_PREFIX.length()); } setMaterial(material); - } } diff --git a/core/src/net/sf/openrocket/file/rocksim/export/RocksimSaver.java b/core/src/net/sf/openrocket/file/rocksim/export/RocksimSaver.java index 39500625..6ead5639 100644 --- a/core/src/net/sf/openrocket/file/rocksim/export/RocksimSaver.java +++ b/core/src/net/sf/openrocket/file/rocksim/export/RocksimSaver.java @@ -22,11 +22,20 @@ import java.io.StringWriter; import java.util.List; /** + * This class is responsible for converting an OpenRocket design to a Rocksim design. */ public class RocksimSaver extends RocketSaver { + /** The logger. */ private static final LogHelper log = Application.getLogger(); + /** + * This method marshals an OpenRocketDocument (OR design) to Rocksim-compliant XML. + * + * @param doc the OR design + * + * @return Rocksim-compliant XML + */ public String marshalToRocksim(OpenRocketDocument doc) { try { @@ -60,6 +69,13 @@ public class RocksimSaver extends RocketSaver { return marshalToRocksim(doc).length(); } + /** + * Root conversion method. It iterates over all subcomponents. + * + * @param doc the OR design + * + * @return a corresponding Rocksim representation + */ private RocksimDocumentDTO toRocksimDocumentDTO(OpenRocketDocument doc) { RocksimDocumentDTO rsd = new RocksimDocumentDTO(); diff --git a/core/src/net/sf/openrocket/file/rocksim/export/TubeCouplerDTO.java b/core/src/net/sf/openrocket/file/rocksim/export/TubeCouplerDTO.java index 52d995e3..5293f198 100644 --- a/core/src/net/sf/openrocket/file/rocksim/export/TubeCouplerDTO.java +++ b/core/src/net/sf/openrocket/file/rocksim/export/TubeCouplerDTO.java @@ -7,11 +7,17 @@ import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlRootElement; /** + * Conversion DTO for a TubeCoupler. TubeCoupler's are represented as Rings in Rocksim. */ @XmlRootElement(name = "Ring") @XmlAccessorType(XmlAccessType.FIELD) public class TubeCouplerDTO extends CenteringRingDTO { + /** + * Constructor. + * + * @param tc an OR TubeCoupler + */ public TubeCouplerDTO(TubeCoupler tc) { super(tc); setUsageCode(UsageCode.TubeCoupler); -- 2.30.2