1 package net.sf.openrocket.preset.xml;
3 import net.sf.openrocket.motor.Manufacturer;
4 import net.sf.openrocket.preset.ComponentPreset;
5 import net.sf.openrocket.preset.ComponentPresetFactory;
6 import net.sf.openrocket.preset.TypedPropertyMap;
7 import org.junit.Assert;
10 import javax.imageio.ImageIO;
11 import javax.xml.bind.JAXBContext;
12 import javax.xml.bind.Marshaller;
13 import javax.xml.bind.Unmarshaller;
14 import java.awt.image.BufferedImage;
15 import java.awt.image.DataBufferByte;
16 import java.io.StringReader;
17 import java.io.StringWriter;
21 public class BaseComponentDTOTest {
25 public void testImage() throws Exception {
26 TypedPropertyMap presetspec = new TypedPropertyMap();
27 presetspec.put(ComponentPreset.TYPE, ComponentPreset.Type.BODY_TUBE);
28 presetspec.put(ComponentPreset.MANUFACTURER, Manufacturer.getManufacturer("manufacturer"));
29 presetspec.put(ComponentPreset.PARTNO, "partno");
30 presetspec.put(ComponentPreset.LENGTH, 2.0);
31 presetspec.put(ComponentPreset.OUTER_DIAMETER, 2.0);
32 presetspec.put(ComponentPreset.INNER_DIAMETER, 1.0);
33 presetspec.put(ComponentPreset.MASS, 100.0);
34 ComponentPreset preset = ComponentPresetFactory.create(presetspec);
36 //Convert the presets to a BodyTubeDTO
37 BodyTubeDTO dto = new BodyTubeDTO(preset);
39 //Add an image to the DTO.
40 BufferedImage image = ImageIO.read(this.getClass().getResourceAsStream("/pix/splashscreen.png"));
43 JAXBContext binder = JAXBContext.newInstance(OpenRocketComponentDTO.class);
44 Marshaller marshaller = binder.createMarshaller();
45 marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
46 StringWriter sw = new StringWriter();
48 //Serialize the dto to XML
49 marshaller.marshal(dto, sw);
50 String xml = sw.toString();
52 //Read the XML back to create the dto again
53 Unmarshaller unmarshaller = binder.createUnmarshaller();
54 BodyTubeDTO redone = (BodyTubeDTO) unmarshaller.unmarshal(new StringReader(xml));
57 Assert.assertArrayEquals(((DataBufferByte) image.getData().getDataBuffer()).getData(),
58 ((DataBufferByte) redone.getImage().getData().getDataBuffer()).getData());
60 //Assert the rest of the attributes.
61 Assert.assertEquals(dto.getInsideDiameter(), redone.getInsideDiameter(), 0.00001);
62 Assert.assertEquals(dto.getLength(), redone.getLength(), 0.00001);
63 Assert.assertEquals(dto.getOutsideDiameter(), redone.getOutsideDiameter(), 0.00001);
64 Assert.assertEquals(dto.getDescription(), redone.getDescription());
65 Assert.assertEquals(dto.getManufacturer(), redone.getManufacturer());
66 Assert.assertEquals(dto.getMass(), redone.getMass(), 0.00001);
67 Assert.assertEquals(dto.getPartNo(), redone.getPartNo());
69 //Uncomment if you want to write the image to a file to view it.
70 // ImageIO.write(redone.getImage(), "png", new FileOutputStream("redone.png"));