De-localize Material and FlightDataType objects when persisting in ork files. Added...
[debian/openrocket] / core / src / net / sf / openrocket / preset / xml / MaterialDTO.java
index 9fe1781ec0f3687f8adfee066f277b964c51c81f..405596a446fe5ee0034391dd7ce96efda7cd83ff 100644 (file)
@@ -1,14 +1,17 @@
 
 package net.sf.openrocket.preset.xml;
 
-import net.sf.openrocket.material.Material;
-
+import javax.xml.bind.Marshaller;
+import javax.xml.bind.Unmarshaller;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlRootElement;
 
+import net.sf.openrocket.material.Material;
+import net.sf.openrocket.util.Chars;
+
 /**
  * XML handler for materials.
  */
@@ -74,4 +77,38 @@ public class MaterialDTO {
     public void setUom(final String theUom) {
         uom = theUom;
     }
+
+    Material asMaterial() {
+        return Material.newUserMaterial(type.getORMaterialType(), name, density);
+    }
+
+
+    /**
+     * Special directive to the JAXB system.  After the object is parsed from xml,
+     * we replace the '2' with Chars.SQUARED, and '3' with Chars.CUBED.  Just the 
+     * opposite transformation as doen in beforeMarshal.
+     * @param unmarshaller
+     * @param parent
+     */
+    @SuppressWarnings("unused")
+       private void afterUnmarshal( Unmarshaller unmarshaller, Object parent ) {
+       if (uom != null) {
+               uom = uom.replace('2', Chars.SQUARED);
+               uom = uom.replace('3', Chars.CUBED);
+       }
+    }
+    
+    /**
+     * Special directive to the JAXB system.  Before the object is serialized into xml,
+     * we strip out the special unicode characters for cubed and squared so they appear
+     * as simple "3" and "2" chars.  The reverse transformation is done in afterUnmarshal.
+     * @param marshaller
+     */
+    @SuppressWarnings("unused")
+    private void beforeMarshal( Marshaller marshaller ) {
+       if (uom != null ) {
+               uom = uom.replace(Chars.SQUARED, '2');
+               uom = uom.replace(Chars.CUBED, '3');
+       }
+    }
 }