summaryrefslogtreecommitdiff
path: root/java/src/main
diff options
context:
space:
mode:
authorfrsyuki <frsyuki@users.sourceforge.jp>2010-08-18 18:10:30 +0900
committerfrsyuki <frsyuki@users.sourceforge.jp>2010-08-18 18:10:30 +0900
commit8b79e6d3c72a02f4dc039799e3cd370c06e966b0 (patch)
treef9433b63c93a19e2eb058aec48956b61ac2b9e33 /java/src/main
parent8c67087a154da0e7cdc32c0b676d2956ce1d0f47 (diff)
downloadmsgpack-python-8b79e6d3c72a02f4dc039799e3cd370c06e966b0.tar.gz
java: uses MessagePackObject instead of Object for type of deserialized objects
Diffstat (limited to 'java/src/main')
-rw-r--r--java/src/main/java/org/msgpack/BufferedUnpackerImpl.java8
-rw-r--r--java/src/main/java/org/msgpack/MessageTypeException.java10
-rw-r--r--java/src/main/java/org/msgpack/Packer.java6
-rw-r--r--java/src/main/java/org/msgpack/Schema.java78
-rw-r--r--java/src/main/java/org/msgpack/UnpackIterator.java4
-rw-r--r--java/src/main/java/org/msgpack/UnpackResult.java6
-rw-r--r--java/src/main/java/org/msgpack/Unpacker.java30
-rw-r--r--java/src/main/java/org/msgpack/UnpackerImpl.java132
-rw-r--r--java/src/main/java/org/msgpack/schema/BooleanSchema.java64
-rw-r--r--java/src/main/java/org/msgpack/schema/ByteArraySchema.java97
-rw-r--r--java/src/main/java/org/msgpack/schema/ByteSchema.java96
-rw-r--r--java/src/main/java/org/msgpack/schema/ClassGenerator.java244
-rw-r--r--java/src/main/java/org/msgpack/schema/ClassSchema.java91
-rw-r--r--java/src/main/java/org/msgpack/schema/DoubleSchema.java74
-rw-r--r--java/src/main/java/org/msgpack/schema/FieldSchema.java43
-rw-r--r--java/src/main/java/org/msgpack/schema/FloatSchema.java74
-rw-r--r--java/src/main/java/org/msgpack/schema/GenericClassSchema.java87
-rw-r--r--java/src/main/java/org/msgpack/schema/GenericSchema.java129
-rw-r--r--java/src/main/java/org/msgpack/schema/IArraySchema.java26
-rw-r--r--java/src/main/java/org/msgpack/schema/IMapSchema.java27
-rw-r--r--java/src/main/java/org/msgpack/schema/IntSchema.java96
-rw-r--r--java/src/main/java/org/msgpack/schema/ListSchema.java111
-rw-r--r--java/src/main/java/org/msgpack/schema/LongSchema.java80
-rw-r--r--java/src/main/java/org/msgpack/schema/MapSchema.java106
-rw-r--r--java/src/main/java/org/msgpack/schema/ReflectionClassSchema.java64
-rw-r--r--java/src/main/java/org/msgpack/schema/SSchemaParser.java264
-rw-r--r--java/src/main/java/org/msgpack/schema/SetSchema.java115
-rw-r--r--java/src/main/java/org/msgpack/schema/ShortSchema.java93
-rw-r--r--java/src/main/java/org/msgpack/schema/SpecificClassSchema.java122
-rw-r--r--java/src/main/java/org/msgpack/schema/StringSchema.java102
30 files changed, 61 insertions, 2418 deletions
diff --git a/java/src/main/java/org/msgpack/BufferedUnpackerImpl.java b/java/src/main/java/org/msgpack/BufferedUnpackerImpl.java
index f4ed35b..9496238 100644
--- a/java/src/main/java/org/msgpack/BufferedUnpackerImpl.java
+++ b/java/src/main/java/org/msgpack/BufferedUnpackerImpl.java
@@ -47,7 +47,7 @@ abstract class BufferedUnpackerImpl extends UnpackerImpl {
offset = noffset;
} while(!super.isFinished());
- Object obj = super.getData();
+ MessagePackObject obj = super.getData();
super.reset();
result.done(obj);
@@ -198,7 +198,7 @@ abstract class BufferedUnpackerImpl extends UnpackerImpl {
{
long o = castBuffer.getLong(0);
if(o < 0) {
- // FIXME
+ // FIXME unpackBigInteger
throw new MessageTypeException("uint 64 bigger than 0x7fffffff is not supported");
}
advance(9);
@@ -231,6 +231,8 @@ abstract class BufferedUnpackerImpl extends UnpackerImpl {
}
}
+ // FIXME unpackBigInteger
+
final float unpackFloat() throws IOException, MessageTypeException {
more(1);
int b = buffer[offset];
@@ -414,7 +416,7 @@ abstract class BufferedUnpackerImpl extends UnpackerImpl {
return s;
}
- final Object unpackObject() throws IOException {
+ final MessagePackObject unpackObject() throws IOException {
UnpackResult result = new UnpackResult();
if(!next(result)) {
super.reset();
diff --git a/java/src/main/java/org/msgpack/MessageTypeException.java b/java/src/main/java/org/msgpack/MessageTypeException.java
index 0fa37b7..698ef6d 100644
--- a/java/src/main/java/org/msgpack/MessageTypeException.java
+++ b/java/src/main/java/org/msgpack/MessageTypeException.java
@@ -23,15 +23,5 @@ public class MessageTypeException extends RuntimeException {
public MessageTypeException(String s) {
super(s);
}
-
- public static MessageTypeException invalidConvert(Object from, Schema to) {
- return new MessageTypeException(from.getClass().getName()+" cannot be convert to "+to.getExpression());
- }
-
- /* FIXME
- public static MessageTypeException schemaMismatch(Schema to) {
- return new MessageTypeException("schema mismatch "+to.getExpression());
- }
- */
}
diff --git a/java/src/main/java/org/msgpack/Packer.java b/java/src/main/java/org/msgpack/Packer.java
index fbf7e35..98af3d6 100644
--- a/java/src/main/java/org/msgpack/Packer.java
+++ b/java/src/main/java/org/msgpack/Packer.java
@@ -308,12 +308,6 @@ public class Packer {
}
- public Packer packWithSchema(Object o, Schema s) throws IOException {
- s.pack(this, o);
- return this;
- }
-
-
public Packer packString(String s) throws IOException {
byte[] b = ((String)s).getBytes("UTF-8");
packRaw(b.length);
diff --git a/java/src/main/java/org/msgpack/Schema.java b/java/src/main/java/org/msgpack/Schema.java
deleted file mode 100644
index 25e10f9..0000000
--- a/java/src/main/java/org/msgpack/Schema.java
+++ /dev/null
@@ -1,78 +0,0 @@
-//
-// MessagePack for Java
-//
-// Copyright (C) 2009-2010 FURUHASHI Sadayuki
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//
-package org.msgpack;
-
-import java.io.Writer;
-import java.io.IOException;
-import org.msgpack.schema.SSchemaParser;
-//import org.msgpack.schema.ClassGenerator;
-
-public abstract class Schema {
- public Schema() { }
-
- public abstract String getClassName();
- public abstract String getExpression();
-
- public static Schema parse(String source) {
- return SSchemaParser.parse(source);
- }
-
- public static Schema load(String source) {
- return SSchemaParser.load(source);
- }
-
- public abstract void pack(Packer pk, Object obj) throws IOException;
- public abstract Object convert(Object obj) throws MessageTypeException;
-
- public Object createFromNil() {
- return null;
- }
-
- public Object createFromBoolean(boolean v) {
- throw new MessageTypeException("type error");
- }
-
- public Object createFromByte(byte v) {
- throw new MessageTypeException("type error");
- }
-
- public Object createFromShort(short v) {
- throw new MessageTypeException("type error");
- }
-
- public Object createFromInt(int v) {
- throw new MessageTypeException("type error");
- }
-
- public Object createFromLong(long v) {
- throw new MessageTypeException("type error");
- }
-
- public Object createFromFloat(float v) {
- throw new MessageTypeException("type error");
- }
-
- public Object createFromDouble(double v) {
- throw new MessageTypeException("type error");
- }
-
- public Object createFromRaw(byte[] b, int offset, int length) {
- throw new MessageTypeException("type error");
- }
-}
-
diff --git a/java/src/main/java/org/msgpack/UnpackIterator.java b/java/src/main/java/org/msgpack/UnpackIterator.java
index f17e229..8c778b6 100644
--- a/java/src/main/java/org/msgpack/UnpackIterator.java
+++ b/java/src/main/java/org/msgpack/UnpackIterator.java
@@ -21,7 +21,7 @@ import java.io.IOException;
import java.util.Iterator;
import java.util.NoSuchElementException;
-public class UnpackIterator extends UnpackResult implements Iterator<Object> {
+public class UnpackIterator extends UnpackResult implements Iterator<MessagePackObject> {
private Unpacker pac;
UnpackIterator(Unpacker pac) {
@@ -38,7 +38,7 @@ public class UnpackIterator extends UnpackResult implements Iterator<Object> {
}
}
- public Object next() {
+ public MessagePackObject next() {
if(!finished && !hasNext()) {
throw new NoSuchElementException();
}
diff --git a/java/src/main/java/org/msgpack/UnpackResult.java b/java/src/main/java/org/msgpack/UnpackResult.java
index cec18a1..bb981c1 100644
--- a/java/src/main/java/org/msgpack/UnpackResult.java
+++ b/java/src/main/java/org/msgpack/UnpackResult.java
@@ -19,13 +19,13 @@ package org.msgpack;
public class UnpackResult {
protected boolean finished = false;
- protected Object data = null;
+ protected MessagePackObject data = null;
public boolean isFinished() {
return finished;
}
- public Object getData() {
+ public MessagePackObject getData() {
return data;
}
@@ -34,7 +34,7 @@ public class UnpackResult {
data = null;
}
- void done(Object obj) {
+ void done(MessagePackObject obj) {
finished = true;
data = obj;
}
diff --git a/java/src/main/java/org/msgpack/Unpacker.java b/java/src/main/java/org/msgpack/Unpacker.java
index 32bab64..3a95243 100644
--- a/java/src/main/java/org/msgpack/Unpacker.java
+++ b/java/src/main/java/org/msgpack/Unpacker.java
@@ -26,8 +26,8 @@ import java.nio.ByteBuffer;
/**
* Unpacker enables you to deserialize objects from stream.
*
- * Unpacker provides Buffered API, Unbuffered API, Schema API
- * and Direct Conversion API.
+ * Unpacker provides Buffered API, Unbuffered API and
+ * Direct Conversion API.
*
* Buffered API uses the internal buffer of the Unpacker.
* Following code uses Buffered API with an InputStream:
@@ -39,7 +39,7 @@ import java.nio.ByteBuffer;
* UnpackResult result = pac.next();
*
* // use an iterator.
- * for(Object obj : pac) {
+ * for(MessagePackObject obj : pac) {
* // use MessageConvertable interface to convert the
* // the generic object to the specific type.
* }
@@ -56,7 +56,7 @@ import java.nio.ByteBuffer;
* pac.feed(input_bytes);
*
* // use next() method or iterators.
- * for(Object obj : pac) {
+ * for(MessagePackObject obj : pac) {
* // ...
* }
* </pre>
@@ -75,7 +75,7 @@ import java.nio.ByteBuffer;
* System.in.read(pac.getBuffer(), pac.getBufferOffset(), pac.getBufferCapacity());
*
* // use next() method or iterators.
- * for(Object obj : pac) {
+ * for(MessagePackObject obj : pac) {
* // ...
* }
* </pre>
@@ -96,12 +96,12 @@ import java.nio.ByteBuffer;
*
* // take out object if deserialized object is ready.
* if(pac.isFinished()) {
- * Object obj = pac.getData();
+ * MessagePackObject obj = pac.getData();
* // ...
* }
* </pre>
*/
-public class Unpacker implements Iterable<Object> {
+public class Unpacker implements Iterable<MessagePackObject> {
// buffer:
// +---------------------------------------------+
@@ -170,16 +170,6 @@ public class Unpacker implements Iterable<Object> {
this.stream = stream;
}
- /**
- * Sets schema to convert deserialized object into specific type.
- * Default schema is {@link GenericSchema} that leaves objects for generic type. Use {@link MessageConvertable#messageConvert(Object)} method to convert the generic object.
- * @param s schem to use
- */
- public Unpacker useSchema(Schema s) {
- impl.setSchema(s);
- return this;
- }
-
/**
* Gets the input stream.
@@ -255,7 +245,7 @@ public class Unpacker implements Iterable<Object> {
/**
* Returns the iterator that calls {@link next()} method repeatedly.
*/
- public Iterator<Object> iterator() {
+ public Iterator<MessagePackObject> iterator() {
return new UnpackIterator(this);
}
@@ -387,7 +377,7 @@ public class Unpacker implements Iterable<Object> {
/**
* Gets the object deserialized by {@link execute(byte[])} method.
*/
- public Object getData() {
+ public MessagePackObject getData() {
return impl.getData();
}
@@ -557,7 +547,7 @@ public class Unpacker implements Iterable<Object> {
* Gets one {@code Object} value from the buffer.
* This method calls {@link fill()} method if needed.
*/
- final public Object unpackObject() throws IOException {
+ final public MessagePackObject unpackObject() throws IOException {
return impl.unpackObject();
}
diff --git a/java/src/main/java/org/msgpack/UnpackerImpl.java b/java/src/main/java/org/msgpack/UnpackerImpl.java
index 10cf5f0..f004e6c 100644
--- a/java/src/main/java/org/msgpack/UnpackerImpl.java
+++ b/java/src/main/java/org/msgpack/UnpackerImpl.java
@@ -18,11 +18,7 @@
package org.msgpack;
import java.nio.ByteBuffer;
-//import java.math.BigInteger;
-import org.msgpack.*;
-import org.msgpack.schema.GenericSchema;
-import org.msgpack.schema.IMapSchema;
-import org.msgpack.schema.IArraySchema;
+import org.msgpack.object.*;
public class UnpackerImpl {
static final int CS_HEADER = 0x00;
@@ -55,30 +51,19 @@ public class UnpackerImpl {
private int[] stack_ct = new int[MAX_STACK_SIZE];
private int[] stack_count = new int[MAX_STACK_SIZE];
private Object[] stack_obj = new Object[MAX_STACK_SIZE];
- private Schema[] stack_schema = new Schema[MAX_STACK_SIZE];
private int top_ct;
private int top_count;
private Object top_obj;
- private Schema top_schema;
private ByteBuffer castBuffer = ByteBuffer.allocate(8);
private boolean finished = false;
- private Object data = null;
-
- private static final Schema GENERIC_SCHEMA = new GenericSchema();
- private Schema rootSchema;
+ private MessagePackObject data = null;
public UnpackerImpl()
{
- setSchema(GENERIC_SCHEMA);
- }
-
- public void setSchema(Schema schema)
- {
- this.rootSchema = schema;
reset();
}
- public final Object getData()
+ public final MessagePackObject getData()
{
return data;
}
@@ -94,7 +79,6 @@ public class UnpackerImpl {
top_ct = 0;
top_count = 0;
top_obj = null;
- top_schema = rootSchema;
}
public final void reset()
@@ -127,20 +111,20 @@ public class UnpackerImpl {
if((b & 0x80) == 0) { // Positive Fixnum
//System.out.println("positive fixnum "+b);
- obj = top_schema.createFromByte((byte)b);
+ obj = IntegerType.create((byte)b);
break _push;
}
if((b & 0xe0) == 0xe0) { // Negative Fixnum
//System.out.println("negative fixnum "+b);
- obj = top_schema.createFromByte((byte)b);
+ obj = IntegerType.create((byte)b);
break _push;
}
if((b & 0xe0) == 0xa0) { // FixRaw
trail = b & 0x1f;
if(trail == 0) {
- obj = top_schema.createFromRaw(new byte[0], 0, 0);
+ obj = new RawType(new byte[0]);
break _push;
}
cs = ACS_RAW_VALUE;
@@ -151,25 +135,20 @@ public class UnpackerImpl {
if(top >= MAX_STACK_SIZE) {
throw new UnpackException("parse error");
}
- if(!(top_schema instanceof IArraySchema)) {
- throw new RuntimeException("type error");
- }
count = b & 0x0f;
//System.out.println("fixarray count:"+count);
- obj = new Object[count];
+ obj = new MessagePackObject[count];
if(count == 0) {
- obj = ((IArraySchema)top_schema).createFromArray((Object[])obj);
+ obj = new ArrayType((MessagePackObject[])obj);
break _push;
}
++top;
stack_obj[top] = top_obj;
stack_ct[top] = top_ct;
stack_count[top] = top_count;
- stack_schema[top] = top_schema;
top_obj = obj;
top_ct = CT_ARRAY_ITEM;
top_count = count;
- top_schema = ((IArraySchema)top_schema).getElementSchema(0);
break _header_again;
}
@@ -177,13 +156,10 @@ public class UnpackerImpl {
if(top >= MAX_STACK_SIZE) {
throw new UnpackException("parse error");
}
- if(!(top_schema instanceof IMapSchema)) {
- throw new RuntimeException("type error");
- }
count = b & 0x0f;
- obj = new Object[count*2];
+ obj = new MessagePackObject[count*2];
if(count == 0) {
- obj = ((IMapSchema)top_schema).createFromMap((Object[])obj);
+ obj = new MapType((MessagePackObject[])obj);
break _push;
}
//System.out.println("fixmap count:"+count);
@@ -191,23 +167,21 @@ public class UnpackerImpl {
stack_obj[top] = top_obj;
stack_ct[top] = top_ct;
stack_count[top] = top_count;
- stack_schema[top] = top_schema;
top_obj = obj;
top_ct = CT_MAP_KEY;
top_count = count;
- top_schema = ((IMapSchema)top_schema).getKeySchema();
break _header_again;
}
switch(b & 0xff) { // FIXME
case 0xc0: // nil
- obj = top_schema.createFromNil();
+ obj = new NilType();
break _push;
case 0xc2: // false
- obj = top_schema.createFromBoolean(false);
+ obj = new BooleanType(false);
break _push;
case 0xc3: // true
- obj = top_schema.createFromBoolean(true);
+ obj = new BooleanType(true);
break _push;
case 0xca: // float
case 0xcb: // double
@@ -251,13 +225,13 @@ public class UnpackerImpl {
case CS_FLOAT:
castBuffer.rewind();
castBuffer.put(src, n, 4);
- obj = top_schema.createFromFloat( castBuffer.getFloat(0) );
+ obj = FloatType.create( castBuffer.getFloat(0) );
//System.out.println("float "+obj);
break _push;
case CS_DOUBLE:
castBuffer.rewind();
castBuffer.put(src, n, 8);
- obj = top_schema.createFromDouble( castBuffer.getDouble(0) );
+ obj = FloatType.create( castBuffer.getDouble(0) );
//System.out.println("double "+obj);
break _push;
case CS_UINT_8:
@@ -265,7 +239,7 @@ public class UnpackerImpl {
//System.out.println(src[n]);
//System.out.println(src[n+1]);
//System.out.println(src[n-1]);
- obj = top_schema.createFromShort( (short)((src[n]) & 0xff) );
+ obj = IntegerType.create( (short)((src[n]) & 0xff) );
//System.out.println("uint8 "+obj);
break _push;
case CS_UINT_16:
@@ -273,13 +247,13 @@ public class UnpackerImpl {
//System.out.println(src[n+1]);
castBuffer.rewind();
castBuffer.put(src, n, 2);
- obj = top_schema.createFromInt( ((int)castBuffer.getShort(0)) & 0xffff );
+ obj = IntegerType.create( ((int)castBuffer.getShort(0)) & 0xffff );
//System.out.println("uint 16 "+obj);
break _push;
case CS_UINT_32:
castBuffer.rewind();
castBuffer.put(src, n, 4);
- obj = top_schema.createFromLong( ((long)castBuffer.getInt(0)) & 0xffffffffL );
+ obj = IntegerType.create( ((long)castBuffer.getInt(0)) & 0xffffffffL );
//System.out.println("uint 32 "+obj);
break _push;
case CS_UINT_64:
@@ -292,34 +266,34 @@ public class UnpackerImpl {
//obj = GenericBigInteger.valueOf(o & 0x7fffffffL).setBit(31);
throw new UnpackException("uint 64 bigger than 0x7fffffff is not supported");
} else {
- obj = top_schema.createFromLong( o );
+ obj = IntegerType.create(o);
}
}
break _push;
case CS_INT_8:
- obj = top_schema.createFromByte( src[n] );
+ obj = IntegerType.create( src[n] );
break _push;
case CS_INT_16:
castBuffer.rewind();
castBuffer.put(src, n, 2);
- obj = top_schema.createFromShort( castBuffer.getShort(0) );
+ obj = IntegerType.create( castBuffer.getShort(0) );
break _push;
case CS_INT_32:
castBuffer.rewind();
castBuffer.put(src, n, 4);
- obj = top_schema.createFromInt( castBuffer.getInt(0) );
+ obj = IntegerType.create( castBuffer.getInt(0) );
break _push;
case CS_INT_64:
castBuffer.rewind();
castBuffer.put(src, n, 8);
- obj = top_schema.createFromLong( castBuffer.getLong(0) );
+ obj = IntegerType.create( castBuffer.getLong(0) );
break _push;
case CS_RAW_16:
castBuffer.rewind();
castBuffer.put(src, n, 2);
trail = ((int)castBuffer.getShort(0)) & 0xffff;
if(trail == 0) {
- obj = top_schema.createFromRaw(new byte[0], 0, 0);
+ obj = new RawType(new byte[0]);
break _push;
}
cs = ACS_RAW_VALUE;
@@ -330,77 +304,67 @@ public class UnpackerImpl {
// FIXME overflow check
trail = castBuffer.getInt(0) & 0x7fffffff;
if(trail == 0) {
- obj = top_schema.createFromRaw(new byte[0], 0, 0);
+ obj = new RawType(new byte[0]);
break _push;
}
cs = ACS_RAW_VALUE;
- case ACS_RAW_VALUE:
- obj = top_schema.createFromRaw(src, n, trail);
+ case ACS_RAW_VALUE: {
+ byte[] raw = new byte[trail];
+ System.arraycopy(src, n, raw, 0, trail);
+ obj = new RawType(raw);
+ }
break _push;
case CS_ARRAY_16:
if(top >= MAX_STACK_SIZE) {
throw new UnpackException("parse error");
}
- if(!(top_schema instanceof IArraySchema)) {
- throw new RuntimeException("type error");
- }
castBuffer.rewind();
castBuffer.put(src, n, 2);
count = ((int)castBuffer.getShort(0)) & 0xffff;
- obj = new Object[count];
+ obj = new MessagePackObject[count];
if(count == 0) {
- obj = ((IArraySchema)top_schema).createFromArray((Object[])obj);
+ obj = new ArrayType((MessagePackObject[])obj);
break _push;
}
++top;
stack_obj[top] = top_obj;
stack_ct[top] = top_ct;
stack_count[top] = top_count;
- stack_schema[top] = top_schema;
top_obj = obj;
top_ct = CT_ARRAY_ITEM;
top_count = count;
- top_schema = ((IArraySchema)top_schema).getElementSchema(0);
break _header_again;
case CS_ARRAY_32:
if(top >= MAX_STACK_SIZE) {
throw new UnpackException("parse error");
}
- if(!(top_schema instanceof IArraySchema)) {
- throw new RuntimeException("type error");
- }
castBuffer.rewind();
castBuffer.put(src, n, 4);
// FIXME overflow check
count = castBuffer.getInt(0) & 0x7fffffff;
- obj = new Object[count];
+ obj = new MessagePackObject[count];
if(count == 0) {
- obj = ((IArraySchema)top_schema).createFromArray((Object[])obj);
+ obj = new ArrayType((MessagePackObject[])obj);
break _push;
}
++top;
stack_obj[top] = top_obj;
stack_ct[top] = top_ct;
stack_count[top] = top_count;
- stack_schema[top] = top_schema;
top_obj = obj;
top_ct = CT_ARRAY_ITEM;
top_count = count;
- top_schema = ((IArraySchema)top_schema).getElementSchema(0);
break _header_again;
case CS_MAP_16:
if(top >= MAX_STACK_SIZE) {
throw new UnpackException("parse error");
}
- if(!(top_schema instanceof IMapSchema)) {
- throw new RuntimeException("type error");
- }
castBuffer.rewind();
castBuffer.put(src, n, 2);
count = ((int)castBuffer.getShort(0)) & 0xffff;
- obj = new Object[count*2];
+ obj = new MessagePackObject[count*2];
if(count == 0) {
- obj = ((IMapSchema)top_schema).createFromMap((Object[])obj);
+ obj = new MapType((MessagePackObject[])obj);
break _push;
}
//System.out.println("fixmap count:"+count);
@@ -408,26 +372,21 @@ public class UnpackerImpl {
stack_obj[top] = top_obj;
stack_ct[top] = top_ct;
stack_count[top] = top_count;
- stack_schema[top] = top_schema;
top_obj = obj;
top_ct = CT_MAP_KEY;
top_count = count;
- top_schema = ((IMapSchema)top_schema).getKeySchema();
break _header_again;
case CS_MAP_32:
if(top >= MAX_STACK_SIZE) {
throw new UnpackException("parse error");
}
- if(!(top_schema instanceof IMapSchema)) {
- throw new RuntimeException("type error");
- }
castBuffer.rewind();
castBuffer.put(src, n, 4);
// FIXME overflow check
count = castBuffer.getInt(0) & 0x7fffffff;
- obj = new Object[count*2];
+ obj = new MessagePackObject[count*2];
if(count == 0) {
- obj = ((IMapSchema)top_schema).createFromMap((Object[])obj);
+ obj = new MapType((MessagePackObject[])obj);
break _push;
}
//System.out.println("fixmap count:"+count);
@@ -435,11 +394,9 @@ public class UnpackerImpl {
stack_obj[top] = top_obj;
stack_ct[top] = top_ct;
stack_count[top] = top_count;
- stack_schema[top] = top_schema;
top_obj = obj;
top_ct = CT_MAP_KEY;
top_count = count;
- top_schema = ((IMapSchema)top_schema).getKeySchema();
break _header_again;
default:
throw new UnpackException("parse error");
@@ -454,7 +411,7 @@ public class UnpackerImpl {
//System.out.println("push top:"+top);
if(top == -1) {
++i;
- data = obj;
+ data = (MessagePackObject)obj;
finished = true;
break _out;
}
@@ -468,14 +425,10 @@ public class UnpackerImpl {
top_obj = stack_obj[top];
top_ct = stack_ct[top];
top_count = stack_count[top];
- top_schema = stack_schema[top];
- obj = ((IArraySchema)top_schema).createFromArray(ar);
+ obj = new ArrayType((MessagePackObject[])ar);
stack_obj[top] = null;
- stack_schema[top] = null;
--top;
break _push;
- } else {
- top_schema = ((IArraySchema)stack_schema[top]).getElementSchema(ar.length - top_count);
}
break _header_again;
}
@@ -484,7 +437,6 @@ public class UnpackerImpl {
Object[] mp = (Object[])top_obj;
mp[mp.length - top_count*2] = obj;
top_ct = CT_MAP_VALUE;
- top_schema = ((IMapSchema)stack_schema[top]).getValueSchema();
break _header_again;
}
case CT_MAP_VALUE: {
@@ -495,10 +447,8 @@ public class UnpackerImpl {
top_obj = stack_obj[top];
top_ct = stack_ct[top];
top_count = stack_count[top];
- top_schema = stack_schema[top];
- obj = ((IMapSchema)top_schema).createFromMap(mp);
+ obj = new MapType((MessagePackObject[])mp);
stack_obj[top] = null;
- stack_schema[top] = null;
--top;
break _push;
}
diff --git a/java/src/main/java/org/msgpack/schema/BooleanSchema.java b/java/src/main/java/org/msgpack/schema/BooleanSchema.java
deleted file mode 100644
index 2c325f1..0000000
--- a/java/src/main/java/org/msgpack/schema/BooleanSchema.java
+++ /dev/null
@@ -1,64 +0,0 @@
-//
-// MessagePack for Java
-//
-// Copyright (C) 2009-2010 FURUHASHI Sadayuki
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//
-package org.msgpack.schema;
-
-import java.io.IOException;
-import org.msgpack.*;
-
-public class BooleanSchema extends Schema {
- public BooleanSchema() { }
-
- @Override
- public String getClassName() {
- return "Boolean";
- }
-
- @Override
- public String getExpression() {
- return "boolean";
- }
-
- @Override
- public void pack(Packer pk, Object obj) throws IOException {
- if(obj instanceof Boolean) {
- pk.packBoolean((Boolean)obj);
- } else if(obj == null) {
- pk.packNil();
- } else {
- throw MessageTypeException.invalidConvert(obj, this);
- }
- }
-
- public static final boolean convertBoolean(Object obj) throws MessageTypeException {
- if(obj instanceof Boolean) {
- return (Boolean)obj;
- }
- throw new MessageTypeException();
- }
-
- @Override
- public Object convert(Object obj) throws MessageTypeException {
- return convertBoolean(obj);
- }
-
- @Override
- public Object createFromBoolean(boolean v) {
- return v;
- }
-}
-
diff --git a/java/src/main/java/org/msgpack/schema/ByteArraySchema.java b/java/src/main/java/org/msgpack/schema/ByteArraySchema.java
deleted file mode 100644
index af9c0ed..0000000
--- a/java/src/main/java/org/msgpack/schema/ByteArraySchema.java
+++ /dev/null
@@ -1,97 +0,0 @@
-//
-// MessagePack for Java
-//
-// Copyright (C) 2009-2010 FURUHASHI Sadayuki
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//
-package org.msgpack.schema;
-
-import java.nio.ByteBuffer;
-import java.io.IOException;
-import java.io.UnsupportedEncodingException;
-import org.msgpack.*;
-
-public class ByteArraySchema extends Schema {
- public ByteArraySchema() { }
-
- @Override
- public String getClassName() {
- return "byte[]";
- }
-
- @Override
- public String getExpression() {
- return "raw";
- }
-
- @Override
- public void pack(Packer pk, Object obj) throws IOException {
- if(obj instanceof byte[]) {
- byte[] b = (byte[])obj;
- pk.packRaw(b.length);
- pk.packRawBody(b);
- } else if(obj instanceof String) {
- try {
- byte[] b = ((String)obj).getBytes("UTF-8");
- pk.packRaw(b.length);
- pk.packRawBody(b);
- } catch (UnsupportedEncodingException e) {
- throw new MessageTypeException();
- }
- } else if(obj == null) {
- pk.packNil();
- } else {
- throw MessageTypeException.invalidConvert(obj, this);
- }
- }
-
- public static final byte[] convertByteArray(Object obj) throws MessageTypeException {
- if(obj instanceof byte[]) {
- // FIXME copy?
- //byte[] d = (byte[])obj;
- //byte[] v = new byte[d.length];
- //System.arraycopy(d, 0, v, 0, d.length);
- //return v;
- return (byte[])obj;
- } else if(obj instanceof ByteBuffer) {
- ByteBuffer d = (ByteBuffer)obj;
- byte[] v = new byte[d.capacity()];
- int pos = d.position();
- d.get(v);
- d.position(pos);
- return v;
- } else if(obj instanceof String) {
- try {
- return ((String)obj).getBytes("UTF-8");
- } catch (UnsupportedEncodingException e) {
- throw new MessageTypeException();
- }
- } else {
- throw new MessageTypeException();
- }
- }
-
- @Override
- public Object convert(Object obj) throws MessageTypeException {
- return convertByteArray(obj);
- }
-
- @Override
- public Object createFromRaw(byte[] b, int offset, int length) {
- byte[] d = new byte[length];
- System.arraycopy(b, offset, d, 0, length);
- return d;
- }
-}
-
diff --git a/java/src/main/java/org/msgpack/schema/ByteSchema.java b/java/src/main/java/org/msgpack/schema/ByteSchema.java
deleted file mode 100644
index 6003a0f..0000000
--- a/java/src/main/java/org/msgpack/schema/ByteSchema.java
+++ /dev/null
@@ -1,96 +0,0 @@
-//
-// MessagePack for Java
-//
-// Copyright (C) 2009-2010 FURUHASHI Sadayuki
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//
-package org.msgpack.schema;
-
-import java.io.IOException;
-import org.msgpack.*;
-
-public class ByteSchema extends Schema {
- public ByteSchema() { }
-
- @Override
- public String getClassName() {
- return "Byte";
- }
-
- @Override
- public String getExpression() {
- return "byte";
- }
-
- @Override
- public void pack(Packer pk, Object obj) throws IOException {
- if(obj instanceof Number) {
- short value = ((Number)obj).shortValue();
- if(value > Byte.MAX_VALUE) {
- throw new MessageTypeException();
- }
- pk.packByte((byte)value);
- } else if(obj == null) {
- pk.packNil();
- } else {
- throw MessageTypeException.invalidConvert(obj, this);
- }
- }
-
- public static final byte convertByte(Object obj) throws MessageTypeException {
- if(obj instanceof Number) {
- short value = ((Number)obj).shortValue();
- if(value > Byte.MAX_VALUE) {
- throw new MessageTypeException();
- }
- return (byte)value;
- }
- throw new MessageTypeException();
- }
-
- @Override
- public Object convert(Object obj) throws MessageTypeException {
- return convertByte(obj);
- }
-
- @Override
- public Object createFromByte(byte v) {
- return (byte)v;
- }
-
- @Override
- public Object createFromShort(short v) {
- if(v > Byte.MAX_VALUE) {
- throw new MessageTypeException();
- }
- return (byte)v;
- }
-
- @Override
- public Object createFromInt(int v) {
- if(v > Byte.MAX_VALUE) {
- throw new MessageTypeException();
- }
- return (byte)v;
- }
-
- @Override
- public Object createFromLong(long v) {
- if(v > Byte.MAX_VALUE) {
- throw new MessageTypeException();
- }
- return (byte)v;
- }
-}
-
diff --git a/java/src/main/java/org/msgpack/schema/ClassGenerator.java b/java/src/main/java/org/msgpack/schema/ClassGenerator.java
deleted file mode 100644
index a515996..0000000
--- a/java/src/main/java/org/msgpack/schema/ClassGenerator.java
+++ /dev/null
@@ -1,244 +0,0 @@
-//
-// MessagePack for Java
-//
-// Copyright (C) 2009-2010 FURUHASHI Sadayuki
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//
-package org.msgpack.schema;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.io.IOException;
-import java.io.File;
-import java.io.Writer;
-import org.msgpack.*;
-
-public class ClassGenerator {
- private ClassSchema schema;
- private Writer writer;
- private int indent;
-
- private ClassGenerator(Writer writer) {
- this.writer = writer;
- this.indent = 0;
- }
-
- public static void write(Schema schema, Writer dest) throws IOException {
- if(!(schema instanceof ClassSchema)) {
- throw new RuntimeException("schema is not class schema");
- }
- ClassSchema cs = (ClassSchema)schema;
- new ClassGenerator(dest).run(cs);
- }
-
- private void run(ClassSchema cs) throws IOException {
- List<ClassSchema> subclasses = new ArrayList<ClassSchema>();
- for(FieldSchema f : cs.getFields()) {
- findSubclassSchema(subclasses, f.getSchema());
- }
-
- for(ClassSchema sub : subclasses) {
- sub.setNamespace(cs.getNamespace());
- sub.setImports(cs.getImports());
- }
-
- this.schema = cs;
-
- writeHeader();
-
- writeClass();
-
- for(ClassSchema sub : subclasses) {
- this.schema = sub;
- writeSubclass();
- }
-
- writeFooter();
-
- this.schema = null;
- writer.flush();
- }
-
- private void findSubclassSchema(List<ClassSchema> dst, Schema s) {
- if(s instanceof ClassSchema) {
- ClassSchema cs = (ClassSchema)s;
- if(!dst.contains(cs)) { dst.add(cs); }
- for(FieldSchema f : cs.getFields()) {
- findSubclassSchema(dst, f.getSchema());
- }
- } else if(s instanceof ListSchema) {
- ListSchema as = (ListSchema)s;
- findSubclassSchema(dst, as.getElementSchema(0));
- } else if(s instanceof SetSchema) {
- SetSchema as = (SetSchema)s;
- findSubclassSchema(dst, as.getElementSchema(0));
- } else if(s instanceof MapSchema) {
- MapSchema as = (MapSchema)s;
- findSubclassSchema(dst, as.getKeySchema());
- findSubclassSchema(dst, as.getValueSchema());
- }
- }
-
- private void writeHeader() throws IOException {
- if(schema.getNamespace() != null) {
- line("package "+schema.getNamespace()+";");
- line();
- }
- line("import java.util.*;");
- line("import java.io.*;");
- line("import org.msgpack.*;");
- line("import org.msgpack.schema.ClassSchema;");
- line("import org.msgpack.schema.FieldSchema;");
- }
-
- private void writeFooter() throws IOException {
- line();
- }
-
- private void writeClass() throws IOException {
- line();
- line("public final class "+schema.getClassName()+" implements MessagePackable, MessageConvertable");
- line("{");
- pushIndent();
- writeSchema();
- writeMemberVariables();
- writeMemberFunctions();
- popIndent();
- line("}");
- }
-
- private void writeSubclass() throws IOException {
- line();
- line("final class "+schema.getClassName()+" implements MessagePackable, MessageConvertable");
- line("{");
- pushIndent();
- writeSchema();
- writeMemberVariables();
- writeMemberFunctions();
- popIndent();
- line("}");
- }
-
- private void writeSchema() throws IOException {
- line("private static final ClassSchema _SCHEMA = (ClassSchema)Schema.load(\""+schema.getExpression()+"\");");
- line("public static ClassSchema getSchema() { return _SCHEMA; }");
- }
-
- private void writeMemberVariables() throws IOException {
- line();
- for(FieldSchema f : schema.getFields()) {
- line("public "+f.getSchema().getClassName()+" "+f.getName()+";");
- }
- }
-
- private void writeMemberFunctions() throws IOException {
- // void messagePack(Packer pk)
- // boolean equals(Object obj)
- // int hashCode()
- // void set(int _index, Object _value)
- // Object get(int _index);
- // getXxx()
- // setXxx(Xxx xxx)
- writeConstructors();
- writeAccessors();
- writePackFunction();
- writeConvertFunction();
- writeFactoryFunction();
- }
-
- private void writeConstructors() throws IOException {
- line();
- line("public "+schema.getClassName()+"() { }");
- }
-
- private void writeAccessors() throws IOException {
- // FIXME
- //line();
- //for(FieldSchema f : schema.getFields()) {
- // line("");
- //}
- }
-
- private void writePackFunction() throws IOException {
- line();
- line("@Override");
- line("public void messagePack(Packer _pk) throws IOException");
- line("{");
- pushIndent();
- line("_pk.packArray("+schema.getFields().length+");");
- line("FieldSchema[] _fields = _SCHEMA.getFields();");
- int i = 0;
- for(FieldSchema f : schema.getFields()) {
- line("_fields["+i+"].getSchema().pack(_pk, "+f.getName()+");");
- ++i;
- }
- popIndent();
- line("}");
- }
-
- private void writeConvertFunction() throws IOException {
- line();
- line("@Override");
- line("@SuppressWarnings(\"unchecked\")");
- line("public void messageConvert(Object obj) throws MessageTypeException");
- line("{");
- pushIndent();
- line("Object[] _source = ((List)obj).toArray();");
- line("FieldSchema[] _fields = _SCHEMA.getFields();");
- int i = 0;
- for(FieldSchema f : schema.getFields()) {
- line("if(_source.length <= "+i+") { return; } this."+f.getName()+" = ("+f.getSchema().getClassName()+")_fields["+i+"].getSchema().convert(_source["+i+"]);");
- ++i;
- }
- popIndent();
- line("}");
- }
-
- private void writeFactoryFunction() throws IOException {
- line();
- line("@SuppressWarnings(\"unchecked\")");
- line("public static "+schema.getClassName()+" createFromMessage(Object[] _message)");
- line("{");
- pushIndent();
- line(schema.getClassName()+" _self = new "+schema.getClassName()+"();");
- int i = 0;
- for(FieldSchema f : schema.getFields()) {
- line("if(_message.length <= "+i+") { return _self; } _self."+f.getName()+" = ("+f.getSchema().getClassName()+")_message["+i+"];");
- ++i;
- }
- line("return _self;");
- popIndent();
- line("}");
- }
-
- private void line(String str) throws IOException {
- for(int i=0; i < indent; ++i) {
- writer.write("\t");
- }
- writer.write(str+"\n");
- }
-
- private void line() throws IOException {
- writer.write("\n");
- }
-
- private void pushIndent() {
- indent += 1;
- }
-
- private void popIndent() {
- indent -= 1;
- }
-}
-
diff --git a/java/src/main/java/org/msgpack/schema/ClassSchema.java b/java/src/main/java/org/msgpack/schema/ClassSchema.java
deleted file mode 100644
index cd59755..0000000
--- a/java/src/main/java/org/msgpack/schema/ClassSchema.java
+++ /dev/null
@@ -1,91 +0,0 @@
-//
-// MessagePack for Java
-//
-// Copyright (C) 2009-2010 FURUHASHI Sadayuki
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//
-package org.msgpack.schema;
-
-import java.util.Arrays;
-import java.util.List;
-import org.msgpack.*;
-
-public abstract class ClassSchema extends Schema implements IArraySchema {
- protected String name;
- protected FieldSchema[] fields;
- protected List<String> imports;
- protected String namespace;
- protected String fqdn;
-
- public ClassSchema(
- String name, String namespace,
- List<String> imports, List<FieldSchema> fields) {
- this.name = name;
- this.namespace = namespace;
- this.imports = imports; // FIXME clone?
- this.fields = new FieldSchema[fields.size()];
- System.arraycopy(fields.toArray(), 0, this.fields, 0, fields.size());
- if(namespace == null) {
- this.fqdn = name;
- } else {
- this.fqdn = namespace+"."+name;
- }
- }
-
- @Override
- public String getClassName() {
- return name;
- }
-
- @Override
- public String getExpression() {
- StringBuffer b = new StringBuffer();
- b.append("(class ");
- b.append(name);
- if(namespace != null) {
- b.append(" (package "+namespace+")");
- }
- for(FieldSchema f : fields) {
- b.append(" "+f.getExpression());
- }
- b.append(")");
- return b.toString();
- }
-
- public boolean equals(ClassSchema o) {
- return (namespace != null ? namespace.equals(o.getNamespace()) : o.getNamespace() == null) &&
- name.equals(o.name);
- }
-
- public final FieldSchema[] getFields() {
- return fields;
- }
-
- String getNamespace() {
- return namespace;
- }
-
- List<String> getImports() {
- return imports;
- }
-
- void setNamespace(String namespace) {
- this.namespace = namespace;
- }
-
- void setImports(List<String> imports) {
- this.imports = imports; // FIXME clone?
- }
-}
-
diff --git a/java/src/main/java/org/msgpack/schema/DoubleSchema.java b/java/src/main/java/org/msgpack/schema/DoubleSchema.java
deleted file mode 100644
index cb857c3..0000000
--- a/java/src/main/java/org/msgpack/schema/DoubleSchema.java
+++ /dev/null
@@ -1,74 +0,0 @@
-//
-// MessagePack for Java
-//
-// Copyright (C) 2009-2010 FURUHASHI Sadayuki
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//
-package org.msgpack.schema;
-
-import java.io.IOException;
-import org.msgpack.*;
-
-public class DoubleSchema extends Schema {
- public DoubleSchema() { }
-
- @Override
- public String getClassName() {
- return "Double";
- }
-
- @Override
- public String getExpression() {
- return "double";
- }
-
- @Override
- public void pack(Packer pk, Object obj) throws IOException {
- if(obj instanceof Double) {
- pk.packDouble((Double)obj);
- } else if(obj instanceof Float) {
- pk.packFloat((Float)obj);
- } else if(obj == null) {
- pk.packNil();
- } else {
- throw MessageTypeException.invalidConvert(obj, this);
- }
- }
-
- public static final double convertDouble(Object obj) throws MessageTypeException {
- if(obj instanceof Double) {
- return (Double)obj;
- } else if(obj instanceof Float) {
- return ((Float)obj).doubleValue();
- } else {
- throw new MessageTypeException();
- }
- }
-
- @Override
- public Object convert(Object obj) throws MessageTypeException {
- return convertDouble(obj);
- }
-
- @Override
- public Object createFromFloat(float v) {
- return (double)v;
- }
-
- @Override
- public Object createFromDouble(double v) {
- return (double)v;
- }
-}
-
diff --git a/java/src/main/java/org/msgpack/schema/FieldSchema.java b/java/src/main/java/org/msgpack/schema/FieldSchema.java
deleted file mode 100644
index 66c2ff2..0000000
--- a/java/src/main/java/org/msgpack/schema/FieldSchema.java
+++ /dev/null
@@ -1,43 +0,0 @@
-//
-// MessagePack for Java
-//
-// Copyright (C) 2009-2010 FURUHASHI Sadayuki
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//
-package org.msgpack.schema;
-
-import org.msgpack.Schema;
-
-public class FieldSchema {
- private String name;
- private Schema schema;
-
- public FieldSchema(String name, Schema schema) {
- this.name = name;
- this.schema = schema;
- }
-
- public final String getName() {
- return name;
- }
-
- public final Schema getSchema() {
- return schema;
- }
-
- public String getExpression() {
- return "(field "+name+" "+schema.getExpression()+")";
- }
-}
-
diff --git a/java/src/main/java/org/msgpack/schema/FloatSchema.java b/java/src/main/java/org/msgpack/schema/FloatSchema.java
deleted file mode 100644
index cd73201..0000000
--- a/java/src/main/java/org/msgpack/schema/FloatSchema.java
+++ /dev/null
@@ -1,74 +0,0 @@
-//
-// MessagePack for Java
-//
-// Copyright (C) 2009-2010 FURUHASHI Sadayuki
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//
-package org.msgpack.schema;
-
-import java.io.IOException;
-import org.msgpack.*;
-
-public class FloatSchema extends Schema {
- public FloatSchema() { }
-
- @Override
- public String getClassName() {
- return "Float";
- }
-
- @Override
- public String getExpression() {
- return "float";
- }
-
- @Override
- public void pack(Packer pk, Object obj) throws IOException {
- if(obj instanceof Double) {
- pk.packDouble((Double)obj);
- } else if(obj instanceof Float) {
- pk.packFloat((Float)obj);
- } else if(obj == null) {
- pk.packNil();
- } else {
- throw MessageTypeException.invalidConvert(obj, this);
- }
- }
-
- public static final float convertFloat(Object obj) throws MessageTypeException {
- if(obj instanceof Double) {
- return ((Double)obj).floatValue();
- } else if(obj instanceof Float) {
- return (Float)obj;
- } else {
- throw new MessageTypeException();
- }
- }
-
- @Override
- public Object convert(Object obj) throws MessageTypeException {
- return convertFloat(obj);
- }
-
- @Override
- public Object createFromFloat(float v) {
- return (float)v;
- }
-
- @Override
- public Object createFromDouble(double v) {
- return (float)v;
- }
-}
-
diff --git a/java/src/main/java/org/msgpack/schema/GenericClassSchema.java b/java/src/main/java/org/msgpack/schema/GenericClassSchema.java
deleted file mode 100644
index 1ab4c33..0000000
--- a/java/src/main/java/org/msgpack/schema/GenericClassSchema.java
+++ /dev/null
@@ -1,87 +0,0 @@
-//
-// MessagePack for Java
-//
-// Copyright (C) 2009-2010 FURUHASHI Sadayuki
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//
-package org.msgpack.schema;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-import java.util.HashMap;
-import java.io.IOException;
-import org.msgpack.*;
-
-public class GenericClassSchema extends ClassSchema {
- public GenericClassSchema(
- String name, String namespace,
- List<String> imports, List<FieldSchema> fields) {
- super(name, namespace, imports, fields);
- }
-
- @Override
- @SuppressWarnings("unchecked")
- public void pack(Packer pk, Object obj) throws IOException {
- if(obj instanceof Map) {
- Map d = (Map)obj;
- pk.packArray(fields.length);
- for(int i=0; i < fields.length; ++i) {
- FieldSchema f = fields[i];
- f.getSchema().pack(pk, d.get(f.getName()));
- }
- } else if(obj == null) {
- pk.packNil();
- } else {
- throw MessageTypeException.invalidConvert(obj, this);
- }
- }
-
- @Override
- public Object convert(Object obj) throws MessageTypeException {
- if(obj instanceof Collection) {
- // FIXME optimize
- return createFromArray( ((Collection)obj).toArray() );
- } else if(obj instanceof Map) {
- HashMap<String,Object> m = new HashMap<String,Object>(fields.length);
- Map d = (Map)obj;
- for(int i=0; i < fields.length; ++i) {
- FieldSchema f = fields[i];
- String fieldName = f.getName();
- m.put(fieldName, f.getSchema().convert(d.get(fieldName)));
- }
- return m;
- } else {
- throw MessageTypeException.invalidConvert(obj, this);
- }
- }
-
- public Schema getElementSchema(int index) {
- // FIXME check index < fields.length
- return fields[index].getSchema();
- }
-
- public Object createFromArray(Object[] obj) {
- HashMap<String,Object> m = new HashMap<String,Object>(fields.length);
- int i=0;
- for(; i < obj.length; ++i) {
- m.put(fields[i].getName(), obj[i]);
- }
- for(; i < fields.length; ++i) {
- m.put(fields[i].getName(), null);
- }
- return m;
- }
-}
-
diff --git a/java/src/main/java/org/msgpack/schema/GenericSchema.java b/java/src/main/java/org/msgpack/schema/GenericSchema.java
deleted file mode 100644
index f9098ed..0000000
--- a/java/src/main/java/org/msgpack/schema/GenericSchema.java
+++ /dev/null
@@ -1,129 +0,0 @@
-//
-// MessagePack for Java
-//
-// Copyright (C) 2009-2010 FURUHASHI Sadayuki
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//
-package org.msgpack.schema;
-
-import java.util.Arrays;
-import java.util.List;
-import java.util.HashMap;
-import java.io.IOException;
-import org.msgpack.*;
-
-public class GenericSchema extends Schema implements IArraySchema, IMapSchema {
- public GenericSchema() { }
-
- @Override
- public String getClassName() {
- return "Object";
- }
-
- @Override
- public String getExpression() {
- return "object";
- }
-
- @Override
- public void pack(Packer pk, Object obj) throws IOException {
- pk.pack(obj);
- }
-
- @Override
- public Object convert(Object obj) throws MessageTypeException {
- return obj;
- }
-
- @Override
- public Schema getElementSchema(int index) {
- return this;
- }
-
- @Override
- public Schema getKeySchema() {
- return this;
- }
-
- @Override
- public Schema getValueSchema() {
- return this;
- }
-
- @Override
- public Object createFromNil() {
- return null;
- }
-
- @Override
- public Object createFromBoolean(boolean v) {
- return v;
- }
-
- @Override
- public Object createFromByte(byte v) {
- return v;
- }
-
- @Override
- public Object createFromShort(short v) {
- return v;
- }
-
- @Override
- public Object createFromInt(int v) {
- return v;
- }
-
- @Override
- public Object createFromLong(long v) {
- return v;
- }
-
- @Override
- public Object createFromFloat(float v) {
- return v;
- }
-
- @Override
- public Object createFromDouble(double v) {
- return v;
- }
-
- @Override
- public Object createFromRaw(byte[] b, int offset, int length) {
- byte[] bytes = new byte[length];
- System.arraycopy(b, offset, bytes, 0, length);
- return bytes;
- }
-
- @Override
- public Object createFromArray(Object[] obj) {
- return Arrays.asList(obj);
- }
-
- @Override
- @SuppressWarnings("unchecked")
- public Object createFromMap(Object[] obj) {
- HashMap m = new HashMap(obj.length / 2);
- int i = 0;
- while(i < obj.length) {
- Object k = obj[i++];
- Object v = obj[i++];
- m.put(k, v);
- }
- return m;
- }
-}
-
diff --git a/java/src/main/java/org/msgpack/schema/IArraySchema.java b/java/src/main/java/org/msgpack/schema/IArraySchema.java
deleted file mode 100644
index 67e9f55..0000000
--- a/java/src/main/java/org/msgpack/schema/IArraySchema.java
+++ /dev/null
@@ -1,26 +0,0 @@
-//
-// MessagePack for Java
-//
-// Copyright (C) 2009-2010 FURUHASHI Sadayuki
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//
-package org.msgpack.schema;
-
-import org.msgpack.Schema;
-
-public interface IArraySchema {
- public Schema getElementSchema(int index);
- public Object createFromArray(Object[] obj);
-}
-
diff --git a/java/src/main/java/org/msgpack/schema/IMapSchema.java b/java/src/main/java/org/msgpack/schema/IMapSchema.java
deleted file mode 100644
index 3a2f556..0000000
--- a/java/src/main/java/org/msgpack/schema/IMapSchema.java
+++ /dev/null
@@ -1,27 +0,0 @@
-//
-// MessagePack for Java
-//
-// Copyright (C) 2009-2010 FURUHASHI Sadayuki
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//
-package org.msgpack.schema;
-
-import org.msgpack.Schema;
-
-public interface IMapSchema {
- public Schema getKeySchema();
- public Schema getValueSchema();
- public Object createFromMap(Object[] obj);
-}
-
diff --git a/java/src/main/java/org/msgpack/schema/IntSchema.java b/java/src/main/java/org/msgpack/schema/IntSchema.java
deleted file mode 100644
index 269f4fb..0000000
--- a/java/src/main/java/org/msgpack/schema/IntSchema.java
+++ /dev/null
@@ -1,96 +0,0 @@
-//
-// MessagePack for Java
-//
-// Copyright (C) 2009-2010 FURUHASHI Sadayuki
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//
-package org.msgpack.schema;
-
-import java.io.IOException;
-import org.msgpack.*;
-
-public class IntSchema extends Schema {
- public IntSchema() { }
-
- @Override
- public String getClassName() {
- return "Integer";
- }
-
- @Override
- public String getExpression() {
- return "int";
- }
-
- @Override
- public void pack(Packer pk, Object obj) throws IOException {
- if(obj instanceof Number) {
- int value = ((Number)obj).intValue();
- if(value >= Short.MAX_VALUE) {
- long lvalue = ((Number)obj).longValue();
- if(lvalue > Integer.MAX_VALUE) {
- throw new MessageTypeException();
- }
- }
- pk.packInt(value);
- } else if(obj == null) {
- pk.packNil();
- } else {
- throw MessageTypeException.invalidConvert(obj, this);
- }
- }
-
- public static final int convertInt(Object obj) throws MessageTypeException {
- if(obj instanceof Number) {
- int value = ((Number)obj).intValue();
- if(value >= Integer.MAX_VALUE) {
- long lvalue = ((Number)obj).longValue();
- if(lvalue > Integer.MAX_VALUE) {
- throw new MessageTypeException();
- }
- }
- return value;
- }
- throw new MessageTypeException();
- }
-
- @Override
- public Object convert(Object obj) throws MessageTypeException {
- return convertInt(obj);
- }
-
- @Override
- public Object createFromByte(byte v) {
- return (int)v;
- }
-
- @Override
- public Object createFromShort(short v) {
- return (int)v;
- }
-
- @Override
- public Object createFromInt(int v) {
- return (int)v;
- }
-
- @Override
- public Object createFromLong(long v) {
- if(v > Integer.MAX_VALUE) {
- throw new MessageTypeException();
- }
- return (int)v;
- }
-}
-
diff --git a/java/src/main/java/org/msgpack/schema/ListSchema.java b/java/src/main/java/org/msgpack/schema/ListSchema.java
deleted file mode 100644
index bef8cc4..0000000
--- a/java/src/main/java/org/msgpack/schema/ListSchema.java
+++ /dev/null
@@ -1,111 +0,0 @@
-//
-// MessagePack for Java
-//
-// Copyright (C) 2009-2010 FURUHASHI Sadayuki
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//
-package org.msgpack.schema;
-
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Set;
-import java.util.List;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.RandomAccess;
-import java.io.IOException;
-import org.msgpack.*;
-
-public class ListSchema extends Schema implements IArraySchema {
- private Schema elementSchema;
-
- public ListSchema(Schema elementSchema) {
- this.elementSchema = elementSchema;
- }
-
- @Override
- public String getClassName() {
- return "List<"+elementSchema.getClassName()+">";
- }
-
- @Override
- public String getExpression() {
- return "(array "+elementSchema.getExpression()+")";
- }
-
- @Override
- public void pack(Packer pk, Object obj) throws IOException {
- if(obj instanceof List) {
- List<Object> d = (List<Object>)obj;
- pk.packArray(d.size());
- if(obj instanceof RandomAccess) {
- for(int i=0; i < d.size(); ++i) {
- elementSchema.pack(pk, d.get(i));
- }
- } else {
- for(Object e : d) {
- elementSchema.pack(pk, e);
- }
- }
- } else if(obj instanceof Set) {
- Set<Object> d = (Set<Object>)obj;
- pk.packArray(d.size());
- for(Object e : d) {
- elementSchema.pack(pk, e);
- }
- } else if(obj == null) {
- pk.packNil();
- } else {
- throw MessageTypeException.invalidConvert(obj, this);
- }
- }
-
- @SuppressWarnings("unchecked")
- public static final <T> List<T> convertList(Object obj,
- Schema elementSchema, List<T> dest) throws MessageTypeException {
- if(!(obj instanceof List)) {
- throw new MessageTypeException();
- }
- List<Object> d = (List<Object>)obj;
- if(dest == null) {
- dest = new ArrayList<T>(d.size());
- }
- if(obj instanceof RandomAccess) {
- for(int i=0; i < d.size(); ++i) {
- dest.add( (T)elementSchema.convert(d.get(i)) );
- }
- } else {
- for(Object e : d) {
- dest.add( (T)elementSchema.convert(e) );
- }
- }
- return dest;
- }
-
- @Override
- public Object convert(Object obj) throws MessageTypeException {
- return convertList(obj, elementSchema, null);
- }
-
- @Override
- public Schema getElementSchema(int index) {
- return elementSchema;
- }
-
- @Override
- public Object createFromArray(Object[] obj) {
- return Arrays.asList(obj);
- }
-}
-
diff --git a/java/src/main/java/org/msgpack/schema/LongSchema.java b/java/src/main/java/org/msgpack/schema/LongSchema.java
deleted file mode 100644
index 728fa21..0000000
--- a/java/src/main/java/org/msgpack/schema/LongSchema.java
+++ /dev/null
@@ -1,80 +0,0 @@
-//
-// MessagePack for Java
-//
-// Copyright (C) 2009-2010 FURUHASHI Sadayuki
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//
-package org.msgpack.schema;
-
-import java.io.IOException;
-import org.msgpack.*;
-
-public class LongSchema extends Schema {
- public LongSchema() { }
-
- @Override
- public String getClassName() {
- return "Long";
- }
-
- @Override
- public String getExpression() {
- return "long";
- }
-
- @Override
- public void pack(Packer pk, Object obj) throws IOException {
- if(obj instanceof Number) {
- long value = ((Number)obj).longValue();
- pk.packLong(value);
- } else if(obj == null) {
- pk.packNil();
- } else {
- throw MessageTypeException.invalidConvert(obj, this);
- }
- }
-
- public static final long convertLong(Object obj) throws MessageTypeException {
- if(obj instanceof Number) {
- return ((Number)obj).longValue();
- }
- throw new MessageTypeException();
- }
-
- @Override
- public Object convert(Object obj) throws MessageTypeException {
- return convertLong(obj);
- }
-
- @Override
- public Object createFromByte(byte v) {
- return (long)v;
- }
-
- @Override
- public Object createFromShort(short v) {
- return (long)v;
- }
-
- @Override
- public Object createFromInt(int v) {
- return (long)v;
- }
-
- @Override
- public Object createFromLong(long v) {
- return (long)v;
- }
-}
-
diff --git a/java/src/main/java/org/msgpack/schema/MapSchema.java b/java/src/main/java/org/msgpack/schema/MapSchema.java
deleted file mode 100644
index 2e09af3..0000000
--- a/java/src/main/java/org/msgpack/schema/MapSchema.java
+++ /dev/null
@@ -1,106 +0,0 @@
-//
-// MessagePack for Java
-//
-// Copyright (C) 2009-2010 FURUHASHI Sadayuki
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//
-package org.msgpack.schema;
-
-import java.util.Map;
-import java.util.HashMap;
-import java.io.IOException;
-import org.msgpack.*;
-
-public class MapSchema extends Schema implements IMapSchema {
- private Schema keySchema;
- private Schema valueSchema;
-
- public MapSchema(Schema keySchema, Schema valueSchema) {
- this.keySchema = keySchema;
- this.valueSchema = valueSchema;
- }
-
- @Override
- public String getClassName() {
- return "Map<"+keySchema.getClassName()+", "+valueSchema.getClassName()+">";
- }
-
- @Override
- public String getExpression() {
- return "(map "+keySchema.getExpression()+" "+valueSchema.getExpression()+")";
- }
-
- @Override
- @SuppressWarnings("unchecked")
- public void pack(Packer pk, Object obj) throws IOException {
- if(obj instanceof Map) {
- Map<Object,Object> d = (Map<Object,Object>)obj;
- pk.packMap(d.size());
- for(Map.Entry<Object,Object> e : d.entrySet()) {
- keySchema.pack(pk, e.getKey());
- valueSchema.pack(pk, e.getValue());
- }
- } else if(obj == null) {
- pk.packNil();
- } else {
- throw MessageTypeException.invalidConvert(obj, this);
- }
- }
-
- @SuppressWarnings("unchecked")
- public static final <K,V> Map<K,V> convertMap(Object obj,
- Schema keySchema, Schema valueSchema, Map<K,V> dest) throws MessageTypeException {
- if(!(obj instanceof Map)) {
- throw new MessageTypeException();
- }
- Map<Object,Object> d = (Map<Object,Object>)obj;
- if(dest == null) {
- dest = new HashMap<K,V>(d.size());
- }
- for(Map.Entry<Object,Object> e : d.entrySet()) {
- dest.put((K)keySchema.convert(e.getKey()),
- (V)valueSchema.convert(e.getValue()));
- }
- return dest;
- }
-
- @Override
- public Object convert(Object obj) throws MessageTypeException {
- return convertMap(obj, keySchema, valueSchema, null);
- }
-
- @Override
- public Schema getKeySchema() {
- return keySchema;
- }
-
- @Override
- public Schema getValueSchema() {
- return valueSchema;
- }
-
- @Override
- @SuppressWarnings("unchecked")
- public Object createFromMap(Object[] obj) {
- HashMap dest = new HashMap(obj.length / 2);
- int i = 0;
- while(i < obj.length) {
- Object k = obj[i++];
- Object v = obj[i++];
- dest.put(k, v);
- }
- return dest;
- }
-}
-
diff --git a/java/src/main/java/org/msgpack/schema/ReflectionClassSchema.java b/java/src/main/java/org/msgpack/schema/ReflectionClassSchema.java
deleted file mode 100644
index fb94adf..0000000
--- a/java/src/main/java/org/msgpack/schema/ReflectionClassSchema.java
+++ /dev/null
@@ -1,64 +0,0 @@
-package org.msgpack.schema;
-
-import java.util.Arrays;
-import java.util.List;
-import java.lang.reflect.*;
-import org.msgpack.*;
-
-// FIXME
-public abstract class ReflectionClassSchema extends ClassSchema {
- private Constructor constructorCache;
-
- public ReflectionClassSchema(String name, List<FieldSchema> fields, String namespace, List<String> imports) {
- super(name, namespace, imports, fields);
- }
-
- /*
- Schema getElementSchema(int index)
- {
- // FIXME check index < fields.length
- fields[index].getSchema();
- }
-
- Object createFromArray(Object[] obj)
- {
- Object o = newInstance();
- ((MessageConvertable)o).messageConvert(obj);
- return o;
- }
-
- Object newInstance()
- {
- if(constructorCache == null) {
- cacheConstructor();
- }
- try {
- return constructorCache.newInstance((Object[])null);
- } catch (InvocationTargetException e) {
- throw new RuntimeException("can't instantiate "+fqdn+": "+e.getMessage());
- } catch (InstantiationException e) {
- throw new RuntimeException("can't instantiate "+fqdn+": "+e.getMessage());
- } catch (IllegalAccessException e) {
- throw new RuntimeException("can't instantiate "+fqdn+": "+e.getMessage());
- }
- }
-
- private void cacheConstructor()
- {
- try {
- Class c = Class.forName(fqdn);
- int index = 0;
- for(SpecificFieldSchema f : fields) {
- f.cacheField(c, index++);
- }
- constructorCache = c.getDeclaredConstructor((Class[])null);
- constructorCache.setAccessible(true);
- } catch(ClassNotFoundException e) {
- throw new RuntimeException("class not found: "+fqdn);
- } catch (NoSuchMethodException e) {
- throw new RuntimeException("class not found: "+fqdn+": "+e.getMessage());
- }
- }
- */
-}
-
diff --git a/java/src/main/java/org/msgpack/schema/SSchemaParser.java b/java/src/main/java/org/msgpack/schema/SSchemaParser.java
deleted file mode 100644
index 4345e92..0000000
--- a/java/src/main/java/org/msgpack/schema/SSchemaParser.java
+++ /dev/null
@@ -1,264 +0,0 @@
-//
-// MessagePack for Java
-//
-// Copyright (C) 2009-2010 FURUHASHI Sadayuki
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//
-package org.msgpack.schema;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Stack;
-import java.util.regex.Pattern;
-import java.util.regex.Matcher;
-import org.msgpack.*;
-
-// FIXME exception class
-
-public class SSchemaParser {
- public static Schema parse(String source) {
- return new SSchemaParser(false).run(source);
- }
-
- public static Schema load(String source) {
- return new SSchemaParser(true).run(source);
- }
-
- private static abstract class SExp {
- boolean isAtom() { return false; }
- public String getAtom() { return null; }
-
- boolean isTuple() { return false; }
- public SExp getTuple(int i) { return null; }
- public int size() { return 0; }
- public boolean empty() { return size() == 0; }
- Iterator<SExp> iterator(int offset) { return null; }
- }
-
- private static class SAtom extends SExp {
- private String atom;
-
- SAtom(String atom) { this.atom = atom; }
-
- boolean isAtom() { return true; }
- public String getAtom() { return atom; }
-
- public String toString() { return atom; }
- }
-
- private static class STuple extends SExp {
- private List<SExp> tuple;
-
- STuple() { this.tuple = new ArrayList<SExp>(); }
-
- public void add(SExp e) { tuple.add(e); }
-
- boolean isTuple() { return true; }
- public SExp getTuple(int i) { return tuple.get(i); }
- public int size() { return tuple.size(); }
-
- Iterator<SExp> iterator(int skip) {
- Iterator<SExp> i = tuple.iterator();
- for(int s=0; s < skip; ++s) { i.next(); }
- return i;
- }
-
- public String toString() {
- if(tuple.isEmpty()) { return "()"; }
- Iterator<SExp> i = tuple.iterator();
- StringBuffer o = new StringBuffer();
- o.append("(").append(i.next());
- while(i.hasNext()) { o.append(" ").append(i.next()); }
- o.append(")");
- return o.toString();
- }
- }
-
- boolean specificClass;
-
- private SSchemaParser(boolean specificClass) {
- this.specificClass = specificClass;
- }
-
- private static Pattern pattern = Pattern.compile(
- "(?:\\s+)|([\\(\\)]|[\\d\\w\\.]+)");
-
- private Schema run(String source) {
- Matcher m = pattern.matcher(source);
-
- Stack<STuple> stack = new Stack<STuple>();
- String token;
-
- while(true) {
- while(true) {
- if(!m.find()) { throw new RuntimeException("unexpected end of file"); }
- token = m.group(1);
- if(token != null) { break; }
- }
-
- if(token.equals("(")) {
- stack.push(new STuple());
- } else if(token.equals(")")) {
- STuple top = stack.pop();
- if(stack.empty()) {
- stack.push(top);
- break;
- }
- stack.peek().add(top);
- } else {
- if(stack.empty()) {
- throw new RuntimeException("unexpected token '"+token+"'");
- }
- stack.peek().add(new SAtom(token));
- }
- }
-
- while(true) {
- if(!m.find()) { break; }
- token = m.group(1);
- if(token != null) { throw new RuntimeException("unexpected token '"+token+"'"); }
- }
-
- return readType( stack.pop() );
- }
-
- private Schema readType(SExp exp) {
- if(exp.isAtom()) {
- String type = exp.getAtom();
- if(type.equals("string")) {
- return new StringSchema();
- } else if(type.equals("raw")) {
- return new ByteArraySchema();
- } else if(type.equals("byte")) {
- return new ByteSchema();
- } else if(type.equals("short")) {
- return new ShortSchema();
- } else if(type.equals("int")) {
- return new IntSchema();
- } else if(type.equals("long")) {
- return new LongSchema();
- } else if(type.equals("float")) {
- return new FloatSchema();
- } else if(type.equals("double")) {
- return new DoubleSchema();
- } else if(type.equals("object")) {
- return new GenericSchema();
- } else {
- throw new RuntimeException("byte, short, int, long, float, double, raw, string or object is expected but got '"+type+"': "+exp);
- }
- } else {
- String type = exp.getTuple(0).getAtom();
- if(type.equals("class")) {
- return parseClass(exp);
- } else if(type.equals("array")) {
- return parseList(exp);
- } else if(type.equals("set")) {
- return parseSet(exp);
- } else if(type.equals("map")) {
- return parseMap(exp);
- } else {
- throw new RuntimeException("class, list, set or map is expected but got '"+type+"': "+exp);
- }
- }
- }
-
- private ClassSchema parseClass(SExp exp) {
- if(exp.size() < 3 || !exp.getTuple(1).isAtom()) {
- throw new RuntimeException("class is (class NAME CLASS_BODY): "+exp);
- }
-
- String namespace = null;
- List<String> imports = new ArrayList<String>();
- String name = exp.getTuple(1).getAtom();
- List<FieldSchema> fields = new ArrayList<FieldSchema>();
-
- for(Iterator<SExp> i=exp.iterator(2); i.hasNext();) {
- SExp subexp = i.next();
- if(!subexp.isTuple() || subexp.empty() || !subexp.getTuple(0).isAtom()) {
- throw new RuntimeException("field, package or import is expected: "+subexp);
- }
- String type = subexp.getTuple(0).getAtom();
- if(type.equals("field")) {
- fields.add( parseField(subexp) );
- } else if(type.equals("package")) {
- if(namespace != null) {
- throw new RuntimeException("duplicated package definition: "+subexp);
- }
- namespace = parseNamespace(subexp);
- } else if(type.equals("import")) {
- imports.add( parseImport(subexp) );
- } else {
- throw new RuntimeException("field, package or import is expected but got '"+type+"': "+subexp);
- }
- }
-
- if(specificClass) {
- return new SpecificClassSchema(name, namespace, imports, fields);
- } else {
- return new GenericClassSchema(name, namespace, imports, fields);
- }
- }
-
- private ListSchema parseList(SExp exp) {
- if(exp.size() != 2) {
- throw new RuntimeException("list is (list ELEMENT_TYPE): "+exp);
- }
- Schema elementType = readType(exp.getTuple(1));
- return new ListSchema(elementType);
- }
-
- private SetSchema parseSet(SExp exp) {
- if(exp.size() != 2) {
- throw new RuntimeException("list is (list ELEMENT_TYPE): "+exp);
- }
- Schema elementType = readType(exp.getTuple(1));
- return new SetSchema(elementType);
- }
-
- private MapSchema parseMap(SExp exp) {
- if(exp.size() != 3 || !exp.getTuple(1).isAtom()) {
- throw new RuntimeException("map is (map KEY_TYPE VALUE_TYPE): "+exp);
- }
- Schema keyType = readType(exp.getTuple(1));
- Schema valueType = readType(exp.getTuple(2));
- return new MapSchema(keyType, valueType);
- }
-
- private String parseNamespace(SExp exp) {
- if(exp.size() != 2 || !exp.getTuple(1).isAtom()) {
- throw new RuntimeException("package is (package NAME): "+exp);
- }
- String name = exp.getTuple(1).getAtom();
- return name;
- }
-
- private String parseImport(SExp exp) {
- if(exp.size() != 2 || !exp.getTuple(1).isAtom()) {
- throw new RuntimeException("import is (import NAME): "+exp);
- }
- String name = exp.getTuple(1).getAtom();
- return name;
- }
-
- private FieldSchema parseField(SExp exp) {
- if(exp.size() != 3 || !exp.getTuple(1).isAtom()) {
- throw new RuntimeException("field is (field NAME TYPE): "+exp);
- }
- String name = exp.getTuple(1).getAtom();
- Schema type = readType(exp.getTuple(2));
- return new FieldSchema(name, type);
- }
-}
-
diff --git a/java/src/main/java/org/msgpack/schema/SetSchema.java b/java/src/main/java/org/msgpack/schema/SetSchema.java
deleted file mode 100644
index a3e1974..0000000
--- a/java/src/main/java/org/msgpack/schema/SetSchema.java
+++ /dev/null
@@ -1,115 +0,0 @@
-//
-// MessagePack for Java
-//
-// Copyright (C) 2009-2010 FURUHASHI Sadayuki
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//
-package org.msgpack.schema;
-
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Set;
-import java.util.List;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.RandomAccess;
-import java.io.IOException;
-import org.msgpack.*;
-
-public class SetSchema extends Schema implements IArraySchema {
- private Schema elementSchema;
-
- public SetSchema(Schema elementSchema) {
- this.elementSchema = elementSchema;
- }
-
- @Override
- public String getClassName() {
- return "Set<"+elementSchema.getClassName()+">";
- }
-
- @Override
- public String getExpression() {
- return "(set "+elementSchema.getExpression()+")";
- }
-
- @Override
- public void pack(Packer pk, Object obj) throws IOException {
- if(obj instanceof List) {
- List<Object> d = (List<Object>)obj;
- pk.packArray(d.size());
- if(obj instanceof RandomAccess) {
- for(int i=0; i < d.size(); ++i) {
- elementSchema.pack(pk, d.get(i));
- }
- } else {
- for(Object e : d) {
- elementSchema.pack(pk, e);
- }
- }
- } else if(obj instanceof Set) {
- Set<Object> d = (Set<Object>)obj;
- pk.packArray(d.size());
- for(Object e : d) {
- elementSchema.pack(pk, e);
- }
- } else if(obj == null) {
- pk.packNil();
- } else {
- throw MessageTypeException.invalidConvert(obj, this);
- }
- }
-
- @SuppressWarnings("unchecked")
- public static final <T> Set<T> convertSet(Object obj,
- Schema elementSchema, Set<T> dest) throws MessageTypeException {
- if(!(obj instanceof List)) {
- throw new MessageTypeException();
- }
- List<Object> d = (List<Object>)obj;
- if(dest == null) {
- dest = new HashSet<T>(d.size());
- }
- if(obj instanceof RandomAccess) {
- for(int i=0; i < d.size(); ++i) {
- dest.add( (T)elementSchema.convert(d.get(i)) );
- }
- } else {
- for(Object e : d) {
- dest.add( (T)elementSchema.convert(e) );
- }
- }
- return dest;
- }
-
- @Override
- public Object convert(Object obj) throws MessageTypeException {
- return convertSet(obj, elementSchema, null);
- }
-
- @Override
- public Schema getElementSchema(int index) {
- return elementSchema;
- }
-
- @Override
- public Object createFromArray(Object[] obj) {
- Set m = new HashSet(obj.length);
- for(int i=0; i < obj.length; i++) {
- m.add(obj[i]);
- }
- return m;
- }
-}
-
diff --git a/java/src/main/java/org/msgpack/schema/ShortSchema.java b/java/src/main/java/org/msgpack/schema/ShortSchema.java
deleted file mode 100644
index 21b9327..0000000
--- a/java/src/main/java/org/msgpack/schema/ShortSchema.java
+++ /dev/null
@@ -1,93 +0,0 @@
-//
-// MessagePack for Java
-//
-// Copyright (C) 2009-2010 FURUHASHI Sadayuki
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//
-package org.msgpack.schema;
-
-import java.io.IOException;
-import org.msgpack.*;
-
-public class ShortSchema extends Schema {
- public ShortSchema() { }
-
- @Override
- public String getClassName() {
- return "Short";
- }
-
- @Override
- public String getExpression() {
- return "short";
- }
-
- @Override
- public void pack(Packer pk, Object obj) throws IOException {
- if(obj instanceof Number) {
- int value = ((Number)obj).intValue();
- if(value > Short.MAX_VALUE) {
- throw new MessageTypeException();
- }
- pk.packShort((short)value);
- } else if(obj == null) {
- pk.packNil();
- } else {
- throw MessageTypeException.invalidConvert(obj, this);
- }
- }
-
- public static final short convertShort(Object obj) throws MessageTypeException {
- if(obj instanceof Number) {
- int value = ((Number)obj).intValue();
- if(value > Short.MAX_VALUE) {
- throw new MessageTypeException();
- }
- return (short)value;
- }
- throw new MessageTypeException();
- }
-
- @Override
- public Object convert(Object obj) throws MessageTypeException {
- return convertShort(obj);
- }
-
- @Override
- public Object createFromByte(byte v) {
- return (short)v;
- }
-
- @Override
- public Object createFromShort(short v) {
- return (short)v;
- }
-
- @Override
- public Object createFromInt(int v) {
- if(v > Short.MAX_VALUE) {
- throw new MessageTypeException();
- }
- return (short)v;
- }
-
- @Override
- public Object createFromLong(long v) {
- if(v > Short.MAX_VALUE) {
- throw new MessageTypeException();
- }
- return (short)v;
- }
-}
-
diff --git a/java/src/main/java/org/msgpack/schema/SpecificClassSchema.java b/java/src/main/java/org/msgpack/schema/SpecificClassSchema.java
deleted file mode 100644
index 850f621..0000000
--- a/java/src/main/java/org/msgpack/schema/SpecificClassSchema.java
+++ /dev/null
@@ -1,122 +0,0 @@
-//
-// MessagePack for Java
-//
-// Copyright (C) 2009-2010 FURUHASHI Sadayuki
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//
-package org.msgpack.schema;
-
-import java.util.Collection;
-import java.util.List;
-import java.lang.reflect.*;
-import java.io.IOException;
-import org.msgpack.*;
-
-public class SpecificClassSchema extends ClassSchema {
- private Class classCache;
- private Method factoryCache;
- private Constructor constructorCache;
-
- public SpecificClassSchema(
- String name, String namespace,
- List<String> imports, List<FieldSchema> fields) {
- super(name, namespace, imports, fields);
- }
-
- @Override
- @SuppressWarnings("unchecked")
- public void pack(Packer pk, Object obj) throws IOException {
- if(obj == null) {
- pk.packNil();
- return;
- }
- if(classCache == null) {
- cacheFactory();
- }
- if(classCache.isInstance(obj)) {
- ((MessagePackable)obj).messagePack(pk);
- } else {
- // FIXME Map<String,Object>
- throw MessageTypeException.invalidConvert(obj, this);
- }
- }
-
- @Override
- public Object convert(Object obj) throws MessageTypeException {
- if(obj instanceof Collection) {
- if(constructorCache == null) {
- cacheConstructor();
- }
- try {
- MessageConvertable o = (MessageConvertable)constructorCache.newInstance((Object[])null);
- o.messageConvert(obj);
- return o;
- } catch (InvocationTargetException e) {
- throw new RuntimeException("can't instantiate "+fqdn+": "+e.getMessage());
- } catch (InstantiationException e) {
- throw new RuntimeException("can't instantiate "+fqdn+": "+e.getMessage());
- } catch (IllegalAccessException e) {
- throw new RuntimeException("can't instantiate "+fqdn+": "+e.getMessage());
- }
-
- } else {
- throw MessageTypeException.invalidConvert(obj, this);
- }
- }
-
- public Schema getElementSchema(int index) {
- // FIXME check index < fields.length
- return fields[index].getSchema();
- }
-
- public Object createFromArray(Object[] obj) {
- if(factoryCache == null) {
- cacheFactory();
- }
- try {
- return factoryCache.invoke(null, new Object[]{obj});
- } catch (InvocationTargetException e) {
- throw new RuntimeException("can't instantiate "+fqdn+": "+e.getCause());
- } catch (IllegalAccessException e) {
- throw new RuntimeException("can't instantiate "+fqdn+": "+e.getMessage());
- }
- }
-
- @SuppressWarnings("unchecked")
- private void cacheFactory() {
- try {
- classCache = Class.forName(fqdn);
- factoryCache = classCache.getDeclaredMethod("createFromMessage", new Class[]{Object[].class});
- factoryCache.setAccessible(true);
- } catch(ClassNotFoundException e) {
- throw new RuntimeException("class not found: "+fqdn);
- } catch (NoSuchMethodException e) {
- throw new RuntimeException("class not found: "+fqdn+": "+e.getMessage());
- }
- }
-
- @SuppressWarnings("unchecked")
- private void cacheConstructor() {
- try {
- classCache = Class.forName(fqdn);
- constructorCache = classCache.getDeclaredConstructor((Class[])null);
- constructorCache.setAccessible(true);
- } catch(ClassNotFoundException e) {
- throw new RuntimeException("class not found: "+fqdn);
- } catch (NoSuchMethodException e) {
- throw new RuntimeException("class not found: "+fqdn+": "+e.getMessage());
- }
- }
-}
-
diff --git a/java/src/main/java/org/msgpack/schema/StringSchema.java b/java/src/main/java/org/msgpack/schema/StringSchema.java
deleted file mode 100644
index 23e4e64..0000000
--- a/java/src/main/java/org/msgpack/schema/StringSchema.java
+++ /dev/null
@@ -1,102 +0,0 @@
-//
-// MessagePack for Java
-//
-// Copyright (C) 2009-2010 FURUHASHI Sadayuki
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//
-package org.msgpack.schema;
-
-import java.nio.ByteBuffer;
-import java.io.IOException;
-import java.io.UnsupportedEncodingException;
-import org.msgpack.*;
-
-public class StringSchema extends Schema {
- public StringSchema() { }
-
- @Override
- public String getClassName() {
- return "String";
- }
-
- @Override
- public String getExpression() {
- return "string";
- }
-
- @Override
- public void pack(Packer pk, Object obj) throws IOException {
- if(obj instanceof byte[]) {
- byte[] b = (byte[])obj;
- pk.packRaw(b.length);
- pk.packRawBody(b);
- } else if(obj instanceof String) {
- try {
- byte[] b = ((String)obj).getBytes("UTF-8");
- pk.packRaw(b.length);
- pk.packRawBody(b);
- } catch (UnsupportedEncodingException e) {
- throw new MessageTypeException();
- }
- } else if(obj == null) {
- pk.packNil();
- } else {
- throw MessageTypeException.invalidConvert(obj, this);
- }
- }
-
- public static final String convertString(Object obj) throws MessageTypeException {
- if(obj instanceof byte[]) {
- try {
- return new String((byte[])obj, "UTF-8");
- } catch (UnsupportedEncodingException e) {
- throw new MessageTypeException();
- }
- } else if(obj instanceof String) {
- return (String)obj;
- } else if(obj instanceof ByteBuffer) {
- ByteBuffer d = (ByteBuffer)obj;
- try {
- if(d.hasArray()) {
- return new String(d.array(), d.position(), d.capacity(), "UTF-8");
- } else {
- byte[] v = new byte[d.capacity()];
- int pos = d.position();
- d.get(v);
- d.position(pos);
- return new String(v, "UTF-8");
- }
- } catch (UnsupportedEncodingException e) {
- throw new MessageTypeException();
- }
- } else {
- throw new MessageTypeException();
- }
- }
-
- @Override
- public Object convert(Object obj) throws MessageTypeException {
- return convertString(obj);
- }
-
- @Override
- public Object createFromRaw(byte[] b, int offset, int length) {
- try {
- return new String(b, offset, length, "UTF-8");
- } catch (Exception e) {
- throw new RuntimeException(e.getMessage());
- }
- }
-}
-