package serializers.protostuff;
import static serializers.protostuff.Protostuff.MEDIA_CONTENT_SCHEMA;
import com.dyuproject.protostuff.LinkedBuffer;
import com.dyuproject.protostuff.JsonIOUtil;
import com.dyuproject.protostuff.JsonXIOUtil;
import com.dyuproject.protostuff.Schema;
import com.dyuproject.protostuff.runtime.RuntimeSchema;
import serializers.*;
import serializers.protostuff.media.MediaContent;
/**
* @author David Yu
* @created Oct 26, 2009
*/
public final class ProtostuffJson
{
public static void register(TestGroups groups)
{
// manual (hand-coded schema, no autoboxing)
groups.media.add(JavaBuiltIn.mediaTransformer, JsonManualMediaSerializer,
new SerFeatures(
SerFormat.JSON,
SerGraph.FLAT_TREE,
SerClass.MANUAL_OPT,
"json + manual"
)
);
// runtime (reflection)
groups.media.add(JavaBuiltIn.mediaTransformer, JsonRuntimeMediaSerializer,
new SerFeatures(
SerFormat.JSON,
SerGraph.FLAT_TREE,
SerClass.ZERO_KNOWLEDGE,
"json + reflection"
)
);
/* protostuff has too many entries
// generated code
groups.media.add(Protostuff.mediaTransformer, JsonMediaSerializer,
new SerFeatures(
SerFormat.JSON,
SerGraph.FLAT_TREE,
SerClass.CLASSES_KNOWN,
"json + generated code"
)
);
// generated code, numeric
groups.media.add(Protostuff.mediaTransformer, JsonMediaSerializerNumeric,
new SerFeatures(
SerFormat.JSON,
SerGraph.FLAT_TREE,
SerClass.CLASSES_KNOWN,
"json + numeric + generated code"
)
);
// manual, numeric (hand-coded schema, no autoboxing)
groups.media.add(JavaBuiltIn.mediaTransformer, JsonManualMediaSerializerNumeric,
new SerFeatures(
SerFormat.JSON,
SerGraph.FLAT_TREE,
SerClass.MANUAL_OPT,
"json + numeric + manual"
)
);
// runtime, numeric (reflection)
groups.media.add(JavaBuiltIn.mediaTransformer, JsonRuntimeMediaSerializerNumeric,
new SerFeatures(
SerFormat.JSON,
SerGraph.FLAT_TREE,
SerClass.ZERO_KNOWLEDGE,
"json + numeric + reflection"
)
);
*/
}
public static final Serializer<MediaContent> JsonMediaSerializer =
new Serializer<MediaContent>()
{
public MediaContent deserialize(byte[] array) throws Exception
{
MediaContent mc = new MediaContent();
JsonIOUtil.mergeFrom(array, mc, mc.cachedSchema(), false);
return mc;
}
public byte[] serialize(MediaContent content) throws Exception
{
return JsonIOUtil.toByteArray(content, content.cachedSchema(), false);
}
public String getName()
{
return "json/protostuff";
}
};
public static final Serializer<MediaContent> JsonMediaSerializerNumeric =
new Serializer<MediaContent>()
{
final LinkedBuffer buffer = LinkedBuffer.allocate(512);
public MediaContent deserialize(byte[] array) throws Exception
{
MediaContent mc = new MediaContent();
JsonIOUtil.mergeFrom(array, mc, mc.cachedSchema(), true);
return mc;
}
public byte[] serialize(MediaContent content) throws Exception
{
try
{
return JsonXIOUtil.toByteArray(content, content.cachedSchema(), true, buffer);
}
finally
{
buffer.clear();
}
}
public String getName()
{
return "json/protostuff+numeric";
}
};
public static final Serializer<data.media.MediaContent> JsonRuntimeMediaSerializer =
new Serializer<data.media.MediaContent>()
{
final Schema<data.media.MediaContent> schema = RuntimeSchema.getSchema(data.media.MediaContent.class);
public data.media.MediaContent deserialize(byte[] array) throws Exception
{
data.media.MediaContent mc = new data.media.MediaContent();
JsonIOUtil.mergeFrom(array, mc, schema, false);
return mc;
}
public byte[] serialize(data.media.MediaContent content) throws Exception
{
return JsonIOUtil.toByteArray(content, schema, false);
}
public String getName()
{
return "json/protostuff-runtime";
}
};
public static final Serializer<data.media.MediaContent> JsonRuntimeMediaSerializerNumeric =
new Serializer<data.media.MediaContent>()
{
final LinkedBuffer buffer = LinkedBuffer.allocate(512);
final Schema<data.media.MediaContent> schema = RuntimeSchema.getSchema(data.media.MediaContent.class);
public data.media.MediaContent deserialize(byte[] array) throws Exception
{
data.media.MediaContent mc = new data.media.MediaContent();
JsonIOUtil.mergeFrom(array, mc, schema, true);
return mc;
}
public byte[] serialize(data.media.MediaContent content) throws Exception
{
try
{
return JsonXIOUtil.toByteArray(content, schema, true, buffer);
}
finally
{
buffer.clear();
}
}
public String getName()
{
return "json/protostuff-runtime+numeric";
}
};
public static final Serializer<data.media.MediaContent> JsonManualMediaSerializer =
new Serializer<data.media.MediaContent>()
{
public data.media.MediaContent deserialize(byte[] array) throws Exception
{
data.media.MediaContent mc = new data.media.MediaContent();
JsonIOUtil.mergeFrom(array, mc, MEDIA_CONTENT_SCHEMA, false);
return mc;
}
public byte[] serialize(data.media.MediaContent content) throws Exception
{
return JsonIOUtil.toByteArray(content, MEDIA_CONTENT_SCHEMA, false);
}
public String getName()
{
return "json/protostuff-manual";
}
};
public static final Serializer<data.media.MediaContent> JsonManualMediaSerializerNumeric =
new Serializer<data.media.MediaContent>()
{
final LinkedBuffer buffer = LinkedBuffer.allocate(512);
public data.media.MediaContent deserialize(byte[] array) throws Exception
{
data.media.MediaContent mc = new data.media.MediaContent();
JsonIOUtil.mergeFrom(array, mc, MEDIA_CONTENT_SCHEMA, true);
return mc;
}
public byte[] serialize(data.media.MediaContent content) throws Exception
{
try
{
return JsonXIOUtil.toByteArray(content, MEDIA_CONTENT_SCHEMA, true, buffer);
}
finally
{
buffer.clear();
}
}
public String getName()
{
return "json/protostuff-manual+numeric";
}
};
}