DGP - cleanup

This commit is contained in:
Doug Pedrick 2012-01-09 04:18:59 +00:00
parent 293efd20c8
commit d66a379c05
4 changed files with 97 additions and 2 deletions

View File

@ -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;
protected AbstractTransitionDTO() {
@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<BasePartDTO> attachedParts = new ArrayList<BasePartDTO>();
/**
* 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<RocketComponent> 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() {

View File

@ -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);
}
}

View File

@ -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();

View File

@ -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);