Advertisement
Guest User

Untitled

a guest
Jun 27th, 2017
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.49 KB | None | 0 0
  1. package serializers.flatbuffers;
  2.  
  3. import java.nio.ByteBuffer;
  4. import java.util.ArrayList;
  5. import java.util.Collections;
  6. import java.util.List;
  7.  
  8. import com.google.flatbuffers.FlatBufferBuilder;
  9.  
  10. import data.media.MediaTransformer;
  11. import serializers.SerClass;
  12. import serializers.SerFeatures;
  13. import serializers.SerFormat;
  14. import serializers.SerGraph;
  15. import serializers.Serializer;
  16. import serializers.TestGroups;
  17. import serializers.flatbuffers.media.Image;
  18. import serializers.flatbuffers.media.Media;
  19. import serializers.flatbuffers.media.MediaContent;
  20. import serializers.flatbuffers.media.Player;
  21. import serializers.flatbuffers.media.Size;
  22.  
  23. public class FlatBuffers {
  24. public static void register(TestGroups groups) {
  25. groups.media.add(new Transformer(), new FBSerializer(),
  26. new SerFeatures(SerFormat.BIN_CROSSLANG, SerGraph.FULL_GRAPH, SerClass.CLASSES_KNOWN, ""));
  27. }
  28.  
  29. static final class FBSerializer extends Serializer<MediaContent> {
  30.  
  31. public String getName() {
  32. return "flatbuffers";
  33. }
  34.  
  35. MediaContent mc = new MediaContent();
  36.  
  37. @Override
  38. public MediaContent deserialize(byte[] array) throws Exception {
  39. ByteBuffer bb = ByteBuffer.wrap(array);
  40. return MediaContent.getRootAsMediaContent(bb);
  41. }
  42.  
  43. int i = 0;
  44.  
  45. @Override
  46. public byte[] serialize(MediaContent content) {
  47. byte[] result = content.getByteBuffer().array();
  48. if (i == 0) {
  49. i++;
  50. System.err.println("Size: " + result.length);
  51. }
  52. return result;
  53. }
  54. }
  55.  
  56. static final class Transformer extends MediaTransformer<MediaContent> {
  57.  
  58. @Override
  59. public MediaContent forward(data.media.MediaContent a) {
  60.  
  61. ByteBuffer bb = ByteBuffer.allocate(1024);
  62. FlatBufferBuilder fbb = new FlatBufferBuilder(bb);
  63.  
  64. int media = forwardMedia(a.media, fbb);
  65. int images[] = new int[a.images.size()];
  66. for (int i = 0; i < a.images.size(); i++) {
  67. images[i] = forwardImage(a.images.get(i), fbb);
  68. }
  69. int image = MediaContent.createImagesVector(fbb, images);
  70. int offset = MediaContent.createMediaContent(fbb, image, media);
  71. MediaContent.finishMediaContentBuffer(fbb, offset);
  72. return MediaContent.getRootAsMediaContent(bb);
  73. }
  74.  
  75. private static int forwardMedia(data.media.Media media, FlatBufferBuilder fbb) {
  76. int uri = fbb.createString(media.uri);
  77. String titleS = media.title;
  78. int title = titleS != null ? fbb.createString(titleS) : 0;
  79. int format = fbb.createString(media.format);
  80. int[] persons = new int[media.persons.size()];
  81. for (int i = 0; i < media.persons.size(); i++) {
  82. persons[i] = fbb.createString(media.persons.get(i));
  83. }
  84. int person = Media.createPersonsVector(fbb, persons);
  85. byte player = forwardPlayer(media.player);
  86. String copyrightS = media.copyright;
  87. int copyright = copyrightS != null ? fbb.createString(copyrightS) : 0;
  88. return Media.createMedia(fbb, uri, title, media.width, media.height, format, media.duration, media.size,
  89. media.bitrate, person, player, copyright);
  90. }
  91.  
  92. private static int forwardImage(data.media.Image image, FlatBufferBuilder fbb) {
  93. int uri = fbb.createString(image.uri);
  94. String titleS = image.title;
  95. int title = titleS != null ? fbb.createString(titleS) : 0;
  96. byte size = forwardSize(image.size);
  97. return Image.createImage(fbb, uri, title, image.width, image.height, size);
  98. }
  99.  
  100. private static byte forwardPlayer(data.media.Media.Player p) {
  101. switch (p) {
  102. case JAVA:
  103. return Player.JAVA;
  104. case FLASH:
  105. return Player.FLASH;
  106. default:
  107. throw new AssertionError("invalid case: " + p);
  108. }
  109. }
  110.  
  111. private static byte forwardSize(data.media.Image.Size s) {
  112. switch (s) {
  113. case SMALL:
  114. return Size.SMALL;
  115. case LARGE:
  116. return Size.LARGE;
  117. default:
  118. throw new AssertionError("invalid case: " + s);
  119. }
  120. }
  121.  
  122. private Image image = new Image();
  123.  
  124. @Override
  125. public data.media.MediaContent reverse(MediaContent a) {
  126. List<data.media.Image> images = new ArrayList<data.media.Image>(a.imagesLength());
  127. for (int i = 0; i < a.imagesLength(); i++) {
  128. images.add(reverseImage(a.images(image, i)));
  129. }
  130. return new data.media.MediaContent(reverseMedia(a.media()), images);
  131. }
  132.  
  133. @Override
  134. public data.media.MediaContent shallowReverse(MediaContent a) {
  135. return new data.media.MediaContent(reverseMedia(a.media()), Collections.<data.media.Image> emptyList());
  136. }
  137.  
  138. private static data.media.Media reverseMedia(Media media) {
  139. return new data.media.Media(media.uri(), media.title(), media.width(), media.height(), media.format(),
  140. media.duration(), media.size(), media.bitrate(), media.bitrate() != 0, reversePersons(media),
  141. reversePlayer(media.player()), media.copyright());
  142. }
  143.  
  144. private static data.media.Media.Player reversePlayer(byte p) {
  145. switch (p) {
  146. case Player.JAVA:
  147. return data.media.Media.Player.JAVA;
  148. case Player.FLASH:
  149. return data.media.Media.Player.FLASH;
  150. default:
  151. throw new AssertionError("invalid case: " + p);
  152. }
  153. }
  154.  
  155. private static List<String> reversePersons(Media media) {
  156. List<String> result = new ArrayList<>(media.personsLength());
  157. for (int i = 0; i < media.personsLength(); i++) {
  158. result.add(media.persons(i));
  159. }
  160. return result;
  161. }
  162.  
  163. private static data.media.Image reverseImage(Image image) {
  164. return new data.media.Image(image.uri(), image.title(), image.width(), image.height(),
  165. reverseSize(image.size()));
  166. }
  167.  
  168. private static data.media.Image.Size reverseSize(byte s) {
  169. switch (s) {
  170. case Size.SMALL:
  171. return data.media.Image.Size.SMALL;
  172. case Size.LARGE:
  173. return data.media.Image.Size.LARGE;
  174. default:
  175. throw new AssertionError("invalid case: " + s);
  176. }
  177. }
  178. }
  179. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement