private SchemaFieldType constructSchemaFieldType()

in rest/src/main/java/com/epam/eco/schemacatalog/rest/utils/SchemaProfileCreator.java [114:171]


    private SchemaFieldType constructSchemaFieldType(Schema parentSchema, Schema fieldSchema) {
        Schema.Type type = fieldSchema.getType();
        String logicalType =
                fieldSchema.getLogicalType() != null ?
                        fieldSchema.getLogicalType().getName() :
                        null;

        if (AvroUtils.isPrimitive(type)) {
            return PrimitiveSchemaFieldType.builder()
                    .type(type)
                    .logicalType(logicalType)
                    .build();
        }
        if (AvroUtils.isNamed(type)) {
            return NamedSchemaFieldType.builder()
                    .type(type)
                    .logicalType(logicalType)
                    .namespace(Objects.equals(
                            fieldSchema.getNamespace(),
                            parentSchema.getNamespace()) ? null : fieldSchema.getNamespace())
                    .name(fieldSchema.getName())
                    .build();
        }
        if (AvroUtils.isParametrized(type)) {
            if (type == Schema.Type.ARRAY) {
                return ParameterizedSchemaFieldType.builder()
                        .type(type)
                        .logicalType(logicalType)
                        .parameters(
                                Collections.singletonList(
                                        constructSchemaFieldType(parentSchema, fieldSchema.getElementType())))
                        .build();
            }
            if (type == Schema.Type.MAP) {
                List<SchemaFieldType> parameters = new ArrayList<>();
                parameters.add(STRING_FIELD_TYPE);
                parameters.add(constructSchemaFieldType(parentSchema, fieldSchema.getValueType()));
                return ParameterizedSchemaFieldType.builder()
                        .type(type)
                        .logicalType(logicalType)
                        .parameters(parameters)
                        .build();
            }
            if (type == Schema.Type.UNION) {
                List<Schema> types = fieldSchema.getTypes();
                List<SchemaFieldType> parameters = new ArrayList<>(types.size());
                for (Schema unionSchema : types) {
                    parameters.add(constructSchemaFieldType(parentSchema, unionSchema));
                }
                return ParameterizedSchemaFieldType.builder()
                        .type(type)
                        .logicalType(logicalType)
                        .parameters(parameters)
                        .build();
            }
        }
        throw new IllegalArgumentException("Schema type is unknown");
    }