All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.fibanez.jsonschema.content.generator.SchemaGenerator Maven / Gradle / Ivy

package com.fibanez.jsonschema.content.generator;


import com.fibanez.jsonschema.content.Context;
import com.fibanez.jsonschema.content.generator.util.ReflectionUtils;
import lombok.NonNull;
import org.everit.json.schema.Schema;

import java.util.Optional;
import java.util.function.Supplier;

@FunctionalInterface
public interface SchemaGenerator {

    Object generate(@NonNull S schema, JsonNode jsonNode);

    @SuppressWarnings("unchecked")
    default Class schemaType() {
        return (Class) ReflectionUtils.getClassType(this.getClass());
    }

    @SuppressWarnings("unchecked")
    default Object generateFrom(@NonNull Schema schema, @NonNull JsonNode jsonNode) {
        // Generates from predefined values generator if exists
        Optional> valueGenerator = Context.getPredefinedValueGenerator(jsonNode);
        if (valueGenerator.isPresent()) {
            return valueGenerator.get().get();
        }

        // Generates from schema generator
        SchemaGenerator innerGenerator = Context.getSchemaGenerator(schema.getClass());
        return innerGenerator.generate(schema, jsonNode);
    }

    default  T getOrDefault(T value, T defaultValue) {
        return (value != null) ? value : defaultValue;
    }
}