App Engine Java SDK version 1.9.25
[gae.git] / java / src / main / com / google / appengine / api / datastore / WrappedQueryResultCloudDatastoreV1.java
blob05ec10eeec2a582cf85e0f77f94d5cd1b227cc07
1 package com.google.appengine.api.datastore;
3 import static com.google.common.base.Preconditions.checkState;
5 import com.google.appengine.api.datastore.BaseQueryResultsSource.WrappedQueryResult;
6 import com.google.common.collect.ImmutableList;
7 import com.google.common.collect.Lists;
8 import com.google.datastore.v1beta3.EntityResult;
9 import com.google.datastore.v1beta3.QueryResultBatch;
10 import com.google.datastore.v1beta3.QueryResultBatch.MoreResultsType;
12 import java.util.Collection;
13 import java.util.List;
15 /**
16 * An implementation of {@link WrappedQueryResult} in terms of Cloud Datastore v1.
18 class WrappedQueryResultCloudDatastoreV1 implements WrappedQueryResult {
19 private final QueryResultBatch batch;
21 WrappedQueryResultCloudDatastoreV1(QueryResultBatch batch) {
22 this.batch = batch;
25 @Override
26 public Cursor getEndCursor() {
27 checkState(!batch.getEndCursor().isEmpty(), "Batch contained no end cursor.");
28 return new Cursor(batch.getEndCursor());
31 @Override
32 public List<Entity> getEntities(Collection<Projection> projections) {
33 List<Entity> entityList = Lists.newArrayListWithCapacity(batch.getEntityResultsCount());
34 if (projections.isEmpty()) {
35 for (EntityResult entityResult : batch.getEntityResultsList()) {
36 entityList.add(DataTypeTranslator.toEntity(entityResult.getEntity()));
38 } else {
39 for (EntityResult entityResult : batch.getEntityResultsList()) {
40 entityList.add(DataTypeTranslator.toEntity(entityResult.getEntity(), projections));
43 return entityList;
46 @Override
47 public List<Cursor> getResultCursors() {
48 List<Cursor> cursors = Lists.newArrayListWithCapacity(batch.getEntityResultsCount());
49 for (EntityResult result : batch.getEntityResultsList()) {
50 cursors.add(result.getCursor().isEmpty() ? null : new Cursor(result.getCursor()));
52 return cursors;
55 @Override
56 public Cursor getSkippedResultsCursor() {
57 return batch.getSkippedCursor().isEmpty() ? null : new Cursor(batch.getSkippedCursor());
60 @Override
61 public boolean hasMoreResults() {
62 return batch.getMoreResults() == MoreResultsType.NOT_FINISHED;
65 @Override
66 public int numSkippedResults() {
67 return batch.getSkippedResults();
70 @Override
71 public List<Index> getIndexInfo(Collection<Index> monitoredIndexBuffer) {
72 return ImmutableList.of();
75 @Override
76 public boolean madeProgress(WrappedQueryResult previousResult) {
77 if (!hasMoreResults()) {
78 return true;
80 return !getEndCursor().equals(previousResult.getEndCursor());
83 QueryResultBatch getBatch() {
84 return batch;