public Schema toConnectSchema()

in jsonschema-kafkaconnect-converter/src/main/java/com/amazonaws/services/schemaregistry/kafkaconnect/jsonschema/JsonSchemaToConnectSchemaConverter.java [66:115]


    public Schema toConnectSchema(org.everit.json.schema.Schema jsonSchema,
                                  Boolean required) {
        if (jsonSchema == null || NullSchema.INSTANCE.equals(jsonSchema)) {
            return null;
        }

        Schema cached = toConnectSchemaCache.get(jsonSchema);
        if (cached != null) {
            return cached;
        }

        final SchemaBuilder builder;
        String connectType = (String) jsonSchema.getUnprocessedProperties()
                .get(JsonSchemaConverterConstants.CONNECT_TYPE_PROP);
        String connectName = (String) jsonSchema.getUnprocessedProperties()
                .get(JsonSchemaConverterConstants.CONNECT_NAME_PROP);

        TypeConverter typeConverter = typeConverterFactory.get(jsonSchema, connectType);

        if (typeConverter != null) {
            builder = typeConverter.toConnectSchema(jsonSchema, jsonSchemaDataConfig);
        } else if (jsonSchema instanceof CombinedSchema) {
            CombinedSchema combinedSchema = (CombinedSchema) jsonSchema;
            Collection<org.everit.json.schema.Schema> subSchemas = combinedSchema.getSubschemas();
            CombinedSchema.ValidationCriterion criterion = combinedSchema.getCriterion();

            boolean hasNullSchema = subSchemas.stream()
                    .anyMatch(schema -> schema instanceof NullSchema);

            boolean isOptionalUnion =
                    CombinedSchema.ONE_CRITERION.equals(criterion) && subSchemas.size() == 2 && hasNullSchema;
            if (isOptionalUnion) {
                return buildOptionalUnionSchema(subSchemas);
            }

            builder = buildNonOptionalUnionSchema(subSchemas, hasNullSchema);
        } else if (jsonSchema instanceof ReferenceSchema) {
            ReferenceSchema refSchema = (ReferenceSchema) jsonSchema;
            return toConnectSchema(refSchema.getReferredSchema(), required);
        } else {
            throw new DataException("Unsupported schema type " + jsonSchema.getClass()
                    .getName());
        }

        populateConnectProperties(builder, jsonSchema, required, connectName);

        Schema result = builder.build();
        toConnectSchemaCache.put(jsonSchema, result);
        return result;
    }