package serializers; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.util.ArrayList; import java.util.List; import data.media.MediaTransformer; import serializers.stephenerialization.Image; import serializers.stephenerialization.Media; import serializers.stephenerialization.MediaContent; public class Stephenerialization { public static void register(TestGroups groups) { groups.media.add(mediaTransformer, new StephenerializationSerializer<MediaContent>("stephenerialization"), new SerFeatures(SerFormat.BINARY, SerGraph.FULL_GRAPH, SerClass.ZERO_KNOWLEDGE)); } // ------------------------------------------------------------ // Serializer (just one) public static class StephenerializationSerializer<T> extends Serializer<T> { private final String name; public StephenerializationSerializer(String name) { this.name = name; } public T deserialize(byte[] array) throws Exception { ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(array)); @SuppressWarnings("unchecked") T v = (T) ois.readObject(); return v; } public byte[] serialize(T data) throws IOException { ByteArrayOutputStream baos = outputStream(data); ObjectOutputStream oos = new ObjectOutputStream(baos); oos.writeObject(data); return baos.toByteArray(); } public String getName() { return name; } } // ------------------------------------------------------------ // MediaTransformer public static final MediaTransformer<MediaContent> mediaTransformer = new MediaTransformer<MediaContent>() { public MediaContent forward(data.media.MediaContent a) { return new MediaContent(forwardMedia(a.media), forwardImages(a.images)); } public data.media.MediaContent reverse(MediaContent a) { return new data.media.MediaContent(reverseMedia(a.media), reverseImages(a.images)); } public data.media.MediaContent shallowReverse(MediaContent a) { return new data.media.MediaContent(reverseMedia(a.media), new ArrayList<data.media.Image>()); } private List<Image> forwardImages(List<data.media.Image> images) { List<Image> convertedImages = new ArrayList<Image>(); for (data.media.Image image : images) { convertedImages.add(forwardImage(image)); } return convertedImages; } private Image forwardImage(data.media.Image a) { return new Image(a.uri, a.title, a.width, a.height, forwardSize(a.size)); } private Image.Size forwardSize(data.media.Image.Size a) { return Image.Size.valueOf(a.name()); } private Media forwardMedia(data.media.Media a) { return new Media(a.uri, a.title, a.width, a.height, a.format, a.duration, a.size, a.bitrate, a.hasBitrate, a.persons, forwardPlayer(a.player), a.copyright); } private Media.Player forwardPlayer(data.media.Media.Player a) { return Media.Player.find(a.name()); } private List<data.media.Image> reverseImages(List<Image> images) { List<data.media.Image> convertedImages = new ArrayList<data.media.Image>(); for (Image image : images) { convertedImages.add(reverseImage(image)); } return convertedImages; } private data.media.Image reverseImage(Image a) { return new data.media.Image(a.uri, a.title, a.width, a.height, reverseSize(a.size)); } private data.media.Image.Size reverseSize(Image.Size a) { return data.media.Image.Size.valueOf(a.name()); } private data.media.Media reverseMedia(Media a) { return new data.media.Media(a.uri, a.title, a.width, a.height, a.format, a.duration, a.size, a.bitrate, a.hasBitrate, a.persons, reversePlayer(a.player), a.copyright); } private data.media.Media.Player reversePlayer(Media.Player a) { return data.media.Media.Player.find(a.name()); } }; }