Repository: incubator-beam
Updated Branches:
  refs/heads/master e2868d687 -> a5d129361


Converts Datastore to use AutoValue


Project: http://git-wip-us.apache.org/repos/asf/incubator-beam/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-beam/commit/251e3e1e
Tree: http://git-wip-us.apache.org/repos/asf/incubator-beam/tree/251e3e1e
Diff: http://git-wip-us.apache.org/repos/asf/incubator-beam/diff/251e3e1e

Branch: refs/heads/master
Commit: 251e3e1ef2868b9901be3dbd27793b613855704a
Parents: e2868d6
Author: Eugene Kirpichov <kirpic...@google.com>
Authored: Wed Sep 28 17:29:11 2016 -0700
Committer: Dan Halperin <dhalp...@google.com>
Committed: Wed Oct 12 17:12:32 2016 -0700

----------------------------------------------------------------------
 sdks/java/io/google-cloud-platform/pom.xml      |  6 ++
 .../beam/sdk/io/gcp/datastore/DatastoreV1.java  | 95 +++++++-------------
 2 files changed, 38 insertions(+), 63 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-beam/blob/251e3e1e/sdks/java/io/google-cloud-platform/pom.xml
----------------------------------------------------------------------
diff --git a/sdks/java/io/google-cloud-platform/pom.xml 
b/sdks/java/io/google-cloud-platform/pom.xml
index 15c0447..1a598bb 100644
--- a/sdks/java/io/google-cloud-platform/pom.xml
+++ b/sdks/java/io/google-cloud-platform/pom.xml
@@ -213,6 +213,12 @@
       <artifactId>avro</artifactId>
     </dependency>
 
+    <dependency>
+      <groupId>com.google.auto.value</groupId>
+      <artifactId>auto-value</artifactId>
+      <scope>provided</scope>
+    </dependency>
+
     <!--  test -->
     <dependency>
       <groupId>org.apache.beam</groupId>

http://git-wip-us.apache.org/repos/asf/incubator-beam/blob/251e3e1e/sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/datastore/DatastoreV1.java
----------------------------------------------------------------------
diff --git 
a/sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/datastore/DatastoreV1.java
 
b/sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/datastore/DatastoreV1.java
index 45b2d6f..bfbff32 100644
--- 
a/sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/datastore/DatastoreV1.java
+++ 
b/sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/datastore/DatastoreV1.java
@@ -35,6 +35,7 @@ import com.google.api.client.auth.oauth2.Credential;
 import com.google.api.client.util.BackOff;
 import com.google.api.client.util.BackOffUtils;
 import com.google.api.client.util.Sleeper;
+import com.google.auto.value.AutoValue;
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.MoreObjects;
 import com.google.common.collect.ImmutableList;
@@ -194,7 +195,7 @@ public class DatastoreV1 {
    * {@link DatastoreV1.Read#withNamespace}, {@link 
DatastoreV1.Read#withNumQuerySplits}.
    */
   public DatastoreV1.Read read() {
-    return new DatastoreV1.Read(null, null, null, 0);
+    return new 
AutoValue_DatastoreV1_Read.Builder().setNumQuerySplits(0).build();
   }
 
   /**
@@ -203,7 +204,8 @@ public class DatastoreV1 {
    *
    * @see DatastoreIO
    */
-  public static class Read extends PTransform<PBegin, PCollection<Entity>> {
+  @AutoValue
+  public abstract static class Read extends PTransform<PBegin, 
PCollection<Entity>> {
     private static final Logger LOG = LoggerFactory.getLogger(Read.class);
 
     /** An upper bound on the number of splits for a query. */
@@ -222,16 +224,23 @@ public class DatastoreV1 {
      */
     static final int QUERY_BATCH_LIMIT = 500;
 
-    @Nullable
-    private final String projectId;
+    @Nullable public abstract String getProjectId();
+    @Nullable public abstract Query getQuery();
+    @Nullable public abstract String getNamespace();
+    public abstract int getNumQuerySplits();
 
-    @Nullable
-    private final Query query;
+    public abstract String toString();
 
-    @Nullable
-    private final String namespace;
+    abstract Builder toBuilder();
 
-    private final int numQuerySplits;
+    @AutoValue.Builder
+    abstract static class Builder {
+      abstract Builder setProjectId(String projectId);
+      abstract Builder setQuery(Query query);
+      abstract Builder setNamespace(String namespace);
+      abstract Builder setNumQuerySplits(int numQuerySplits);
+      abstract Read build();
+    }
 
     /**
      * Computes the number of splits to be performed on the given query by 
querying the estimated
@@ -345,25 +354,12 @@ public class DatastoreV1 {
     }
 
     /**
-     * Note that only {@code namespace} is really {@code @Nullable}. The other 
parameters may be
-     * {@code null} as a matter of build order, but if they are {@code null} 
at instantiation time,
-     * an error will be thrown.
-     */
-    private Read(@Nullable String projectId, @Nullable Query query, @Nullable 
String namespace,
-        int numQuerySplits) {
-      this.projectId = projectId;
-      this.query = query;
-      this.namespace = namespace;
-      this.numQuerySplits = numQuerySplits;
-    }
-
-    /**
      * Returns a new {@link DatastoreV1.Read} that reads from the Cloud 
Datastore for the specified
      * project.
      */
     public DatastoreV1.Read withProjectId(String projectId) {
       checkNotNull(projectId, "projectId");
-      return new DatastoreV1.Read(projectId, query, namespace, numQuerySplits);
+      return toBuilder().setProjectId(projectId).build();
     }
 
     /**
@@ -378,14 +374,14 @@ public class DatastoreV1 {
       checkNotNull(query, "query");
       checkArgument(!query.hasLimit() || query.getLimit().getValue() > 0,
           "Invalid query limit %s: must be positive", 
query.getLimit().getValue());
-      return new DatastoreV1.Read(projectId, query, namespace, numQuerySplits);
+      return toBuilder().setQuery(query).build();
     }
 
     /**
      * Returns a new {@link DatastoreV1.Read} that reads from the given 
namespace.
      */
     public DatastoreV1.Read withNamespace(String namespace) {
-      return new DatastoreV1.Read(projectId, query, namespace, numQuerySplits);
+      return toBuilder().setNamespace(namespace).build();
     }
 
     /**
@@ -405,29 +401,11 @@ public class DatastoreV1 {
      * </ul>
      */
     public DatastoreV1.Read withNumQuerySplits(int numQuerySplits) {
-      return new DatastoreV1.Read(projectId, query, namespace,
-          Math.min(Math.max(numQuerySplits, 0), NUM_QUERY_SPLITS_MAX));
-    }
-
-    @Nullable
-    public Query getQuery() {
-      return query;
-    }
-
-    @Nullable
-    public String getProjectId() {
-      return projectId;
+      return toBuilder()
+          .setNumQuerySplits(Math.min(Math.max(numQuerySplits, 0), 
NUM_QUERY_SPLITS_MAX))
+          .build();
     }
 
-    @Nullable
-    public String getNamespace() {
-      return namespace;
-    }
-
-
-    /**
-     * {@inheritDoc}
-     */
     @Override
     public PCollection<Entity> apply(PBegin input) {
       V1Options v1Options = V1Options.from(getProjectId(), getQuery(),
@@ -451,8 +429,8 @@ public class DatastoreV1 {
        *   a {@code PCollection<Entity>}.
        */
       PCollection<KV<Integer, Query>> queries = input
-          .apply(Create.of(query))
-          .apply(ParDo.of(new SplitQueryFn(v1Options, numQuerySplits)));
+          .apply(Create.of(getQuery()))
+          .apply(ParDo.of(new SplitQueryFn(v1Options, getNumQuerySplits())));
 
       PCollection<Query> shardedQueries = queries
           .apply(GroupByKey.<Integer, Query>create())
@@ -467,31 +445,22 @@ public class DatastoreV1 {
 
     @Override
     public void validate(PBegin input) {
-      checkNotNull(projectId, "projectId");
-      checkNotNull(query, "query");
+      checkNotNull(getProjectId(), "projectId");
+      checkNotNull(getQuery(), "query");
     }
 
     @Override
     public void populateDisplayData(DisplayData.Builder builder) {
       super.populateDisplayData(builder);
       builder
-          .addIfNotNull(DisplayData.item("projectId", projectId)
+          .addIfNotNull(DisplayData.item("projectId", getProjectId())
               .withLabel("ProjectId"))
-          .addIfNotNull(DisplayData.item("namespace", namespace)
+          .addIfNotNull(DisplayData.item("namespace", getNamespace())
               .withLabel("Namespace"))
-          .addIfNotNull(DisplayData.item("query", query.toString())
+          .addIfNotNull(DisplayData.item("query", getQuery().toString())
               .withLabel("Query"));
     }
 
-    @Override
-    public String toString() {
-      return MoreObjects.toStringHelper(getClass())
-          .add("projectId", projectId)
-          .add("query", query)
-          .add("namespace", namespace)
-          .toString();
-    }
-
     /**
      * A class for v1 Cloud Datastore related options.
      */
@@ -596,7 +565,7 @@ public class DatastoreV1 {
       }
 
       @Override
-      public void populateDisplayData(Builder builder) {
+      public void populateDisplayData(DisplayData.Builder builder) {
         super.populateDisplayData(builder);
         builder
             .addIfNotNull(DisplayData.item("projectId", options.getProjectId())

Reply via email to