package mil.nga.giat.geowave.core.store.filter;
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.List;
import mil.nga.giat.geowave.core.index.ByteArrayId;
import mil.nga.giat.geowave.core.store.data.IndexedPersistenceEncoding;
import mil.nga.giat.geowave.core.store.index.CommonIndexModel;
public class RowIdQueryFilter implements
DistributableQueryFilter
{
private List<ByteArrayId> rowIds;
protected RowIdQueryFilter() {}
public RowIdQueryFilter(
final List<ByteArrayId> rowIds ) {
this.rowIds = rowIds;
}
@Override
public boolean accept(
final CommonIndexModel indexModel,
final IndexedPersistenceEncoding persistenceEncoding ) {
return rowIds.contains(persistenceEncoding.getIndexInsertionId());
}
@Override
public byte[] toBinary() {
int size = 4;
for (final ByteArrayId id : rowIds) {
size += (id.getBytes().length + 4);
}
final ByteBuffer buf = ByteBuffer.allocate(size);
buf.putInt(rowIds.size());
for (final ByteArrayId id : rowIds) {
final byte[] idBytes = id.getBytes();
buf.putInt(idBytes.length);
buf.put(idBytes);
}
return buf.array();
}
@Override
public void fromBinary(
final byte[] bytes ) {
final ByteBuffer buf = ByteBuffer.wrap(bytes);
final int size = buf.getInt();
rowIds = new ArrayList<ByteArrayId>(
size);
for (int i = 0; i < size; i++) {
final int bsize = buf.getInt();
final byte[] dataIdBytes = new byte[bsize];
buf.get(dataIdBytes);
rowIds.add(new ByteArrayId(
dataIdBytes));
}
}
}