in johnzon-maven-plugin/src/main/java/org/apache/johnzon/maven/plugin/ExampleToModelMojo.java [146:224]
private void generateFieldsAndMethods(final StringWriter writer, final JsonObject object, final String prefix,
final Collection<String> imports) throws IOException {
final Map<String, JsonObject> nestedTypes = new TreeMap<>();
{
final Iterator<Map.Entry<String, JsonValue>> iterator = object.entrySet().iterator();
if (!object.isEmpty()) {
writer.write("\n");
}
while (iterator.hasNext()) {
final Map.Entry<String, JsonValue> entry = iterator.next();
final String key = entry.getKey();
final String fieldName = toJavaFieldName(key);
final boolean hasNext = iterator.hasNext();
switch (entry.getValue().getValueType()) {
case ARRAY:
imports.add("java.util.List");
handleArray(writer, prefix, nestedTypes, entry.getValue(), key, fieldName, 1, imports, !hasNext);
break;
case OBJECT:
final String type = toJavaName(fieldName);
nestedTypes.put(type, JsonObject.class.cast(entry.getValue()));
fieldGetSetMethods(writer, key, fieldName, type, prefix, 0, imports, !hasNext);
break;
case TRUE:
case FALSE:
fieldGetSetMethods(writer, key, fieldName, "Boolean", prefix, 0, imports, !hasNext);
break;
case NUMBER:
fieldGetSetMethods(writer, key, fieldName, "Double", prefix, 0, imports, !hasNext);
break;
case STRING:
fieldGetSetMethods(writer, key, fieldName, "String", prefix, 0, imports, !hasNext);
break;
case NULL:
default:
if (ignoreNull) {
if (useRecord && writer.getBuffer().length() > 0) {
writer.getBuffer().setLength(writer.getBuffer().length() - 2);
writer.write("\n");
}
} else {
throw new UnsupportedOperationException("Unsupported " + entry.getValue() + ".");
}
}
if (hasNext) {
writer.write("\n");
} else if (useRecord) {
writer.write(") {\n");
}
}
}
if (object.isEmpty()) {
if (useRecord) {
writer.write(") {\n");
} else {
writer.write("\n");
}
}
if (!object.isEmpty() && !nestedTypes.isEmpty()) {
writer.write("\n");
}
final Iterator<Map.Entry<String, JsonObject>> entries = nestedTypes.entrySet().iterator();
while (entries.hasNext()) {
final Map.Entry<String, JsonObject> entry = entries.next();
if (useRecord) {
writer.write(prefix + "public static record " + entry.getKey() + "(");
} else {
writer.write(prefix + "public static class " + entry.getKey() + " {");
}
generateFieldsAndMethods(writer, entry.getValue(), " " + prefix, imports);
writer.write(prefix + "}\n");
if (entries.hasNext()) {
writer.write("\n");
}
}
}