/
JavaBuiltIn.java
122 lines (105 loc) · 3.28 KB
/
JavaBuiltIn.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
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.Collections;
import data.media.Image;
import data.media.Media;
import data.media.MediaContent;
import data.media.MediaTransformer;
public class JavaBuiltIn
{
public static void register(TestGroups groups)
{
groups.media.add(mediaTransformer, new GenericSerializer<MediaContent>("java-built-in",true),
new SerFeatures(
SerFormat.BINARY,
SerGraph.FLAT_TREE,
SerClass.ZERO_KNOWLEDGE,
""
)
);
groups.media.add(mediaTransformer, new GenericSerializer<MediaContent>("java-built-in-serializer",false),
new SerFeatures(
SerFormat.BINARY,
SerGraph.FULL_GRAPH,
SerClass.ZERO_KNOWLEDGE,
""
)
);
}
// ------------------------------------------------------------
// Serializer (just one)
public static class GenericSerializer<T> extends Serializer<T>
{
private final String name;
boolean unshared;
public GenericSerializer(String name) {
this( name, true );
}
public GenericSerializer(String name, boolean unshared)
{
this.name = name;
this.unshared = unshared;
}
@SuppressWarnings("unchecked")
public T deserialize(byte[] array) throws Exception
{
ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(array));
if ( unshared ) {
return (T) ois.readUnshared();
} else {
return (T) ois.readObject();
}
}
public byte[] serialize(T data) throws IOException
{
ByteArrayOutputStream baos = outputStream(data);
ObjectOutputStream oos = new ObjectOutputStream(baos);
if ( unshared ) {
oos.writeUnshared(data);
} else {
oos.writeObject(data);
}
return baos.toByteArray();
}
public String getName()
{
return name;
}
}
// ------------------------------------------------------------
// MediaTransformer
public static final MediaTransformer<MediaContent> mediaTransformer = new MediaTransformer<MediaContent>()
{
@Override
public MediaContent[] resultArray(int size) { return new MediaContent[size]; }
public MediaContent forward(MediaContent mc)
{
return copy(mc);
}
public MediaContent reverse(MediaContent mc)
{
return copy(mc);
}
private MediaContent copy(MediaContent mc)
{
ArrayList<Image> images = new ArrayList<Image>(mc.images.size());
for (Image i : mc.images) {
images.add(new Image(i.uri, i.title, i.width, i.height, i.size));
}
return new MediaContent(copy(mc.media), images);
}
private Media copy(Media m)
{
return new Media(m.uri, m.title, m.width, m.height, m.format, m.duration, m.size, m.bitrate, m.hasBitrate, new ArrayList<String>(m.persons), m.player, m.copyright);
}
public MediaContent shallowReverse(MediaContent mc)
{
return new MediaContent(copy(mc.media), Collections.<Image>emptyList());
}
};
}