X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=core%2Fsrc%2Fnet%2Fsf%2Fopenrocket%2Ffile%2Frocksim%2Fimportt%2FBaseHandler.java;h=a9d0bd944f939f1647f2e5c0436c0a5aa6a28f1d;hb=88b6ef0edd1624613674ab619f1543feb0f1191c;hp=6302c62a3e19baa9a3ea917764c8f3ef9b37ba32;hpb=ee6f82c24dc85c812ce65e1bde6ded2939132eef;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 6302c62a..a9d0bd94 100644 --- a/core/src/net/sf/openrocket/file/rocksim/importt/BaseHandler.java +++ b/core/src/net/sf/openrocket/file/rocksim/importt/BaseHandler.java @@ -18,7 +18,7 @@ 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 AbstractElementHandler { @@ -51,10 +51,11 @@ public abstract class BaseHandler extends AbstractEle /** * 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 */ @@ -70,7 +71,7 @@ public abstract class BaseHandler extends AbstractEle mass = Math.max(0d, Double.parseDouble(content) / RocksimCommonConstants.ROCKSIM_TO_OPENROCKET_MASS); } if (RocksimCommonConstants.DENSITY.equals(element)) { - density = Math.max(0d, Double.parseDouble(content) ); + density = Math.max(0d, Double.parseDouble(content)); } if (RocksimCommonConstants.KNOWN_CG.equals(element)) { cg = Math.max(0d, Double.parseDouble(content) / RocksimCommonConstants.ROCKSIM_TO_OPENROCKET_LENGTH); @@ -105,13 +106,14 @@ public abstract class BaseHandler extends AbstractEle /** * 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) { @@ -119,14 +121,14 @@ public abstract class BaseHandler extends AbstractEle } /** - * 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) { @@ -139,10 +141,10 @@ public abstract class BaseHandler extends AbstractEle /** * 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) { @@ -171,7 +173,7 @@ public abstract class BaseHandler extends AbstractEle /** * 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; @@ -180,35 +182,62 @@ public abstract class BaseHandler extends AbstractEle /** * 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 @@ -224,8 +253,8 @@ public abstract class BaseHandler extends AbstractEle * 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 { @@ -243,9 +272,9 @@ public abstract class BaseHandler extends AbstractEle /** * 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 */