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

bschuchardt pushed a commit to branch feature/GEODE-6196
in repository https://gitbox.apache.org/repos/asf/geode.git


The following commit(s) were added to refs/heads/feature/GEODE-6196 by this 
push:
     new 46a63e2  selected query tests now working
46a63e2 is described below

commit 46a63e24eae35db7f86115b40817127d79c303ba
Author: Bruce Schuchardt <[email protected]>
AuthorDate: Mon Mar 4 15:41:20 2019 -0800

    selected query tests now working
---
 .../geode/management/QueryDataDUnitTest.java       |   4 +-
 .../management/internal/cli/json/TypedJson.java    | 140 +++++++--------------
 .../internal/cli/json/TypedJsonTest.java           |   4 +-
 3 files changed, 46 insertions(+), 102 deletions(-)

diff --git 
a/geode-core/src/distributedTest/java/org/apache/geode/management/QueryDataDUnitTest.java
 
b/geode-core/src/distributedTest/java/org/apache/geode/management/QueryDataDUnitTest.java
index fa037cd..0d4e292 100644
--- 
a/geode-core/src/distributedTest/java/org/apache/geode/management/QueryDataDUnitTest.java
+++ 
b/geode-core/src/distributedTest/java/org/apache/geode/management/QueryDataDUnitTest.java
@@ -254,7 +254,7 @@ public class QueryDataDUnitTest implements Serializable {
       JSONArray jsonArray1 = jsonArray.getJSONArray(0);
 
       // Get the ObjectValue
-      JSONObject collectionObject = (JSONObject) jsonArray1.get(1);
+      JSONArray collectionObject = (JSONArray) jsonArray1.get(1);
       assertThat(collectionObject.length()).isEqualTo(100);
 
       // Query With Override Values
@@ -284,7 +284,7 @@ public class QueryDataDUnitTest implements Serializable {
       jsonArray1 = jsonArray.getJSONArray(0);
 
       // Get the ObjectValue
-      collectionObject = (JSONObject) jsonArray1.get(1);
+      collectionObject = (JSONArray) jsonArray1.get(1);
       assertThat(collectionObject.length()).isEqualTo(newQueryCollectionDepth);
     });
   }
diff --git 
a/geode-core/src/main/java/org/apache/geode/management/internal/cli/json/TypedJson.java
 
b/geode-core/src/main/java/org/apache/geode/management/internal/cli/json/TypedJson.java
index 5e0a0c7..4e22e69 100644
--- 
a/geode-core/src/main/java/org/apache/geode/management/internal/cli/json/TypedJson.java
+++ 
b/geode-core/src/main/java/org/apache/geode/management/internal/cli/json/TypedJson.java
@@ -26,6 +26,7 @@ import java.util.Map;
 
 import com.fasterxml.jackson.core.JsonGenerator;
 import com.fasterxml.jackson.core.JsonToken;
+import com.fasterxml.jackson.core.type.WritableTypeId;
 import com.fasterxml.jackson.databind.JsonSerializer;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.SerializationFeature;
@@ -58,15 +59,16 @@ public class TypedJson {
   {
     mapper = new ObjectMapper();
     mapperModule = new SimpleModule();
+    // todo: Collection.class is probably too generic. Is there another way to
+    // limit the number of elements generated by Jackson w/o using a 
serializer for Collection?
     mapperModule.addSerializer(Collection.class, new 
TypedJsonCollectionSerializer());
-    mapperModule.addSerializer(Map.class, new TypedJsonMapSerializer());
     mapperModule.addSerializer(PdxInstance.class, new 
TypedJsonPdxInstanceSerializer());
     mapperModule.addSerializer(StructImpl.class, new 
TypedJsonStructSerializer());
     mapperModule.addSerializer(Region.Entry.class, new 
TypedJsonRegionEntrySerializer());
-    // todo: arrays need to be handled & queryCollectionsDepth applied
     mapper.registerModule(mapperModule);
     mapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);
     // todo: we need type information for enums but Jackson doesn't seem to do 
that
+    // -- look at the standard EnumSerializer to see if it can be configured
     mapper.enable(SerializationFeature.WRITE_ENUMS_USING_TO_STRING);
     mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
   }
@@ -157,111 +159,29 @@ public class TypedJson {
     try {
       boolean addComma = false;
       int length = values.size();
-
       writer.write('[');
 
       if (length == 0) {
-        mapper.writeValueAsString(null);
+        mapper.writeValue(writer, null);
       } else {
         for (int i = 0; i < length; i += 1) {
           if (addComma) {
             writer.write(',');
           }
-          mapper.writeValue(writer, values.get(i));
+          // System.out.format("BRUCE: writeList is serializing %s\n", 
values.get(i));
+          mapper.writerFor(values.get(i).getClass()).writeValue(writer, 
values.get(i));
+
           addCommaBeforeNextElement = false;
           addComma = true;
         }
       }
       writer.write(']');
-
-      return writer;
     } catch (IOException e) {
       throw new GfJsonException(e);
     }
+    return writer;
   }
 
-  private String quote(String string) {
-    StringWriter sw = new StringWriter();
-    synchronized (sw.getBuffer()) {
-      try {
-        return quote(string, sw).toString();
-      } catch (IOException ignored) {
-        // will never happen - we are writing to a string writer
-        return "";
-      }
-    }
-  }
-
-
-  /**
-   * Handle some special GemFire classes. We don't want to expose some of the 
internal classes.
-   * Hence corresponding interface or external classes should be shown.
-   */
-  private String internalToExternal(Class clazz, Object value) {
-    if (value != null && value instanceof Region.Entry) {
-      return Region.Entry.class.getCanonicalName();
-    }
-    if (value != null && value instanceof PdxInstance) {
-      return PdxInstance.class.getCanonicalName();
-    }
-    return clazz.getCanonicalName();
-  }
-
-  private Writer quote(String string, Writer w) throws IOException {
-    if (string == null || string.length() == 0) {
-      w.write("\"\"");
-      return w;
-    }
-
-    char b;
-    char c = 0;
-    String hhhh;
-    int i;
-    int len = string.length();
-
-    w.write('"');
-    for (i = 0; i < len; i += 1) {
-      b = c;
-      c = string.charAt(i);
-      switch (c) {
-        case '\\':
-        case '"':
-          w.write('\\');
-          w.write(c);
-          break;
-        case '/':
-          if (b == '<') {
-            w.write('\\');
-          }
-          w.write(c);
-          break;
-        case '\b':
-          w.write("\\b");
-          break;
-        case '\t':
-          w.write("\\t");
-          break;
-        case '\n':
-          w.write("\\n");
-          break;
-        case '\f':
-          w.write("\\f");
-          break;
-        case '\r':
-          w.write("\\r");
-          break;
-        default:
-          if (c < ' ' || (c >= '\u0080' && c < '\u00a0') || (c >= '\u2000' && 
c < '\u2100')) {
-            hhhh = "000" + Integer.toHexString(c);
-            w.write("\\u" + hhhh.substring(hhhh.length() - 4));
-          } else {
-            w.write(c);
-          }
-      }
-    }
-    w.write('"');
-    return w;
-  }
 
 
   class TypedJsonCollectionSerializer extends JsonSerializer<Collection> {
@@ -269,9 +189,12 @@ public class TypedJson {
     public void serializeWithType(Collection value, JsonGenerator gen,
         SerializerProvider serializers, TypeSerializer typeSer)
         throws IOException {
-      typeSer.writeTypePrefix(gen, typeSer.typeId(value, 
JsonToken.START_OBJECT));
+      gen.setCurrentValue(value);
+      boolean isArray = value.getClass().isArray();
+      WritableTypeId typeIdDef = typeSer.writeTypePrefix(gen,
+          typeSer.typeId(value, JsonToken.START_ARRAY));
       _serialize(value, gen);
-      typeSer.writeTypeSuffix(gen, typeSer.typeId(value, 
JsonToken.START_OBJECT));
+      typeSer.writeTypeSuffix(gen, typeIdDef);
     }
 
     @Override
@@ -283,9 +206,13 @@ public class TypedJson {
     }
 
     public void _serialize(Collection value, JsonGenerator gen) throws 
IOException {
+      // System.out.println("BRUCE: collection serializer starting for 
collection " + value);
       Iterator<Object> objects = value.iterator();
       for (int i = 0; i < maxCollectionElements && objects.hasNext(); i++) {
-        gen.writeObjectField("" + i, objects.next());
+        Object nextObject = objects.next();
+        // System.out.format("BRUCE: collection serializer writing #%s: %s\n", 
i, nextObject);
+        gen.writeObject(nextObject);
+        // System.out.println("BRUCE: collection serializer done writing #" + 
i);
       }
     }
 
@@ -296,13 +223,18 @@ public class TypedJson {
   }
 
   class TypedJsonMapSerializer extends JsonSerializer<Map> {
+
     @Override
     public void serializeWithType(Map value, JsonGenerator gen,
         SerializerProvider serializers, TypeSerializer typeSer)
         throws IOException {
-      typeSer.writeTypePrefix(gen, typeSer.typeId(value, 
JsonToken.START_OBJECT));
+      gen.setCurrentValue(value);
+      WritableTypeId typeIdDef = typeSer.writeTypePrefix(gen,
+          typeSer.typeId(value, JsonToken.START_OBJECT));
+      // typeSer.writeTypePrefix(gen, typeSer.typeId(value, 
JsonToken.START_ARRAY));
       _serialize(value, gen);
-      typeSer.writeTypeSuffix(gen, typeSer.typeId(value, 
JsonToken.START_OBJECT));
+      // typeSer.writeTypeSuffix(gen, typeSer.typeId(value, 
JsonToken.START_ARRAY));
+      typeSer.writeTypeSuffix(gen, typeIdDef);
     }
 
     @Override
@@ -317,7 +249,18 @@ public class TypedJson {
       Iterator<Map.Entry> entries = value.entrySet().iterator();
       for (int i = 0; i < maxCollectionElements && entries.hasNext(); i++) {
         Map.Entry entry = entries.next();
-        gen.writeObjectField(entry.getKey().toString(), entry.getValue());
+        // System.out.format("BRUCE: map serializer writing key %s value %s 
value class %s\n",
+        // entry.getKey(), entry.getValue(), 
entry.getValue().getClass().getName());
+        // gen.writeObjectField(entry.getKey().toString(), entry.getValue());
+        // try {
+        gen.writeFieldName(entry.getKey().toString());
+        gen.writeObject(entry.getValue());
+        // } catch (JsonGenerationException e) {
+        // System.out.println("BRUCE: exception serializing value for " +
+        // entry.getKey().toString());
+        // throw e;
+        // }
+        // System.out.println("BRUCE: map serializer done writing key " + 
entry.getKey());
       }
     }
 
@@ -332,9 +275,10 @@ public class TypedJson {
     public void serializeWithType(PdxInstance value, JsonGenerator gen,
         SerializerProvider serializers, TypeSerializer typeSer)
         throws IOException {
-      typeSer.writeTypePrefix(gen, typeSer.typeId(value, 
JsonToken.START_OBJECT));
+      WritableTypeId writableTypeId = typeSer.typeId(value, 
JsonToken.START_OBJECT);
+      typeSer.writeTypePrefix(gen, writableTypeId);
       _serialize(value, gen);
-      typeSer.writeTypeSuffix(gen, typeSer.typeId(value, 
JsonToken.START_OBJECT));
+      typeSer.writeTypeSuffix(gen, writableTypeId);
     }
 
     @Override
@@ -363,7 +307,7 @@ public class TypedJson {
         SerializerProvider serializers, TypeSerializer typeSer)
         throws IOException {
       typeSer.writeTypePrefix(gen, typeSer.typeId(value, 
JsonToken.START_OBJECT));
-      serialize(value, gen, serializers);
+      _serialize(value, gen);
       typeSer.writeTypeSuffix(gen, typeSer.typeId(value, 
JsonToken.START_OBJECT));
     }
 
diff --git 
a/geode-core/src/test/java/org/apache/geode/management/internal/cli/json/TypedJsonTest.java
 
b/geode-core/src/test/java/org/apache/geode/management/internal/cli/json/TypedJsonTest.java
index 74a2e0a..9a6996d 100644
--- 
a/geode-core/src/test/java/org/apache/geode/management/internal/cli/json/TypedJsonTest.java
+++ 
b/geode-core/src/test/java/org/apache/geode/management/internal/cli/json/TypedJsonTest.java
@@ -139,8 +139,8 @@ public class TypedJsonTest {
   public void testObjects() throws Exception {
     Object object = new Object();
 
-    TypedJson typedJson = new TypedJson(RESULT, object, 100);
-
+    TypedJson typedJson = new TypedJson(100);
+    typedJson.add(RESULT, object);
     checkResult(typedJson);
   }
 

Reply via email to