private JsonNode getDefault()

in lang/java/protobuf/src/main/java/org/apache/avro/protobuf/ProtobufData.java [329:381]


  private JsonNode getDefault(FieldDescriptor f) {
    if (f.isRequired()) // no default
      return null;

    if (f.isRepeated()) // empty array as repeated fields' default value
      return NODES.arrayNode();

    if (f.hasDefaultValue()) { // parse spec'd default value
      Object value = f.getDefaultValue();
      switch (f.getType()) {
      case ENUM:
        value = ((EnumValueDescriptor) value).getName();
        break;
      }
      String json = toString(value);
      try {
        return MAPPER.readTree(FACTORY.createParser(json));
      } catch (IOException e) {
        throw new RuntimeException(e);
      }
    }

    switch (f.getType()) { // generate default for type
    case BOOL:
      return NODES.booleanNode(false);
    case FLOAT:
      return NODES.numberNode(0.0F);
    case DOUBLE:
      return NODES.numberNode(0.0D);
    case INT32:
    case UINT32:
    case SINT32:
    case FIXED32:
    case SFIXED32:
    case INT64:
    case UINT64:
    case SINT64:
    case FIXED64:
    case SFIXED64:
      return NODES.numberNode(0);
    case STRING:
    case BYTES:
      return NODES.textNode("");
    case ENUM:
      return NODES.textNode(f.getEnumType().getValues().get(0).getName());
    case MESSAGE:
      return NODES.nullNode();
    case GROUP: // groups are deprecated
    default:
      throw new RuntimeException("Unexpected type: " + f.getType());
    }

  }