This is an automated email from the ASF dual-hosted git repository. jensdeppe pushed a commit to branch develop in repository https://gitbox.apache.org/repos/asf/geode.git
The following commit(s) were added to refs/heads/develop by this push: new 527e346 GEODE-5247: Gfsh query results contain json instead of object references (#1985) 527e346 is described below commit 527e346334b1fc35e6cb8813ed3a48f58a5d11c4 Author: Jens Deppe <jde...@pivotal.io> AuthorDate: Wed May 23 14:52:41 2018 -0700 GEODE-5247: Gfsh query results contain json instead of object references (#1985) --- .../internal/cli/domain/DataCommandResult.java | 26 ++++++++++++++++++++-- .../cli/commands/QueryCommandIntegrationTest.java | 23 ++++++++++++++----- 2 files changed, 41 insertions(+), 8 deletions(-) diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/domain/DataCommandResult.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/domain/DataCommandResult.java index 3f9f533..97a3451 100644 --- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/domain/DataCommandResult.java +++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/domain/DataCommandResult.java @@ -36,6 +36,7 @@ import org.apache.geode.management.internal.cli.i18n.CliStrings; import org.apache.geode.management.internal.cli.result.model.DataResultModel; import org.apache.geode.management.internal.cli.result.model.ResultModel; import org.apache.geode.management.internal.cli.result.model.TabularResultModel; +import org.apache.geode.pdx.JSONFormatter; import org.apache.geode.pdx.PdxInstance; @@ -702,13 +703,34 @@ public class DataCommandResult implements Serializable { private void resolvePdxToColumns(Map<String, String> columnData, PdxInstance pdx) { for (String field : pdx.getFieldNames()) { - columnData.put(field, pdx.getField(field).toString()); + columnData.put(field, valueToJson(pdx.getField(field))); } } private void resolveStructToColumns(Map<String, String> columnData, StructImpl struct) { for (String field : struct.getFieldNames()) { - columnData.put(field, struct.get(field).toString()); + columnData.put(field, valueToJson(struct.get(field))); + } + } + + private String valueToJson(Object value) { + if (value == null) { + return "null"; + } + + if (value instanceof String) { + return (String) value; + } + + if (value instanceof PdxInstance) { + return JSONFormatter.toJSON((PdxInstance) value); + } + + ObjectMapper mapper = new ObjectMapper(); + try { + return mapper.writeValueAsString(value); + } catch (JsonProcessingException jex) { + return jex.getMessage(); } } } diff --git a/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/QueryCommandIntegrationTest.java b/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/QueryCommandIntegrationTest.java index fc0b08b..4fc6050 100644 --- a/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/QueryCommandIntegrationTest.java +++ b/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/QueryCommandIntegrationTest.java @@ -72,7 +72,7 @@ public class QueryCommandIntegrationTest { String key = "key" + i; simpleRegion.put(key, "value" + i); - complexRegion.put(key, new Customer("name" + i, "address" + i)); + complexRegion.put(key, new Customer("name" + i, "Main Street " + i, "Hometown")); } } @@ -177,7 +177,7 @@ public class QueryCommandIntegrationTest { assertThat(lines.get(4)).containsPattern("name\\s+\\|\\s+address"); lines.subList(6, lines.size()) - .forEach(line -> assertThat(line).matches("name\\d+\\s+\\|\\s+address\\d+")); + .forEach(line -> assertThat(line).matches("name\\d+.*\"city\":\"Hometown\".*")); } @Test @@ -191,7 +191,7 @@ public class QueryCommandIntegrationTest { assertThat(resultLines[2]).containsPattern("Rows\\s+:\\s+100"); assertThat(resultLines[3]).containsPattern("name\\s+\\|\\s+address"); Arrays.asList(resultLines).subList(5, resultLines.length) - .forEach(line -> assertThat(line).matches("name\\d+\\s+\\|\\s+address\\d+")); + .forEach(line -> assertThat(line).matches("name\\d+.*\"city\":\"Hometown\".*")); } @Test @@ -259,15 +259,26 @@ public class QueryCommandIntegrationTest { public static class Customer implements Serializable { public String name; - public String address; + public Address address; - public Customer(String name, String address) { + public Customer(String name, String street, String city) { this.name = name; - this.address = address; + this.address = new Address(street, city); } public String toString() { return name + address; } } + + public static class Address implements Serializable { + public String street; + public String city; + + public Address(String street, String city) { + this.street = street; + this.city = city; + } + } + } -- To stop receiving notification emails like this one, please contact jensde...@apache.org.