From f7c4f12c33352932014bb277523056b2513ab4c2 Mon Sep 17 00:00:00 2001 From: Sebastian Schmidt Date: Thu, 15 Aug 2019 11:25:36 -0700 Subject: [PATCH 1/3] Expose Object serialization for internal consumers --- .../com/google/cloud/firestore/Internal.java | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 google-cloud-clients/google-cloud-firestore/src/main/java/com/google/cloud/firestore/Internal.java diff --git a/google-cloud-clients/google-cloud-firestore/src/main/java/com/google/cloud/firestore/Internal.java b/google-cloud-clients/google-cloud-firestore/src/main/java/com/google/cloud/firestore/Internal.java new file mode 100644 index 000000000000..b6dab1d12de9 --- /dev/null +++ b/google-cloud-clients/google-cloud-firestore/src/main/java/com/google/cloud/firestore/Internal.java @@ -0,0 +1,40 @@ +package com.google.cloud.firestore; + +import static com.google.cloud.firestore.UserDataConverter.NO_DELETES; + +import com.google.api.core.InternalApi; +import com.google.cloud.Timestamp; +import com.google.common.base.Preconditions; +import com.google.firestore.v1.Document; +import java.util.Map; + +@InternalApi +public class Internal { + private FirestoreImpl firestore; + + @InternalApi + public Internal(FirestoreImpl firestore) { + this.firestore = firestore; + } + + @InternalApi + public DocumentSnapshot snapshotFromObject(String documentPath, Object pojo) { + DocumentReference documentReference = firestore.document(documentPath); + Object data = CustomClassMapper.convertToPlainJavaTypes(pojo); + Preconditions.checkArgument( + data instanceof Map, "Can't create a document from an array or primitive"); + return DocumentSnapshot.fromObject( + firestore, documentReference, (Map) data, NO_DELETES); + } + + @InternalApi + public DocumentSnapshot snapshotFromMap(String documentPath, Map data) { + DocumentReference documentReference = firestore.document(documentPath); + return DocumentSnapshot.fromObject(firestore, documentReference, data, NO_DELETES); + } + + @InternalApi + public DocumentSnapshot snapshotFromProto(Timestamp readTime, Document document) { + return DocumentSnapshot.fromDocument(firestore, readTime, document); + } +} From 35ea08eb2c5c880875d7fbe80907d14844d15f6a Mon Sep 17 00:00:00 2001 From: Sebastian Schmidt Date: Wed, 21 Aug 2019 11:44:19 -0700 Subject: [PATCH 2/3] Add protoFromSnapshot API --- .../google/cloud/firestore/DocumentSnapshot.java | 14 +++++++++----- .../java/com/google/cloud/firestore/Internal.java | 6 ++++++ 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/google-cloud-clients/google-cloud-firestore/src/main/java/com/google/cloud/firestore/DocumentSnapshot.java b/google-cloud-clients/google-cloud-firestore/src/main/java/com/google/cloud/firestore/DocumentSnapshot.java index af549f21b6ca..325d7ee3b0fb 100644 --- a/google-cloud-clients/google-cloud-firestore/src/main/java/com/google/cloud/firestore/DocumentSnapshot.java +++ b/google-cloud-clients/google-cloud-firestore/src/main/java/com/google/cloud/firestore/DocumentSnapshot.java @@ -195,11 +195,6 @@ public boolean exists() { return fields != null; } - /** Checks whether this DocumentSnapshot contains any fields. */ - boolean isEmpty() { - return fields == null || fields.isEmpty(); - } - /** * Returns the fields of the document as a Map or null if the document doesn't exist. Field values * will be converted to their native Java representation. @@ -428,6 +423,15 @@ public DocumentReference getReference() { return docRef; } + /** Checks whether this DocumentSnapshot contains any fields. */ + boolean isEmpty() { + return fields == null || fields.isEmpty(); + } + + Map getProtoFields() { + return fields; + } + Write.Builder toPb() { Preconditions.checkState(exists(), "Can't call toDocument() on a document that doesn't exist"); Write.Builder write = Write.newBuilder(); diff --git a/google-cloud-clients/google-cloud-firestore/src/main/java/com/google/cloud/firestore/Internal.java b/google-cloud-clients/google-cloud-firestore/src/main/java/com/google/cloud/firestore/Internal.java index b6dab1d12de9..d98898add1c9 100644 --- a/google-cloud-clients/google-cloud-firestore/src/main/java/com/google/cloud/firestore/Internal.java +++ b/google-cloud-clients/google-cloud-firestore/src/main/java/com/google/cloud/firestore/Internal.java @@ -6,6 +6,7 @@ import com.google.cloud.Timestamp; import com.google.common.base.Preconditions; import com.google.firestore.v1.Document; +import com.google.firestore.v1.Value; import java.util.Map; @InternalApi @@ -37,4 +38,9 @@ public DocumentSnapshot snapshotFromMap(String documentPath, Map public DocumentSnapshot snapshotFromProto(Timestamp readTime, Document document) { return DocumentSnapshot.fromDocument(firestore, readTime, document); } + + @InternalApi + public Map protoFromSnapshot(DocumentSnapshot snapshot) { + return snapshot.getProtoFields(); + } } From 0e78c19426f888331a3f5179c7e7cbad1b1f5c31 Mon Sep 17 00:00:00 2001 From: Sebastian Schmidt Date: Thu, 22 Aug 2019 09:14:15 -0700 Subject: [PATCH 3/3] Add Copyright heeader --- .../com/google/cloud/firestore/Internal.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/google-cloud-clients/google-cloud-firestore/src/main/java/com/google/cloud/firestore/Internal.java b/google-cloud-clients/google-cloud-firestore/src/main/java/com/google/cloud/firestore/Internal.java index d98898add1c9..ba9ed85655f1 100644 --- a/google-cloud-clients/google-cloud-firestore/src/main/java/com/google/cloud/firestore/Internal.java +++ b/google-cloud-clients/google-cloud-firestore/src/main/java/com/google/cloud/firestore/Internal.java @@ -1,3 +1,19 @@ +/* + * Copyright 2019 Google LLC + * + * 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * 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.google.cloud.firestore; import static com.google.cloud.firestore.UserDataConverter.NO_DELETES;