From f27a9508c3adea69062b634955f18545252c3436 Mon Sep 17 00:00:00 2001 From: Tim Swast Date: Wed, 7 Dec 2016 13:08:43 -0800 Subject: [PATCH 1/2] Remove dependency on AutoValue. AutoValue saves us from having to write boilerplate, but it only works with Maven or Gradle. Those users using Eclipse and IntelliJ to compile have been having difficulty. --- vision/text/pom.xml | 6 -- .../cloud/vision/samples/text/ImageText.java | 57 ++++++++++++----- .../cloud/vision/samples/text/Index.java | 2 +- .../cloud/vision/samples/text/TextApp.java | 2 +- .../cloud/vision/samples/text/Word.java | 61 +++++++++++++++---- 5 files changed, 93 insertions(+), 35 deletions(-) diff --git a/vision/text/pom.xml b/vision/text/pom.xml index c2bfa762b8c..54c5f7ad84b 100644 --- a/vision/text/pom.xml +++ b/vision/text/pom.xml @@ -50,12 +50,6 @@ guava 20.0 - - com.google.auto.value - auto-value - 1.3 - provided - org.apache.opennlp opennlp-tools diff --git a/vision/text/src/main/java/com/google/cloud/vision/samples/text/ImageText.java b/vision/text/src/main/java/com/google/cloud/vision/samples/text/ImageText.java index 0b4adb4d85e..4d695f9401f 100644 --- a/vision/text/src/main/java/com/google/cloud/vision/samples/text/ImageText.java +++ b/vision/text/src/main/java/com/google/cloud/vision/samples/text/ImageText.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Google Inc. All Rights Reserved. + * Copyright 2016 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,7 +18,6 @@ import com.google.api.services.vision.v1.model.EntityAnnotation; import com.google.api.services.vision.v1.model.Status; -import com.google.auto.value.AutoValue; import java.nio.file.Path; import java.util.List; @@ -28,28 +27,58 @@ /** * A data object for mapping text to file paths. */ -@AutoValue -abstract class ImageText { +public class ImageText { + private Path pth; + private List ts; + private Status err; public static Builder builder() { - return new AutoValue_ImageText.Builder(); + return new Builder(); } - public abstract Path path(); + private ImageText() {} - public abstract List textAnnotations(); + public Path path() { + return this.pth; + } + + public List textAnnotations() { + return this.ts; + } @Nullable - public abstract Status error(); + public Status error() { + return this.err; + } + + public static class Builder { + private Path pth; + private List ts; + private Status err; + + Builder() {} - @AutoValue.Builder - public abstract static class Builder { - public abstract Builder path(Path path); + public Builder path(Path path) { + this.pth = path; + return this; + } - public abstract Builder textAnnotations(List ts); + public Builder textAnnotations(List ts) { + this.ts = ts; + return this; + } - public abstract Builder error(@Nullable Status err); + public Builder error(@Nullable Status err) { + this.err = err; + return this; + } - public abstract ImageText build(); + public ImageText build() { + ImageText out = new ImageText(); + out.pth = this.pth; + out.ts = this.ts; + out.err = this.err; + return out; + } } } diff --git a/vision/text/src/main/java/com/google/cloud/vision/samples/text/Index.java b/vision/text/src/main/java/com/google/cloud/vision/samples/text/Index.java index 4c739a66dfd..080d4d31e3b 100644 --- a/vision/text/src/main/java/com/google/cloud/vision/samples/text/Index.java +++ b/vision/text/src/main/java/com/google/cloud/vision/samples/text/Index.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Google Inc. All Rights Reserved. + * Copyright 2016 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/vision/text/src/main/java/com/google/cloud/vision/samples/text/TextApp.java b/vision/text/src/main/java/com/google/cloud/vision/samples/text/TextApp.java index 1ca841069ef..951dacd00f6 100644 --- a/vision/text/src/main/java/com/google/cloud/vision/samples/text/TextApp.java +++ b/vision/text/src/main/java/com/google/cloud/vision/samples/text/TextApp.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Google Inc. All Rights Reserved. + * Copyright 2016 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/vision/text/src/main/java/com/google/cloud/vision/samples/text/Word.java b/vision/text/src/main/java/com/google/cloud/vision/samples/text/Word.java index 0dfb4f24ed0..546bb4ca23c 100644 --- a/vision/text/src/main/java/com/google/cloud/vision/samples/text/Word.java +++ b/vision/text/src/main/java/com/google/cloud/vision/samples/text/Word.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Google Inc. All Rights Reserved. + * Copyright 2016 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,30 +16,65 @@ package com.google.cloud.vision.samples.text; -import com.google.auto.value.AutoValue; - import java.nio.file.Path; /** * A data object for mapping words to file paths. */ -@AutoValue -abstract class Word { +public class Word { + private Path pth; + private String wrd; public static Builder builder() { - return new AutoValue_Word.Builder(); + return new Builder(); + } + + public Path path() { + return this.pth; + } + + public String word() { + return this.wrd; + } + + @Override + public boolean equals(Object other) { + if (other == null) { + return false; + } + if (!(other instanceof Word)) { + return false; + } + Word otherWord = (Word) other; + return this.path().equals(otherWord.path()) && this.word().equals(otherWord.word()); + } + + @Override + public int hashCode() { + return this.word().hashCode() ^ this.path().hashCode(); } - public abstract Path path(); + public static class Builder { + private Path pth; + private String wrd; - public abstract String word(); + Builder() {} - @AutoValue.Builder - public abstract static class Builder { - public abstract Builder path(Path path); + public Builder path(Path path) { + this.pth = path; + return this; + } - public abstract Builder word(String word); + public Builder word(String word) { + this.wrd = word; + return this; + } - public abstract Word build(); + public Word build() { + Word out = new Word(); + out.pth = this.pth; + out.wrd = this.wrd; + return out; + } } } From c375d219dbefa284a28c7f0391cb4fbdee67a69c Mon Sep 17 00:00:00 2001 From: Jason Dobry Date: Wed, 7 Dec 2016 20:32:29 -0800 Subject: [PATCH 2/2] Add NL quickstart sample. Fix some other quickstarts. (#438) --- .../example/datastore/QuickstartSampleIT.java | 1 - language/cloud-client/README.md | 30 +++++++++ language/cloud-client/pom.xml | 57 +++++++++++++++++ .../example/language/QuickstartSample.java | 44 +++++++++++++ .../example/language/QuickstartSampleIT.java | 61 +++++++++++++++++++ .../example/pubsub/QuickstartSampleIT.java | 1 - .../example/storage/QuickstartSampleIT.java | 1 - translate/cloud-client/README.md | 5 +- .../example/translate/QuickstartSampleIT.java | 1 - 9 files changed, 194 insertions(+), 7 deletions(-) create mode 100644 language/cloud-client/README.md create mode 100644 language/cloud-client/pom.xml create mode 100644 language/cloud-client/src/main/java/com/example/language/QuickstartSample.java create mode 100644 language/cloud-client/src/test/java/com/example/language/QuickstartSampleIT.java diff --git a/datastore/cloud-client/src/test/java/com/example/datastore/QuickstartSampleIT.java b/datastore/cloud-client/src/test/java/com/example/datastore/QuickstartSampleIT.java index 8257a208228..3bf69d77b73 100644 --- a/datastore/cloud-client/src/test/java/com/example/datastore/QuickstartSampleIT.java +++ b/datastore/cloud-client/src/test/java/com/example/datastore/QuickstartSampleIT.java @@ -69,4 +69,3 @@ public void testQuickstart() throws Exception { assertThat(got).contains("Saved sampletask1: Buy milk"); } } -// [END datastore_quickstart] diff --git a/language/cloud-client/README.md b/language/cloud-client/README.md new file mode 100644 index 00000000000..fce53f88da0 --- /dev/null +++ b/language/cloud-client/README.md @@ -0,0 +1,30 @@ +# Getting Started with Google Cloud Natural Language API and the Google Cloud Client libraries + +[Google Cloud Natural Language API][language] provides natural language +understanding technologies to developers, including sentiment analysis, entity +recognition, and syntax analysis. This API is part of the larger collection of +Cloud Machine Learning APIs. + +These sample Java applications demonstrate how to access the Cloud Natural +Language API using the [Google Cloud Client Library for Java][google-cloud-java]. + +[language]: https://cloud.google.com/natural-language/docs/ +[google-cloud-java]: https://github.com/GoogleCloudPlatform/google-cloud-java + +## Quickstart + +Install [Maven](http://maven.apache.org/). + +Build your project with: + + mvn clean package -DskipTests + +You can then run a given `ClassName` via: + + mvn exec:java -Dexec.mainClass=com.example.language.ClassName \ + -DpropertyName=propertyValue \ + -Dexec.args="arg1 'arg 2' arg3" + +### Analyze a string for sentiment (using the quickstart sample) + + mvn exec:java -Dexec.mainClass=com.example.language.QuickstartSample diff --git a/language/cloud-client/pom.xml b/language/cloud-client/pom.xml new file mode 100644 index 00000000000..81f665847b4 --- /dev/null +++ b/language/cloud-client/pom.xml @@ -0,0 +1,57 @@ + + + 4.0.0 + com.example.language + language-google-cloud-samples + jar + + + + doc-samples + com.google.cloud + 1.0.0 + ../.. + + + + 1.8 + 1.8 + UTF-8 + + + + + com.google.cloud + google-cloud-language + 0.7.0 + + + + + junit + junit + 4.12 + test + + + com.google.truth + truth + 0.30 + test + + + diff --git a/language/cloud-client/src/main/java/com/example/language/QuickstartSample.java b/language/cloud-client/src/main/java/com/example/language/QuickstartSample.java new file mode 100644 index 00000000000..215518e15e1 --- /dev/null +++ b/language/cloud-client/src/main/java/com/example/language/QuickstartSample.java @@ -0,0 +1,44 @@ +/* + Copyright 2016, Google, Inc. + + 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.example.language; + +// [START language_quickstart] +// Imports the Google Cloud client library +import com.google.cloud.language.spi.v1.LanguageServiceClient; + +import com.google.cloud.language.v1.Document; +import com.google.cloud.language.v1.Document.Type; +import com.google.cloud.language.v1.Sentiment; + +public class QuickstartSample { + public static void main(String... args) throws Exception { + // Instantiates a client + LanguageServiceClient language = LanguageServiceClient.create(); + + // The text to analyze + String text = "Hello, world!"; + Document doc = Document.newBuilder() + .setContent(text).setType(Type.PLAIN_TEXT).build(); + + // Detects the sentiment of the text + Sentiment sentiment = language.analyzeSentiment(doc).getDocumentSentiment(); + + System.out.printf("Text: %s%n", text); + System.out.printf("Sentiment: %s, %s%n", sentiment.getScore(), sentiment.getMagnitude()); + } +} +// [END language_quickstart] diff --git a/language/cloud-client/src/test/java/com/example/language/QuickstartSampleIT.java b/language/cloud-client/src/test/java/com/example/language/QuickstartSampleIT.java new file mode 100644 index 00000000000..e4e48ec2081 --- /dev/null +++ b/language/cloud-client/src/test/java/com/example/language/QuickstartSampleIT.java @@ -0,0 +1,61 @@ +/* + Copyright 2016, Google, Inc. + + 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.example.language; + +import static com.google.common.truth.Truth.assertThat; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + +import java.io.ByteArrayOutputStream; +import java.io.PrintStream; + +/** + * Tests for quickstart sample. + */ +@RunWith(JUnit4.class) +@SuppressWarnings("checkstyle:abbreviationaswordinname") +public class QuickstartSampleIT { + private ByteArrayOutputStream bout; + private PrintStream out; + + @Before + public void setUp() { + bout = new ByteArrayOutputStream(); + out = new PrintStream(bout); + System.setOut(out); + } + + @After + public void tearDown() { + System.setOut(null); + } + + @Test + public void testQuickstart() throws Exception { + // Act + QuickstartSample.main(); + + // Assert + String got = bout.toString(); + assertThat(got).contains("Text: Hello, world!"); + assertThat(got).contains("Sentiment: "); + } +} diff --git a/pubsub/cloud-client/src/test/java/com/example/pubsub/QuickstartSampleIT.java b/pubsub/cloud-client/src/test/java/com/example/pubsub/QuickstartSampleIT.java index 1973f038550..3f9a78642a0 100644 --- a/pubsub/cloud-client/src/test/java/com/example/pubsub/QuickstartSampleIT.java +++ b/pubsub/cloud-client/src/test/java/com/example/pubsub/QuickstartSampleIT.java @@ -66,4 +66,3 @@ public void testQuickstart() throws Exception { assertThat(got).contains("Topic my-new-topic created."); } } -// [END datastore_quickstart] diff --git a/storage/cloud-client/src/test/java/com/example/storage/QuickstartSampleIT.java b/storage/cloud-client/src/test/java/com/example/storage/QuickstartSampleIT.java index 2265fa58b66..ac7e35a7c60 100644 --- a/storage/cloud-client/src/test/java/com/example/storage/QuickstartSampleIT.java +++ b/storage/cloud-client/src/test/java/com/example/storage/QuickstartSampleIT.java @@ -67,4 +67,3 @@ public void testQuickstart() throws Exception { assertThat(got).contains(String.format("Bucket %s created.", bucketName)); } } -// [END datastore_quickstart] diff --git a/translate/cloud-client/README.md b/translate/cloud-client/README.md index 30e53275591..fd02af6eaeb 100644 --- a/translate/cloud-client/README.md +++ b/translate/cloud-client/README.md @@ -2,7 +2,7 @@ [Google Translate API][translate] provides a simple programmatic interface for translating an arbitrary string into any supported language. -These sample Java applications demonstrate how to access the Cloud Storage API using +These sample Java applications demonstrate how to access the Google Translate API using the [Google Cloud Client Library for Java][google-cloud-java]. [translate]: https://cloud.google.com/translate/ @@ -24,5 +24,4 @@ You can then run a given `ClassName` via: ### Translate a string (using the quickstart sample) - mvn exec:java -Dexec.mainClass=com.example.translate.QuickstartSample \ - -Dexec.args="YOUR_API_KEY" + mvn exec:java -Dexec.mainClass=com.example.translate.QuickstartSample diff --git a/translate/cloud-client/src/test/java/com/example/translate/QuickstartSampleIT.java b/translate/cloud-client/src/test/java/com/example/translate/QuickstartSampleIT.java index e27b59cba97..50460defa29 100644 --- a/translate/cloud-client/src/test/java/com/example/translate/QuickstartSampleIT.java +++ b/translate/cloud-client/src/test/java/com/example/translate/QuickstartSampleIT.java @@ -59,4 +59,3 @@ public void testQuickstart() throws Exception { assertThat(got).contains("Translation: "); } } -// [END datastore_quickstart]