/**
* 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.
*/
//[START all]
package com.example.guestbook;
import static com.example.guestbook.Persistence.getDatastore;
import com.google.cloud.datastore.DateTime;
import com.google.cloud.datastore.Entity;
import com.google.cloud.datastore.FullEntity;
import com.google.cloud.datastore.FullEntity.Builder;
import com.google.cloud.datastore.IncompleteKey;
import com.google.cloud.datastore.Key;
import com.google.common.base.MoreObjects;
import java.util.Date;
import java.util.Objects;
public class Greeting {
private Guestbook book;
public Key key;
public String authorEmail;
public String authorId;
public String content;
public Date date;
public Greeting() {
date = new Date();
}
public Greeting(String book, String content) {
this();
this.book = new Guestbook(book);
this.content = content;
}
public Greeting(String book, String content, String id, String email) {
this(book, content);
authorEmail = email;
authorId = id;
}
public Greeting(Entity entity) {
key = entity.hasKey() ? entity.getKey() : null;
authorEmail = entity.contains("authorEmail") ? entity.getString("authorEmail") : null;
authorId = entity.contains("authorId") ? entity.getString("authorId") : null;
date = entity.contains("date") ? entity.getDateTime("date").toDate() : null;
content = entity.contains("content") ? entity.getString("content") : null;
}
public void save() {
if (key == null) {
key = getDatastore().allocateId(makeIncompleteKey()); // Give this greeting a unique ID
}
Builder<Key> builder = FullEntity.newBuilder(key);
if (authorEmail != null) {
builder.set("authorEmail", authorEmail);
}
if (authorId != null) {
builder.set("authorId", authorId);
}
builder.set("content", content);
builder.set("date", DateTime.copyFrom(date));
getDatastore().put(builder.build());
}
private IncompleteKey makeIncompleteKey() {
// The book is our ancestor key.
return Key.newBuilder(book.getKey(), "Greeting").build();
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
Greeting greeting = (Greeting) o;
return Objects.equals(key, greeting.key)
&& Objects.equals(authorEmail, greeting.authorEmail)
&& Objects.equals(authorId, greeting.authorId)
&& Objects.equals(content, greeting.content)
&& Objects.equals(date, greeting.date);
}
@Override
public int hashCode() {
return Objects.hash(key, authorEmail, authorId, content, date);
}
@Override
public String toString() {
return MoreObjects.toStringHelper(this)
.add("key", key)
.add("authorEmail", authorEmail)
.add("authorId", authorId)
.add("content", content)
.add("date", date)
.add("book", book)
.toString();
}
}
//[END all]