package org.kvj.vimtouch.ext.impl.read; import java.util.ArrayList; import java.util.List; import org.kvj.vimtouch.ext.FieldReader; import org.kvj.vimtouch.ext.FieldReaderException; import org.kvj.vimtouch.ext.IncomingTransfer; import org.kvj.vimtouch.ext.Transferable.FieldType; public abstract class ListFieldReader<T> implements FieldReader<List<T>> { private FieldReader<T> itemReader; public ListFieldReader(FieldReader<T> itemReader) { this.itemReader = itemReader; } @Override public FieldType getType() { return FieldType.List; } @Override public List<T> read(IncomingTransfer t) throws FieldReaderException { int size = t.nextInt(); List<T> data = new ArrayList<T>(size); set(data); // System.out.println("List size: " + size); for (int i = 0; i < size; i++) { T value = t.readWith(itemReader); // System.out.println("List item: " + value); add(value); } return data; } abstract public void add(T value); }