De-localize Material and FlightDataType objects when persisting in ork files. Added...
[debian/openrocket] / core / src / net / sf / openrocket / preset / xml / BaseComponentDTO.java
index c9278ecff6d8fa32b867d66f43bb3679feb4290e..b39bc23ec4245a2cb3cb07e3e1d9be36d58a903e 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,14 @@ 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;
+        }
+
+        return Material.newUserMaterial(dto.getORMaterialType(), dto.material, 0.0);
 
-               if ( "BULK".equals( dto.type ) ) {
-                       return new Material.Bulk(dto.material, 0.0, true);
-               } else if ( "SURFACE".equals( dto.type ) ) {
-                       return new Material.Surface(dto.material, 0.0, true);
-               } else if ( "LINE".equals( dto.type ) ) {
-                       return new Material.Line(dto.material, 0.0, true);
-               } else {
-                       return null;
-               }
-               
        }
 
        static class AnnotatedMaterialDTO {
@@ -210,6 +212,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 {
@@ -247,6 +260,7 @@ public abstract class BaseComponentDTO {
        }
 
     static class Base64Adapter extends XmlAdapter<String, byte[]> {
+       @Override
         public byte[] unmarshal(String s) {
             if (s == null) {
                 return null;
@@ -254,6 +268,7 @@ public abstract class BaseComponentDTO {
             return DatatypeConverter.parseBase64Binary(s);
         }
 
+       @Override
         public String marshal(byte[] bytes) {
             if (bytes == null) {
                 return null;