package serializers.javaxjson; import static data.media.FieldMapping.*; import java.util.*; import javax.json.*; import javax.json.spi.*; import serializers.*; import data.media.*; public class JavaxJsonTransformer extends Transformer<MediaContent, JsonStructure> { private final JsonProvider json; public JavaxJsonTransformer(JsonProvider json) { this.json = json; } @Override public JsonStructure forward(MediaContent content) { Media media = content.media; JsonObjectBuilder mediaJson = json.createObjectBuilder(); mediaJson.add(FULL_FIELD_NAME_BITRATE, media.bitrate); if(media.copyright == null ){ mediaJson.add(FULL_FIELD_NAME_COPYRIGHT, JsonValue.NULL); } else{ mediaJson.add(FULL_FIELD_NAME_COPYRIGHT, media.copyright); } mediaJson.add(FULL_FIELD_NAME_DURATION, media.duration); mediaJson.add(FULL_FIELD_NAME_FORMAT, media.format); mediaJson.add(FULL_FIELD_NAME_HEIGHT, media.height); JsonArrayBuilder personsJson = json.createArrayBuilder(); for (String person : media.persons) { personsJson.add(person); } mediaJson.add(FULL_FIELD_NAME_PERSONS, personsJson); mediaJson.add(FULL_FIELD_NAME_PLAYER, media.player.name()); mediaJson.add(FULL_FIELD_NAME_SIZE, media.size); mediaJson.add(FULL_FIELD_NAME_TITLE, media.title); mediaJson.add(FULL_FIELD_NAME_URI, media.uri); mediaJson.add(FULL_FIELD_NAME_WIDTH, media.width); JsonArrayBuilder imagesJson = json.createArrayBuilder(); for (Image image : content.images) { JsonObjectBuilder imageJson = json.createObjectBuilder(); imageJson.add(FULL_FIELD_NAME_TITLE, image.title); imageJson.add(FULL_FIELD_NAME_URI, image.uri); imageJson.add(FULL_FIELD_NAME_HEIGHT, image.height); imageJson.add(FULL_FIELD_NAME_WIDTH, image.width); imageJson.add(FULL_FIELD_NAME_SIZE, image.size.name()); imagesJson.add(imageJson); } JsonObjectBuilder contentJson = json.createObjectBuilder(); contentJson.add(FULL_FIELD_NAME_MEDIA, mediaJson); contentJson.add(FULL_FIELD_NAME_IMAGES, imagesJson); return contentJson.build(); } @Override public MediaContent reverse(JsonStructure content) { return extractContent(content); } private MediaContent extractContent(JsonStructure content) { JsonObject mediaContentJson = (JsonObject) content; MediaContent mc = new MediaContent(); JsonObject mediaJson = mediaContentJson.getJsonObject(FULL_FIELD_NAME_MEDIA); Media media = new Media(); media.player = Media.Player.find(mediaJson.getString(FULL_FIELD_NAME_PLAYER)); media.uri = getStringProperty(mediaJson, FULL_FIELD_NAME_URI); media.title = getStringProperty(mediaJson, FULL_FIELD_NAME_TITLE); media.width = getIntProperty(mediaJson, FULL_FIELD_NAME_WIDTH); media.height = getIntProperty(mediaJson, FULL_FIELD_NAME_HEIGHT); media.format = getStringProperty(mediaJson, FULL_FIELD_NAME_FORMAT); media.duration = getIntProperty(mediaJson, FULL_FIELD_NAME_DURATION); media.size = getIntProperty(mediaJson, FULL_FIELD_NAME_SIZE); media.bitrate = getIntProperty(mediaJson, FULL_FIELD_NAME_BITRATE); media.hasBitrate = true; media.copyright = getStringProperty(mediaJson, FULL_FIELD_NAME_COPYRIGHT); JsonArray personsJson = getCheckedArrayProperty(mediaJson, FULL_FIELD_NAME_PERSONS); List<String> persons = new ArrayList<String>(); for (JsonValue value : personsJson) { persons.add(value.toString()); } media.persons = persons; mc.media = media; JsonArray imagesJson = getCheckedArrayProperty(mediaContentJson, FULL_FIELD_NAME_IMAGES); List<Image> images = new ArrayList<Image>(); for (JsonValue value : imagesJson) { Image image = new Image(); JsonObject imageJson = (JsonObject) value; image.uri = getStringProperty(imageJson, FULL_FIELD_NAME_URI); image.title = getStringProperty(imageJson, FULL_FIELD_NAME_TITLE); image.width = getIntProperty(imageJson, FULL_FIELD_NAME_WIDTH); image.height = getIntProperty(imageJson, FULL_FIELD_NAME_HEIGHT); image.size = Image.Size.valueOf(getStringProperty(imageJson, FULL_FIELD_NAME_SIZE)); images.add(image); } mc.images = images; return mc; } private JsonArray getCheckedArrayProperty(JsonObject mediaJson, String fullFieldNamePersons) { return mediaJson.getJsonArray(fullFieldNamePersons); } private int getIntProperty(JsonObject mediaJson, String fullFieldNameWidth) { return mediaJson.getInt(fullFieldNameWidth); } private String getStringProperty(JsonObject mediaJson, String fullFieldNameUri) { if(mediaJson.isNull(fullFieldNameUri)) return null; return mediaJson.getString(fullFieldNameUri); } @Override public MediaContent shallowReverse(JsonStructure a) { throw new UnsupportedOperationException("Not implemented"); } @Override public MediaContent[] sourceArray(int size) { return new MediaContent[size]; } @Override public JsonStructure[] resultArray(int size) { return new JsonStructure[size]; } }