Add property name to RuntimeValueProvider
Project: http://git-wip-us.apache.org/repos/asf/incubator-beam/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-beam/commit/462a6417 Tree: http://git-wip-us.apache.org/repos/asf/incubator-beam/tree/462a6417 Diff: http://git-wip-us.apache.org/repos/asf/incubator-beam/diff/462a6417 Branch: refs/heads/gearpump-runner Commit: 462a6417e925e2defb42d87191fb97353637ce7e Parents: 43beb1e Author: sammcveety <[email protected]> Authored: Fri Oct 14 13:41:33 2016 -0400 Committer: Dan Halperin <[email protected]> Committed: Mon Oct 24 08:15:05 2016 -0700 ---------------------------------------------------------------------- .../beam/sdk/options/ProxyInvocationHandler.java | 7 +++++-- .../org/apache/beam/sdk/options/ValueProvider.java | 17 ++++++++++++++--- .../apache/beam/sdk/options/ValueProviderTest.java | 7 +++++++ 3 files changed, 26 insertions(+), 5 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-beam/blob/462a6417/sdks/java/core/src/main/java/org/apache/beam/sdk/options/ProxyInvocationHandler.java ---------------------------------------------------------------------- diff --git a/sdks/java/core/src/main/java/org/apache/beam/sdk/options/ProxyInvocationHandler.java b/sdks/java/core/src/main/java/org/apache/beam/sdk/options/ProxyInvocationHandler.java index 3e74916..f7c6da2 100644 --- a/sdks/java/core/src/main/java/org/apache/beam/sdk/options/ProxyInvocationHandler.java +++ b/sdks/java/core/src/main/java/org/apache/beam/sdk/options/ProxyInvocationHandler.java @@ -493,12 +493,15 @@ class ProxyInvocationHandler implements InvocationHandler { } } if (method.getReturnType().equals(ValueProvider.class)) { + String propertyName = gettersToPropertyNames.get(method.getName()); return defaultObject == null ? new RuntimeValueProvider( - method.getName(), (Class<? extends PipelineOptions>) method.getDeclaringClass(), + method.getName(), propertyName, + (Class<? extends PipelineOptions>) method.getDeclaringClass(), proxy.getOptionsId()) : new RuntimeValueProvider( - method.getName(), (Class<? extends PipelineOptions>) method.getDeclaringClass(), + method.getName(), propertyName, + (Class<? extends PipelineOptions>) method.getDeclaringClass(), defaultObject, proxy.getOptionsId()); } else if (defaultObject != null) { return defaultObject; http://git-wip-us.apache.org/repos/asf/incubator-beam/blob/462a6417/sdks/java/core/src/main/java/org/apache/beam/sdk/options/ValueProvider.java ---------------------------------------------------------------------- diff --git a/sdks/java/core/src/main/java/org/apache/beam/sdk/options/ValueProvider.java b/sdks/java/core/src/main/java/org/apache/beam/sdk/options/ValueProvider.java index 04b6926..3f35a18 100644 --- a/sdks/java/core/src/main/java/org/apache/beam/sdk/options/ValueProvider.java +++ b/sdks/java/core/src/main/java/org/apache/beam/sdk/options/ValueProvider.java @@ -108,6 +108,7 @@ public interface ValueProvider<T> { private final Class<? extends PipelineOptions> klass; private final String methodName; + private final String propertyName; @Nullable private final T defaultValue; private final Long optionsId; @@ -116,9 +117,10 @@ public interface ValueProvider<T> { * Creates a {@link RuntimeValueProvider} that will query the provided * {@code optionsId} for a value. */ - RuntimeValueProvider(String methodName, Class<? extends PipelineOptions> klass, - Long optionsId) { + RuntimeValueProvider(String methodName, String propertyName, + Class<? extends PipelineOptions> klass, Long optionsId) { this.methodName = methodName; + this.propertyName = propertyName; this.klass = klass; this.defaultValue = null; this.optionsId = optionsId; @@ -128,9 +130,11 @@ public interface ValueProvider<T> { * Creates a {@link RuntimeValueProvider} that will query the provided * {@code optionsId} for a value, or use the default if no value is available. */ - RuntimeValueProvider(String methodName, Class<? extends PipelineOptions> klass, + RuntimeValueProvider(String methodName, String propertyName, + Class<? extends PipelineOptions> klass, T defaultValue, Long optionsId) { this.methodName = methodName; + this.propertyName = propertyName; this.klass = klass; this.defaultValue = defaultValue; this.optionsId = optionsId; @@ -167,6 +171,13 @@ public interface ValueProvider<T> { PipelineOptions options = optionsMap.get(optionsId); return options != null; } + + /** + * Returns the property name that corresponds to this provider. + */ + public String propertyName() { + return propertyName; + } } /** http://git-wip-us.apache.org/repos/asf/incubator-beam/blob/462a6417/sdks/java/core/src/test/java/org/apache/beam/sdk/options/ValueProviderTest.java ---------------------------------------------------------------------- diff --git a/sdks/java/core/src/test/java/org/apache/beam/sdk/options/ValueProviderTest.java b/sdks/java/core/src/test/java/org/apache/beam/sdk/options/ValueProviderTest.java index 0d93b31..c9eb479 100644 --- a/sdks/java/core/src/test/java/org/apache/beam/sdk/options/ValueProviderTest.java +++ b/sdks/java/core/src/test/java/org/apache/beam/sdk/options/ValueProviderTest.java @@ -98,6 +98,13 @@ public class ValueProviderTest { } @Test + public void testRuntimePropertyName() { + TestOptions options = PipelineOptionsFactory.as(TestOptions.class); + ValueProvider<String> provider = options.getFoo(); + assertEquals("foo", ((RuntimeValueProvider) provider).propertyName()); + } + + @Test public void testDefaultRuntimeProvider() { TestOptions options = PipelineOptionsFactory.as(TestOptions.class); ValueProvider<String> provider = options.getBar();
