You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@beam.apache.org by bc...@apache.org on 2016/05/11 16:31:12 UTC
[5/9] incubator-beam git commit: Exclude JsonIgnore PipelineOptions
from DisplayData
Exclude JsonIgnore PipelineOptions from DisplayData
Project: http://git-wip-us.apache.org/repos/asf/incubator-beam/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-beam/commit/43085f7e
Tree: http://git-wip-us.apache.org/repos/asf/incubator-beam/tree/43085f7e
Diff: http://git-wip-us.apache.org/repos/asf/incubator-beam/diff/43085f7e
Branch: refs/heads/master
Commit: 43085f7e53e693202ab91768a7f3688fc54f24ee
Parents: 0dab643
Author: Scott Wegner <sw...@google.com>
Authored: Tue May 3 14:10:59 2016 -0700
Committer: bchambers <bc...@google.com>
Committed: Tue May 10 16:21:27 2016 -0700
----------------------------------------------------------------------
.../beam/sdk/options/PipelineOptionSpec.java | 61 +++++---------------
.../sdk/options/ProxyInvocationHandler.java | 10 ++++
.../options/PipelineOptionsReflectorTest.java | 32 ++++++++++
.../sdk/options/ProxyInvocationHandlerTest.java | 9 +++
4 files changed, 65 insertions(+), 47 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-beam/blob/43085f7e/sdks/java/core/src/main/java/org/apache/beam/sdk/options/PipelineOptionSpec.java
----------------------------------------------------------------------
diff --git a/sdks/java/core/src/main/java/org/apache/beam/sdk/options/PipelineOptionSpec.java b/sdks/java/core/src/main/java/org/apache/beam/sdk/options/PipelineOptionSpec.java
index 71f9d46..9a88f70 100644
--- a/sdks/java/core/src/main/java/org/apache/beam/sdk/options/PipelineOptionSpec.java
+++ b/sdks/java/core/src/main/java/org/apache/beam/sdk/options/PipelineOptionSpec.java
@@ -17,73 +17,40 @@
*/
package org.apache.beam.sdk.options;
-import com.google.common.base.MoreObjects;
-import com.google.common.base.Objects;
+import com.google.auto.value.AutoValue;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
import java.lang.reflect.Method;
/**
* For internal use. Specification for an option defined in a {@link PipelineOptions} interface.
*/
-class PipelineOptionSpec {
- private final Class<? extends PipelineOptions> clazz;
- private final String name;
- private final Method getter;
-
+@AutoValue
+abstract class PipelineOptionSpec {
static PipelineOptionSpec of(Class<? extends PipelineOptions> clazz, String name, Method getter) {
- return new PipelineOptionSpec(clazz, name, getter);
- }
-
- private PipelineOptionSpec(Class<? extends PipelineOptions> clazz, String name, Method getter) {
- this.clazz = clazz;
- this.name = name;
- this.getter = getter;
+ return new AutoValue_PipelineOptionSpec(clazz, name, getter);
}
/**
* The {@link PipelineOptions} interface which defines this {@link PipelineOptionSpec}.
*/
- Class<? extends PipelineOptions> getDefiningInterface() {
- return clazz;
- }
+ abstract Class<? extends PipelineOptions> getDefiningInterface();
/**
* Name of the property.
*/
- String getName() {
- return name;
- }
+ abstract String getName();
/**
* The getter method for this property.
*/
- Method getGetterMethod() {
- return getter;
- }
+ abstract Method getGetterMethod();
- @Override
- public String toString() {
- return MoreObjects.toStringHelper(this)
- .add("definingInterface", getDefiningInterface())
- .add("name", getName())
- .add("getterMethod", getGetterMethod())
- .toString();
- }
-
- @Override
- public int hashCode() {
- return Objects.hashCode(getDefiningInterface(), getName(), getGetterMethod());
- }
-
- @Override
- public boolean equals(Object obj) {
- if (!(obj instanceof PipelineOptionSpec)) {
- return false;
- }
-
- PipelineOptionSpec that = (PipelineOptionSpec) obj;
- return Objects.equal(this.getDefiningInterface(), that.getDefiningInterface())
- && Objects.equal(this.getName(), that.getName())
- && Objects.equal(this.getGetterMethod(), that.getGetterMethod());
+ /**
+ * Whether the option should be serialized. Uses the {@link JsonIgnore} annotation.
+ */
+ boolean shouldSerialize() {
+ return !getGetterMethod().isAnnotationPresent(JsonIgnore.class);
}
}
http://git-wip-us.apache.org/repos/asf/incubator-beam/blob/43085f7e/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 745549f..159eb5b 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
@@ -281,6 +281,12 @@ class ProxyInvocationHandler implements InvocationHandler {
HashSet<PipelineOptionSpec> specs = new HashSet<>(optionsMap.get(option.getKey()));
for (PipelineOptionSpec optionSpec : specs) {
+ if (!optionSpec.shouldSerialize()) {
+ // Options that are excluded for serialization (i.e. those with @JsonIgnore) are also
+ // excluded from display data. These options are generally not useful for display.
+ continue;
+ }
+
Class<?> pipelineInterface = optionSpec.getDefiningInterface();
if (type != null) {
builder.add(DisplayData.item(option.getKey(), type, value)
@@ -304,6 +310,10 @@ class ProxyInvocationHandler implements InvocationHandler {
.withNamespace(UnknownPipelineOptions.class));
} else {
for (PipelineOptionSpec spec : specs) {
+ if (!spec.shouldSerialize()) {
+ continue;
+ }
+
Object value = getValueFromJson(jsonOption.getKey(), spec.getGetterMethod());
DisplayData.Type type = DisplayData.inferType(value);
if (type != null) {
http://git-wip-us.apache.org/repos/asf/incubator-beam/blob/43085f7e/sdks/java/core/src/test/java/org/apache/beam/sdk/options/PipelineOptionsReflectorTest.java
----------------------------------------------------------------------
diff --git a/sdks/java/core/src/test/java/org/apache/beam/sdk/options/PipelineOptionsReflectorTest.java b/sdks/java/core/src/test/java/org/apache/beam/sdk/options/PipelineOptionsReflectorTest.java
index 82f0329..8f801c7 100644
--- a/sdks/java/core/src/test/java/org/apache/beam/sdk/options/PipelineOptionsReflectorTest.java
+++ b/sdks/java/core/src/test/java/org/apache/beam/sdk/options/PipelineOptionsReflectorTest.java
@@ -20,12 +20,15 @@ package org.apache.beam.sdk.options;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.allOf;
+import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.hasItem;
import static org.hamcrest.Matchers.is;
import static org.hamcrest.Matchers.isOneOf;
import static org.hamcrest.Matchers.not;
import com.google.common.collect.ImmutableSet;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
import org.hamcrest.FeatureMatcher;
import org.hamcrest.Matcher;
import org.hamcrest.Matchers;
@@ -130,6 +133,24 @@ public class PipelineOptionsReflectorTest {
}
@Test
+ public void testShouldSerialize() {
+ Set<PipelineOptionSpec> properties =
+ PipelineOptionsReflector.getOptionSpecs(JsonIgnoreOptions.class);
+
+ assertThat(properties, hasItem(allOf(hasName("notIgnored"), shouldSerialize())));
+ assertThat(properties, hasItem(allOf(hasName("ignored"), not(shouldSerialize()))));
+ }
+
+ interface JsonIgnoreOptions extends PipelineOptions {
+ String getNotIgnored();
+ void setNotIgnored(String value);
+
+ @JsonIgnore
+ String getIgnored();
+ void setIgnored(String value);
+ }
+
+ @Test
public void testMultipleInputInterfaces() {
Set<Class<? extends PipelineOptions>> interfaces =
ImmutableSet.<Class<? extends PipelineOptions>>of(
@@ -193,4 +214,15 @@ public class PipelineOptionsReflectorTest {
}
};
}
+
+ private static Matcher<PipelineOptionSpec> shouldSerialize() {
+ return new FeatureMatcher<PipelineOptionSpec, Boolean>(equalTo(true),
+ "should serialize", "shouldSerialize") {
+
+ @Override
+ protected Boolean featureValueOf(PipelineOptionSpec actual) {
+ return actual.shouldSerialize();
+ }
+ };
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-beam/blob/43085f7e/sdks/java/core/src/test/java/org/apache/beam/sdk/options/ProxyInvocationHandlerTest.java
----------------------------------------------------------------------
diff --git a/sdks/java/core/src/test/java/org/apache/beam/sdk/options/ProxyInvocationHandlerTest.java b/sdks/java/core/src/test/java/org/apache/beam/sdk/options/ProxyInvocationHandlerTest.java
index b53000d..228a6ba 100644
--- a/sdks/java/core/src/test/java/org/apache/beam/sdk/options/ProxyInvocationHandlerTest.java
+++ b/sdks/java/core/src/test/java/org/apache/beam/sdk/options/ProxyInvocationHandlerTest.java
@@ -951,4 +951,13 @@ public class ProxyInvocationHandlerTest {
String value = MAPPER.writeValueAsString(options);
return MAPPER.readValue(value, PipelineOptions.class).as(kls);
}
+
+ @Test
+ public void testDisplayDataExcludesJsonIgnoreOptions() {
+ IgnoredProperty options = PipelineOptionsFactory.as(IgnoredProperty.class);
+ options.setValue("foobar");
+
+ DisplayData data = DisplayData.from(options);
+ assertThat(data, not(hasDisplayItem(hasKey("value"))));
+ }
}