This is an automated email from the ASF dual-hosted git repository.

ahmedabualsaud pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/beam.git


The following commit(s) were added to refs/heads/master by this push:
     new d22a7e783ab Make defaults for optional SchemaTransformProvider methods 
 (#30560)
d22a7e783ab is described below

commit d22a7e783abf445ae7bef2ce26075f9d93b409a7
Author: Ahmed Abualsaud <[email protected]>
AuthorDate: Mon Mar 11 17:26:54 2024 -0400

    Make defaults for optional SchemaTransformProvider methods  (#30560)
    
    * simplify schematransformprovider
---
 .../beam_PostCommit_Python_Xlang_Gcp_Direct.json   |  1 +
 .../transforms/SchemaTransformProvider.java        |  9 ++++++--
 .../transforms/TypedSchemaTransformProvider.java   | 20 +++++++++++++++++-
 .../TypedSchemaTransformProviderTest.java          | 24 ++++++++++++++++++++--
 ...ueryStorageWriteApiSchemaTransformProvider.java |  5 -----
 .../BigtableReadSchemaTransformProvider.java       | 10 ---------
 .../BigtableWriteSchemaTransformProvider.java      | 10 ---------
 ...gQueryDirectReadSchemaTransformProviderIT.java} |  2 +-
 ...yStorageWriteApiSchemaTransformProviderIT.java} |  2 +-
 9 files changed, 51 insertions(+), 32 deletions(-)

diff --git a/.github/trigger_files/beam_PostCommit_Python_Xlang_Gcp_Direct.json 
b/.github/trigger_files/beam_PostCommit_Python_Xlang_Gcp_Direct.json
index e69de29bb2d..8b137891791 100644
--- a/.github/trigger_files/beam_PostCommit_Python_Xlang_Gcp_Direct.json
+++ b/.github/trigger_files/beam_PostCommit_Python_Xlang_Gcp_Direct.json
@@ -0,0 +1 @@
+
diff --git 
a/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/transforms/SchemaTransformProvider.java
 
b/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/transforms/SchemaTransformProvider.java
index c76d7a25e69..9d0ad61b7a6 100644
--- 
a/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/transforms/SchemaTransformProvider.java
+++ 
b/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/transforms/SchemaTransformProvider.java
@@ -17,6 +17,7 @@
  */
 package org.apache.beam.sdk.schemas.transforms;
 
+import java.util.Collections;
 import java.util.List;
 import java.util.Optional;
 import org.apache.beam.sdk.annotations.Internal;
@@ -58,10 +59,14 @@ public interface SchemaTransformProvider {
   SchemaTransform from(Row configuration);
 
   /** Returns the input collection names of this transform. */
-  List<String> inputCollectionNames();
+  default List<String> inputCollectionNames() {
+    return Collections.emptyList();
+  }
 
   /** Returns the output collection names of this transform. */
-  List<String> outputCollectionNames();
+  default List<String> outputCollectionNames() {
+    return Collections.emptyList();
+  }
 
   /**
    * List the dependencies needed for this transform. Jars from classpath are 
used by default when
diff --git 
a/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/transforms/TypedSchemaTransformProvider.java
 
b/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/transforms/TypedSchemaTransformProvider.java
index 1117f59a748..e75fa27d2d1 100644
--- 
a/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/transforms/TypedSchemaTransformProvider.java
+++ 
b/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/transforms/TypedSchemaTransformProvider.java
@@ -17,8 +17,13 @@
  */
 package org.apache.beam.sdk.schemas.transforms;
 
+import static org.apache.beam.sdk.util.Preconditions.checkStateNotNull;
+import static 
org.apache.beam.vendor.guava.v32_1_2_jre.com.google.common.base.Preconditions.checkArgument;
+
+import java.lang.reflect.ParameterizedType;
 import java.util.List;
 import java.util.Optional;
+import javax.annotation.Nullable;
 import org.apache.beam.sdk.annotations.Internal;
 import org.apache.beam.sdk.options.PipelineOptions;
 import org.apache.beam.sdk.schemas.NoSuchSchemaException;
@@ -39,7 +44,20 @@ import org.apache.beam.sdk.values.Row;
 @Internal
 public abstract class TypedSchemaTransformProvider<ConfigT> implements 
SchemaTransformProvider {
 
-  protected abstract Class<ConfigT> configurationClass();
+  @SuppressWarnings("unchecked")
+  protected Class<ConfigT> configurationClass() {
+    @Nullable
+    ParameterizedType parameterizedType = (ParameterizedType) 
getClass().getGenericSuperclass();
+    checkStateNotNull(
+        parameterizedType, "Could not get the TypedSchemaTransformProvider's 
parameterized type.");
+    checkArgument(
+        parameterizedType.getActualTypeArguments().length == 1,
+        String.format(
+            "Expected one parameterized type, but got %s.",
+            parameterizedType.getActualTypeArguments().length));
+
+    return (Class<ConfigT>) parameterizedType.getActualTypeArguments()[0];
+  }
 
   /**
    * Produce a SchemaTransform from ConfigT. Can throw a {@link 
InvalidConfigurationException} or a
diff --git 
a/sdks/java/core/src/test/java/org/apache/beam/sdk/schemas/transforms/TypedSchemaTransformProviderTest.java
 
b/sdks/java/core/src/test/java/org/apache/beam/sdk/schemas/transforms/TypedSchemaTransformProviderTest.java
index 2b698f4f67b..6b5ccbff4e4 100644
--- 
a/sdks/java/core/src/test/java/org/apache/beam/sdk/schemas/transforms/TypedSchemaTransformProviderTest.java
+++ 
b/sdks/java/core/src/test/java/org/apache/beam/sdk/schemas/transforms/TypedSchemaTransformProviderTest.java
@@ -94,6 +94,19 @@ public class TypedSchemaTransformProviderTest {
     }
   }
 
+  private static class FakeMinimalTypedProvider
+      extends TypedSchemaTransformProvider<Configuration> {
+    @Override
+    public String identifier() {
+      return "fake:v1";
+    }
+
+    @Override
+    public SchemaTransform from(Configuration config) {
+      return new FakeSchemaTransform(config);
+    }
+  }
+
   public static class FakeSchemaTransform extends SchemaTransform {
 
     public Configuration config;
@@ -111,6 +124,8 @@ public class TypedSchemaTransformProviderTest {
   @Test
   public void testFrom() {
     SchemaTransformProvider provider = new FakeTypedSchemaIOProvider();
+    SchemaTransformProvider minimalProvider = new FakeMinimalTypedProvider();
+
     Row inputConfig =
         Row.withSchema(provider.configurationSchema())
             .withFieldValue("field1", "field1")
@@ -118,8 +133,13 @@ public class TypedSchemaTransformProviderTest {
             .build();
 
     Configuration outputConfig = ((FakeSchemaTransform) 
provider.from(inputConfig)).config;
-    assertEquals("field1", outputConfig.getField1());
-    assertEquals(13, outputConfig.getField2().intValue());
+    Configuration minimalOutputConfig =
+        ((FakeSchemaTransform) minimalProvider.from(inputConfig)).config;
+
+    for (Configuration config : Arrays.asList(outputConfig, 
minimalOutputConfig)) {
+      assertEquals("field1", config.getField1());
+      assertEquals(13, config.getField2().intValue());
+    }
     assertEquals("Description of fake provider", provider.description());
   }
 
diff --git 
a/sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/bigquery/providers/BigQueryStorageWriteApiSchemaTransformProvider.java
 
b/sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/bigquery/providers/BigQueryStorageWriteApiSchemaTransformProvider.java
index ca0d0a2784b..980d783ec43 100644
--- 
a/sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/bigquery/providers/BigQueryStorageWriteApiSchemaTransformProvider.java
+++ 
b/sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/bigquery/providers/BigQueryStorageWriteApiSchemaTransformProvider.java
@@ -88,11 +88,6 @@ public class BigQueryStorageWriteApiSchemaTransformProvider
   // magic string that tells us to write to dynamic destinations
   protected static final String DYNAMIC_DESTINATIONS = "DYNAMIC_DESTINATIONS";
 
-  @Override
-  protected Class<BigQueryStorageWriteApiSchemaTransformConfiguration> 
configurationClass() {
-    return BigQueryStorageWriteApiSchemaTransformConfiguration.class;
-  }
-
   @Override
   protected SchemaTransform from(
       BigQueryStorageWriteApiSchemaTransformConfiguration configuration) {
diff --git 
a/sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/bigtable/BigtableReadSchemaTransformProvider.java
 
b/sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/bigtable/BigtableReadSchemaTransformProvider.java
index a9f113f1ce9..f48a2355914 100644
--- 
a/sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/bigtable/BigtableReadSchemaTransformProvider.java
+++ 
b/sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/bigtable/BigtableReadSchemaTransformProvider.java
@@ -70,11 +70,6 @@ public class BigtableReadSchemaTransformProvider
                   Schema.FieldType.array(Schema.FieldType.row(CELL_SCHEMA))))
           .build();
 
-  @Override
-  protected Class<BigtableReadSchemaTransformConfiguration> 
configurationClass() {
-    return BigtableReadSchemaTransformConfiguration.class;
-  }
-
   @Override
   protected SchemaTransform from(BigtableReadSchemaTransformConfiguration 
configuration) {
     return new BigtableReadSchemaTransform(configuration);
@@ -85,11 +80,6 @@ public class BigtableReadSchemaTransformProvider
     return "beam:schematransform:org.apache.beam:bigtable_read:v1";
   }
 
-  @Override
-  public List<String> inputCollectionNames() {
-    return Collections.emptyList();
-  }
-
   @Override
   public List<String> outputCollectionNames() {
     return Collections.singletonList(OUTPUT_TAG);
diff --git 
a/sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/bigtable/BigtableWriteSchemaTransformProvider.java
 
b/sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/bigtable/BigtableWriteSchemaTransformProvider.java
index b99b69621a8..cc480be6aa7 100644
--- 
a/sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/bigtable/BigtableWriteSchemaTransformProvider.java
+++ 
b/sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/bigtable/BigtableWriteSchemaTransformProvider.java
@@ -60,11 +60,6 @@ public class BigtableWriteSchemaTransformProvider
 
   private static final String INPUT_TAG = "input";
 
-  @Override
-  protected Class<BigtableWriteSchemaTransformConfiguration> 
configurationClass() {
-    return BigtableWriteSchemaTransformConfiguration.class;
-  }
-
   @Override
   protected SchemaTransform from(BigtableWriteSchemaTransformConfiguration 
configuration) {
     return new BigtableWriteSchemaTransform(configuration);
@@ -80,11 +75,6 @@ public class BigtableWriteSchemaTransformProvider
     return Collections.singletonList(INPUT_TAG);
   }
 
-  @Override
-  public List<String> outputCollectionNames() {
-    return Collections.emptyList();
-  }
-
   /** Configuration for writing to Bigtable. */
   @DefaultSchema(AutoValueSchema.class)
   @AutoValue
diff --git 
a/sdks/java/io/google-cloud-platform/src/test/java/org/apache/beam/sdk/io/gcp/bigquery/providers/BigQueryDirectReadSchemaTransformProviderTest.java
 
b/sdks/java/io/google-cloud-platform/src/test/java/org/apache/beam/sdk/io/gcp/bigquery/providers/BigQueryDirectReadSchemaTransformProviderIT.java
similarity index 99%
rename from 
sdks/java/io/google-cloud-platform/src/test/java/org/apache/beam/sdk/io/gcp/bigquery/providers/BigQueryDirectReadSchemaTransformProviderTest.java
rename to 
sdks/java/io/google-cloud-platform/src/test/java/org/apache/beam/sdk/io/gcp/bigquery/providers/BigQueryDirectReadSchemaTransformProviderIT.java
index 2363a870bbd..958409eb5e3 100644
--- 
a/sdks/java/io/google-cloud-platform/src/test/java/org/apache/beam/sdk/io/gcp/bigquery/providers/BigQueryDirectReadSchemaTransformProviderTest.java
+++ 
b/sdks/java/io/google-cloud-platform/src/test/java/org/apache/beam/sdk/io/gcp/bigquery/providers/BigQueryDirectReadSchemaTransformProviderIT.java
@@ -74,7 +74,7 @@ import org.junit.runner.RunWith;
 import org.junit.runners.JUnit4;
 
 @RunWith(JUnit4.class)
-public class BigQueryDirectReadSchemaTransformProviderTest {
+public class BigQueryDirectReadSchemaTransformProviderIT {
 
   private static PipelineOptions testOptions = 
TestPipeline.testingPipelineOptions();
 
diff --git 
a/sdks/java/io/google-cloud-platform/src/test/java/org/apache/beam/sdk/io/gcp/bigquery/providers/BigQueryStorageWriteApiSchemaTransformProviderTest.java
 
b/sdks/java/io/google-cloud-platform/src/test/java/org/apache/beam/sdk/io/gcp/bigquery/providers/BigQueryStorageWriteApiSchemaTransformProviderIT.java
similarity index 99%
rename from 
sdks/java/io/google-cloud-platform/src/test/java/org/apache/beam/sdk/io/gcp/bigquery/providers/BigQueryStorageWriteApiSchemaTransformProviderTest.java
rename to 
sdks/java/io/google-cloud-platform/src/test/java/org/apache/beam/sdk/io/gcp/bigquery/providers/BigQueryStorageWriteApiSchemaTransformProviderIT.java
index 64ea0b11d1b..8b8a3b75949 100644
--- 
a/sdks/java/io/google-cloud-platform/src/test/java/org/apache/beam/sdk/io/gcp/bigquery/providers/BigQueryStorageWriteApiSchemaTransformProviderTest.java
+++ 
b/sdks/java/io/google-cloud-platform/src/test/java/org/apache/beam/sdk/io/gcp/bigquery/providers/BigQueryStorageWriteApiSchemaTransformProviderIT.java
@@ -61,7 +61,7 @@ import org.junit.runner.RunWith;
 import org.junit.runners.JUnit4;
 
 @RunWith(JUnit4.class)
-public class BigQueryStorageWriteApiSchemaTransformProviderTest {
+public class BigQueryStorageWriteApiSchemaTransformProviderIT {
 
   private FakeDatasetService fakeDatasetService = new FakeDatasetService();
   private FakeJobService fakeJobService = new FakeJobService();

Reply via email to