package mil.nga.giat.geowave.datastore.hbase.index.secondary; import java.io.IOException; import org.apache.hadoop.hbase.client.Result; import org.apache.hadoop.hbase.client.ResultScanner; 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.hbase.util.HBaseSecondaryIndexUtils; /** * To be used when dealing with either a 'FULL' or 'PARTIAL' secondary index * type */ public class HBaseSecondaryIndexEntryIteratorWrapper<T> extends SecondaryIndexEntryIteratorWrapper<T, Object> { private final static Logger LOGGER = LoggerFactory.getLogger(HBaseSecondaryIndexEntryIteratorWrapper.class); private final ResultScanner scanner; private final byte[] columnFamily; private final PrimaryIndex index; public HBaseSecondaryIndexEntryIteratorWrapper( final ResultScanner scanner, final byte[] columnFamily, final DataAdapter<T> adapter, final PrimaryIndex index ) { super( scanner.iterator(), adapter); this.scanner = scanner; this.columnFamily = columnFamily; this.index = index; } @Override protected T decodeRow( final Object row ) { Result entry = null; try { entry = (Result) row; } catch (final ClassCastException e) { LOGGER.error("Row is not a hbase row entry."); return null; } return HBaseSecondaryIndexUtils.decodeRow( entry, columnFamily, adapter, index); } @Override public void close() throws IOException { scanner.close(); } }