package io.vertx.codegen.testmodel; import io.vertx.codegen.annotations.DataObject; import io.vertx.core.json.JsonArray; import io.vertx.core.json.JsonObject; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.function.Function; import java.util.stream.Collectors; /** * @author <a href="mailto:julien@julienviet.com">Julien Viet</a> */ @DataObject public class DataObjectWithLists { private static <T> JsonArray toArray(List<T> list) { JsonArray array = new JsonArray(); array.getList().addAll(list); return array; } private static <T> List<T> fromArray(JsonObject obj, String name) { return fromArray(obj, name, o->(T)o); } private static <T> List<T> fromArray(JsonObject obj, String name, Function<Object, T> converter) { JsonArray array = obj.getJsonArray(name); if (array != null) { List<?> list = array.getList(); return list.stream().map(converter).collect(Collectors.toList()); } else { return null; } } List<Short> shortValues = new ArrayList<>(); List<Integer> integerValues = new ArrayList<>(); List<Long> longValues = new ArrayList<>(); List<Float> floatValues = new ArrayList<>(); List<Double> doubleValues = new ArrayList<>(); List<Boolean> booleanValues = new ArrayList<>(); List<String> stringValues = new ArrayList<>(); List<JsonObject> jsonObjectValues = new ArrayList<>(); List<JsonArray> jsonArrayValues = new ArrayList<>(); List<TestDataObject> dataObjectValues = new ArrayList<>(); List<TestEnum> enumValues = new ArrayList<>(); List<TestGenEnum> genEnumValues = new ArrayList<>(); public DataObjectWithLists() { } public DataObjectWithLists(DataObjectWithLists that) { throw new UnsupportedOperationException("not used"); } public DataObjectWithLists(JsonObject json) { booleanValues = fromArray(json, "booleanValues"); shortValues = fromArray(json, "shortValues", o -> Short.parseShort(o.toString())); integerValues = fromArray(json, "integerValues"); longValues = fromArray(json, "longValues", o -> Long.parseLong(o.toString())); floatValues = fromArray(json, "floatValues", o -> Float.parseFloat(o.toString())); doubleValues = fromArray(json, "doubleValues"); stringValues = fromArray(json, "stringValues"); jsonObjectValues = fromArray(json, "jsonObjectValues", o -> (JsonObject) o); jsonArrayValues = fromArray(json, "jsonArrayValues", o -> (JsonArray) o); dataObjectValues = fromArray(json, "dataObjectValues", o -> new TestDataObject((JsonObject) o)); enumValues = fromArray(json, "enumValues", o -> TestEnum.valueOf(o.toString())); genEnumValues = fromArray(json, "genEnumValues", o -> TestGenEnum.valueOf(o.toString())); } public DataObjectWithLists setShortValues(List<Short> shortValues) { this.shortValues = shortValues; return this; } public DataObjectWithLists setIntegerValues(List<Integer> integerValues) { this.integerValues = integerValues; return this; } public DataObjectWithLists setLongValues(List<Long> longValues) { this.longValues = longValues; return this; } public DataObjectWithLists setFloatValues(List<Float> floatValues) { this.floatValues = floatValues; return this; } public DataObjectWithLists setDoubleValues(List<Double> doubleValues) { this.doubleValues = doubleValues; return this; } public DataObjectWithLists setBooleanValues(List<Boolean> booleanValues) { this.booleanValues = booleanValues; return this; } public DataObjectWithLists setStringValues(List<String> stringValue) { this.stringValues = stringValue; return this; } public DataObjectWithLists setEnumValues(List<TestEnum> enumValues) { this.enumValues = enumValues; return this; } public DataObjectWithLists setGenEnumValues(List<TestGenEnum> genEnumValues) { this.genEnumValues = genEnumValues; return this; } public DataObjectWithLists setDataObjectValues(List<TestDataObject> dataObjectValues) { this.dataObjectValues = dataObjectValues; return this; } public DataObjectWithLists setJsonObjectValues(List<JsonObject> jsonObjectValues) { this.jsonObjectValues = jsonObjectValues; return this; } public DataObjectWithLists setJsonArrayValues(List<JsonArray> jsonArrayValues) { this.jsonArrayValues = jsonArrayValues; return this; } public JsonObject toJson() { JsonObject json = new JsonObject(); if (booleanValues != null) { json.put("booleanValues", toArray(booleanValues)); } if (shortValues != null) { json.put("shortValues", toArray(shortValues)); } if (integerValues != null) { json.put("integerValues", toArray(integerValues)); } if (longValues != null) { json.put("longValues", toArray(longValues)); } if (floatValues != null) { json.put("floatValues", toArray(floatValues)); } if (doubleValues != null) { json.put("doubleValues", toArray(doubleValues)); } if (stringValues != null) { json.put("stringValues", toArray(stringValues)); } if (jsonObjectValues != null) { json.put("jsonObjectValues", toArray(jsonObjectValues)); } if (jsonArrayValues != null) { json.put("jsonArrayValues", toArray(jsonArrayValues)); } if (dataObjectValues != null) { json.put("dataObjectValues", toArray(dataObjectValues.stream().map(o -> o.toJson().getMap()).collect(Collectors.toList()))); } if (enumValues != null) { json.put("enumValues", toArray(enumValues)); } if (genEnumValues != null) { json.put("genEnumValues", toArray(genEnumValues)); } return json; } }