package serializers.dslplatform; import java.util.ArrayList; import java.util.Collections; import java.util.List; import serializers.SerClass; import serializers.SerFeatures; import serializers.SerFormat; import serializers.SerGraph; import serializers.Serializer; import serializers.TestGroups; import serializers.dslplatform.full.*; import serializers.dslplatform.minified.*; import serializers.dslplatform.shared.*; import com.dslplatform.json.JsonReader; import com.dslplatform.json.JsonWriter; import data.media.MediaTransformer; /** * A test harness for DSL Platform (<a href="http://dsl-platform.com">http://dsl-platform.com</a>) generated classes. * * Uses pregenerated classes (the schema is in {@code schema/media.dsl}). */ public class DSLPlatform { public static void register(final TestGroups groups) { groups.media.add(new DSLPlatformFullMediaTransformer(), new DSLPlatformFullSerializer(), new SerFeatures( SerFormat.JSON, SerGraph.FLAT_TREE, SerClass.CLASSES_KNOWN, "Serializes all properties with exact names.")); groups.media.add(new DSLPlatformMinifiedMediaTransformer(), new DSLPlatformMinifiedSerializer(), new SerFeatures( SerFormat.JSON, SerGraph.FLAT_TREE, SerClass.CLASSES_KNOWN, "JSON with minified property names and without default values.")); } static class DSLPlatformFullSerializer extends Serializer<MediaContentFull> { private static JsonWriter writer = new JsonWriter(); private final char[] tmp = new char[64]; @Override public String getName() { return "json/dsl-platform"; } @Override public MediaContentFull deserialize(final byte[] array) throws Exception { return (MediaContentFull) MediaContentFull.deserialize(new JsonReader<Object>(array, null, tmp)); } @Override public byte[] serialize(final MediaContentFull content) throws Exception { writer.reset(); content.serialize(writer, false); return writer.toByteArray(); } } static class DSLPlatformMinifiedSerializer extends Serializer<MediaContentMinified> { private static JsonWriter writer = new JsonWriter(); private final char[] tmp = new char[64]; @Override public String getName() { return "minified-json/dsl-platform"; } @Override public MediaContentMinified deserialize(final byte[] array) throws Exception { return (MediaContentMinified) MediaContentMinified.deserialize(new JsonReader<Object>(array, null, tmp)); } @Override public byte[] serialize(final MediaContentMinified content) throws Exception { writer.reset(); content.serialize(writer, true); return writer.toByteArray(); } } static Player forward(final data.media.Media.Player player) { return player == data.media.Media.Player.JAVA ? Player.JAVA : Player.FLASH; } static Size forward(final data.media.Image.Size size) { return size == data.media.Image.Size.SMALL ? Size.SMALL : Size.LARGE; } static data.media.Media.Player reverse(final Player player) { return player == Player.JAVA ? data.media.Media.Player.JAVA : data.media.Media.Player.FLASH; } static data.media.Image.Size reverse(final Size size) { return size == Size.SMALL ? data.media.Image.Size.SMALL : data.media.Image.Size.LARGE; } static final class DSLPlatformFullMediaTransformer extends MediaTransformer<MediaContentFull> { @Override public MediaContentFull[] resultArray(final int size) { return new MediaContentFull[size]; } @Override public MediaContentFull forward(final data.media.MediaContent commonMediaContent) { return new MediaContentFull(forward(commonMediaContent.media), forward(commonMediaContent.images)); } private static MediaFull forward(final data.media.Media media) { return new MediaFull( media.uri, media.title, media.width, media.height, media.format, media.duration, media.size, media.bitrate, media.persons, DSLPlatform.forward(media.player), media.copyright); } private static List<ImageFull> forward(final List<data.media.Image> images) { final ArrayList<ImageFull> forwardedImgs = new ArrayList<ImageFull>(images.size()); for (final data.media.Image image : images) { forwardedImgs.add(forward(image)); } return forwardedImgs; } private static ImageFull forward(final data.media.Image image) { return new ImageFull( image.uri, image.title, image.width, image.height, DSLPlatform.forward(image.size)); } @Override public data.media.MediaContent reverse(final MediaContentFull mc) { return new data.media.MediaContent(reverse(mc.getMedia()), reverse(mc.getImages())); } private static data.media.Media reverse(final MediaFull media) { return new data.media.Media( media.getUri(), media.getTitle(), media.getWidth(), media.getHeight(), media.getFormat(), media.getDuration(), media.getSize(), media.getBitrate(), media.getBitrate() != 0, media.getPersons(), DSLPlatform.reverse(media.getPlayer()), media.getCopyright()); } private static List<data.media.Image> reverse(final List<ImageFull> images) { final ArrayList<data.media.Image> reversed = new ArrayList<data.media.Image>(images.size()); for (final ImageFull image : images) { reversed.add(reverse(image)); } return reversed; } private static data.media.Image reverse(final ImageFull image) { return new data.media.Image( image.getUri(), image.getTitle(), image.getWidth(), image.getHeight(), DSLPlatform.reverse(image.getSize())); } @Override public data.media.MediaContent shallowReverse(final MediaContentFull mc) { return new data.media.MediaContent(reverse(mc.getMedia()), Collections.<data.media.Image> emptyList()); } } static final class DSLPlatformMinifiedMediaTransformer extends MediaTransformer<MediaContentMinified> { @Override public MediaContentMinified[] resultArray(final int size) { return new MediaContentMinified[size]; } @Override public MediaContentMinified forward(final data.media.MediaContent commonMediaContent) { return new MediaContentMinified(forward(commonMediaContent.media), forward(commonMediaContent.images)); } private static MediaMinified forward(final data.media.Media media) { return new MediaMinified( media.uri, media.title, media.width, media.height, media.format, media.duration, media.size, media.bitrate, media.persons, DSLPlatform.forward(media.player), media.copyright); } private static List<ImageMinified> forward(final List<data.media.Image> images) { final ArrayList<ImageMinified> forwardedImgs = new ArrayList<ImageMinified>(images.size()); for (final data.media.Image image : images) { forwardedImgs.add(forward(image)); } return forwardedImgs; } private static ImageMinified forward(final data.media.Image image) { return new ImageMinified( image.uri, image.title, image.width, image.height, DSLPlatform.forward(image.size)); } @Override public data.media.MediaContent reverse(final MediaContentMinified mc) { return new data.media.MediaContent(reverse(mc.getMedia()), reverse(mc.getImages())); } private static data.media.Media reverse(final MediaMinified media) { return new data.media.Media( media.getUri(), media.getTitle(), media.getWidth(), media.getHeight(), media.getFormat(), media.getDuration(), media.getSize(), media.getBitrate(), media.getBitrate() != 0, media.getPersons(), DSLPlatform.reverse(media.getPlayer()), media.getCopyright()); } private static List<data.media.Image> reverse(final List<ImageMinified> images) { final ArrayList<data.media.Image> reversed = new ArrayList<data.media.Image>(images.size()); for (final ImageMinified image : images) { reversed.add(reverse(image)); } return reversed; } private static data.media.Image reverse(final ImageMinified image) { return new data.media.Image( image.getUri(), image.getTitle(), image.getWidth(), image.getHeight(), DSLPlatform.reverse(image.getSize())); } @Override public data.media.MediaContent shallowReverse(final MediaContentMinified mc) { return new data.media.MediaContent(reverse(mc.getMedia()), Collections.<data.media.Image> emptyList()); } } }