Make preset favorites per component type. That is, a single preset can be a favorite...
[debian/openrocket] / core / src / net / sf / openrocket / preset / xml / BaseComponentDTO.java
index 9f49d9482cbd2b01ef97764a33f42fe5cf290de4..b39bc23ec4245a2cb3cb07e3e1d9be36d58a903e 100644 (file)
@@ -1,6 +1,7 @@
 
 package net.sf.openrocket.preset.xml;
 
+import net.sf.openrocket.database.Databases;
 import net.sf.openrocket.material.Material;
 import net.sf.openrocket.motor.Manufacturer;
 import net.sf.openrocket.preset.ComponentPreset;
@@ -189,17 +190,13 @@ 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 ) ) {
-                       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;
-               }
+        return Material.newUserMaterial(dto.getORMaterialType(), dto.material, 0.0);
 
        }
 
@@ -215,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 {
@@ -252,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;
@@ -259,6 +268,7 @@ public abstract class BaseComponentDTO {
             return DatatypeConverter.parseBase64Binary(s);
         }
 
+       @Override
         public String marshal(byte[] bytes) {
             if (bytes == null) {
                 return null;