summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfrsyuki <frsyuki@users.sourceforge.jp>2010-10-24 20:46:22 +0900
committerfrsyuki <frsyuki@users.sourceforge.jp>2010-10-24 20:46:22 +0900
commit7ac4ad3e38d5537e83a36f2d9fb9a5ce872c0c57 (patch)
treec47572c05ff65ac0d2962bd1523c6cd3220911ae
parent0a345cb12bb77c7afc5b29cc4568f717e7862ff6 (diff)
downloadmsgpack-python-7ac4ad3e38d5537e83a36f2d9fb9a5ce872c0c57.tar.gz
java: adds MessagePack.register methods
-rw-r--r--java/src/main/java/org/msgpack/MessagePack.java43
-rw-r--r--java/src/test/java/org/msgpack/TestMessagePackStaticMethods.java73
2 files changed, 111 insertions, 5 deletions
diff --git a/java/src/main/java/org/msgpack/MessagePack.java b/java/src/main/java/org/msgpack/MessagePack.java
index f9dcce8..449f8a0 100644
--- a/java/src/main/java/org/msgpack/MessagePack.java
+++ b/java/src/main/java/org/msgpack/MessagePack.java
@@ -21,6 +21,10 @@ import java.io.OutputStream;
import java.io.InputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
+//import org.msgpack.util.codegen.DynamicTemplate; // FIXME
+import org.msgpack.util.codegen.DynamicPacker;
+import org.msgpack.util.codegen.DynamicConverter;
+import org.msgpack.util.codegen.DynamicUnpacker;
public class MessagePack {
public static byte[] pack(Object obj) {
@@ -110,14 +114,43 @@ public class MessagePack {
}
- //public static void register(Class<?> target); // TODO: auto-detect
+ public static void register(Class<?> target) { // auto-detect
+ // FIXME
+ //Template tmpl;
+ //if(List.isAssignableFrom(target)) {
+ //} else if(Set.isAssignableFrom(target)) {
+ //} else if(Map.isAssignableFrom(target)) {
+ //} else if(Collection.isAssignableFrom(target)) {
+ //} else if(BigInteger.isAssignableFrom(target)) {
+ //} else {
+ //}
+
+ // FIXME
+ //Template tmpl = DynamicTemplate.create(target);
+ //register(target, tmpl);
+
+ // FIXME
+ CustomPacker.register(target, DynamicPacker.create(target));
+ CustomConverter.register(target, DynamicConverter.create(target));
+ CustomUnpacker.register(target, DynamicUnpacker.create(target));
+ }
- //public static void register(Class<?> target, Template tmpl); // TODO
+ public static void register(Class<?> target, Template tmpl) {
+ CustomPacker.register(target, tmpl);
+ CustomConverter.register(target, tmpl);
+ CustomUnpacker.register(target, tmpl);
+ }
- //public static void registerPacker(Class<?> target, MessagePacker packer); // TODO
+ public static void registerPacker(Class<?> target, MessagePacker packer) {
+ CustomPacker.register(target, packer);
+ }
- //public static void registerConverter(Class<?> target, MessageConverter converter); // TODO
+ public static void registerConverter(Class<?> target, MessageConverter converter) {
+ CustomConverter.register(target, converter);
+ }
- //public static void registerUnpacker(Class<?> target, MessageUnpacker unpacker); // TODO
+ public static void registerUnpacker(Class<?> target, MessageUnpacker unpacker) {
+ CustomUnpacker.register(target, unpacker);
+ }
}
diff --git a/java/src/test/java/org/msgpack/TestMessagePackStaticMethods.java b/java/src/test/java/org/msgpack/TestMessagePackStaticMethods.java
index b91615b..f2aad15 100644
--- a/java/src/test/java/org/msgpack/TestMessagePackStaticMethods.java
+++ b/java/src/test/java/org/msgpack/TestMessagePackStaticMethods.java
@@ -12,23 +12,51 @@ import org.junit.Test;
import junit.framework.TestCase;
public class TestMessagePackStaticMethods extends TestCase {
+ public static class CustomClass {
+ public boolean bool;
+ public String str;
+ public List<Integer> list;
+
+ public boolean equals(Object obj) {
+ if (obj == this) {
+ return true;
+ }
+ if (!(obj instanceof CustomClass)) {
+ return false;
+ }
+ CustomClass o = (CustomClass)obj;
+ return bool == o.bool && str.equals(o.str) && list.equals(o.list);
+ }
+
+ public String toString() {
+ return "CustomClass<bool:"+bool+" str:"+str+" list:"+list+">";
+ }
+ }
+
+ static {
+ MessagePack.register(CustomClass.class);
+ }
+
@Test
public void testPackToByteArray() throws Exception {
byte[] a = MessagePack.pack("msgpack");
byte[] b = MessagePack.pack((Object)1);
byte[] c = MessagePack.pack((Object)null);
byte[] d = MessagePack.pack(createStringList());
+ byte[] e = MessagePack.pack(createCustomClass());
{
MessagePackObject aobj = MessagePack.unpack(a);
MessagePackObject bobj = MessagePack.unpack(b);
MessagePackObject cobj = MessagePack.unpack(c);
MessagePackObject dobj = MessagePack.unpack(d);
+ MessagePackObject eobj = MessagePack.unpack(e);
assertEquals(aobj, RawType.create("msgpack"));
assertEquals(bobj, IntegerType.create(1));
assertEquals(cobj, NilType.create());
assertEquals(dobj, createStringList_dynamic());
+ assertEquals(eobj, createCustomClass_dynamic());
}
}
@@ -42,6 +70,8 @@ public class TestMessagePackStaticMethods extends TestCase {
MessagePack.pack(cout, (Object)null);
ByteArrayOutputStream dout = new ByteArrayOutputStream();
MessagePack.pack(dout, createStringList());
+ ByteArrayOutputStream eout = new ByteArrayOutputStream();
+ MessagePack.pack(eout, createCustomClass());
{
InputStream ain = new ByteArrayInputStream(aout.toByteArray());
@@ -52,11 +82,14 @@ public class TestMessagePackStaticMethods extends TestCase {
MessagePackObject cobj = MessagePack.unpack(cin);
InputStream din = new ByteArrayInputStream(dout.toByteArray());
MessagePackObject dobj = MessagePack.unpack(din);
+ InputStream ein = new ByteArrayInputStream(eout.toByteArray());
+ MessagePackObject eobj = MessagePack.unpack(ein);
assertEquals(aobj, RawType.create("msgpack"));
assertEquals(bobj, IntegerType.create(1));
assertEquals(cobj, NilType.create());
assertEquals(dobj, createStringList_dynamic());
+ assertEquals(eobj, createCustomClass_dynamic());
}
}
@@ -66,6 +99,7 @@ public class TestMessagePackStaticMethods extends TestCase {
byte[] b = MessagePack.pack((Object)1, TInteger);
byte[] c = MessagePack.pack((Object)null, TAny);
byte[] d = MessagePack.pack(createStringList(), tList(TString));
+ byte[] e = MessagePack.pack(createCustomClass(), tClass(CustomClass.class));
{
Object aobj = MessagePack.unpack(a, TString);
@@ -73,20 +107,26 @@ public class TestMessagePackStaticMethods extends TestCase {
Object cobj_any = MessagePack.unpack(c, TAny);
Object cobj_obj = MessagePack.unpack(c, tOptional(TAny));
Object dobj = MessagePack.unpack(d, tList(TString));
+ Object eobj = MessagePack.unpack(e, tClass(CustomClass.class));
+
assertEquals(aobj, "msgpack");
assertEquals(bobj, 1);
assertEquals(cobj_any, NilType.create());
assertEquals(cobj_obj, null);
assertEquals(dobj, createStringList());
+ assertEquals(eobj, createCustomClass());
}
{
String aobj = MessagePack.unpack(a, String.class);
Integer bobj = MessagePack.unpack(b, Integer.class);
Object cobj = MessagePack.unpack(c, Object.class);
+ CustomClass eobj = MessagePack.unpack(e, CustomClass.class);
+
assertEquals(aobj, "msgpack");
assertEquals(bobj, (Integer)1);
assertEquals(cobj, null);
+ assertEquals(eobj, createCustomClass());
}
}
@@ -100,6 +140,8 @@ public class TestMessagePackStaticMethods extends TestCase {
MessagePack.pack(cout, (Object)null);
ByteArrayOutputStream dout = new ByteArrayOutputStream();
MessagePack.pack(dout, createStringList());
+ ByteArrayOutputStream eout = new ByteArrayOutputStream();
+ MessagePack.pack(eout, createCustomClass());
{
InputStream ain = new ByteArrayInputStream(aout.toByteArray());
@@ -112,12 +154,15 @@ public class TestMessagePackStaticMethods extends TestCase {
Object cobj_obj = MessagePack.unpack(cin_obj, tOptional(TAny));
InputStream din = new ByteArrayInputStream(dout.toByteArray());
Object dobj = MessagePack.unpack(din, tList(TString));
+ InputStream ein = new ByteArrayInputStream(eout.toByteArray());
+ Object eobj = MessagePack.unpack(ein, tClass(CustomClass.class));
assertEquals(aobj, "msgpack");
assertEquals(bobj, 1);
assertEquals(cobj_any, NilType.create());
assertEquals(cobj_obj, null);
assertEquals(dobj, createStringList());
+ assertEquals(eobj, createCustomClass());
}
{
@@ -127,13 +172,17 @@ public class TestMessagePackStaticMethods extends TestCase {
Integer bobj = MessagePack.unpack(bin, Integer.class);
InputStream cin = new ByteArrayInputStream(cout.toByteArray());
Object cobj = MessagePack.unpack(cin, Object.class);
+ InputStream ein = new ByteArrayInputStream(eout.toByteArray());
+ Object eobj = MessagePack.unpack(ein, CustomClass.class);
assertEquals(aobj, "msgpack");
assertEquals(bobj, (Integer)1);
assertEquals(cobj, null);
+ assertEquals(eobj, createCustomClass());
}
}
+
private List<String> createStringList() {
List<String> list = new ArrayList<String>();
list.add("frsyuki");
@@ -149,5 +198,29 @@ public class TestMessagePackStaticMethods extends TestCase {
array[2] = RawType.create("gem-compile");
return ArrayType.create(array);
}
+
+
+ private CustomClass createCustomClass() {
+ CustomClass obj = new CustomClass();
+ obj.bool = true;
+ obj.str = "viver";
+ obj.list = new ArrayList<Integer>();
+ obj.list.add(1);
+ obj.list.add(2);
+ obj.list.add(3);
+ return obj;
+ }
+
+ private MessagePackObject createCustomClass_dynamic() {
+ MessagePackObject[] obj = new MessagePackObject[3];
+ obj[0] = BooleanType.create(true);
+ obj[1] = RawType.create("viver");
+ MessagePackObject[] list = new MessagePackObject[3];
+ list[0] = IntegerType.create(1);
+ list[1] = IntegerType.create(2);
+ list[2] = IntegerType.create(3);
+ obj[2] = ArrayType.create(list);
+ return ArrayType.create(obj);
+ }
}