X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=core%2Fsrc%2Fnet%2Fsf%2Fopenrocket%2Ffile%2Frocksim%2Fimportt%2FBaseHandler.java;h=b87664a881f4e47bfdb6d8da96d163b702a52adb;hb=4da92a4e994992a78d62a7ca21c88d6c41292d6f;hp=59fb05a3da739dbd1d7ec4086742d54998ef3657;hpb=8654c7d5a9d56274a296500d40c7f74229cdf6f1;p=debian%2Fopenrocket diff --git a/core/src/net/sf/openrocket/file/rocksim/importt/BaseHandler.java b/core/src/net/sf/openrocket/file/rocksim/importt/BaseHandler.java index 59fb05a3..b87664a8 100644 --- a/core/src/net/sf/openrocket/file/rocksim/importt/BaseHandler.java +++ b/core/src/net/sf/openrocket/file/rocksim/importt/BaseHandler.java @@ -4,7 +4,9 @@ package net.sf.openrocket.file.rocksim.importt; import net.sf.openrocket.aerodynamics.WarningSet; -import net.sf.openrocket.file.simplesax.ElementHandler; +import net.sf.openrocket.file.rocksim.RocksimCommonConstants; +import net.sf.openrocket.file.rocksim.RocksimDensityType; +import net.sf.openrocket.file.simplesax.AbstractElementHandler; import net.sf.openrocket.material.Material; import net.sf.openrocket.rocketcomponent.RocketComponent; import org.xml.sax.SAXException; @@ -16,9 +18,9 @@ import java.util.HashMap; /** * An abstract base class that handles common parsing. All Rocksim component handlers are subclassed from here. * - * @param the specific RocketComponent subtype for which the concrete handler can create + * @param the specific RocketComponent subtype for which the concrete handler can create */ -public abstract class BaseHandler extends ElementHandler { +public abstract class BaseHandler extends AbstractElementHandler { /** * Prepend rocksim materials. @@ -49,10 +51,11 @@ public abstract class BaseHandler extends ElementHand /** * The SAX method called when the closing element tag is reached. * - * @param element the element name. - * @param attributes attributes of the element. - * @param content the textual content of the element. - * @param warnings the warning set to store warnings in. + * @param element the element name. + * @param attributes attributes of the element. + * @param content the textual content of the element. + * @param warnings the warning set to store warnings in. + * * @throws SAXException */ @@ -61,23 +64,23 @@ public abstract class BaseHandler extends ElementHand throws SAXException { final C component = getComponent(); try { - if ("Name".equals(element)) { + if (RocksimCommonConstants.NAME.equals(element)) { component.setName(content); } - if ("KnownMass".equals(element)) { - mass = Math.max(0d, Double.parseDouble(content) / RocksimHandler.ROCKSIM_TO_OPENROCKET_MASS); + if (RocksimCommonConstants.KNOWN_MASS.equals(element)) { + mass = Math.max(0d, Double.parseDouble(content) / RocksimCommonConstants.ROCKSIM_TO_OPENROCKET_MASS); } - if ("Density".equals(element)) { - density = Math.max(0d, Double.parseDouble(content) ); + if (RocksimCommonConstants.DENSITY.equals(element)) { + density = Math.max(0d, Double.parseDouble(content)); } - if ("KnownCG".equals(element)) { - cg = Math.max(0d, Double.parseDouble(content) / RocksimHandler.ROCKSIM_TO_OPENROCKET_LENGTH); + if (RocksimCommonConstants.KNOWN_CG.equals(element)) { + cg = Math.max(0d, Double.parseDouble(content) / RocksimCommonConstants.ROCKSIM_TO_OPENROCKET_LENGTH); } - if ("UseKnownCG".equals(element)) { //Rocksim sets UseKnownCG to true to control the override of both cg and mass + if (RocksimCommonConstants.USE_KNOWN_CG.equals(element)) { //Rocksim sets UseKnownCG to true to control the override of both cg and mass boolean override = "1".equals(content); setOverride(component, override, mass, cg); } - if ("DensityType".equals(element)) { + if (RocksimCommonConstants.DENSITY_TYPE.equals(element)) { densityType = RocksimDensityType.fromCode(Integer.parseInt(content)); } } @@ -103,13 +106,14 @@ public abstract class BaseHandler extends ElementHand /** * Compute the density. Rocksim does strange things with densities. For some streamer material it's in cubic, * rather than square, units. In those cases it needs to be converted to an appropriate SURFACE material density. - * Some G10 fiberglass materials are in cubic units, other G10 fiberglass is in square units. And due to a - * Rocksim bug, some densities are 0 when they clearly should not be. - * + * Some G10 fiberglass materials are in cubic units, other G10 fiberglass is in square units. And due to a Rocksim + * bug, some densities are 0 when they clearly should not be. + *

* This may be overridden for specific component density computations. * * @param type the rocksim density * @param rawDensity the density as specified in the Rocksim design file + * * @return a value in OpenRocket SURFACE density units */ protected double computeDensity(RocksimDensityType type, double rawDensity) { @@ -117,14 +121,14 @@ public abstract class BaseHandler extends ElementHand } /** - * If the Rocksim component does not override the mass, then create a Material based upon the density defined - * for that component. This *should* result in a consistent representation of Cg between Rocksim and OpenRocket. + * If the Rocksim component does not override the mass, then create a Material based upon the density defined for + * that component. This *should* result in a consistent representation of Cg between Rocksim and OpenRocket. * * @param component the component * @param type the type of the material * @param density the density in g/cm^3 - * @param definedMaterial the material that is currently defined on the component; used only to get the name - * as it appears in Rocksim + * @param definedMaterial the material that is currently defined on the component; used only to get the name as it + * appears in Rocksim */ public static void updateComponentMaterial(RocketComponent component, String definedMaterial, Material.Type type, double density) { @@ -137,10 +141,10 @@ public abstract class BaseHandler extends ElementHand /** * Override the mass and Cg of the component. * - * @param component the component - * @param override true if any override should happen - * @param mass the override mass - * @param cg the override cg + * @param component the component + * @param override true if any override should happen + * @param mass the override mass + * @param cg the override cg */ public static void setOverride(RocketComponent component, boolean override, double mass, double cg) { if (override) { @@ -169,7 +173,7 @@ public abstract class BaseHandler extends ElementHand /** * Some CG positions in Rocksim do not correspond to the CG position reference in OpenRocket. * - * @param theCG the CG value to really use when overriding CG on the OpenRocket component + * @param theCG the CG value to really use when overriding CG on the OpenRocket component */ protected void setCG(double theCG) { cg = theCG; @@ -178,35 +182,62 @@ public abstract class BaseHandler extends ElementHand /** * Set the material name as specified in the Rocksim design file. * - * @param content the material name + * @param content the material name */ protected void setMaterialName(String content) { materialName = content; } + /** + * Get the Rocksim enum of the component's density type. + * + * @return a Rocksim density type + */ + protected RocksimDensityType getDensityType() { + return densityType; + } + /** * Add child to parent only if the child is compatible. Otherwise add to warning set. - * - * @param parent the parent component - * @param child the child component + * + * @param parent the parent component + * @param child the child component * @param warnings the warning set - * + * * @return true if the child is compatible with parent */ protected static boolean isCompatible(RocketComponent parent, Class child, WarningSet warnings) { + return isCompatible(parent, child, warnings, false); + } + + /** + * Add child to parent only if the child is compatible. Otherwise add to warning set. + * + * @param parent the parent component + * @param child the child component + * @param warnings the warning set + * @param suppressWarnings suppress warnings, just return the boolean + * + * @return true if the child is compatible with parent + */ + protected static boolean isCompatible(RocketComponent parent, Class child, + WarningSet warnings, + boolean suppressWarnings) { if (!parent.isCompatible(child)) { - warnings.add(child.getName() + " can not be attached to " - + parent.getComponentName() + ", ignoring component."); + if (!suppressWarnings) { + warnings.add(child.getName() + " can not be attached to " + + parent.getComponentName() + ", ignoring component."); + } return false; } else { return true; } } - + /** - * Create a custom material based on the density. The name of the material is prepended with 'RS: ' to - * indicate it came from a RockSim material. + * Create a custom material based on the density. The name of the material is prepended with 'RS: ' to indicate it + * came from a RockSim material. * * @param type the type of the material * @param name the name of the component @@ -215,15 +246,15 @@ public abstract class BaseHandler extends ElementHand * @return a Material instance */ public static Material createCustomMaterial(Material.Type type, String name, double density) { - return Material.newMaterial(type, ROCKSIM_MATERIAL_PREFIX + name, density, true); + return Material.newUserMaterial(type, ROCKSIM_MATERIAL_PREFIX + name, density); } /** * Set the material onto an instance of RocketComponent. This is done because only some subtypes of RocketComponent * have the setMaterial method. Unfortunately the supertype cannot be used. * - * @param component the component who's material is to be set - * @param material the material to be set on the component (defined by getComponent()) + * @param component the component who's material is to be set + * @param material the material to be set on the component (defined by getComponent()) */ private static void setMaterial(RocketComponent component, Material material) { try { @@ -241,9 +272,9 @@ public abstract class BaseHandler extends ElementHand /** * Find a method by name and argument list. * - * @param component the component who's material is to be seta - * @param name the method name - * @param args the class types of the parameters + * @param component the component who's material is to be set + * @param name the method name + * @param args the class types of the parameters * * @return the Method instance, or null */