/** * Copyright 2016 Google Inc. * * <p>Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file * except in compliance with the License. You may obtain a copy of the License at * * <p>http://www.apache.org/licenses/LICENSE-2.0 * * <p>Unless required by applicable law or agreed to in writing, software distributed under the * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing permissions and * limitations under the License. */ package com.example.guestbook; import static com.example.guestbook.Persistence.getDatastore; import static com.example.guestbook.Persistence.getKeyFactory; import static com.google.cloud.datastore.StructuredQuery.OrderBy.desc; import static com.google.cloud.datastore.StructuredQuery.PropertyFilter.hasAncestor; import com.google.cloud.datastore.Entity; import com.google.cloud.datastore.EntityQuery; import com.google.cloud.datastore.Key; import com.google.cloud.datastore.KeyFactory; import com.google.cloud.datastore.Query; import com.google.cloud.datastore.QueryResults; import com.google.common.base.MoreObjects; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableList.Builder; import java.util.List; import java.util.Objects; //[START all] public class Guestbook { private static final KeyFactory keyFactory = getKeyFactory(Guestbook.class); private final Key key; public final String book; public Guestbook(String book) { this.book = book == null ? "default" : book; key = keyFactory.newKey( this.book); // There is a 1:1 mapping between Guestbook names and Guestbook objects } public Key getKey() { return key; } public List<Greeting> getGreetings() { // This query requires the index defined in index.yaml to work because of the orderBy on date. EntityQuery query = Query.newEntityQueryBuilder() .setKind("Greeting") .setFilter(hasAncestor(key)) .setOrderBy(desc("date")) .setLimit(5) .build(); QueryResults<Entity> results = getDatastore().run(query); Builder<Greeting> resultListBuilder = ImmutableList.builder(); while (results.hasNext()) { resultListBuilder.add(new Greeting(results.next())); } return resultListBuilder.build(); } @Override public boolean equals(Object o) { if (this == o) { return true; } if (o == null || getClass() != o.getClass()) { return false; } Guestbook guestbook = (Guestbook) o; return Objects.equals(book, guestbook.book) && Objects.equals(key, guestbook.key); } @Override public int hashCode() { return Objects.hash(book, key); } @Override public String toString() { return MoreObjects.toStringHelper(this) .add("keyFactory", keyFactory) .add("book", book) .add("key", key) .toString(); } } //[END all]