Fix refresh bug which sometimes happens when the plot configuration is changed. ...
[debian/openrocket] / core / src / net / sf / openrocket / preset / xml / BaseComponentDTO.java
index c9278ecff6d8fa32b867d66f43bb3679feb4290e..52029304989ba691213486cd5d3610922808a79b 100644 (file)
@@ -76,6 +76,9 @@ public abstract class BaseComponentDTO {
                if ( preset.has(ComponentPreset.FILLED) ) {
                        setFilled( preset.get(ComponentPreset.FILLED));
                }
+        if (preset.has(ComponentPreset.IMAGE) ) {
+            setImageData(preset.get(ComponentPreset.IMAGE));
+        }
        }
 
        public String getManufacturer() {
@@ -171,6 +174,9 @@ public abstract class BaseComponentDTO {
                if ( filled != null ) {
                        props.put(ComponentPreset.FILLED, getFilled());
                }
+        if (image != null) {
+            props.put(ComponentPreset.IMAGE, image);
+        }
        }
 
        protected Material find(List<MaterialDTO> materialList, AnnotatedMaterialDTO dto) {
@@ -184,18 +190,23 @@ public abstract class BaseComponentDTO {
                        }
                }
 
-               // Don't have one, build one.
+               // Don't have one, first check OR's database
+        Material m = Databases.findMaterial(dto.getORMaterialType(), dto.material);
+        if ( m != null ) {
+               return m;
+        }
 
-               if ( "BULK".equals( dto.type ) ) {
+        switch( dto.getORMaterialType() ) {
+        case BULK:
                        return new Material.Bulk(dto.material, 0.0, true);
-               } else if ( "SURFACE".equals( dto.type ) ) {
+        case SURFACE:
                        return new Material.Surface(dto.material, 0.0, true);
-               } else if ( "LINE".equals( dto.type ) ) {
+        case LINE:
                        return new Material.Line(dto.material, 0.0, true);
-               } else {
-                       return null;
-               }
-               
+        }
+        
+        return null;
+
        }
 
        static class AnnotatedMaterialDTO {
@@ -210,6 +221,17 @@ public abstract class BaseComponentDTO {
                        type = theMaterial.getType().name();
                        material = theMaterial.getName();
                }
+               
+               public Material.Type getORMaterialType() {
+                       if ( "BULK".equals(type) ) {
+                               return Material.Type.BULK;
+                       } else if ( "SURFACE".equals(type) ) {
+                               return Material.Type.SURFACE;
+                       } else if ( "LINE".equals(type) ) {
+                               return Material.Type.LINE;
+                       }
+                       throw new IllegalArgumentException( "Inavlid material type " + type +" specified for Component" );
+               }
        }
 
        static class AnnotatedLengthDTO {