package org.wonderdb.serialize.metadata; import org.jboss.netty.buffer.ChannelBuffer; import org.wonderdb.serialize.Serializer; import org.wonderdb.serialize.SerializerManager; import org.wonderdb.serialize.TypeSerializer; import org.wonderdb.types.BlockPtr; import org.wonderdb.types.CollectionNameMeta; import org.wonderdb.types.DBType; import org.wonderdb.types.StringType; import org.wonderdb.types.TypeMetadata; public class CollectionNameMetaSerializer implements TypeSerializer { public static final CollectionNameMetaSerializer instance = new CollectionNameMetaSerializer(); private CollectionNameMetaSerializer() { } public final static CollectionNameMetaSerializer getInstance() { return instance; } @Override public DBType unmarshal(int type, ChannelBuffer buffer, TypeMetadata meta) { CollectionNameMeta cnm = new CollectionNameMeta(); String name = (( StringType) Serializer.getInstance().getObject(SerializerManager.STRING, buffer, null)).get(); BlockPtr ptr = (BlockPtr) Serializer.getInstance().getObject(SerializerManager.BLOCK_PTR, buffer, null); int concurrency = buffer.readInt(); byte b = buffer.readByte(); cnm.setHead(ptr); cnm.setName(name); cnm.setConcurrency(concurrency); cnm.setLoggingEnabled(b > 0 ? true : false); return cnm; } @Override public void toBytes(DBType object, ChannelBuffer buffer, TypeMetadata meta) { CollectionNameMeta cnm = (CollectionNameMeta) object; Serializer.getInstance().serialize(SerializerManager.STRING, new StringType(cnm.getName()), buffer, meta); Serializer.getInstance().serialize(SerializerManager.BLOCK_PTR, cnm.getHead(), buffer, meta); buffer.writeInt(cnm.getConcurrency()); buffer.writeByte(cnm.isLoggingEnabled() ? 1 : 0); } @Override public int getSize(DBType object, TypeMetadata meta) { CollectionNameMeta cnm = (CollectionNameMeta) object; int size = Serializer.getInstance().getObjectSize(SerializerManager.STRING, new StringType(cnm.getName()), meta); size = size + Serializer.getInstance().getObjectSize(SerializerManager.BLOCK_PTR, cnm.getHead(), meta); size = size + Integer.SIZE/8; size = size + 1; return size; } @Override public boolean isNull(int type, DBType object) { return false; } @Override public DBType getNull(int type) { return null; } @Override public int getSQLType(int type) { throw new RuntimeException("Method not supported"); } @Override public DBType convert(int type, StringType st) { throw new RuntimeException("Method not supported"); } }