+package net.sf.openrocket.preset.xml;
+
+import net.sf.openrocket.motor.Manufacturer;
+import net.sf.openrocket.preset.ComponentPreset;
+import net.sf.openrocket.preset.ComponentPresetFactory;
+import net.sf.openrocket.preset.TypedPropertyMap;
+import org.junit.Assert;
+import org.junit.Test;
+
+import javax.imageio.ImageIO;
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.Marshaller;
+import javax.xml.bind.Unmarshaller;
+import java.awt.image.BufferedImage;
+import java.awt.image.DataBufferByte;
+import java.io.StringReader;
+import java.io.StringWriter;
+
+/**
+ */
+public class BaseComponentDTOTest {
+
+
+ @Test
+ public void testImage() throws Exception {
+ TypedPropertyMap presetspec = new TypedPropertyMap();
+ presetspec.put(ComponentPreset.TYPE, ComponentPreset.Type.BODY_TUBE);
+ presetspec.put(ComponentPreset.MANUFACTURER, Manufacturer.getManufacturer("manufacturer"));
+ presetspec.put(ComponentPreset.PARTNO, "partno");
+ presetspec.put(ComponentPreset.LENGTH, 2.0);
+ presetspec.put(ComponentPreset.OUTER_DIAMETER, 2.0);
+ presetspec.put(ComponentPreset.INNER_DIAMETER, 1.0);
+ presetspec.put(ComponentPreset.MASS, 100.0);
+ ComponentPreset preset = ComponentPresetFactory.create(presetspec);
+
+ //Convert the presets to a BodyTubeDTO
+ BodyTubeDTO dto = new BodyTubeDTO(preset);
+
+ //Add an image to the DTO.
+ BufferedImage image = ImageIO.read(this.getClass().getResourceAsStream("/pix/splashscreen.png"));
+ dto.setImage(image);
+
+ JAXBContext binder = JAXBContext.newInstance(OpenRocketComponentDTO.class);
+ Marshaller marshaller = binder.createMarshaller();
+ marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
+ StringWriter sw = new StringWriter();
+
+ //Serialize the dto to XML
+ marshaller.marshal(dto, sw);
+ String xml = sw.toString();
+
+ //Read the XML back to create the dto again
+ Unmarshaller unmarshaller = binder.createUnmarshaller();
+ BodyTubeDTO redone = (BodyTubeDTO) unmarshaller.unmarshal(new StringReader(xml));
+
+ //Compare the image.
+ Assert.assertArrayEquals(((DataBufferByte) image.getData().getDataBuffer()).getData(),
+ ((DataBufferByte) redone.getImage().getData().getDataBuffer()).getData());
+
+ //Assert the rest of the attributes.
+ Assert.assertEquals(dto.getInsideDiameter(), redone.getInsideDiameter(), 0.00001);
+ Assert.assertEquals(dto.getLength(), redone.getLength(), 0.00001);
+ Assert.assertEquals(dto.getOutsideDiameter(), redone.getOutsideDiameter(), 0.00001);
+ Assert.assertEquals(dto.getDescription(), redone.getDescription());
+ Assert.assertEquals(dto.getManufacturer(), redone.getManufacturer());
+ Assert.assertEquals(dto.getMass(), redone.getMass(), 0.00001);
+ Assert.assertEquals(dto.getPartNo(), redone.getPartNo());
+
+ //Uncomment if you want to write the image to a file to view it.
+// ImageIO.write(redone.getImage(), "png", new FileOutputStream("redone.png"));
+ }
+}