package mil.nga.giat.geowave.datastore.accumulo.index.secondary; import java.io.IOException; import java.util.Map.Entry; import org.apache.accumulo.core.client.Scanner; import org.apache.accumulo.core.data.Key; import org.apache.accumulo.core.data.Value; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import mil.nga.giat.geowave.core.store.adapter.DataAdapter; import mil.nga.giat.geowave.core.store.index.PrimaryIndex; import mil.nga.giat.geowave.core.store.util.SecondaryIndexEntryIteratorWrapper; import mil.nga.giat.geowave.datastore.accumulo.util.AccumuloSecondaryIndexUtils; /** * To be used when dealing with either a 'FULL' or 'PARTIAL' secondary index * type */ public class AccumuloSecondaryIndexEntryIteratorWrapper<T> extends SecondaryIndexEntryIteratorWrapper<T, T> { private final static Logger LOGGER = LoggerFactory.getLogger(AccumuloSecondaryIndexEntryIteratorWrapper.class); private final Scanner scanner; private final PrimaryIndex index; public AccumuloSecondaryIndexEntryIteratorWrapper( final Scanner scanner, final DataAdapter<T> adapter, final PrimaryIndex index ) { super( scanner.iterator(), adapter); this.scanner = scanner; this.index = index; } @SuppressWarnings("unchecked") @Override protected T decodeRow( final Object row ) { Entry<Key, Value> entry = null; try { entry = (Entry<Key, Value>) row; } catch (final ClassCastException e) { LOGGER.error("Row is not an accumulo row entry."); return null; } return AccumuloSecondaryIndexUtils.decodeRow( entry.getKey(), entry.getValue(), adapter, index); } @Override public void close() throws IOException { scanner.close(); } }