package mil.nga.giat.geowave.datastore.hbase.util; import java.util.ArrayList; import java.util.List; import org.apache.hadoop.hbase.Cell; import org.apache.hadoop.hbase.CellUtil; import org.apache.hadoop.hbase.KeyValue; import mil.nga.giat.geowave.core.index.ByteArrayId; import mil.nga.giat.geowave.core.store.adapter.WritableDataAdapter; import mil.nga.giat.geowave.core.store.base.DataStoreEntryInfo; import mil.nga.giat.geowave.core.store.base.DataStoreEntryInfo.FieldInfo; import mil.nga.giat.geowave.core.store.data.VisibilityWriter; import mil.nga.giat.geowave.core.store.index.PrimaryIndex; import mil.nga.giat.geowave.core.store.util.DataStoreUtils; /** * Functionality similar to <code> AccumuloKeyValuePairGenerator </code> Since * HBase already has a concept of Cell, we are using it rather than custom * implementation of KeyValue Pair */ public class HBaseCellGenerator<T> { private final WritableDataAdapter<T> adapter; private final PrimaryIndex index; private final VisibilityWriter<T> visibilityWriter; public HBaseCellGenerator( final WritableDataAdapter<T> adapter, final PrimaryIndex index, final VisibilityWriter<T> visibilityWriter ) { super(); this.adapter = adapter; this.index = index; this.visibilityWriter = visibilityWriter; } public List<Cell> constructKeyValuePairs( final byte[] adapterId, final T entry ) { final List<Cell> keyValuePairs = new ArrayList<>(); Cell cell; final DataStoreEntryInfo ingestInfo = DataStoreUtils.getIngestInfo( adapter, index, entry, visibilityWriter); final List<ByteArrayId> rowIds = ingestInfo.getRowIds(); @SuppressWarnings("rawtypes") final List<FieldInfo<?>> fieldInfoList = ingestInfo.getFieldInfo(); for (final ByteArrayId rowId : rowIds) { for (@SuppressWarnings("rawtypes") final FieldInfo fieldInfo : fieldInfoList) { cell = CellUtil.createCell( rowId.getBytes(), adapterId, fieldInfo.getDataValue().getId().getBytes(), System.currentTimeMillis(), KeyValue.Type.Put.getCode(), fieldInfo.getWrittenValue()); keyValuePairs.add(cell); } } return keyValuePairs; } }