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.

Reply via email to