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.DBType; import org.wonderdb.types.FileBlockEntry; import org.wonderdb.types.StringType; import org.wonderdb.types.TypeMetadata; public class FileBlockEntrySerializer implements TypeSerializer { public static final FileBlockEntry NULL_FILE_BLOCK_ENTRY = new FileBlockEntry(); private static FileBlockEntrySerializer instance = new FileBlockEntrySerializer(); private FileBlockEntrySerializer() { } public static FileBlockEntrySerializer getInstance() { return instance; } @Override public DBType unmarshal(int type, ChannelBuffer buffer, TypeMetadata meta) { FileBlockEntry fbe = new FileBlockEntry(); byte b = buffer.readByte(); fbe.setFileId(b); StringType st = (StringType) Serializer.getInstance().getObject(SerializerManager.STRING, buffer, null); String fileName = st.get(); b = buffer.readByte(); boolean isDefaultFile = b > 0 ? true : false; int blockSize = buffer.readInt(); fbe.setBlockSize(blockSize); fbe.setDefaultFile(isDefaultFile); fbe.setFileName(fileName); return fbe; } @Override public void toBytes(DBType object, ChannelBuffer buffer, TypeMetadata meta) { FileBlockEntry fbe = (FileBlockEntry) object; buffer.writeByte(fbe.getFileId()); Serializer.getInstance().serialize(SerializerManager.STRING, new StringType(fbe.getFileName()), buffer, null); buffer.writeByte(fbe.isDefaultFile() ? 1 : 0); buffer.writeInt(fbe.getBlockSize()); } @Override public int getSize(DBType object, TypeMetadata meta) { FileBlockEntry fbe = (FileBlockEntry) object; int size = 1 + 1 + Integer.SIZE/8; size = size + Serializer.getInstance().getObjectSize(SerializerManager.STRING, new StringType(fbe.getFileName()), null); return size; } @Override public boolean isNull(int type, DBType object) { return object == null || NULL_FILE_BLOCK_ENTRY == object; } @Override public DBType getNull(int type) { return NULL_FILE_BLOCK_ENTRY; } @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"); } }