private static void jsonMove()

in ingestion-beam/src/main/java/com/mozilla/telemetry/decoder/ParsePayload.java [454:480]


  private static void jsonMove(ObjectNode json, ObjectNode subsetJson, ObjectSchema subsetSchema,
      boolean isRoot) {
    if (isRoot) {
      for (String propertyName : additionalMetadataFields) {
        if (json.has(propertyName)) {
          subsetJson.set(propertyName, json.get(propertyName));
        }
      }
    }
    // for now only support moving explicitly defined properties, with no additional properties
    subsetSchema.getPropertySchemas().forEach((propertyName, propertySchema) -> {
      if (json.has(propertyName)) {
        if (propertySchema instanceof ObjectSchema) {
          if (json.path(propertyName).isObject()) {
            ObjectNode obj = Json.createObjectNode();
            subsetJson.set(propertyName, obj);
            jsonMove((ObjectNode) json.path(propertyName), obj, (ObjectSchema) propertySchema,
                false);
          }
        } else if (!isRoot || !additionalMetadataFields.contains(propertyName)) {
          // don't remove additionalMetadataFields from json.
          // only support recursing into object schemas.
          subsetJson.set(propertyName, json.remove(propertyName));
        }
      }
    });
  }