Merge commit '42b2e5ca519766e37ce6941ba4faecc9691cc403' into upstream
[debian/openrocket] / core / src / net / sf / openrocket / rocketcomponent / ExternalComponent.java
index 8d958da6d0a96167f8bb711231cabbb3d07ab6cc..4377a8c31837718d3362be71390b4f001175433c 100644 (file)
@@ -4,7 +4,7 @@ import java.util.List;
 
 import net.sf.openrocket.l10n.Translator;
 import net.sf.openrocket.material.Material;
-import net.sf.openrocket.material.Material.Type;
+import net.sf.openrocket.preset.ComponentPreset;
 import net.sf.openrocket.startup.Application;
 import net.sf.openrocket.unit.UnitGroup;
 
@@ -17,7 +17,7 @@ import net.sf.openrocket.unit.UnitGroup;
  */
 
 public abstract class ExternalComponent extends RocketComponent {
-       
+
        public enum Finish {
                //// Rough
                ROUGH("ExternalComponent.Rough", 500e-6),
@@ -29,35 +29,35 @@ public abstract class ExternalComponent extends RocketComponent {
                SMOOTH("ExternalComponent.Smoothpaint", 20e-6),
                //// Polished
                POLISHED("ExternalComponent.Polished", 2e-6);
-               
+
                private static final Translator trans = Application.getTranslator();
                private final String name;
                private final double roughnessSize;
-               
+
                Finish(String name, double roughness) {
                        this.name = name;
                        this.roughnessSize = roughness;
                }
-               
+
                public double getRoughnessSize() {
                        return roughnessSize;
                }
-               
+
                @Override
                public String toString() {
                        return trans.get(name) + " (" + UnitGroup.UNITS_ROUGHNESS.toStringUnit(roughnessSize) + ")";
                }
        }
-       
-       
+
+
        /**
         * The material of the component.
         */
        protected Material material = null;
-       
+
        protected Finish finish = Finish.NORMAL;
-       
-       
+
+
 
        /**
         * Constructor that sets the relative position of the component.
@@ -66,13 +66,13 @@ public abstract class ExternalComponent extends RocketComponent {
                super(relativePosition);
                this.material = Application.getPreferences().getDefaultComponentMaterial(this.getClass(), Material.Type.BULK);
        }
-       
+
        /**
         * Returns the volume of the component.  This value is used in calculating the mass
         * of the object.
         */
        public abstract double getComponentVolume();
-       
+
        /**
         * Calculates the mass of the component as the product of the volume and interior density.
         */
@@ -80,7 +80,7 @@ public abstract class ExternalComponent extends RocketComponent {
        public double getComponentMass() {
                return material.getDensity() * getComponentVolume();
        }
-       
+
        /**
         * ExternalComponent has aerodynamic effect, so return true.
         */
@@ -88,7 +88,7 @@ public abstract class ExternalComponent extends RocketComponent {
        public boolean isAerodynamic() {
                return true;
        }
-       
+
        /**
         * ExternalComponent has effect on the mass, so return true.
         */
@@ -96,63 +96,66 @@ public abstract class ExternalComponent extends RocketComponent {
        public boolean isMassive() {
                return true;
        }
-       
-       
+
+
        public Material getMaterial() {
                return material;
        }
-       
+
        public void setMaterial(Material mat) {
                if (mat.getType() != Material.Type.BULK) {
                        throw new IllegalArgumentException("ExternalComponent requires a bulk material" +
                                        " type=" + mat.getType());
                }
-               
+
                if (material.equals(mat))
                        return;
                material = mat;
                clearPreset();
                fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
-               clearPreset();
        }
-       
+
        public Finish getFinish() {
                return finish;
        }
-       
+
        public void setFinish(Finish finish) {
                if (this.finish == finish)
                        return;
                this.finish = finish;
                fireComponentChangeEvent(ComponentChangeEvent.AERODYNAMIC_CHANGE);
        }
-       
-       
+
+
        @Override
-       protected void loadFromPreset(RocketComponent preset) {
+       protected void loadFromPreset(ComponentPreset preset) {
                super.loadFromPreset(preset);
-               
+
                // Surface finish is left unchanged
-               
-               ExternalComponent c = (ExternalComponent) preset;
-               
-               Material mat = c.getMaterial();
-               if (c.isMassOverridden()) {
-                       double mass = c.getOverrideMass();
-                       double volume = getComponentVolume();
-                       double density;
-                       if (volume > 0.00001) {
-                               density = mass / volume;
-                       } else {
-                               density = 1000;
+
+               if ( preset.has(ComponentPreset.MATERIAL ) ) {
+                       Material mat = preset.get(ComponentPreset.MATERIAL);
+                       if ( mat != null ) {
+                               material = mat;
+                       } /*
+                       TODO - 
+                       else if (c.isMassOverridden()) {
+                               double mass = c.getOverrideMass();
+                               double volume = getComponentVolume();
+                               double density;
+                               if (volume > 0.00001) {
+                                       density = mass / volume;
+                               } else {
+                                       density = 1000;
+                               }
+                               mat = Material.newMaterial(Type.BULK, mat.getName(), density, true);
+                               setMaterial(mat);
                        }
-                       mat = Material.newMaterial(Type.BULK, mat.getName(), density, true);
+                       */
                }
-               
-               setMaterial(mat);
        }
-       
-       
+
+
        @Override
        protected List<RocketComponent> copyFrom(RocketComponent c) {
                ExternalComponent src = (ExternalComponent) c;
@@ -160,5 +163,5 @@ public abstract class ExternalComponent extends RocketComponent {
                this.material = src.material;
                return super.copyFrom(c);
        }
-       
+
 }