package mil.nga.giat.geowave.core.store.index.writer; import java.io.IOException; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import mil.nga.giat.geowave.core.index.ByteArrayId; import mil.nga.giat.geowave.core.store.IndexWriter; import mil.nga.giat.geowave.core.store.adapter.IndexDependentDataAdapter; import mil.nga.giat.geowave.core.store.data.VisibilityWriter; import mil.nga.giat.geowave.core.store.index.PrimaryIndex; public class IndependentAdapterIndexWriter<T> implements IndexWriter<T> { final IndexDependentDataAdapter<T> adapter; final PrimaryIndex index; final IndexWriter<T> writer; public IndependentAdapterIndexWriter( IndexDependentDataAdapter<T> adapter, PrimaryIndex index, IndexWriter<T> writer ) { super(); this.writer = writer; this.index = index; this.adapter = adapter; } @Override public List<ByteArrayId> write( final T entry, final VisibilityWriter<T> feldVisibilityWriter ) throws IOException { final Iterator<T> indexedEntries = adapter.convertToIndex( index, entry); final List<ByteArrayId> rowIds = new ArrayList<ByteArrayId>(); while (indexedEntries.hasNext()) { rowIds.addAll(writer.write( indexedEntries.next(), feldVisibilityWriter)); } return rowIds; } @Override public void close() throws IOException { writer.close(); } @Override public List<ByteArrayId> write( T entry ) throws IOException { final Iterator<T> indexedEntries = adapter.convertToIndex( index, entry); final List<ByteArrayId> rowIds = new ArrayList<ByteArrayId>(); while (indexedEntries.hasNext()) { rowIds.addAll(writer.write(indexedEntries.next())); } return rowIds; } @Override public PrimaryIndex[] getIndices() { return writer.getIndices(); } @Override public void flush() { writer.flush(); } }