package org.kvj.vimtouch.ext.impl.read; import org.kvj.vimtouch.ext.FieldReader; import org.kvj.vimtouch.ext.FieldReaderException; import org.kvj.vimtouch.ext.IncomingTransfer; import org.kvj.vimtouch.ext.Transferable; import org.kvj.vimtouch.ext.Transferable.FieldType; abstract public class TransferableFieldReader<T extends Transferable> implements FieldReader<T> { @Override public FieldType getType() { return FieldType.Transferable; } @Override public T read(IncomingTransfer t) throws FieldReaderException { String className = t.nextString(); T object = create(); IncomingTransfer it = new IncomingTransfer(t.getData()); it.setIndex(t.getIndex()); object.readFrom(it); it.read(); t.setIndex(it.getIndex()); return object; } abstract public T create(); }