From 1b894bc4288146e36267d95b51c3065e3c46aae8 Mon Sep 17 00:00:00 2001 From: Michael Bausor Date: Fri, 16 Sep 2016 10:46:35 -0700 Subject: [PATCH 01/28] Added start of samples --- .../datastore/snippets/DatastoreSnippets.java | 97 +++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 google-cloud-examples/src/main/java/com/google/cloud/examples/datastore/snippets/DatastoreSnippets.java diff --git a/google-cloud-examples/src/main/java/com/google/cloud/examples/datastore/snippets/DatastoreSnippets.java b/google-cloud-examples/src/main/java/com/google/cloud/examples/datastore/snippets/DatastoreSnippets.java new file mode 100644 index 000000000000..6610a0443490 --- /dev/null +++ b/google-cloud-examples/src/main/java/com/google/cloud/examples/datastore/snippets/DatastoreSnippets.java @@ -0,0 +1,97 @@ +/* +* Copyright 2016 Google Inc. All Rights Reserved. +* +* 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. +*/ + +/* +* EDITING INSTRUCTIONS +* This file is referenced in MyClass’s javadoc. Any change to this file should be reflected in MyClass’s +* javadoc. +*/ + +package com.google.cloud.examples.datastore.snippets; + +import com.google.cloud.datastore.Datastore; +import com.google.cloud.datastore.Entity; +import com.google.cloud.datastore.Key; +import com.google.cloud.datastore.KeyFactory; +import com.google.common.collect.Lists; +import java.util.Iterator; + +public class DatastoreSnippets { + + private final Datastore datastore; + + public DatastoreSnippets(Datastore datastore) { + this.datastore = datastore; + } + + // ANTHONY STARTS HERE + + + + // ANTHONY ENDS HERE + + // GARRETT STARTS HERE + + + + // GARRETT ENDS HERE + + // MIKE STARTS HERE + + /** + * Example of creating a KeyFactory. + */ + // [TARGET newKeyFactory()] + public KeyFactory newKeyFactory() { + // [START newKeyFactory] + KeyFactory keyFactory = datastore.newKeyFactory(); + // [END newKeyFactory] + return keyFactory; + } + + /** + * Example of getting an Entity. + */ + // [TARGET get(Key key, ReadOption... options)] + // [VARIABLE "my_key_name"] + public Entity get(String keyName) { + // [START get] + Key key = datastore.newKeyFactory().newKey(keyName); + Entity entity = datastore.get(key); + // [END get] + return entity; + } + + /** + * Example of getting multiple entities + */ + // [TARGET get(Key key, ReadOption... options)] + // [VARIABLE "my_first_key_name"] + //[VARIABLE "my_second_key_name"] + public Iterator get(String firstKeyName, String secondKeyName) { + // [START get] + Key firstKey = datastore.newKeyFactory().newKey(firstKeyName); + Key secondKey = datastore.newKeyFactory().newKey(secondKeyName); + Iterator entities = datastore.get(Lists.newArrayList(firstKey, secondKey)); + // [END get] + return entities; + } + + //fetch(Iterable keys, ReadOption... options) + //run(Query query, ReadOption... options) + + // MIKE ENDS HERE +} From 73a94510aae069678b7b5e53b3917fa9cf3abd88 Mon Sep 17 00:00:00 2001 From: Marco Ziccardi Date: Fri, 16 Sep 2016 16:23:53 +0200 Subject: [PATCH 02/28] Add snippets for Transaction's commit(), rollback() and active() methods (#1248) --- .../google/cloud/datastore/Transaction.java | 50 ++++++++ .../snippets/TransactionSnippets.java | 112 ++++++++++++++++++ .../snippets/ITTransactionSnippets.java | 68 +++++++++++ 3 files changed, 230 insertions(+) create mode 100644 google-cloud-examples/src/main/java/com/google/cloud/examples/datastore/snippets/TransactionSnippets.java create mode 100644 google-cloud-examples/src/test/java/com/google/cloud/examples/datastore/snippets/ITTransactionSnippets.java diff --git a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/Transaction.java b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/Transaction.java index 9ecf2c8caeb6..1ac52ec1a3f8 100644 --- a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/Transaction.java +++ b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/Transaction.java @@ -105,6 +105,21 @@ interface Response { /** * Commit the transaction. * + *

Example of committing a transaction. + *

 {@code
+   * // create an entity
+   * KeyFactory keyFactory = datastore.newKeyFactory().kind("someKind");
+   * Key key = datastore.allocateId(keyFactory.newKey());
+   * Entity entity = Entity.builder(key).set("description", "commit()").build();
+   * // add the entity and commit
+   * try {
+   *   transaction.put(entity);
+   *   transaction.commit();
+   * } catch (DatastoreException ex) {
+   *   // handle exception
+   * }
+   * }
+ * * @throws DatastoreException if could not commit the transaction or if no longer active */ Response commit(); @@ -112,12 +127,47 @@ interface Response { /** * Rollback the transaction. * + *

Example of rolling back a transaction. + *

 {@code
+   * // create an entity
+   * KeyFactory keyFactory = datastore.newKeyFactory().kind("someKind");
+   * Key key = datastore.allocateId(keyFactory.newKey());
+   * Entity entity = Entity.builder(key).set("description", "rollback()").build();
+   * 
+   * // add the entity and rollback
+   * transaction.put(entity);
+   * transaction.rollback();
+   * // calling transaction.commit() now would fail
+   * }
+ * * @throws DatastoreException if transaction was already committed */ void rollback(); /** * Returns {@code true} if the transaction is still active (was not committed or rolledback). + * + *

Example of verifying if a transaction is active. + *

 {@code
+   * // create an entity
+   * KeyFactory keyFactory = datastore.newKeyFactory().kind("someKind");
+   * Key key = datastore.allocateId(keyFactory.newKey());
+   * Entity entity = Entity.builder(key).set("description", "active()").build();
+   * // calling transaction.active() now would return true
+   * try {
+   *   // add the entity and commit
+   *   transaction.put(entity);
+   *   transaction.commit();
+   * } finally {
+   *   // if committing succeeded
+   *   // then transaction.active() will be false
+   *   if (transaction.active()) {
+   *     // otherwise it's true and we need to rollback
+   *     transaction.rollback();
+   *   }
+   * }
+   * }
+ * */ @Override boolean active(); diff --git a/google-cloud-examples/src/main/java/com/google/cloud/examples/datastore/snippets/TransactionSnippets.java b/google-cloud-examples/src/main/java/com/google/cloud/examples/datastore/snippets/TransactionSnippets.java new file mode 100644 index 000000000000..e81911992ac2 --- /dev/null +++ b/google-cloud-examples/src/main/java/com/google/cloud/examples/datastore/snippets/TransactionSnippets.java @@ -0,0 +1,112 @@ +/* + * Copyright 2016 Google Inc. All Rights Reserved. + * + * 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. + */ + +/* + * EDITING INSTRUCTIONS + * This file is referenced in Transaction's javadoc. Any change to this file should be reflected in + * Transaction's javadoc. + */ + +package com.google.cloud.examples.datastore.snippets; + +import com.google.cloud.datastore.Datastore; +import com.google.cloud.datastore.DatastoreException; +import com.google.cloud.datastore.Entity; +import com.google.cloud.datastore.Key; +import com.google.cloud.datastore.KeyFactory; +import com.google.cloud.datastore.Transaction; + +/** + * This class contains a number of snippets for the {@link Transaction} interface. + */ +public class TransactionSnippets { + + private final Transaction transaction; + + public TransactionSnippets(Transaction transaction) { + this.transaction = transaction; + } + + /** + * Example of committing a transaction. + */ + // [TARGET commit()] + public Key commit() { + Datastore datastore = transaction.datastore(); + // [START commit] + // create an entity + KeyFactory keyFactory = datastore.newKeyFactory().kind("someKind"); + Key key = datastore.allocateId(keyFactory.newKey()); + Entity entity = Entity.builder(key).set("description", "commit()").build(); + // add the entity and commit + try { + transaction.put(entity); + transaction.commit(); + } catch (DatastoreException ex) { + // handle exception + } + // [END commit] + return key; + } + + /** + * Example of rolling back a transaction. + */ + // [TARGET rollback()] + public Key rollback() { + Datastore datastore = transaction.datastore(); + // [START rollback] + // create an entity + KeyFactory keyFactory = datastore.newKeyFactory().kind("someKind"); + Key key = datastore.allocateId(keyFactory.newKey()); + Entity entity = Entity.builder(key).set("description", "rollback()").build(); + + // add the entity and rollback + transaction.put(entity); + transaction.rollback(); + // calling transaction.commit() now would fail + // [END rollback] + return key; + } + + /** + * Example of verifying if a transaction is active. + */ + // [TARGET active()] + public Key active() { + Datastore datastore = transaction.datastore(); + // [START active] + // create an entity + KeyFactory keyFactory = datastore.newKeyFactory().kind("someKind"); + Key key = datastore.allocateId(keyFactory.newKey()); + Entity entity = Entity.builder(key).set("description", "active()").build(); + // calling transaction.active() now would return true + try { + // add the entity and commit + transaction.put(entity); + transaction.commit(); + } finally { + // if committing succeeded + // then transaction.active() will be false + if (transaction.active()) { + // otherwise it's true and we need to rollback + transaction.rollback(); + } + } + // [END active] + return key; + } +} diff --git a/google-cloud-examples/src/test/java/com/google/cloud/examples/datastore/snippets/ITTransactionSnippets.java b/google-cloud-examples/src/test/java/com/google/cloud/examples/datastore/snippets/ITTransactionSnippets.java new file mode 100644 index 000000000000..dab72d63857f --- /dev/null +++ b/google-cloud-examples/src/test/java/com/google/cloud/examples/datastore/snippets/ITTransactionSnippets.java @@ -0,0 +1,68 @@ +/* + * Copyright 2016 Google Inc. All Rights Reserved. + * + * 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.examples.datastore.snippets; + +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; + +import com.google.cloud.datastore.Datastore; +import com.google.cloud.datastore.DatastoreOptions; +import com.google.cloud.datastore.Entity; +import com.google.cloud.datastore.Key; +import com.google.cloud.datastore.Transaction; + +import org.junit.BeforeClass; +import org.junit.Test; + +public class ITTransactionSnippets { + + private static Datastore datastore; + + @BeforeClass + public static void beforeClass() { + datastore = DatastoreOptions.defaultInstance().service(); + } + + @Test + public void testCommit() { + Transaction transaction = datastore.newTransaction(); + TransactionSnippets transactionSnippets = new TransactionSnippets(transaction); + Key key = transactionSnippets.commit(); + Entity result = datastore.get(key); + assertNotNull(result); + datastore.delete(key); + } + + @Test + public void testRollback() { + Transaction transaction = datastore.newTransaction(); + TransactionSnippets transactionSnippets = new TransactionSnippets(transaction); + Key key = transactionSnippets.rollback(); + Entity result = datastore.get(key); + assertNull(result); + } + + @Test + public void testActive() { + Transaction transaction = datastore.newTransaction(); + TransactionSnippets transactionSnippets = new TransactionSnippets(transaction); + Key key = transactionSnippets.active(); + Entity result = datastore.get(key); + assertNotNull(result); + datastore.delete(key); + } +} From c3b7cbf84e0057fd06164c71cb7498f33806855f Mon Sep 17 00:00:00 2001 From: Garrett Jones Date: Fri, 16 Sep 2016 11:54:25 -0700 Subject: [PATCH 03/28] Adding datastore snippets --- .../datastore/snippets/DatastoreSnippets.java | 84 +++++++++++++++---- 1 file changed, 68 insertions(+), 16 deletions(-) diff --git a/google-cloud-examples/src/main/java/com/google/cloud/examples/datastore/snippets/DatastoreSnippets.java b/google-cloud-examples/src/main/java/com/google/cloud/examples/datastore/snippets/DatastoreSnippets.java index 6610a0443490..ca8669e93d84 100644 --- a/google-cloud-examples/src/main/java/com/google/cloud/examples/datastore/snippets/DatastoreSnippets.java +++ b/google-cloud-examples/src/main/java/com/google/cloud/examples/datastore/snippets/DatastoreSnippets.java @@ -30,27 +30,79 @@ import java.util.Iterator; public class DatastoreSnippets { - + private final Datastore datastore; public DatastoreSnippets(Datastore datastore) { this.datastore = datastore; } - + // ANTHONY STARTS HERE - - - + + + // ANTHONY ENDS HERE - + // GARRETT STARTS HERE - - - + + // [TARGET update(Entity... entities)] + // [VARIABLE "my_key_name"] + public void updateEntity(String keyName) { + // [START updateEntity] + Key key = datastore.newKeyFactory().newKey(keyName); + Entity.Builder entityBuilder = Entity.builder(key); + entityBuilder.set("propertyName", "value"); + Entity entity = entityBuilder.build(); + datastore.update(entity); + // [END updateEntity] + } + + // [TARGET put(FullEntity entity)] + // [VARIABLE "my_key_name"] + public void putSingleEntity(String keyName) { + // [START putSingleEntity] + Key key = datastore.newKeyFactory().newKey(keyName); + Entity.Builder entityBuilder = Entity.builder(key); + entityBuilder.set("propertyName", "value"); + Entity entity = entityBuilder.build(); + datastore.put(entity); + // [END putSingleEntity] + } + + // [TARGET put(FullEntity... entity)] + // [VARIABLE "my_key_name1"] + // [VARIABLE "my_key_name2"] + public void batchPutEntities(String keyName1, String keyName2) { + // [START batchPutEntities] + Key key1 = datastore.newKeyFactory().newKey(keyName1); + Entity.Builder entityBuilder1 = Entity.builder(key1); + entityBuilder1.set("propertyName", "value"); + Entity entity1 = entityBuilder1.build(); + + Key key2 = datastore.newKeyFactory().newKey(keyName2); + Entity.Builder entityBuilder2 = Entity.builder(key2); + entityBuilder2.set("propertyName", "value"); + Entity entity2 = entityBuilder2.build(); + + datastore.put(entity1, entity2); + // [END batchPutEntities] + } + + // [TARGET update(Entity... entities)] + // [VARIABLE "my_key_name1"] + // [VARIABLE "my_key_name2"] + public void deleteEntities(String keyName1, String keyName2) { + // [START deleteEntities] + Key key1 = datastore.newKeyFactory().newKey(keyName1); + Key key2 = datastore.newKeyFactory().newKey(keyName2); + datastore.delete(key1, key2); + // [END deleteEntities] + } + // GARRETT ENDS HERE - + // MIKE STARTS HERE - + /** * Example of creating a KeyFactory. */ @@ -61,7 +113,7 @@ public KeyFactory newKeyFactory() { // [END newKeyFactory] return keyFactory; } - + /** * Example of getting an Entity. */ @@ -74,7 +126,7 @@ public Entity get(String keyName) { // [END get] return entity; } - + /** * Example of getting multiple entities */ @@ -89,9 +141,9 @@ public Iterator get(String firstKeyName, String secondKeyName) { // [END get] return entities; } - - //fetch(Iterable keys, ReadOption... options) + + //fetch(Iterable keys, ReadOption... options) //run(Query query, ReadOption... options) - + // MIKE ENDS HERE } From 99f6311b283e840f365c1ee5b6527a075c6bcc60 Mon Sep 17 00:00:00 2001 From: omaray Date: Fri, 16 Sep 2016 12:08:26 -0700 Subject: [PATCH 04/28] Adding 2 snippets for allocateId --- .../datastore/snippets/DatastoreSnippets.java | 72 ++++++++++++++----- 1 file changed, 54 insertions(+), 18 deletions(-) diff --git a/google-cloud-examples/src/main/java/com/google/cloud/examples/datastore/snippets/DatastoreSnippets.java b/google-cloud-examples/src/main/java/com/google/cloud/examples/datastore/snippets/DatastoreSnippets.java index ca8669e93d84..223c0912b4ee 100644 --- a/google-cloud-examples/src/main/java/com/google/cloud/examples/datastore/snippets/DatastoreSnippets.java +++ b/google-cloud-examples/src/main/java/com/google/cloud/examples/datastore/snippets/DatastoreSnippets.java @@ -1,34 +1,40 @@ /* -* Copyright 2016 Google Inc. All Rights Reserved. -* -* 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. -*/ + * Copyright 2016 Google Inc. All Rights Reserved. + * + * 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. + */ /* -* EDITING INSTRUCTIONS -* This file is referenced in MyClass’s javadoc. Any change to this file should be reflected in MyClass’s -* javadoc. -*/ + * EDITING INSTRUCTIONS + * This file is referenced in Datastore's javadoc. Any change to this file should be reflected in + * Datastore's javadoc. + */ package com.google.cloud.examples.datastore.snippets; import com.google.cloud.datastore.Datastore; import com.google.cloud.datastore.Entity; +import com.google.cloud.datastore.IncompleteKey; import com.google.cloud.datastore.Key; import com.google.cloud.datastore.KeyFactory; import com.google.common.collect.Lists; + import java.util.Iterator; +import java.util.List; +/** + * This class contains a number of snippets for the {@link Datastore} interface. + */ public class DatastoreSnippets { private final Datastore datastore; @@ -40,7 +46,37 @@ public DatastoreSnippets(Datastore datastore) { // ANTHONY STARTS HERE + /** + * Example of allocating an id + */ + // [TARGET allocatedId()] + public Key allocateIdSingle() { + // [START allocateIdSingle] + KeyFactory keyFactory = datastore.newKeyFactory().kind("someKind"); + IncompleteKey incompleteKey = keyFactory.newKey(); + // let cloud datastore automatically assign an id + Key key = datastore.allocateId(keyFactory.newKey()); + // [END allocateIdSingle] + + return key; + } + + /** + * Example of allocating multiple ids + */ + // [TARGET allocatedId()] + public List allocateIdMultiple() { + // [START allocateIdMultiple] + KeyFactory keyFactory = datastore.newKeyFactory().kind("someKind"); + IncompleteKey incompleteKey1 = keyFactory.newKey(); + IncompleteKey incompleteKey2 = keyFactory.newKey(); + + // let cloud datastore automatically assign the ids + List keys = datastore.allocateId(incompleteKey1, incompleteKey2); + // [END allocateIdMultiple] + return keys; + } // ANTHONY ENDS HERE // GARRETT STARTS HERE From 7fdc25284e9f9a7e294c19f5f4b8eff3a6c5fab0 Mon Sep 17 00:00:00 2001 From: Michael Bausor Date: Fri, 16 Sep 2016 12:20:14 -0700 Subject: [PATCH 05/28] Added snippets and IT class --- .../datastore/snippets/DatastoreSnippets.java | 75 +++++++++-- .../storage/snippets/ITDatastoreSnippets.java | 118 ++++++++++++++++++ 2 files changed, 182 insertions(+), 11 deletions(-) create mode 100644 google-cloud-examples/src/test/java/com/google/cloud/examples/storage/snippets/ITDatastoreSnippets.java diff --git a/google-cloud-examples/src/main/java/com/google/cloud/examples/datastore/snippets/DatastoreSnippets.java b/google-cloud-examples/src/main/java/com/google/cloud/examples/datastore/snippets/DatastoreSnippets.java index 6610a0443490..54f208272908 100644 --- a/google-cloud-examples/src/main/java/com/google/cloud/examples/datastore/snippets/DatastoreSnippets.java +++ b/google-cloud-examples/src/main/java/com/google/cloud/examples/datastore/snippets/DatastoreSnippets.java @@ -26,8 +26,14 @@ import com.google.cloud.datastore.Entity; 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.cloud.datastore.StructuredQuery; +import com.google.cloud.datastore.StructuredQuery.PropertyFilter; +import com.google.cloud.storage.Blob; import com.google.common.collect.Lists; import java.util.Iterator; +import java.util.List; public class DatastoreSnippets { @@ -55,7 +61,7 @@ public DatastoreSnippets(Datastore datastore) { * Example of creating a KeyFactory. */ // [TARGET newKeyFactory()] - public KeyFactory newKeyFactory() { + public KeyFactory createKeyFactory() { // [START newKeyFactory] KeyFactory keyFactory = datastore.newKeyFactory(); // [END newKeyFactory] @@ -67,31 +73,78 @@ public KeyFactory newKeyFactory() { */ // [TARGET get(Key key, ReadOption... options)] // [VARIABLE "my_key_name"] - public Entity get(String keyName) { + public Entity getEntityWithKey(String keyName) { // [START get] Key key = datastore.newKeyFactory().newKey(keyName); Entity entity = datastore.get(key); + // Do something with the entity // [END get] return entity; } /** - * Example of getting multiple entities + * Example of getting multiple Entity objects. */ - // [TARGET get(Key key, ReadOption... options)] + // [TARGET get(Iterable key, ReadOption... options)] // [VARIABLE "my_first_key_name"] - //[VARIABLE "my_second_key_name"] - public Iterator get(String firstKeyName, String secondKeyName) { + // [VARIABLE "my_second_key_name"] + public Iterator getEntitiesWithKeys(String firstKeyName, String secondKeyName) { // [START get] - Key firstKey = datastore.newKeyFactory().newKey(firstKeyName); - Key secondKey = datastore.newKeyFactory().newKey(secondKeyName); - Iterator entities = datastore.get(Lists.newArrayList(firstKey, secondKey)); + KeyFactory keyFactory = datastore.newKeyFactory(); + Key firstKey = keyFactory.newKey(firstKeyName); + Key secondKey = keyFactory.newKey(secondKeyName); + Iterator entitiesIterator = datastore.get(Lists.newArrayList(firstKey, secondKey)); + while (entitiesIterator.hasNext()) { + Entity entity = entitiesIterator.next(); + // do something with the entity + } + // [END get] + return entitiesIterator; + } + + /** + * Example of fetching a list of Entity objects. + */ + // [TARGET fetch(Iterable key, ReadOption... options)] + // [VARIABLE "my_first_key_name"] + // [VARIABLE "my_second_key_name"] + public List fetchEntitiesWithKeys(String firstKeyName, String secondKeyName) { + // [START get] + KeyFactory keyFactory = datastore.newKeyFactory(); + Key firstKey = keyFactory.newKey(firstKeyName); + Key secondKey = keyFactory.newKey(secondKeyName); + List entities = datastore.fetch(Lists.newArrayList(firstKey, secondKey)); + for (Entity entity : entities) { + // do something with the entity + } // [END get] return entities; } - //fetch(Iterable keys, ReadOption... options) - //run(Query query, ReadOption... options) + /** + * Example of running a query. + */ + // [TARGET run(Query query, ReadOption... options)] + // [VARIABLE "my_key_name"] + // [VARIABLE "my_query_kind"] + // [VARIABLE "my_query_namespace"] + public QueryResults runQuery(String keyName, String queryKind, String queryNamespace) { + // [START get] + Key key = datastore.newKeyFactory().newKey(keyName); + StructuredQuery query = + Query.entityQueryBuilder() + .namespace(queryNamespace) + .kind(queryKind) + .filter(PropertyFilter.hasAncestor(key)) + .build(); + QueryResults results = datastore.run(query); + while (results.hasNext()) { + Entity result = results.next(); + // do something with result + } + // [END get] + return results; + } // MIKE ENDS HERE } diff --git a/google-cloud-examples/src/test/java/com/google/cloud/examples/storage/snippets/ITDatastoreSnippets.java b/google-cloud-examples/src/test/java/com/google/cloud/examples/storage/snippets/ITDatastoreSnippets.java new file mode 100644 index 000000000000..1042e77e4c1f --- /dev/null +++ b/google-cloud-examples/src/test/java/com/google/cloud/examples/storage/snippets/ITDatastoreSnippets.java @@ -0,0 +1,118 @@ +/* + * Copyright 2016 Google Inc. All Rights Reserved. + * + * 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.examples.storage.snippets; + +import static java.nio.charset.StandardCharsets.UTF_8; +import static org.junit.Assert.assertArrayEquals; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + +import com.google.cloud.Page; +import com.google.cloud.datastore.Datastore; +import com.google.cloud.datastore.Entity; +import com.google.cloud.datastore.KeyFactory; +import com.google.cloud.datastore.QueryResults; +import com.google.cloud.datastore.testing.LocalDatastoreHelper; +import com.google.cloud.examples.datastore.snippets.DatastoreSnippets; +import com.google.cloud.storage.Acl; +import com.google.cloud.storage.Blob; +import com.google.cloud.storage.BlobId; +import com.google.cloud.storage.BlobInfo; +import com.google.cloud.storage.Bucket; +import com.google.cloud.storage.Storage; +import com.google.cloud.storage.StorageException; +import com.google.cloud.storage.testing.RemoteStorageHelper; +import com.google.common.collect.Iterators; +import com.google.common.collect.Sets; + +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; +import org.junit.rules.Timeout; + +import java.io.IOException; +import java.io.InputStream; +import java.net.URL; +import java.net.URLConnection; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Set; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeUnit; +import java.util.logging.Level; +import java.util.logging.Logger; + +public class ITDatastoreSnippets { + + private static final Logger log = Logger.getLogger(ITDatastoreSnippets.class.getName()); + private static final String BUCKET = RemoteStorageHelper.generateBucketName(); + + private static Datastore datastore; + private static DatastoreSnippets datastoreSnippets; + + @Rule + public ExpectedException thrown = ExpectedException.none(); + + @Rule + public Timeout globalTimeout = Timeout.seconds(300); + + @BeforeClass + public static void beforeClass() { + LocalDatastoreHelper helper = LocalDatastoreHelper.create(); + datastore = helper.options().service(); + datastoreSnippets = new DatastoreSnippets(datastore); + } + + @AfterClass + public static void afterClass() throws ExecutionException, InterruptedException { + if (datastore != null) { + //LocalDatastoreHelper.sendQuitRequest(port) + } + } + + @Test + public void test() throws InterruptedException { + + String KEY = "my_key_name"; + String FIRST_KEY = "first_key_name"; + String SECOND_KEY = "second_key_name"; + String QUERY_KIND = "kind"; + String NAMESPACE = "namespace"; + + KeyFactory keyFactory = datastoreSnippets.createKeyFactory(); + assertNotNull(keyFactory); + + Entity entity = datastoreSnippets.getEntityWithKey(KEY); + assertNotNull(entity); + + Iterator entityIterator = datastoreSnippets.getEntitiesWithKeys(FIRST_KEY, SECOND_KEY); + assertNotNull(entityIterator); + + List entityList = datastoreSnippets.fetchEntitiesWithKeys(FIRST_KEY, SECOND_KEY); + assertNotNull(entityList); + + QueryResults queryResults = datastoreSnippets.runQuery(KEY, QUERY_KIND, NAMESPACE); + assertNotNull(queryResults); + } +} From 98bdcfe2af76a034f0749ca5873fcea36a397a14 Mon Sep 17 00:00:00 2001 From: Tim Swast Date: Fri, 16 Sep 2016 12:12:13 -0700 Subject: [PATCH 06/28] Add BigQuery snippets for Job.isDone() (#1250) --- .../snippets/InsertDataAndQueryTable.java | 15 +++--- .../bigquery/snippets/JobSnippets.java | 51 ++++++++++++++++++ .../bigquery/snippets/ITJobSnippets.java | 53 +++++++++++++++++++ 3 files changed, 111 insertions(+), 8 deletions(-) create mode 100644 google-cloud-examples/src/main/java/com/google/cloud/examples/bigquery/snippets/JobSnippets.java create mode 100644 google-cloud-examples/src/test/java/com/google/cloud/examples/bigquery/snippets/ITJobSnippets.java diff --git a/google-cloud-examples/src/main/java/com/google/cloud/examples/bigquery/snippets/InsertDataAndQueryTable.java b/google-cloud-examples/src/main/java/com/google/cloud/examples/bigquery/snippets/InsertDataAndQueryTable.java index 6fb2a7dce997..6022545eb3bf 100644 --- a/google-cloud-examples/src/main/java/com/google/cloud/examples/bigquery/snippets/InsertDataAndQueryTable.java +++ b/google-cloud-examples/src/main/java/com/google/cloud/examples/bigquery/snippets/InsertDataAndQueryTable.java @@ -70,10 +70,8 @@ public static void main(String... args) throws InterruptedException { firstRow.put("StringField", "value1"); secondRow.put("StringField", "value2"); // Create an insert request - InsertAllRequest insertRequest = InsertAllRequest.builder(tableId) - .addRow(firstRow) - .addRow(secondRow) - .build(); + InsertAllRequest insertRequest = + InsertAllRequest.builder(tableId).addRow(firstRow).addRow(secondRow).build(); // Insert rows InsertAllResponse insertResponse = bigquery.insertAll(insertRequest); // Check if errors occurred @@ -82,10 +80,11 @@ public static void main(String... args) throws InterruptedException { } // Create a query request - QueryRequest queryRequest = QueryRequest.builder("SELECT * FROM my_dataset_id.my_table_id") - .maxWaitTime(60000L) - .pageSize(1000L) - .build(); + QueryRequest queryRequest = + QueryRequest.builder("SELECT * FROM my_dataset_id.my_table_id") + .maxWaitTime(60000L) + .pageSize(1000L) + .build(); // Request query to be executed and wait for results QueryResponse queryResponse = bigquery.query(queryRequest); while (!queryResponse.jobCompleted()) { diff --git a/google-cloud-examples/src/main/java/com/google/cloud/examples/bigquery/snippets/JobSnippets.java b/google-cloud-examples/src/main/java/com/google/cloud/examples/bigquery/snippets/JobSnippets.java new file mode 100644 index 000000000000..5552b5ff9968 --- /dev/null +++ b/google-cloud-examples/src/main/java/com/google/cloud/examples/bigquery/snippets/JobSnippets.java @@ -0,0 +1,51 @@ +/* + * Copyright 2016 Google Inc. All Rights Reserved. + * + * 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. + */ + +/* + * EDITING INSTRUCTIONS + * This file is referenced in Job's javadoc. Any change to this file should be reflected in + * Job's javadoc. + */ + +package com.google.cloud.examples.bigquery.snippets; + +import com.google.cloud.bigquery.Job; + +public class JobSnippets { + + private final Job job; + + public JobSnippets(Job job) { + this.job = job; + } + + /** + * Example of waiting for a job until it reports that it is done. + */ + // [TARGET isDone()] + public boolean isDone() { + try { + // [START isDone] + while (!job.isDone()) { + Thread.sleep(1000L); + } + // [END isDone] + } catch (InterruptedException e) { + return false; + } + return true; + } +} diff --git a/google-cloud-examples/src/test/java/com/google/cloud/examples/bigquery/snippets/ITJobSnippets.java b/google-cloud-examples/src/test/java/com/google/cloud/examples/bigquery/snippets/ITJobSnippets.java new file mode 100644 index 000000000000..eb3f49f0dd6e --- /dev/null +++ b/google-cloud-examples/src/test/java/com/google/cloud/examples/bigquery/snippets/ITJobSnippets.java @@ -0,0 +1,53 @@ +/* + * Copyright 2016 Google Inc. All Rights Reserved. + * + * 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.examples.bigquery.snippets; + +import static org.junit.Assert.assertTrue; + +import com.google.cloud.bigquery.BigQuery; +import com.google.cloud.bigquery.Job; +import com.google.cloud.bigquery.JobConfiguration; +import com.google.cloud.bigquery.JobInfo; +import com.google.cloud.bigquery.QueryJobConfiguration; +import com.google.cloud.bigquery.testing.RemoteBigQueryHelper; + +import org.junit.BeforeClass; +import org.junit.Test; + +public class ITJobSnippets { + + private static BigQuery bigquery; + + @BeforeClass + public static void beforeClass() { + bigquery = RemoteBigQueryHelper.create().options().service(); + } + + @Test + public void testIsDone() throws Exception { + JobConfiguration jobConfig = + QueryJobConfiguration.builder( + "SELECT corpus FROM `publicdata.samples.shakespeare` GROUP BY corpus;") + .useLegacySql(false) + .build(); + JobInfo jobInfo = JobInfo.builder(jobConfig).build(); + Job job = bigquery.create(jobInfo); + JobSnippets jobSnippets = new JobSnippets(job); + boolean result = jobSnippets.isDone(); + assertTrue(result); + } +} From ffa6863c3c3e7660d2720fadec093cb65cf31b03 Mon Sep 17 00:00:00 2001 From: Garrett Jones Date: Fri, 16 Sep 2016 12:28:04 -0700 Subject: [PATCH 07/28] Adding name tags to ITDatastoreSnippets --- .../storage/snippets/ITDatastoreSnippets.java | 24 ++++++++++++++----- 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/google-cloud-examples/src/test/java/com/google/cloud/examples/storage/snippets/ITDatastoreSnippets.java b/google-cloud-examples/src/test/java/com/google/cloud/examples/storage/snippets/ITDatastoreSnippets.java index 1042e77e4c1f..7a76d59f8f3e 100644 --- a/google-cloud-examples/src/test/java/com/google/cloud/examples/storage/snippets/ITDatastoreSnippets.java +++ b/google-cloud-examples/src/test/java/com/google/cloud/examples/storage/snippets/ITDatastoreSnippets.java @@ -91,28 +91,40 @@ public static void afterClass() throws ExecutionException, InterruptedException } } + // ANTHONY STARTS HERE + + // ANTHONY ENDS HERE + + // GARRETT STARTS HERE + + // GARRETT ENDS HERE + + // MIKE STARTS HERE + @Test public void test() throws InterruptedException { - + String KEY = "my_key_name"; String FIRST_KEY = "first_key_name"; String SECOND_KEY = "second_key_name"; String QUERY_KIND = "kind"; String NAMESPACE = "namespace"; - + KeyFactory keyFactory = datastoreSnippets.createKeyFactory(); assertNotNull(keyFactory); - + Entity entity = datastoreSnippets.getEntityWithKey(KEY); assertNotNull(entity); - + Iterator entityIterator = datastoreSnippets.getEntitiesWithKeys(FIRST_KEY, SECOND_KEY); assertNotNull(entityIterator); - + List entityList = datastoreSnippets.fetchEntitiesWithKeys(FIRST_KEY, SECOND_KEY); assertNotNull(entityList); - + QueryResults queryResults = datastoreSnippets.runQuery(KEY, QUERY_KIND, NAMESPACE); assertNotNull(queryResults); } + + // MIKE ENDS HERE } From 94345c90ac4838ec3f0c65a9f4cbbe228ab62b94 Mon Sep 17 00:00:00 2001 From: Garrett Jones Date: Fri, 16 Sep 2016 13:52:04 -0700 Subject: [PATCH 08/28] Fixes for Datastore integration tests --- .../datastore/snippets/DatastoreSnippets.java | 36 +++++------ .../storage/snippets/ITDatastoreSnippets.java | 64 +++++++++---------- 2 files changed, 47 insertions(+), 53 deletions(-) diff --git a/google-cloud-examples/src/main/java/com/google/cloud/examples/datastore/snippets/DatastoreSnippets.java b/google-cloud-examples/src/main/java/com/google/cloud/examples/datastore/snippets/DatastoreSnippets.java index abdbe8b8ca9a..9c42e7774bf0 100644 --- a/google-cloud-examples/src/main/java/com/google/cloud/examples/datastore/snippets/DatastoreSnippets.java +++ b/google-cloud-examples/src/main/java/com/google/cloud/examples/datastore/snippets/DatastoreSnippets.java @@ -57,7 +57,7 @@ public DatastoreSnippets(Datastore datastore) { // [TARGET allocatedId()] public Key allocateIdSingle() { // [START allocateIdSingle] - KeyFactory keyFactory = datastore.newKeyFactory().kind("someKind"); + KeyFactory keyFactory = datastore.newKeyFactory().kind("MyClass"); IncompleteKey incompleteKey = keyFactory.newKey(); // let cloud datastore automatically assign an id @@ -73,7 +73,7 @@ public Key allocateIdSingle() { // [TARGET allocatedId()] public List allocateIdMultiple() { // [START allocateIdMultiple] - KeyFactory keyFactory = datastore.newKeyFactory().kind("someKind"); + KeyFactory keyFactory = datastore.newKeyFactory().kind("MyClass"); IncompleteKey incompleteKey1 = keyFactory.newKey(); IncompleteKey incompleteKey2 = keyFactory.newKey(); @@ -90,9 +90,9 @@ public List allocateIdMultiple() { // [VARIABLE "my_key_name"] public void updateEntity(String keyName) { // [START updateEntity] - Key key = datastore.newKeyFactory().newKey(keyName); + Key key = datastore.newKeyFactory().kind("MyClass").newKey(keyName); Entity.Builder entityBuilder = Entity.builder(key); - entityBuilder.set("propertyName", "value"); + entityBuilder.set("propertyName", "updatedValue"); Entity entity = entityBuilder.build(); datastore.update(entity); // [END updateEntity] @@ -102,7 +102,7 @@ public void updateEntity(String keyName) { // [VARIABLE "my_key_name"] public void putSingleEntity(String keyName) { // [START putSingleEntity] - Key key = datastore.newKeyFactory().newKey(keyName); + Key key = datastore.newKeyFactory().kind("MyClass").newKey(keyName); Entity.Builder entityBuilder = Entity.builder(key); entityBuilder.set("propertyName", "value"); Entity entity = entityBuilder.build(); @@ -115,12 +115,12 @@ public void putSingleEntity(String keyName) { // [VARIABLE "my_key_name2"] public void batchPutEntities(String keyName1, String keyName2) { // [START batchPutEntities] - Key key1 = datastore.newKeyFactory().newKey(keyName1); + Key key1 = datastore.newKeyFactory().kind("MyClass").newKey(keyName1); Entity.Builder entityBuilder1 = Entity.builder(key1); entityBuilder1.set("propertyName", "value"); Entity entity1 = entityBuilder1.build(); - Key key2 = datastore.newKeyFactory().newKey(keyName2); + Key key2 = datastore.newKeyFactory().kind("MyClass").newKey(keyName2); Entity.Builder entityBuilder2 = Entity.builder(key2); entityBuilder2.set("propertyName", "value"); Entity entity2 = entityBuilder2.build(); @@ -134,8 +134,8 @@ public void batchPutEntities(String keyName1, String keyName2) { // [VARIABLE "my_key_name2"] public void deleteEntities(String keyName1, String keyName2) { // [START deleteEntities] - Key key1 = datastore.newKeyFactory().newKey(keyName1); - Key key2 = datastore.newKeyFactory().newKey(keyName2); + Key key1 = datastore.newKeyFactory().kind("MyClass").newKey(keyName1); + Key key2 = datastore.newKeyFactory().kind("MyClass").newKey(keyName2); datastore.delete(key1, key2); // [END deleteEntities] } @@ -162,7 +162,7 @@ public KeyFactory createKeyFactory() { // [VARIABLE "my_key_name"] public Entity getEntityWithKey(String keyName) { // [START get] - Key key = datastore.newKeyFactory().newKey(keyName); + Key key = datastore.newKeyFactory().kind("MyClass").newKey(keyName); Entity entity = datastore.get(key); // Do something with the entity // [END get] @@ -178,8 +178,8 @@ public Entity getEntityWithKey(String keyName) { public Iterator getEntitiesWithKeys(String firstKeyName, String secondKeyName) { // [START get] KeyFactory keyFactory = datastore.newKeyFactory(); - Key firstKey = keyFactory.newKey(firstKeyName); - Key secondKey = keyFactory.newKey(secondKeyName); + Key firstKey = keyFactory.kind("MyClass").newKey(firstKeyName); + Key secondKey = keyFactory.kind("MyClass").newKey(secondKeyName); Iterator entitiesIterator = datastore.get(Lists.newArrayList(firstKey, secondKey)); while (entitiesIterator.hasNext()) { Entity entity = entitiesIterator.next(); @@ -188,7 +188,7 @@ public Iterator getEntitiesWithKeys(String firstKeyName, String secondKe // [END get] return entitiesIterator; } - + /** * Example of fetching a list of Entity objects. */ @@ -198,8 +198,8 @@ public Iterator getEntitiesWithKeys(String firstKeyName, String secondKe public List fetchEntitiesWithKeys(String firstKeyName, String secondKeyName) { // [START get] KeyFactory keyFactory = datastore.newKeyFactory(); - Key firstKey = keyFactory.newKey(firstKeyName); - Key secondKey = keyFactory.newKey(secondKeyName); + Key firstKey = keyFactory.kind("MyClass").newKey(firstKeyName); + Key secondKey = keyFactory.kind("MyClass").newKey(secondKeyName); List entities = datastore.fetch(Lists.newArrayList(firstKey, secondKey)); for (Entity entity : entities) { // do something with the entity @@ -207,7 +207,7 @@ public List fetchEntitiesWithKeys(String firstKeyName, String secondKeyN // [END get] return entities; } - + /** * Example of running a query. */ @@ -217,7 +217,7 @@ public List fetchEntitiesWithKeys(String firstKeyName, String secondKeyN // [VARIABLE "my_query_namespace"] public QueryResults runQuery(String keyName, String queryKind, String queryNamespace) { // [START get] - Key key = datastore.newKeyFactory().newKey(keyName); + Key key = datastore.newKeyFactory().kind("MyClass").newKey(keyName); StructuredQuery query = Query.entityQueryBuilder() .namespace(queryNamespace) @@ -232,6 +232,6 @@ public QueryResults runQuery(String keyName, String queryKind, String qu // [END get] return results; } - + // MIKE ENDS HERE } diff --git a/google-cloud-examples/src/test/java/com/google/cloud/examples/storage/snippets/ITDatastoreSnippets.java b/google-cloud-examples/src/test/java/com/google/cloud/examples/storage/snippets/ITDatastoreSnippets.java index 7a76d59f8f3e..2904d60f195d 100644 --- a/google-cloud-examples/src/test/java/com/google/cloud/examples/storage/snippets/ITDatastoreSnippets.java +++ b/google-cloud-examples/src/test/java/com/google/cloud/examples/storage/snippets/ITDatastoreSnippets.java @@ -16,32 +16,21 @@ package com.google.cloud.examples.storage.snippets; -import static java.nio.charset.StandardCharsets.UTF_8; -import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; -import com.google.cloud.Page; import com.google.cloud.datastore.Datastore; +import com.google.cloud.datastore.DatastoreOptions; import com.google.cloud.datastore.Entity; import com.google.cloud.datastore.KeyFactory; import com.google.cloud.datastore.QueryResults; -import com.google.cloud.datastore.testing.LocalDatastoreHelper; import com.google.cloud.examples.datastore.snippets.DatastoreSnippets; -import com.google.cloud.storage.Acl; -import com.google.cloud.storage.Blob; -import com.google.cloud.storage.BlobId; -import com.google.cloud.storage.BlobInfo; -import com.google.cloud.storage.Bucket; -import com.google.cloud.storage.Storage; -import com.google.cloud.storage.StorageException; import com.google.cloud.storage.testing.RemoteStorageHelper; -import com.google.common.collect.Iterators; -import com.google.common.collect.Sets; + +import java.util.Iterator; +import java.util.List; +import java.util.concurrent.ExecutionException; +import java.util.logging.Logger; import org.junit.AfterClass; import org.junit.BeforeClass; @@ -50,19 +39,6 @@ import org.junit.rules.ExpectedException; import org.junit.rules.Timeout; -import java.io.IOException; -import java.io.InputStream; -import java.net.URL; -import java.net.URLConnection; -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; -import java.util.Set; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.TimeUnit; -import java.util.logging.Level; -import java.util.logging.Logger; - public class ITDatastoreSnippets { private static final Logger log = Logger.getLogger(ITDatastoreSnippets.class.getName()); @@ -79,16 +55,19 @@ public class ITDatastoreSnippets { @BeforeClass public static void beforeClass() { - LocalDatastoreHelper helper = LocalDatastoreHelper.create(); - datastore = helper.options().service(); + datastore = DatastoreOptions.defaultInstance().service(); datastoreSnippets = new DatastoreSnippets(datastore); } @AfterClass public static void afterClass() throws ExecutionException, InterruptedException { - if (datastore != null) { - //LocalDatastoreHelper.sendQuitRequest(port) - } + // TODO: do the right work for Datastore, similar to the Storage code below +// if (storage != null) { +// boolean wasDeleted = RemoteStorageHelper.forceDelete(storage, BUCKET, 5, TimeUnit.SECONDS); +// if (!wasDeleted && log.isLoggable(Level.WARNING)) { +// log.log(Level.WARNING, "Deletion of bucket {0} timed out, bucket is not empty", BUCKET); +// } +// } } // ANTHONY STARTS HERE @@ -97,6 +76,21 @@ public static void afterClass() throws ExecutionException, InterruptedException // GARRETT STARTS HERE +// @Test +// public void testUpdateEntity() { +// String KEY = "my_key_name"; +// // WILL FAIL - need to ensure it is created first +// datastoreSnippets.updateEntity(KEY); +// } + + @Test + public void testPutEntity() { + String KEY = "my_key_name"; + datastoreSnippets.putSingleEntity(KEY); + Entity entity = datastoreSnippets.getEntityWithKey(KEY); + assertEquals("value", entity.getString("propertyName")); + } + // GARRETT ENDS HERE // MIKE STARTS HERE From 69e38a68dc57f55c70036ad5355e8d6d5b200da7 Mon Sep 17 00:00:00 2001 From: omaray Date: Fri, 16 Sep 2016 14:18:58 -0700 Subject: [PATCH 09/28] Adding integration tests for allocateIdSingle and allocateIdMultiple --- .../storage/snippets/ITDatastoreSnippets.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/google-cloud-examples/src/test/java/com/google/cloud/examples/storage/snippets/ITDatastoreSnippets.java b/google-cloud-examples/src/test/java/com/google/cloud/examples/storage/snippets/ITDatastoreSnippets.java index 2904d60f195d..a1fff435d2f4 100644 --- a/google-cloud-examples/src/test/java/com/google/cloud/examples/storage/snippets/ITDatastoreSnippets.java +++ b/google-cloud-examples/src/test/java/com/google/cloud/examples/storage/snippets/ITDatastoreSnippets.java @@ -22,6 +22,7 @@ import com.google.cloud.datastore.Datastore; import com.google.cloud.datastore.DatastoreOptions; import com.google.cloud.datastore.Entity; +import com.google.cloud.datastore.Key; import com.google.cloud.datastore.KeyFactory; import com.google.cloud.datastore.QueryResults; import com.google.cloud.examples.datastore.snippets.DatastoreSnippets; @@ -72,6 +73,17 @@ public static void afterClass() throws ExecutionException, InterruptedException // ANTHONY STARTS HERE + @Test + public void testAllocateIdSingle() { + Key key = datastoreSnippets.allocateIdSingle(); + assertNotNull(key); + } + + @Test + public void testAllocateIdMultiple() { + List keys = datastoreSnippets.allocateIdMultiple(); + assertEquals(2, keys.size()); + } // ANTHONY ENDS HERE // GARRETT STARTS HERE From 866164905c18d9a07f6ff7240ec5b7c60defa750 Mon Sep 17 00:00:00 2001 From: Michael Bausor Date: Fri, 16 Sep 2016 13:55:14 -0700 Subject: [PATCH 10/28] Update methods and IT --- .../datastore/snippets/DatastoreSnippets.java | 15 +++++++-------- .../storage/snippets/ITDatastoreSnippets.java | 13 +++++-------- 2 files changed, 12 insertions(+), 16 deletions(-) diff --git a/google-cloud-examples/src/main/java/com/google/cloud/examples/datastore/snippets/DatastoreSnippets.java b/google-cloud-examples/src/main/java/com/google/cloud/examples/datastore/snippets/DatastoreSnippets.java index 9c42e7774bf0..d1df8d4104f3 100644 --- a/google-cloud-examples/src/main/java/com/google/cloud/examples/datastore/snippets/DatastoreSnippets.java +++ b/google-cloud-examples/src/main/java/com/google/cloud/examples/datastore/snippets/DatastoreSnippets.java @@ -31,7 +31,6 @@ import com.google.cloud.datastore.QueryResults; import com.google.cloud.datastore.StructuredQuery; import com.google.cloud.datastore.StructuredQuery.PropertyFilter; -import com.google.cloud.storage.Blob; import com.google.common.collect.Lists; import java.util.Iterator; @@ -150,7 +149,7 @@ public void deleteEntities(String keyName1, String keyName2) { // [TARGET newKeyFactory()] public KeyFactory createKeyFactory() { // [START newKeyFactory] - KeyFactory keyFactory = datastore.newKeyFactory(); + KeyFactory keyFactory = datastore.newKeyFactory().kind("MyClass"); // [END newKeyFactory] return keyFactory; } @@ -177,9 +176,9 @@ public Entity getEntityWithKey(String keyName) { // [VARIABLE "my_second_key_name"] public Iterator getEntitiesWithKeys(String firstKeyName, String secondKeyName) { // [START get] - KeyFactory keyFactory = datastore.newKeyFactory(); - Key firstKey = keyFactory.kind("MyClass").newKey(firstKeyName); - Key secondKey = keyFactory.kind("MyClass").newKey(secondKeyName); + KeyFactory keyFactory = datastore.newKeyFactory().kind("MyClass"); + Key firstKey = keyFactory.newKey(firstKeyName); + Key secondKey = keyFactory.newKey(secondKeyName); Iterator entitiesIterator = datastore.get(Lists.newArrayList(firstKey, secondKey)); while (entitiesIterator.hasNext()) { Entity entity = entitiesIterator.next(); @@ -197,9 +196,9 @@ public Iterator getEntitiesWithKeys(String firstKeyName, String secondKe // [VARIABLE "my_second_key_name"] public List fetchEntitiesWithKeys(String firstKeyName, String secondKeyName) { // [START get] - KeyFactory keyFactory = datastore.newKeyFactory(); - Key firstKey = keyFactory.kind("MyClass").newKey(firstKeyName); - Key secondKey = keyFactory.kind("MyClass").newKey(secondKeyName); + KeyFactory keyFactory = datastore.newKeyFactory().kind("MyClass"); + Key firstKey = keyFactory.newKey(firstKeyName); + Key secondKey = keyFactory.newKey(secondKeyName); List entities = datastore.fetch(Lists.newArrayList(firstKey, secondKey)); for (Entity entity : entities) { // do something with the entity diff --git a/google-cloud-examples/src/test/java/com/google/cloud/examples/storage/snippets/ITDatastoreSnippets.java b/google-cloud-examples/src/test/java/com/google/cloud/examples/storage/snippets/ITDatastoreSnippets.java index a1fff435d2f4..c5da7b4002eb 100644 --- a/google-cloud-examples/src/test/java/com/google/cloud/examples/storage/snippets/ITDatastoreSnippets.java +++ b/google-cloud-examples/src/test/java/com/google/cloud/examples/storage/snippets/ITDatastoreSnippets.java @@ -42,8 +42,11 @@ public class ITDatastoreSnippets { - private static final Logger log = Logger.getLogger(ITDatastoreSnippets.class.getName()); - private static final String BUCKET = RemoteStorageHelper.generateBucketName(); + private static final String KEY = "my_key_name"; + private static final String FIRST_KEY = "first_key_name"; + private static final String SECOND_KEY = "second_key_name"; + private static final String QUERY_KIND = "kind"; + private static final String NAMESPACE = ""; private static Datastore datastore; private static DatastoreSnippets datastoreSnippets; @@ -110,12 +113,6 @@ public void testPutEntity() { @Test public void test() throws InterruptedException { - String KEY = "my_key_name"; - String FIRST_KEY = "first_key_name"; - String SECOND_KEY = "second_key_name"; - String QUERY_KIND = "kind"; - String NAMESPACE = "namespace"; - KeyFactory keyFactory = datastoreSnippets.createKeyFactory(); assertNotNull(keyFactory); From 7a9b9a64c8491208578bf8cfaff78609ac24c3f5 Mon Sep 17 00:00:00 2001 From: Garrett Jones Date: Fri, 16 Sep 2016 14:28:51 -0700 Subject: [PATCH 11/28] Adding testBatchPutUpdateGet --- .../datastore/snippets/DatastoreSnippets.java | 12 ++++-- .../storage/snippets/ITDatastoreSnippets.java | 37 +++++++++++++------ 2 files changed, 34 insertions(+), 15 deletions(-) diff --git a/google-cloud-examples/src/main/java/com/google/cloud/examples/datastore/snippets/DatastoreSnippets.java b/google-cloud-examples/src/main/java/com/google/cloud/examples/datastore/snippets/DatastoreSnippets.java index d1df8d4104f3..3a8722802aba 100644 --- a/google-cloud-examples/src/main/java/com/google/cloud/examples/datastore/snippets/DatastoreSnippets.java +++ b/google-cloud-examples/src/main/java/com/google/cloud/examples/datastore/snippets/DatastoreSnippets.java @@ -116,12 +116,12 @@ public void batchPutEntities(String keyName1, String keyName2) { // [START batchPutEntities] Key key1 = datastore.newKeyFactory().kind("MyClass").newKey(keyName1); Entity.Builder entityBuilder1 = Entity.builder(key1); - entityBuilder1.set("propertyName", "value"); + entityBuilder1.set("propertyName", "value1"); Entity entity1 = entityBuilder1.build(); Key key2 = datastore.newKeyFactory().kind("MyClass").newKey(keyName2); Entity.Builder entityBuilder2 = Entity.builder(key2); - entityBuilder2.set("propertyName", "value"); + entityBuilder2.set("propertyName", "value2"); Entity entity2 = entityBuilder2.build(); datastore.put(entity1, entity2); @@ -174,18 +174,22 @@ public Entity getEntityWithKey(String keyName) { // [TARGET get(Iterable key, ReadOption... options)] // [VARIABLE "my_first_key_name"] // [VARIABLE "my_second_key_name"] - public Iterator getEntitiesWithKeys(String firstKeyName, String secondKeyName) { + public List getEntitiesWithKeys(String firstKeyName, String secondKeyName) { // [START get] KeyFactory keyFactory = datastore.newKeyFactory().kind("MyClass"); Key firstKey = keyFactory.newKey(firstKeyName); Key secondKey = keyFactory.newKey(secondKeyName); Iterator entitiesIterator = datastore.get(Lists.newArrayList(firstKey, secondKey)); + // TODO make a change so that it's not necessary to hold the entities in a list for + // integration testing + List entities = Lists.newArrayList(); while (entitiesIterator.hasNext()) { Entity entity = entitiesIterator.next(); // do something with the entity + entities.add(entity); } // [END get] - return entitiesIterator; + return entities; } /** diff --git a/google-cloud-examples/src/test/java/com/google/cloud/examples/storage/snippets/ITDatastoreSnippets.java b/google-cloud-examples/src/test/java/com/google/cloud/examples/storage/snippets/ITDatastoreSnippets.java index c5da7b4002eb..d83394222534 100644 --- a/google-cloud-examples/src/test/java/com/google/cloud/examples/storage/snippets/ITDatastoreSnippets.java +++ b/google-cloud-examples/src/test/java/com/google/cloud/examples/storage/snippets/ITDatastoreSnippets.java @@ -28,8 +28,9 @@ import com.google.cloud.examples.datastore.snippets.DatastoreSnippets; import com.google.cloud.storage.testing.RemoteStorageHelper; -import java.util.Iterator; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.concurrent.ExecutionException; import java.util.logging.Logger; @@ -40,6 +41,8 @@ import org.junit.rules.ExpectedException; import org.junit.rules.Timeout; +import autovalue.shaded.com.google.common.common.collect.Lists; + public class ITDatastoreSnippets { private static final String KEY = "my_key_name"; @@ -91,19 +94,31 @@ public void testAllocateIdMultiple() { // GARRETT STARTS HERE -// @Test -// public void testUpdateEntity() { -// String KEY = "my_key_name"; -// // WILL FAIL - need to ensure it is created first -// datastoreSnippets.updateEntity(KEY); -// } - @Test - public void testPutEntity() { + public void testPutUpdateGet() { String KEY = "my_key_name"; datastoreSnippets.putSingleEntity(KEY); Entity entity = datastoreSnippets.getEntityWithKey(KEY); assertEquals("value", entity.getString("propertyName")); + + datastoreSnippets.updateEntity(KEY); + Entity entityV2 = datastoreSnippets.getEntityWithKey(KEY); + assertEquals("updatedValue", entityV2.getString("propertyName")); + } + + @Test + public void testBatchPutUpdateGet() { + String KEY1 = "my_key_name"; + String KEY2 = "my_key_name2"; + datastoreSnippets.batchPutEntities(KEY1, KEY2); + List entities = Lists.newArrayList(datastoreSnippets.getEntitiesWithKeys(KEY1, KEY2)); + assertEquals(2, entities.size()); + Map entityMap = new HashMap<>(); + for (Entity entity : entities) { + entityMap.put(entity.key().name(), entity); + } + assertEquals("value1", entityMap.get(KEY1).getString("propertyName")); + assertEquals("value2", entityMap.get(KEY2).getString("propertyName")); } // GARRETT ENDS HERE @@ -119,8 +134,8 @@ public void test() throws InterruptedException { Entity entity = datastoreSnippets.getEntityWithKey(KEY); assertNotNull(entity); - Iterator entityIterator = datastoreSnippets.getEntitiesWithKeys(FIRST_KEY, SECOND_KEY); - assertNotNull(entityIterator); + List entityList1 = datastoreSnippets.getEntitiesWithKeys(FIRST_KEY, SECOND_KEY); + assertNotNull(entityList1); List entityList = datastoreSnippets.fetchEntitiesWithKeys(FIRST_KEY, SECOND_KEY); assertNotNull(entityList); From d137073ffdeec3c94ca3b6e7c71744ac44dc25f4 Mon Sep 17 00:00:00 2001 From: Michael Bausor Date: Fri, 16 Sep 2016 14:43:53 -0700 Subject: [PATCH 12/28] Update tags, remove unused tests --- .../datastore/snippets/DatastoreSnippets.java | 22 ++++++++--------- .../storage/snippets/ITDatastoreSnippets.java | 24 ++++++------------- 2 files changed, 18 insertions(+), 28 deletions(-) diff --git a/google-cloud-examples/src/main/java/com/google/cloud/examples/datastore/snippets/DatastoreSnippets.java b/google-cloud-examples/src/main/java/com/google/cloud/examples/datastore/snippets/DatastoreSnippets.java index d1df8d4104f3..1ec3eb482ad8 100644 --- a/google-cloud-examples/src/main/java/com/google/cloud/examples/datastore/snippets/DatastoreSnippets.java +++ b/google-cloud-examples/src/main/java/com/google/cloud/examples/datastore/snippets/DatastoreSnippets.java @@ -148,9 +148,9 @@ public void deleteEntities(String keyName1, String keyName2) { */ // [TARGET newKeyFactory()] public KeyFactory createKeyFactory() { - // [START newKeyFactory] - KeyFactory keyFactory = datastore.newKeyFactory().kind("MyClass"); - // [END newKeyFactory] + // [START createKeyFactory] + KeyFactory keyFactory = datastore.newKeyFactory(); + // [END createKeyFactory] return keyFactory; } @@ -160,11 +160,11 @@ public KeyFactory createKeyFactory() { // [TARGET get(Key key, ReadOption... options)] // [VARIABLE "my_key_name"] public Entity getEntityWithKey(String keyName) { - // [START get] + // [START getEntityWithKey] Key key = datastore.newKeyFactory().kind("MyClass").newKey(keyName); Entity entity = datastore.get(key); // Do something with the entity - // [END get] + // [END getEntityWithKey] return entity; } @@ -175,7 +175,7 @@ public Entity getEntityWithKey(String keyName) { // [VARIABLE "my_first_key_name"] // [VARIABLE "my_second_key_name"] public Iterator getEntitiesWithKeys(String firstKeyName, String secondKeyName) { - // [START get] + // [START getEntitiesWithKeys] KeyFactory keyFactory = datastore.newKeyFactory().kind("MyClass"); Key firstKey = keyFactory.newKey(firstKeyName); Key secondKey = keyFactory.newKey(secondKeyName); @@ -184,7 +184,7 @@ public Iterator getEntitiesWithKeys(String firstKeyName, String secondKe Entity entity = entitiesIterator.next(); // do something with the entity } - // [END get] + // [END getEntitiesWithKeys] return entitiesIterator; } @@ -195,7 +195,7 @@ public Iterator getEntitiesWithKeys(String firstKeyName, String secondKe // [VARIABLE "my_first_key_name"] // [VARIABLE "my_second_key_name"] public List fetchEntitiesWithKeys(String firstKeyName, String secondKeyName) { - // [START get] + // [START fetchEntitiesWithKeys] KeyFactory keyFactory = datastore.newKeyFactory().kind("MyClass"); Key firstKey = keyFactory.newKey(firstKeyName); Key secondKey = keyFactory.newKey(secondKeyName); @@ -203,7 +203,7 @@ public List fetchEntitiesWithKeys(String firstKeyName, String secondKeyN for (Entity entity : entities) { // do something with the entity } - // [END get] + // [END fetchEntitiesWithKeys] return entities; } @@ -215,7 +215,7 @@ public List fetchEntitiesWithKeys(String firstKeyName, String secondKeyN // [VARIABLE "my_query_kind"] // [VARIABLE "my_query_namespace"] public QueryResults runQuery(String keyName, String queryKind, String queryNamespace) { - // [START get] + // [START runQuery] Key key = datastore.newKeyFactory().kind("MyClass").newKey(keyName); StructuredQuery query = Query.entityQueryBuilder() @@ -228,7 +228,7 @@ public QueryResults runQuery(String keyName, String queryKind, String qu Entity result = results.next(); // do something with result } - // [END get] + // [END runQuery] return results; } diff --git a/google-cloud-examples/src/test/java/com/google/cloud/examples/storage/snippets/ITDatastoreSnippets.java b/google-cloud-examples/src/test/java/com/google/cloud/examples/storage/snippets/ITDatastoreSnippets.java index c5da7b4002eb..8ca79c68fbe5 100644 --- a/google-cloud-examples/src/test/java/com/google/cloud/examples/storage/snippets/ITDatastoreSnippets.java +++ b/google-cloud-examples/src/test/java/com/google/cloud/examples/storage/snippets/ITDatastoreSnippets.java @@ -42,12 +42,6 @@ public class ITDatastoreSnippets { - private static final String KEY = "my_key_name"; - private static final String FIRST_KEY = "first_key_name"; - private static final String SECOND_KEY = "second_key_name"; - private static final String QUERY_KIND = "kind"; - private static final String NAMESPACE = ""; - private static Datastore datastore; private static DatastoreSnippets datastoreSnippets; @@ -111,20 +105,16 @@ public void testPutEntity() { // MIKE STARTS HERE @Test - public void test() throws InterruptedException { - + public void testCreateKeyFactory() { KeyFactory keyFactory = datastoreSnippets.createKeyFactory(); assertNotNull(keyFactory); + } - Entity entity = datastoreSnippets.getEntityWithKey(KEY); - assertNotNull(entity); - - Iterator entityIterator = datastoreSnippets.getEntitiesWithKeys(FIRST_KEY, SECOND_KEY); - assertNotNull(entityIterator); - - List entityList = datastoreSnippets.fetchEntitiesWithKeys(FIRST_KEY, SECOND_KEY); - assertNotNull(entityList); - + @Test + public void testRunQuery() { + String KEY = "my_key_name"; + String QUERY_KIND = "my_query_kind"; + String NAMESPACE = ""; QueryResults queryResults = datastoreSnippets.runQuery(KEY, QUERY_KIND, NAMESPACE); assertNotNull(queryResults); } From d55fed252acf31658f70a70d8a9062e4868479f1 Mon Sep 17 00:00:00 2001 From: omaray Date: Fri, 16 Sep 2016 14:44:02 -0700 Subject: [PATCH 13/28] Fixing the target for allocateId --- .../examples/datastore/snippets/DatastoreSnippets.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/google-cloud-examples/src/main/java/com/google/cloud/examples/datastore/snippets/DatastoreSnippets.java b/google-cloud-examples/src/main/java/com/google/cloud/examples/datastore/snippets/DatastoreSnippets.java index 9c42e7774bf0..4cff5102f601 100644 --- a/google-cloud-examples/src/main/java/com/google/cloud/examples/datastore/snippets/DatastoreSnippets.java +++ b/google-cloud-examples/src/main/java/com/google/cloud/examples/datastore/snippets/DatastoreSnippets.java @@ -54,23 +54,22 @@ public DatastoreSnippets(Datastore datastore) { /** * Example of allocating an id */ - // [TARGET allocatedId()] + // [TARGET allocateId(IncompleteKey key)] public Key allocateIdSingle() { // [START allocateIdSingle] KeyFactory keyFactory = datastore.newKeyFactory().kind("MyClass"); IncompleteKey incompleteKey = keyFactory.newKey(); // let cloud datastore automatically assign an id - Key key = datastore.allocateId(keyFactory.newKey()); + Key key = datastore.allocateId(incompleteKey); // [END allocateIdSingle] - return key; } /** * Example of allocating multiple ids */ - // [TARGET allocatedId()] + // [TARGET allocateId(IncompleteKey... keys)] public List allocateIdMultiple() { // [START allocateIdMultiple] KeyFactory keyFactory = datastore.newKeyFactory().kind("MyClass"); From 161a7c12d70207d656317ffaad95c1742a3a241e Mon Sep 17 00:00:00 2001 From: Garrett Jones Date: Fri, 16 Sep 2016 15:11:34 -0700 Subject: [PATCH 14/28] Testing fetch and delete --- .../datastore/snippets/DatastoreSnippets.java | 30 ++++++----- .../storage/snippets/ITDatastoreSnippets.java | 54 +++++++++++++------ 2 files changed, 55 insertions(+), 29 deletions(-) diff --git a/google-cloud-examples/src/main/java/com/google/cloud/examples/datastore/snippets/DatastoreSnippets.java b/google-cloud-examples/src/main/java/com/google/cloud/examples/datastore/snippets/DatastoreSnippets.java index 911e733abd05..02c4e3d9d6ae 100644 --- a/google-cloud-examples/src/main/java/com/google/cloud/examples/datastore/snippets/DatastoreSnippets.java +++ b/google-cloud-examples/src/main/java/com/google/cloud/examples/datastore/snippets/DatastoreSnippets.java @@ -86,14 +86,20 @@ public List allocateIdMultiple() { // [TARGET update(Entity... entities)] // [VARIABLE "my_key_name"] - public void updateEntity(String keyName) { - // [START updateEntity] - Key key = datastore.newKeyFactory().kind("MyClass").newKey(keyName); - Entity.Builder entityBuilder = Entity.builder(key); - entityBuilder.set("propertyName", "updatedValue"); - Entity entity = entityBuilder.build(); - datastore.update(entity); - // [END updateEntity] + public void batchUpdateEntities(String keyName1, String keyName2) { + // [START batchUpdateEntities] + Key key1 = datastore.newKeyFactory().kind("MyClass").newKey(keyName1); + Entity.Builder entityBuilder1 = Entity.builder(key1); + entityBuilder1.set("propertyName", "updatedValue1"); + Entity entity1 = entityBuilder1.build(); + + Key key2 = datastore.newKeyFactory().kind("MyClass").newKey(keyName2); + Entity.Builder entityBuilder2 = Entity.builder(key2); + entityBuilder2.set("propertyName", "updatedValue2"); + Entity entity2 = entityBuilder2.build(); + + datastore.update(entity1, entity2); + // [END batchUpdateEntities] } // [TARGET put(FullEntity entity)] @@ -127,15 +133,15 @@ public void batchPutEntities(String keyName1, String keyName2) { // [END batchPutEntities] } - // [TARGET update(Entity... entities)] + // [TARGET delete(Key... keys)] // [VARIABLE "my_key_name1"] // [VARIABLE "my_key_name2"] - public void deleteEntities(String keyName1, String keyName2) { - // [START deleteEntities] + public void batchDeleteEntities(String keyName1, String keyName2) { + // [START batchDeleteEntities] Key key1 = datastore.newKeyFactory().kind("MyClass").newKey(keyName1); Key key2 = datastore.newKeyFactory().kind("MyClass").newKey(keyName2); datastore.delete(key1, key2); - // [END deleteEntities] + // [END batchDeleteEntities] } // GARRETT ENDS HERE diff --git a/google-cloud-examples/src/test/java/com/google/cloud/examples/storage/snippets/ITDatastoreSnippets.java b/google-cloud-examples/src/test/java/com/google/cloud/examples/storage/snippets/ITDatastoreSnippets.java index 89add5981aab..5fa4a7e3a600 100644 --- a/google-cloud-examples/src/test/java/com/google/cloud/examples/storage/snippets/ITDatastoreSnippets.java +++ b/google-cloud-examples/src/test/java/com/google/cloud/examples/storage/snippets/ITDatastoreSnippets.java @@ -18,6 +18,7 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; import com.google.cloud.datastore.Datastore; import com.google.cloud.datastore.DatastoreOptions; @@ -26,13 +27,11 @@ import com.google.cloud.datastore.KeyFactory; import com.google.cloud.datastore.QueryResults; import com.google.cloud.examples.datastore.snippets.DatastoreSnippets; -import com.google.cloud.storage.testing.RemoteStorageHelper; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.concurrent.ExecutionException; -import java.util.logging.Logger; import org.junit.AfterClass; import org.junit.BeforeClass; @@ -89,30 +88,51 @@ public void testAllocateIdMultiple() { // GARRETT STARTS HERE @Test - public void testPutUpdateGet() { - String KEY = "my_key_name"; + public void testEntityPutGet() { datastoreSnippets.putSingleEntity(KEY); Entity entity = datastoreSnippets.getEntityWithKey(KEY); assertEquals("value", entity.getString("propertyName")); - - datastoreSnippets.updateEntity(KEY); - Entity entityV2 = datastoreSnippets.getEntityWithKey(KEY); - assertEquals("updatedValue", entityV2.getString("propertyName")); } - @Test - public void testBatchPutUpdateGet() { - String KEY1 = "my_key_name"; - String KEY2 = "my_key_name2"; - datastoreSnippets.batchPutEntities(KEY1, KEY2); - List entities = Lists.newArrayList(datastoreSnippets.getEntitiesWithKeys(KEY1, KEY2)); - assertEquals(2, entities.size()); + private Map createEntityMap(List entities) { Map entityMap = new HashMap<>(); for (Entity entity : entities) { entityMap.put(entity.key().name(), entity); } - assertEquals("value1", entityMap.get(KEY1).getString("propertyName")); - assertEquals("value2", entityMap.get(KEY2).getString("propertyName")); + return entityMap; + } + + @Test + public void testBatchEntityCrud() { + datastoreSnippets.batchPutEntities(FIRST_KEY, SECOND_KEY); + + assertNotNull(datastoreSnippets.getEntityWithKey(FIRST_KEY)); + assertNotNull(datastoreSnippets.getEntityWithKey(SECOND_KEY)); + + List entities = Lists + .newArrayList(datastoreSnippets.getEntitiesWithKeys(FIRST_KEY, SECOND_KEY)); + assertEquals(2, entities.size()); + Map entityMap = createEntityMap(entities); + assertEquals("value1", entityMap.get(FIRST_KEY).getString("propertyName")); + assertEquals("value2", entityMap.get(SECOND_KEY).getString("propertyName")); + + datastoreSnippets.batchUpdateEntities(FIRST_KEY, SECOND_KEY); + + List fetchedEntities = datastoreSnippets.fetchEntitiesWithKeys(FIRST_KEY, SECOND_KEY); + assertEquals(2, fetchedEntities.size()); + Map fetchedEntityMap = createEntityMap(fetchedEntities); + assertEquals("updatedValue1", fetchedEntityMap.get(FIRST_KEY).getString("propertyName")); + assertEquals("updatedValue2", fetchedEntityMap.get(SECOND_KEY).getString("propertyName")); + + datastoreSnippets.batchDeleteEntities(FIRST_KEY, SECOND_KEY); + + assertNull(datastoreSnippets.getEntityWithKey(FIRST_KEY)); + assertNull(datastoreSnippets.getEntityWithKey(SECOND_KEY)); + + List fetchedEntities2 = datastoreSnippets.fetchEntitiesWithKeys(FIRST_KEY, SECOND_KEY); + assertEquals(2, fetchedEntities2.size()); + assertNull(fetchedEntities2.get(0)); + assertNull(fetchedEntities2.get(1)); } // GARRETT ENDS HERE From 4dffd6187ece7bbfdfb7628b16aa63ebfd150f71 Mon Sep 17 00:00:00 2001 From: Garrett Jones Date: Fri, 16 Sep 2016 15:15:38 -0700 Subject: [PATCH 15/28] Fixing build (missing constants) --- .../storage/snippets/ITDatastoreSnippets.java | 35 ++++++++++--------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/google-cloud-examples/src/test/java/com/google/cloud/examples/storage/snippets/ITDatastoreSnippets.java b/google-cloud-examples/src/test/java/com/google/cloud/examples/storage/snippets/ITDatastoreSnippets.java index 5fa4a7e3a600..12e84254eacc 100644 --- a/google-cloud-examples/src/test/java/com/google/cloud/examples/storage/snippets/ITDatastoreSnippets.java +++ b/google-cloud-examples/src/test/java/com/google/cloud/examples/storage/snippets/ITDatastoreSnippets.java @@ -89,8 +89,9 @@ public void testAllocateIdMultiple() { @Test public void testEntityPutGet() { - datastoreSnippets.putSingleEntity(KEY); - Entity entity = datastoreSnippets.getEntityWithKey(KEY); + String key = "my_key"; + datastoreSnippets.putSingleEntity(key); + Entity entity = datastoreSnippets.getEntityWithKey(key); assertEquals("value", entity.getString("propertyName")); } @@ -104,32 +105,34 @@ private Map createEntityMap(List entities) { @Test public void testBatchEntityCrud() { - datastoreSnippets.batchPutEntities(FIRST_KEY, SECOND_KEY); + String key1 = "key1"; + String key2 = "key2"; + datastoreSnippets.batchPutEntities(key1, key2); - assertNotNull(datastoreSnippets.getEntityWithKey(FIRST_KEY)); - assertNotNull(datastoreSnippets.getEntityWithKey(SECOND_KEY)); + assertNotNull(datastoreSnippets.getEntityWithKey(key1)); + assertNotNull(datastoreSnippets.getEntityWithKey(key2)); List entities = Lists - .newArrayList(datastoreSnippets.getEntitiesWithKeys(FIRST_KEY, SECOND_KEY)); + .newArrayList(datastoreSnippets.getEntitiesWithKeys(key1, key2)); assertEquals(2, entities.size()); Map entityMap = createEntityMap(entities); - assertEquals("value1", entityMap.get(FIRST_KEY).getString("propertyName")); - assertEquals("value2", entityMap.get(SECOND_KEY).getString("propertyName")); + assertEquals("value1", entityMap.get(key1).getString("propertyName")); + assertEquals("value2", entityMap.get(key2).getString("propertyName")); - datastoreSnippets.batchUpdateEntities(FIRST_KEY, SECOND_KEY); + datastoreSnippets.batchUpdateEntities(key1, key2); - List fetchedEntities = datastoreSnippets.fetchEntitiesWithKeys(FIRST_KEY, SECOND_KEY); + List fetchedEntities = datastoreSnippets.fetchEntitiesWithKeys(key1, key2); assertEquals(2, fetchedEntities.size()); Map fetchedEntityMap = createEntityMap(fetchedEntities); - assertEquals("updatedValue1", fetchedEntityMap.get(FIRST_KEY).getString("propertyName")); - assertEquals("updatedValue2", fetchedEntityMap.get(SECOND_KEY).getString("propertyName")); + assertEquals("updatedValue1", fetchedEntityMap.get(key1).getString("propertyName")); + assertEquals("updatedValue2", fetchedEntityMap.get(key2).getString("propertyName")); - datastoreSnippets.batchDeleteEntities(FIRST_KEY, SECOND_KEY); + datastoreSnippets.batchDeleteEntities(key1, key2); - assertNull(datastoreSnippets.getEntityWithKey(FIRST_KEY)); - assertNull(datastoreSnippets.getEntityWithKey(SECOND_KEY)); + assertNull(datastoreSnippets.getEntityWithKey(key1)); + assertNull(datastoreSnippets.getEntityWithKey(key2)); - List fetchedEntities2 = datastoreSnippets.fetchEntitiesWithKeys(FIRST_KEY, SECOND_KEY); + List fetchedEntities2 = datastoreSnippets.fetchEntitiesWithKeys(key1, key2); assertEquals(2, fetchedEntities2.size()); assertNull(fetchedEntities2.get(0)); assertNull(fetchedEntities2.get(1)); From 22b27617cab813df5237c9de66a3a4562f08e14b Mon Sep 17 00:00:00 2001 From: Garrett Jones Date: Fri, 16 Sep 2016 15:20:01 -0700 Subject: [PATCH 16/28] unique keys and cleanup --- .../examples/storage/snippets/ITDatastoreSnippets.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/google-cloud-examples/src/test/java/com/google/cloud/examples/storage/snippets/ITDatastoreSnippets.java b/google-cloud-examples/src/test/java/com/google/cloud/examples/storage/snippets/ITDatastoreSnippets.java index 12e84254eacc..77901226a11c 100644 --- a/google-cloud-examples/src/test/java/com/google/cloud/examples/storage/snippets/ITDatastoreSnippets.java +++ b/google-cloud-examples/src/test/java/com/google/cloud/examples/storage/snippets/ITDatastoreSnippets.java @@ -89,10 +89,12 @@ public void testAllocateIdMultiple() { @Test public void testEntityPutGet() { - String key = "my_key"; + String key = "my_single_key"; datastoreSnippets.putSingleEntity(key); Entity entity = datastoreSnippets.getEntityWithKey(key); assertEquals("value", entity.getString("propertyName")); + + datastore.delete(datastore.newKeyFactory().kind("MyClass").newKey(key)); } private Map createEntityMap(List entities) { @@ -105,8 +107,8 @@ private Map createEntityMap(List entities) { @Test public void testBatchEntityCrud() { - String key1 = "key1"; - String key2 = "key2"; + String key1 = "batch_key1"; + String key2 = "batch_key2"; datastoreSnippets.batchPutEntities(key1, key2); assertNotNull(datastoreSnippets.getEntityWithKey(key1)); From d9ad32aaab48967e5292d5ce08974f6bb993dab4 Mon Sep 17 00:00:00 2001 From: Michael Bausor Date: Fri, 16 Sep 2016 15:20:42 -0700 Subject: [PATCH 17/28] Add runquery test --- .../datastore/snippets/DatastoreSnippets.java | 8 ++++++-- .../storage/snippets/ITDatastoreSnippets.java | 12 ++++++++---- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/google-cloud-examples/src/main/java/com/google/cloud/examples/datastore/snippets/DatastoreSnippets.java b/google-cloud-examples/src/main/java/com/google/cloud/examples/datastore/snippets/DatastoreSnippets.java index 02c4e3d9d6ae..fa651a80da78 100644 --- a/google-cloud-examples/src/main/java/com/google/cloud/examples/datastore/snippets/DatastoreSnippets.java +++ b/google-cloud-examples/src/main/java/com/google/cloud/examples/datastore/snippets/DatastoreSnippets.java @@ -223,7 +223,7 @@ public List fetchEntitiesWithKeys(String firstKeyName, String secondKeyN // [VARIABLE "my_key_name"] // [VARIABLE "my_query_kind"] // [VARIABLE "my_query_namespace"] - public QueryResults runQuery(String keyName, String queryKind, String queryNamespace) { + public List runQuery(String keyName, String queryKind, String queryNamespace) { // [START runQuery] Key key = datastore.newKeyFactory().kind("MyClass").newKey(keyName); StructuredQuery query = @@ -233,12 +233,16 @@ public QueryResults runQuery(String keyName, String queryKind, String qu .filter(PropertyFilter.hasAncestor(key)) .build(); QueryResults results = datastore.run(query); + // TODO make a change so that it's not necessary to hold the entities in a list for + // integration testing + List entities = Lists.newArrayList(); while (results.hasNext()) { Entity result = results.next(); // do something with result + entities.add(result); } // [END runQuery] - return results; + return entities; } // MIKE ENDS HERE diff --git a/google-cloud-examples/src/test/java/com/google/cloud/examples/storage/snippets/ITDatastoreSnippets.java b/google-cloud-examples/src/test/java/com/google/cloud/examples/storage/snippets/ITDatastoreSnippets.java index 77901226a11c..33f76cc14f57 100644 --- a/google-cloud-examples/src/test/java/com/google/cloud/examples/storage/snippets/ITDatastoreSnippets.java +++ b/google-cloud-examples/src/test/java/com/google/cloud/examples/storage/snippets/ITDatastoreSnippets.java @@ -152,11 +152,15 @@ public void testCreateKeyFactory() { @Test public void testRunQuery() { - String KEY = "my_key_name"; - String QUERY_KIND = "my_query_kind"; - String NAMESPACE = ""; - QueryResults queryResults = datastoreSnippets.runQuery(KEY, QUERY_KIND, NAMESPACE); + String keyToFind = "my_key_name_to_find"; + String keyToMiss = "my_key_name_to_miss"; + String query_kind = "MyClass"; + String namespace = ""; + datastoreSnippets.batchPutEntities(keyToFind, keyToMiss); + List queryResults = datastoreSnippets.runQuery(keyToFind, query_kind, namespace); assertNotNull(queryResults); + assertEquals(1, queryResults.size()); + datastoreSnippets.deleteEntities(keyToFind, keyToMiss); } // MIKE ENDS HERE From 87ec82513b06c459cc61ff45b4e0170d34bd58a0 Mon Sep 17 00:00:00 2001 From: Michael Bausor Date: Fri, 16 Sep 2016 15:22:27 -0700 Subject: [PATCH 18/28] Rename delete --- .../cloud/examples/storage/snippets/ITDatastoreSnippets.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/google-cloud-examples/src/test/java/com/google/cloud/examples/storage/snippets/ITDatastoreSnippets.java b/google-cloud-examples/src/test/java/com/google/cloud/examples/storage/snippets/ITDatastoreSnippets.java index 33f76cc14f57..2ce75f002b8c 100644 --- a/google-cloud-examples/src/test/java/com/google/cloud/examples/storage/snippets/ITDatastoreSnippets.java +++ b/google-cloud-examples/src/test/java/com/google/cloud/examples/storage/snippets/ITDatastoreSnippets.java @@ -160,7 +160,7 @@ public void testRunQuery() { List queryResults = datastoreSnippets.runQuery(keyToFind, query_kind, namespace); assertNotNull(queryResults); assertEquals(1, queryResults.size()); - datastoreSnippets.deleteEntities(keyToFind, keyToMiss); + datastoreSnippets.batchDeleteEntities(keyToFind, keyToMiss); } // MIKE ENDS HERE From 0cc47405ebdb6e7cff7fbc1721463aebacf8c38f Mon Sep 17 00:00:00 2001 From: Anthony Moore Date: Fri, 16 Sep 2016 15:28:05 -0700 Subject: [PATCH 19/28] Snippets for Datastore.runInTransaction and Datastore.newBatch. --- .../datastore/snippets/DatastoreSnippets.java | 41 ++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/google-cloud-examples/src/main/java/com/google/cloud/examples/datastore/snippets/DatastoreSnippets.java b/google-cloud-examples/src/main/java/com/google/cloud/examples/datastore/snippets/DatastoreSnippets.java index fa651a80da78..8b8b86b01d2d 100644 --- a/google-cloud-examples/src/main/java/com/google/cloud/examples/datastore/snippets/DatastoreSnippets.java +++ b/google-cloud-examples/src/main/java/com/google/cloud/examples/datastore/snippets/DatastoreSnippets.java @@ -22,7 +22,10 @@ package com.google.cloud.examples.datastore.snippets; +import com.google.cloud.datastore.Batch; import com.google.cloud.datastore.Datastore; +import com.google.cloud.datastore.Datastore.TransactionCallable; +import com.google.cloud.datastore.DatastoreReaderWriter; import com.google.cloud.datastore.Entity; import com.google.cloud.datastore.IncompleteKey; import com.google.cloud.datastore.Key; @@ -47,8 +50,44 @@ public DatastoreSnippets(Datastore datastore) { this.datastore = datastore; } - // ANTHONY STARTS HERE + /** + * Example of running in a transaction. + */ + // [TARGET runInTransaction(TransactionCallable callable)] + // [VARIABLE "my_callable_result"] + public String runInTransaction(String callableResult) { + // [START runInTransaction] + final String runResult = callableResult; + TransactionCallable callable = new TransactionCallable() { + @Override + public String run(DatastoreReaderWriter readerWriter) { + return runResult; + } + }; + String result = datastore.runInTransaction(callable); + return result; + // [END runInTransaction] + } + /** + * Example of starting a new batch. + */ + // [TARGET runInTransaction(TransactionCallable callable)] + // [VARIABLE "my_key_name_1"] + // [VARIABLE "my_key_name_2"] + public Batch newBatch(String keyName1, String keyName2) { + // [START newBatch] + Key key1 = datastore.newKeyFactory().newKey(keyName1); + Key key2 = datastore.newKeyFactory().newKey(keyName2); + Batch batch = datastore.newBatch(); + Entity entity1 = Entity.builder(key1).set("name", "John").build(); + Entity entity2 = Entity.builder(key2).set("title", "title").build(); + batch.add(entity1); + batch.add(entity2); + batch.submit(); + return batch; + // [END newBatch] + } /** * Example of allocating an id From 73400e252dcc21a39ef1091a5bd84b52122cb415 Mon Sep 17 00:00:00 2001 From: Garrett Jones Date: Fri, 16 Sep 2016 15:40:53 -0700 Subject: [PATCH 20/28] Adding missing docs, fixing shaded import --- .../datastore/snippets/DatastoreSnippets.java | 20 +++++++++++-------- .../storage/snippets/ITDatastoreSnippets.java | 4 +--- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/google-cloud-examples/src/main/java/com/google/cloud/examples/datastore/snippets/DatastoreSnippets.java b/google-cloud-examples/src/main/java/com/google/cloud/examples/datastore/snippets/DatastoreSnippets.java index 8b8b86b01d2d..785f1b0d75af 100644 --- a/google-cloud-examples/src/main/java/com/google/cloud/examples/datastore/snippets/DatastoreSnippets.java +++ b/google-cloud-examples/src/main/java/com/google/cloud/examples/datastore/snippets/DatastoreSnippets.java @@ -119,10 +119,10 @@ public List allocateIdMultiple() { // [END allocateIdMultiple] return keys; } - // ANTHONY ENDS HERE - - // GARRETT STARTS HERE + /** + * Example of updating multiple entities + */ // [TARGET update(Entity... entities)] // [VARIABLE "my_key_name"] public void batchUpdateEntities(String keyName1, String keyName2) { @@ -141,6 +141,9 @@ public void batchUpdateEntities(String keyName1, String keyName2) { // [END batchUpdateEntities] } + /** + * Example of putting a single entity + */ // [TARGET put(FullEntity entity)] // [VARIABLE "my_key_name"] public void putSingleEntity(String keyName) { @@ -153,6 +156,9 @@ public void putSingleEntity(String keyName) { // [END putSingleEntity] } + /** + * Example of putting multiple entities + */ // [TARGET put(FullEntity... entity)] // [VARIABLE "my_key_name1"] // [VARIABLE "my_key_name2"] @@ -172,6 +178,9 @@ public void batchPutEntities(String keyName1, String keyName2) { // [END batchPutEntities] } + /** + * Example of deleting multiplie entities + */ // [TARGET delete(Key... keys)] // [VARIABLE "my_key_name1"] // [VARIABLE "my_key_name2"] @@ -183,10 +192,6 @@ public void batchDeleteEntities(String keyName1, String keyName2) { // [END batchDeleteEntities] } - // GARRETT ENDS HERE - - // MIKE STARTS HERE - /** * Example of creating a KeyFactory. */ @@ -284,5 +289,4 @@ public List runQuery(String keyName, String queryKind, String queryNames return entities; } - // MIKE ENDS HERE } diff --git a/google-cloud-examples/src/test/java/com/google/cloud/examples/storage/snippets/ITDatastoreSnippets.java b/google-cloud-examples/src/test/java/com/google/cloud/examples/storage/snippets/ITDatastoreSnippets.java index 2ce75f002b8c..ab8a16b7a9a7 100644 --- a/google-cloud-examples/src/test/java/com/google/cloud/examples/storage/snippets/ITDatastoreSnippets.java +++ b/google-cloud-examples/src/test/java/com/google/cloud/examples/storage/snippets/ITDatastoreSnippets.java @@ -25,8 +25,8 @@ import com.google.cloud.datastore.Entity; import com.google.cloud.datastore.Key; import com.google.cloud.datastore.KeyFactory; -import com.google.cloud.datastore.QueryResults; import com.google.cloud.examples.datastore.snippets.DatastoreSnippets; +import com.google.common.collect.Lists; import java.util.HashMap; import java.util.List; @@ -40,8 +40,6 @@ import org.junit.rules.ExpectedException; import org.junit.rules.Timeout; -import autovalue.shaded.com.google.common.common.collect.Lists; - public class ITDatastoreSnippets { private static Datastore datastore; From d59227b2376912acd453f70b6d286f53776f417e Mon Sep 17 00:00:00 2001 From: Michael Bausor Date: Fri, 16 Sep 2016 15:45:32 -0700 Subject: [PATCH 21/28] Simplify runQuery --- .../datastore/snippets/DatastoreSnippets.java | 13 +++----- .../storage/snippets/ITDatastoreSnippets.java | 33 +++++++++++++++---- 2 files changed, 30 insertions(+), 16 deletions(-) diff --git a/google-cloud-examples/src/main/java/com/google/cloud/examples/datastore/snippets/DatastoreSnippets.java b/google-cloud-examples/src/main/java/com/google/cloud/examples/datastore/snippets/DatastoreSnippets.java index 785f1b0d75af..c95ec3ab5728 100644 --- a/google-cloud-examples/src/main/java/com/google/cloud/examples/datastore/snippets/DatastoreSnippets.java +++ b/google-cloud-examples/src/main/java/com/google/cloud/examples/datastore/snippets/DatastoreSnippets.java @@ -261,20 +261,15 @@ public List fetchEntitiesWithKeys(String firstKeyName, String secondKeyN } /** - * Example of running a query. + * Example of running a query to find all keys of one kind. */ // [TARGET run(Query query, ReadOption... options)] - // [VARIABLE "my_key_name"] - // [VARIABLE "my_query_kind"] - // [VARIABLE "my_query_namespace"] - public List runQuery(String keyName, String queryKind, String queryNamespace) { + // [VARIABLE "my_kind"] + public List runQuery(String kind) { // [START runQuery] - Key key = datastore.newKeyFactory().kind("MyClass").newKey(keyName); StructuredQuery query = Query.entityQueryBuilder() - .namespace(queryNamespace) - .kind(queryKind) - .filter(PropertyFilter.hasAncestor(key)) + .kind(kind) .build(); QueryResults results = datastore.run(query); // TODO make a change so that it's not necessary to hold the entities in a list for diff --git a/google-cloud-examples/src/test/java/com/google/cloud/examples/storage/snippets/ITDatastoreSnippets.java b/google-cloud-examples/src/test/java/com/google/cloud/examples/storage/snippets/ITDatastoreSnippets.java index ab8a16b7a9a7..fdc44fa7c74d 100644 --- a/google-cloud-examples/src/test/java/com/google/cloud/examples/storage/snippets/ITDatastoreSnippets.java +++ b/google-cloud-examples/src/test/java/com/google/cloud/examples/storage/snippets/ITDatastoreSnippets.java @@ -148,17 +148,36 @@ public void testCreateKeyFactory() { assertNotNull(keyFactory); } + private void addEntity(String keyName, String keyClass, String value) { + Key key = datastore.newKeyFactory().kind(keyClass).newKey(keyName); + Entity.Builder entityBuilder = Entity.builder(key); + entityBuilder.set("propertyName", value); + Entity entity = entityBuilder.build(); + datastore.put(entity); + } + + private void deleteEntity(String keyName, String keyClass) { + Key key = datastore.newKeyFactory().kind(keyClass).newKey(keyName); + datastore.delete(key); + } + @Test public void testRunQuery() { - String keyToFind = "my_key_name_to_find"; - String keyToMiss = "my_key_name_to_miss"; - String query_kind = "MyClass"; - String namespace = ""; - datastoreSnippets.batchPutEntities(keyToFind, keyToMiss); - List queryResults = datastoreSnippets.runQuery(keyToFind, query_kind, namespace); + String keyNameToFind = "my_key_name_to_find"; + String keyNameToMiss = "my_key_name_to_miss"; + + String kindToFind = "ClassToFind"; + String kindToMiss = "OtherClass"; + + addEntity(keyNameToFind, kindToFind, ""); + addEntity(keyNameToMiss, kindToMiss, ""); + + List queryResults = datastoreSnippets.runQuery(kindToFind); assertNotNull(queryResults); assertEquals(1, queryResults.size()); - datastoreSnippets.batchDeleteEntities(keyToFind, keyToMiss); + + deleteEntity(keyNameToFind, kindToFind); + deleteEntity(keyNameToMiss, kindToMiss); } // MIKE ENDS HERE From 0004817328318773c3dcd64d0106e4f2c3ade929 Mon Sep 17 00:00:00 2001 From: Anthony Moore Date: Fri, 16 Sep 2016 15:59:05 -0700 Subject: [PATCH 22/28] Integration tests for Datastore.runInTransaction and Datastore.newBatch. --- .../datastore/snippets/DatastoreSnippets.java | 4 ++-- .../storage/snippets/ITDatastoreSnippets.java | 21 +++++++++++++++++-- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/google-cloud-examples/src/main/java/com/google/cloud/examples/datastore/snippets/DatastoreSnippets.java b/google-cloud-examples/src/main/java/com/google/cloud/examples/datastore/snippets/DatastoreSnippets.java index c95ec3ab5728..1337a4e28d1a 100644 --- a/google-cloud-examples/src/main/java/com/google/cloud/examples/datastore/snippets/DatastoreSnippets.java +++ b/google-cloud-examples/src/main/java/com/google/cloud/examples/datastore/snippets/DatastoreSnippets.java @@ -77,8 +77,8 @@ public String run(DatastoreReaderWriter readerWriter) { // [VARIABLE "my_key_name_2"] public Batch newBatch(String keyName1, String keyName2) { // [START newBatch] - Key key1 = datastore.newKeyFactory().newKey(keyName1); - Key key2 = datastore.newKeyFactory().newKey(keyName2); + Key key1 = datastore.newKeyFactory().kind("MyClass").newKey(keyName1); + Key key2 = datastore.newKeyFactory().kind("MyClass").newKey(keyName2); Batch batch = datastore.newBatch(); Entity entity1 = Entity.builder(key1).set("name", "John").build(); Entity entity2 = Entity.builder(key2).set("title", "title").build(); diff --git a/google-cloud-examples/src/test/java/com/google/cloud/examples/storage/snippets/ITDatastoreSnippets.java b/google-cloud-examples/src/test/java/com/google/cloud/examples/storage/snippets/ITDatastoreSnippets.java index fdc44fa7c74d..5dbc7146a8bd 100644 --- a/google-cloud-examples/src/test/java/com/google/cloud/examples/storage/snippets/ITDatastoreSnippets.java +++ b/google-cloud-examples/src/test/java/com/google/cloud/examples/storage/snippets/ITDatastoreSnippets.java @@ -20,6 +20,7 @@ import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; +import com.google.cloud.datastore.Batch; import com.google.cloud.datastore.Datastore; import com.google.cloud.datastore.DatastoreOptions; import com.google.cloud.datastore.Entity; @@ -68,7 +69,24 @@ public static void afterClass() throws ExecutionException, InterruptedException // } } - // ANTHONY STARTS HERE + @Test + public void testRunInTransaction() { + final String testString = "Test String"; + String result = datastoreSnippets.runInTransaction(testString); + assertEquals(testString, result); + } + + @Test + public void testNewBatch() { + final String testKey1 = "new_batch_key1"; + final Key key1 = datastore.newKeyFactory().kind("MyClass").newKey(testKey1); + final String testKey2 = "new_batch_key2"; + final Key key2 = datastore.newKeyFactory().kind("MyClass").newKey(testKey2); + datastore.delete(key1, key2); + Batch batch = datastoreSnippets.newBatch(testKey1, testKey2); + assertNotNull(batch); + datastore.delete(key1, key2); + } @Test public void testAllocateIdSingle() { @@ -81,7 +99,6 @@ public void testAllocateIdMultiple() { List keys = datastoreSnippets.allocateIdMultiple(); assertEquals(2, keys.size()); } - // ANTHONY ENDS HERE // GARRETT STARTS HERE From c2b16c1573cc73bdf194d44b713b86cfc511167c Mon Sep 17 00:00:00 2001 From: Garrett Jones Date: Fri, 16 Sep 2016 16:06:27 -0700 Subject: [PATCH 23/28] Key cleanup --- .../storage/snippets/ITDatastoreSnippets.java | 93 ++++++++----------- 1 file changed, 41 insertions(+), 52 deletions(-) diff --git a/google-cloud-examples/src/test/java/com/google/cloud/examples/storage/snippets/ITDatastoreSnippets.java b/google-cloud-examples/src/test/java/com/google/cloud/examples/storage/snippets/ITDatastoreSnippets.java index 5dbc7146a8bd..42d4a1b707a0 100644 --- a/google-cloud-examples/src/test/java/com/google/cloud/examples/storage/snippets/ITDatastoreSnippets.java +++ b/google-cloud-examples/src/test/java/com/google/cloud/examples/storage/snippets/ITDatastoreSnippets.java @@ -29,12 +29,12 @@ import com.google.cloud.examples.datastore.snippets.DatastoreSnippets; import com.google.common.collect.Lists; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.concurrent.ExecutionException; -import org.junit.AfterClass; +import org.junit.After; import org.junit.BeforeClass; import org.junit.Rule; import org.junit.Test; @@ -46,6 +46,8 @@ public class ITDatastoreSnippets { private static Datastore datastore; private static DatastoreSnippets datastoreSnippets; + private List registeredKeys = new ArrayList<>(); + @Rule public ExpectedException thrown = ExpectedException.none(); @@ -58,15 +60,35 @@ public static void beforeClass() { datastoreSnippets = new DatastoreSnippets(datastore); } - @AfterClass - public static void afterClass() throws ExecutionException, InterruptedException { - // TODO: do the right work for Datastore, similar to the Storage code below -// if (storage != null) { -// boolean wasDeleted = RemoteStorageHelper.forceDelete(storage, BUCKET, 5, TimeUnit.SECONDS); -// if (!wasDeleted && log.isLoggable(Level.WARNING)) { -// log.log(Level.WARNING, "Deletion of bucket {0} timed out, bucket is not empty", BUCKET); -// } -// } + @After + public void afterTest() { + datastore.delete(registeredKeys.toArray(new Key[0])); + } + + private String registerKey(String keyName) { + return registerKey(keyName, "MyClass"); + } + + private String registerKey(String keyName, String kind) { + Key key = datastore.newKeyFactory().kind(kind).newKey(keyName); + registeredKeys.add(key); + return key.name(); + } + + private Map createEntityMap(List entities) { + Map entityMap = new HashMap<>(); + for (Entity entity : entities) { + entityMap.put(entity.key().name(), entity); + } + return entityMap; + } + + private void addEntity(String keyName, String keyClass, String value) { + Key key = datastore.newKeyFactory().kind(keyClass).newKey(keyName); + Entity.Builder entityBuilder = Entity.builder(key); + entityBuilder.set("propertyName", value); + Entity entity = entityBuilder.build(); + datastore.put(entity); } @Test @@ -100,30 +122,18 @@ public void testAllocateIdMultiple() { assertEquals(2, keys.size()); } - // GARRETT STARTS HERE - @Test public void testEntityPutGet() { - String key = "my_single_key"; + String key = registerKey("my_single_key"); datastoreSnippets.putSingleEntity(key); Entity entity = datastoreSnippets.getEntityWithKey(key); assertEquals("value", entity.getString("propertyName")); - - datastore.delete(datastore.newKeyFactory().kind("MyClass").newKey(key)); - } - - private Map createEntityMap(List entities) { - Map entityMap = new HashMap<>(); - for (Entity entity : entities) { - entityMap.put(entity.key().name(), entity); - } - return entityMap; } @Test public void testBatchEntityCrud() { - String key1 = "batch_key1"; - String key2 = "batch_key2"; + String key1 = registerKey("batch_key1"); + String key2 = registerKey("batch_key2"); datastoreSnippets.batchPutEntities(key1, key2); assertNotNull(datastoreSnippets.getEntityWithKey(key1)); @@ -155,47 +165,26 @@ public void testBatchEntityCrud() { assertNull(fetchedEntities2.get(1)); } - // GARRETT ENDS HERE - - // MIKE STARTS HERE - @Test public void testCreateKeyFactory() { KeyFactory keyFactory = datastoreSnippets.createKeyFactory(); assertNotNull(keyFactory); } - private void addEntity(String keyName, String keyClass, String value) { - Key key = datastore.newKeyFactory().kind(keyClass).newKey(keyName); - Entity.Builder entityBuilder = Entity.builder(key); - entityBuilder.set("propertyName", value); - Entity entity = entityBuilder.build(); - datastore.put(entity); - } - - private void deleteEntity(String keyName, String keyClass) { - Key key = datastore.newKeyFactory().kind(keyClass).newKey(keyName); - datastore.delete(key); - } - @Test public void testRunQuery() { - String keyNameToFind = "my_key_name_to_find"; - String keyNameToMiss = "my_key_name_to_miss"; - String kindToFind = "ClassToFind"; String kindToMiss = "OtherClass"; - + + String keyNameToFind = registerKey("my_key_name_to_find", kindToFind); + String keyNameToMiss = registerKey("my_key_name_to_miss", kindToMiss); + addEntity(keyNameToFind, kindToFind, ""); addEntity(keyNameToMiss, kindToMiss, ""); - + List queryResults = datastoreSnippets.runQuery(kindToFind); assertNotNull(queryResults); assertEquals(1, queryResults.size()); - - deleteEntity(keyNameToFind, kindToFind); - deleteEntity(keyNameToMiss, kindToMiss); } - // MIKE ENDS HERE } From f1a3b44b122ff904d3627041bf013122984b650e Mon Sep 17 00:00:00 2001 From: Garrett Jones Date: Fri, 16 Sep 2016 16:21:12 -0700 Subject: [PATCH 24/28] Editing for consistency --- .../datastore/snippets/DatastoreSnippets.java | 15 +++++++-------- .../storage/snippets/ITDatastoreSnippets.java | 12 ++++-------- 2 files changed, 11 insertions(+), 16 deletions(-) diff --git a/google-cloud-examples/src/main/java/com/google/cloud/examples/datastore/snippets/DatastoreSnippets.java b/google-cloud-examples/src/main/java/com/google/cloud/examples/datastore/snippets/DatastoreSnippets.java index 1337a4e28d1a..687646f8e62d 100644 --- a/google-cloud-examples/src/main/java/com/google/cloud/examples/datastore/snippets/DatastoreSnippets.java +++ b/google-cloud-examples/src/main/java/com/google/cloud/examples/datastore/snippets/DatastoreSnippets.java @@ -55,13 +55,12 @@ public DatastoreSnippets(Datastore datastore) { */ // [TARGET runInTransaction(TransactionCallable callable)] // [VARIABLE "my_callable_result"] - public String runInTransaction(String callableResult) { + public String runInTransaction(final String callableResult) { // [START runInTransaction] - final String runResult = callableResult; TransactionCallable callable = new TransactionCallable() { @Override public String run(DatastoreReaderWriter readerWriter) { - return runResult; + return callableResult; } }; String result = datastore.runInTransaction(callable); @@ -72,7 +71,7 @@ public String run(DatastoreReaderWriter readerWriter) { /** * Example of starting a new batch. */ - // [TARGET runInTransaction(TransactionCallable callable)] + // [TARGET newBatch()] // [VARIABLE "my_key_name_1"] // [VARIABLE "my_key_name_2"] public Batch newBatch(String keyName1, String keyName2) { @@ -105,18 +104,18 @@ public Key allocateIdSingle() { } /** - * Example of allocating multiple ids + * Example of allocating multiple ids in a single batch */ // [TARGET allocateId(IncompleteKey... keys)] - public List allocateIdMultiple() { - // [START allocateIdMultiple] + public List batchAllocateId() { + // [START batchAllocateId] KeyFactory keyFactory = datastore.newKeyFactory().kind("MyClass"); IncompleteKey incompleteKey1 = keyFactory.newKey(); IncompleteKey incompleteKey2 = keyFactory.newKey(); // let cloud datastore automatically assign the ids List keys = datastore.allocateId(incompleteKey1, incompleteKey2); - // [END allocateIdMultiple] + // [END batchAllocateId] return keys; } diff --git a/google-cloud-examples/src/test/java/com/google/cloud/examples/storage/snippets/ITDatastoreSnippets.java b/google-cloud-examples/src/test/java/com/google/cloud/examples/storage/snippets/ITDatastoreSnippets.java index 42d4a1b707a0..104aa5b42bd3 100644 --- a/google-cloud-examples/src/test/java/com/google/cloud/examples/storage/snippets/ITDatastoreSnippets.java +++ b/google-cloud-examples/src/test/java/com/google/cloud/examples/storage/snippets/ITDatastoreSnippets.java @@ -93,21 +93,17 @@ private void addEntity(String keyName, String keyClass, String value) { @Test public void testRunInTransaction() { - final String testString = "Test String"; + String testString = "Test String"; String result = datastoreSnippets.runInTransaction(testString); assertEquals(testString, result); } @Test public void testNewBatch() { - final String testKey1 = "new_batch_key1"; - final Key key1 = datastore.newKeyFactory().kind("MyClass").newKey(testKey1); - final String testKey2 = "new_batch_key2"; - final Key key2 = datastore.newKeyFactory().kind("MyClass").newKey(testKey2); - datastore.delete(key1, key2); + String testKey1 = registerKey("new_batch_key1"); + String testKey2 = registerKey("new_batch_key2"); Batch batch = datastoreSnippets.newBatch(testKey1, testKey2); assertNotNull(batch); - datastore.delete(key1, key2); } @Test @@ -118,7 +114,7 @@ public void testAllocateIdSingle() { @Test public void testAllocateIdMultiple() { - List keys = datastoreSnippets.allocateIdMultiple(); + List keys = datastoreSnippets.batchAllocateId(); assertEquals(2, keys.size()); } From c0b6b09fdec13632758ac4bd74630a638d373082 Mon Sep 17 00:00:00 2001 From: Michael Bausor Date: Fri, 16 Sep 2016 16:45:49 -0700 Subject: [PATCH 25/28] add new runQuery snippet --- .../datastore/snippets/DatastoreSnippets.java | 29 ++++++++++++++++++- .../storage/snippets/ITDatastoreSnippets.java | 28 ++++++++++++------ 2 files changed, 47 insertions(+), 10 deletions(-) diff --git a/google-cloud-examples/src/main/java/com/google/cloud/examples/datastore/snippets/DatastoreSnippets.java b/google-cloud-examples/src/main/java/com/google/cloud/examples/datastore/snippets/DatastoreSnippets.java index 687646f8e62d..6b1d1e0563e5 100644 --- a/google-cloud-examples/src/main/java/com/google/cloud/examples/datastore/snippets/DatastoreSnippets.java +++ b/google-cloud-examples/src/main/java/com/google/cloud/examples/datastore/snippets/DatastoreSnippets.java @@ -33,9 +33,10 @@ import com.google.cloud.datastore.Query; import com.google.cloud.datastore.QueryResults; import com.google.cloud.datastore.StructuredQuery; +import com.google.cloud.datastore.StructuredQuery.Filter; import com.google.cloud.datastore.StructuredQuery.PropertyFilter; import com.google.common.collect.Lists; - +import com.google.datastore.v1.PropertyFilter.Operator; import java.util.Iterator; import java.util.List; @@ -283,4 +284,30 @@ public List runQuery(String kind) { return entities; } + /** + * Example of running a query to find all keys with a matching property value. + */ + // [TARGET run(Query query, ReadOption... options)] + // [VARIABLE "my_kind"] + // [VARIABLE "my_property"] + // [VARIABLE "my_value"] + public List runQueryOnProperty(String kind, String property, String value) { + // [START runQueryOnProperty] + StructuredQuery query = + Query.entityQueryBuilder() + .kind(kind) + .filter(PropertyFilter.eq(property, value)) + .build(); + QueryResults results = datastore.run(query); + // TODO make a change so that it's not necessary to hold the entities in a list for + // integration testing + List entities = Lists.newArrayList(); + while (results.hasNext()) { + Entity result = results.next(); + // do something with result + entities.add(result); + } + // [END runQueryOnProperty] + return entities; + } } diff --git a/google-cloud-examples/src/test/java/com/google/cloud/examples/storage/snippets/ITDatastoreSnippets.java b/google-cloud-examples/src/test/java/com/google/cloud/examples/storage/snippets/ITDatastoreSnippets.java index 104aa5b42bd3..bdba3dc79d4d 100644 --- a/google-cloud-examples/src/test/java/com/google/cloud/examples/storage/snippets/ITDatastoreSnippets.java +++ b/google-cloud-examples/src/test/java/com/google/cloud/examples/storage/snippets/ITDatastoreSnippets.java @@ -83,10 +83,10 @@ private Map createEntityMap(List entities) { return entityMap; } - private void addEntity(String keyName, String keyClass, String value) { + private void addEntity(String keyName, String keyClass, String property, String value) { Key key = datastore.newKeyFactory().kind(keyClass).newKey(keyName); Entity.Builder entityBuilder = Entity.builder(key); - entityBuilder.set("propertyName", value); + entityBuilder.set(property, value); Entity entity = entityBuilder.build(); datastore.put(entity); } @@ -166,21 +166,31 @@ public void testCreateKeyFactory() { KeyFactory keyFactory = datastoreSnippets.createKeyFactory(); assertNotNull(keyFactory); } - + @Test public void testRunQuery() { String kindToFind = "ClassToFind"; String kindToMiss = "OtherClass"; - + String keyNameToFind = registerKey("my_key_name_to_find", kindToFind); + String otherKeyNameToFind = registerKey("my_key_name_to_find", kindToFind); String keyNameToMiss = registerKey("my_key_name_to_miss", kindToMiss); - - addEntity(keyNameToFind, kindToFind, ""); - addEntity(keyNameToMiss, kindToMiss, ""); - + + String property = "my_property_name"; + + String valueToFind = "my_value_to_find"; + String valueToMiss = "my_value_to_miss"; + + addEntity(keyNameToFind, kindToFind, property, valueToFind); + addEntity(otherKeyNameToFind, kindToFind, property, valueToMiss); + addEntity(keyNameToMiss, kindToMiss, property, valueToFind); + List queryResults = datastoreSnippets.runQuery(kindToFind); assertNotNull(queryResults); + assertEquals(2, queryResults.size()); + + queryResults = datastoreSnippets.runQueryOnProperty(kindToFind, property, valueToFind); + assertNotNull(queryResults); assertEquals(1, queryResults.size()); } - } From 3b9bfca45a5825896a75c43143bb33626070688e Mon Sep 17 00:00:00 2001 From: Michael Bausor Date: Fri, 16 Sep 2016 16:50:37 -0700 Subject: [PATCH 26/28] Fix variable name --- .../cloud/examples/storage/snippets/ITDatastoreSnippets.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/google-cloud-examples/src/test/java/com/google/cloud/examples/storage/snippets/ITDatastoreSnippets.java b/google-cloud-examples/src/test/java/com/google/cloud/examples/storage/snippets/ITDatastoreSnippets.java index bdba3dc79d4d..2806c7f0e94b 100644 --- a/google-cloud-examples/src/test/java/com/google/cloud/examples/storage/snippets/ITDatastoreSnippets.java +++ b/google-cloud-examples/src/test/java/com/google/cloud/examples/storage/snippets/ITDatastoreSnippets.java @@ -173,7 +173,7 @@ public void testRunQuery() { String kindToMiss = "OtherClass"; String keyNameToFind = registerKey("my_key_name_to_find", kindToFind); - String otherKeyNameToFind = registerKey("my_key_name_to_find", kindToFind); + String otherKeyNameToFind = registerKey("other_key_name_to_find", kindToFind); String keyNameToMiss = registerKey("my_key_name_to_miss", kindToMiss); String property = "my_property_name"; From 46f425f5b9aad782bd6f15124b8f4c7d833fdf41 Mon Sep 17 00:00:00 2001 From: Garrett Jones Date: Fri, 16 Sep 2016 16:52:08 -0700 Subject: [PATCH 27/28] whitespace --- .../storage/snippets/ITDatastoreSnippets.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/google-cloud-examples/src/test/java/com/google/cloud/examples/storage/snippets/ITDatastoreSnippets.java b/google-cloud-examples/src/test/java/com/google/cloud/examples/storage/snippets/ITDatastoreSnippets.java index 2806c7f0e94b..f971d832051e 100644 --- a/google-cloud-examples/src/test/java/com/google/cloud/examples/storage/snippets/ITDatastoreSnippets.java +++ b/google-cloud-examples/src/test/java/com/google/cloud/examples/storage/snippets/ITDatastoreSnippets.java @@ -166,29 +166,29 @@ public void testCreateKeyFactory() { KeyFactory keyFactory = datastoreSnippets.createKeyFactory(); assertNotNull(keyFactory); } - + @Test public void testRunQuery() { String kindToFind = "ClassToFind"; String kindToMiss = "OtherClass"; - + String keyNameToFind = registerKey("my_key_name_to_find", kindToFind); String otherKeyNameToFind = registerKey("other_key_name_to_find", kindToFind); String keyNameToMiss = registerKey("my_key_name_to_miss", kindToMiss); - + String property = "my_property_name"; - + String valueToFind = "my_value_to_find"; String valueToMiss = "my_value_to_miss"; - + addEntity(keyNameToFind, kindToFind, property, valueToFind); addEntity(otherKeyNameToFind, kindToFind, property, valueToMiss); addEntity(keyNameToMiss, kindToMiss, property, valueToFind); - + List queryResults = datastoreSnippets.runQuery(kindToFind); assertNotNull(queryResults); assertEquals(2, queryResults.size()); - + queryResults = datastoreSnippets.runQueryOnProperty(kindToFind, property, valueToFind); assertNotNull(queryResults); assertEquals(1, queryResults.size()); From f5a310128a9377c558629eb85dc3a6c7bba6d211 Mon Sep 17 00:00:00 2001 From: Michael Bausor Date: Fri, 16 Sep 2016 16:58:44 -0700 Subject: [PATCH 28/28] Move datastore IT to correct folder --- .../{storage => datastore}/snippets/ITDatastoreSnippets.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename google-cloud-examples/src/test/java/com/google/cloud/examples/{storage => datastore}/snippets/ITDatastoreSnippets.java (99%) diff --git a/google-cloud-examples/src/test/java/com/google/cloud/examples/storage/snippets/ITDatastoreSnippets.java b/google-cloud-examples/src/test/java/com/google/cloud/examples/datastore/snippets/ITDatastoreSnippets.java similarity index 99% rename from google-cloud-examples/src/test/java/com/google/cloud/examples/storage/snippets/ITDatastoreSnippets.java rename to google-cloud-examples/src/test/java/com/google/cloud/examples/datastore/snippets/ITDatastoreSnippets.java index f971d832051e..4c2292f8433d 100644 --- a/google-cloud-examples/src/test/java/com/google/cloud/examples/storage/snippets/ITDatastoreSnippets.java +++ b/google-cloud-examples/src/test/java/com/google/cloud/examples/datastore/snippets/ITDatastoreSnippets.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.google.cloud.examples.storage.snippets; +package com.google.cloud.examples.datastore.snippets; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull;