package serializers.xml; import static data.media.FieldMapping.FULL_FIELD_NAME_BITRATE; import static data.media.FieldMapping.FULL_FIELD_NAME_COPYRIGHT; import static data.media.FieldMapping.FULL_FIELD_NAME_DURATION; import static data.media.FieldMapping.FULL_FIELD_NAME_FORMAT; import static data.media.FieldMapping.FULL_FIELD_NAME_HEIGHT; import static data.media.FieldMapping.FULL_FIELD_NAME_IMAGES; import static data.media.FieldMapping.FULL_FIELD_NAME_MEDIA; import static data.media.FieldMapping.FULL_FIELD_NAME_PERSONS; import static data.media.FieldMapping.FULL_FIELD_NAME_PLAYER; import static data.media.FieldMapping.FULL_FIELD_NAME_SIZE; import static data.media.FieldMapping.FULL_FIELD_NAME_TITLE; import static data.media.FieldMapping.FULL_FIELD_NAME_URI; import static data.media.FieldMapping.FULL_FIELD_NAME_WIDTH; import javax.xml.stream.*; import data.media.Image; import data.media.Media; import data.media.MediaContent; public class StaxSerializer { public void writeDocument(XMLStreamWriter writer, MediaContent content) throws XMLStreamException { writer.writeStartDocument("UTF-8", "1.0"); writeMediaContent(writer, content); writer.writeEndDocument(); } public void writeDocument(XMLStreamWriter writer, MediaContent[] items) throws XMLStreamException { writer.writeStartDocument("UTF-8", "1.0"); writer.writeStartElement(XmlStax.STREAM_ROOT); for (MediaContent item : items) { writeMediaContent(writer, item); } writer.writeEndElement(); writer.writeEndDocument(); } private void writeMediaContent(XMLStreamWriter writer, MediaContent content) throws XMLStreamException { writer.writeStartElement("mc"); writeMedia(writer, content.media); for (Image image : content.images) { writeImage(writer, image); } writer.writeEndElement(); } private void writeImage (XMLStreamWriter writer, Image image) throws XMLStreamException { writer.writeStartElement(FULL_FIELD_NAME_IMAGES); writeElement(writer, FULL_FIELD_NAME_URI, image.uri); if (image.title != null) writeElement(writer, FULL_FIELD_NAME_TITLE, image.title); writeElement(writer, FULL_FIELD_NAME_WIDTH, String.valueOf(image.width)); writeElement(writer, FULL_FIELD_NAME_HEIGHT, String.valueOf(image.height)); writeElement(writer, FULL_FIELD_NAME_SIZE, image.size.name()); writer.writeEndElement(); } private void writeElement(XMLStreamWriter writer, String name, String value) throws XMLStreamException { writer.writeStartElement(name); writer.writeCharacters(value); writer.writeEndElement(); } private void writeMedia (XMLStreamWriter writer, Media media) throws XMLStreamException { writer.writeStartElement(FULL_FIELD_NAME_MEDIA); writeElement(writer, FULL_FIELD_NAME_PLAYER, media.player.name()); writeElement(writer, FULL_FIELD_NAME_URI, media.uri); if (media.title != null) writeElement(writer, FULL_FIELD_NAME_TITLE, media.title); writeElement(writer, FULL_FIELD_NAME_WIDTH, String.valueOf(media.width)); writeElement(writer, FULL_FIELD_NAME_HEIGHT, String.valueOf(media.height)); writeElement(writer, FULL_FIELD_NAME_FORMAT, media.format); writeElement(writer, FULL_FIELD_NAME_DURATION, String.valueOf(media.duration)); writeElement(writer, FULL_FIELD_NAME_SIZE, String.valueOf(media.size)); if (media.hasBitrate) writeElement(writer, FULL_FIELD_NAME_BITRATE, String.valueOf(media.bitrate)); if (media.copyright != null) writeElement(writer, FULL_FIELD_NAME_COPYRIGHT, media.copyright); for (String person : media.persons) { writeElement(writer, FULL_FIELD_NAME_PERSONS, person); } writer.writeEndElement(); } }