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")); } }