protected String asType()

in johnzon-jsonschema/src/main/java/org/apache/johnzon/jsonschema/generator/PojoGenerator.java [247:344]


    protected String asType(final String javaName, final JsonObject schema, final boolean required) {
        final JsonValue ref = schema.get("$ref");
        if (ref != null && ref.getValueType() == JsonValue.ValueType.STRING) {
            final String name = onRef(new Ref(
                    JsonString.class.cast(ref).getString(), configuration.getClassName(), imports, attributes, nested));
            if (name != null) {
                return name;
            }
        }

        final JsonValue value = schema.get("type");
        String type;
        if (value == null) {
            if (schema.containsKey("properties") || schema.containsKey("additionalProperties")) {
                type = "object";
            } else if (schema.containsKey("items")) {
                type = "array";
            } else { // unknown, don't fail for wrongly written schema
                imports.add(JsonValue.class.getName());
                return JsonValue.class.getSimpleName();
            }
        } else {
            type = JsonString.class.cast(value).getString();
        }
        final JsonValue formatValue = schema.get("date-time");
        if (formatValue != null && formatValue.getValueType() == JsonValue.ValueType.STRING) {
            type = JsonString.class.cast(formatValue).getString();
        }

        switch (type) {
            case "array":
                final JsonObject items = getValueAs(schema, "items", JsonObject.class);
                final String itemType = onItemSchema(javaName, items);
                imports.add(List.class.getName());
                return List.class.getSimpleName() + "<" + itemType + ">";
            case "object":
                return onObjectAttribute(javaName, schema);
            case "null":
                imports.add(JsonValue.class.getName());
                return JsonValue.class.getSimpleName();
            case "boolean":
                return required ? "boolean" : "Boolean";
            case "string":
                final JsonValue enumList = schema.get("enum");
                if (enumList != null && enumList.getValueType() == JsonValue.ValueType.ARRAY) {
                    return onEnum(javaName, enumList, schema);
                }
                return "String";
            case "number":
            case "double": // openapi
                return required ? "double" : "Double";
            // openapi types
            case "int":
            case "int32":
            case "integer":
                return required ? "int" : "Integer";
            case "int64":
            case "long":
                return required ? "long" : "Long";
            case "float":
                return required ? "float" : "Float";
            case "date":
                imports.add(LocalDate.class.getName());
                return LocalDate.class.getSimpleName();
            case "duration":
                imports.add(Duration.class.getName());
                return Duration.class.getSimpleName();
            case "date-time":
            case "dateTime":
                imports.add(OffsetDateTime.class.getName());
                return OffsetDateTime.class.getSimpleName();
            case "time":
                imports.add(LocalTime.class.getName());
                return LocalTime.class.getSimpleName();
            case "byte":
                return "byte[]";
            case "uuid":
            case "hostname":
            case "idn-hostname":
            case "email":
            case "idn-email":
            case "ipv4":
            case "ipv6":
            case "uri":
            case "uri-reference":
            case "iri":
            case "iri-reference":
            case "uri-template":
            case "json-pointer":
            case "relative-json-pointer":
            case "regex":
            case "binary": // base64
            case "password":
                return "String";
            default:
                throw new IllegalArgumentException("Unsupported type: " + type);
        }
    }