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.HashMap;
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 DataObjectWithMaps {
private static <T> JsonObject toObject(Map<String, T> map) {
return toObject(map, o -> o);
}
private static <T> JsonObject toObject(Map<String, T> map, Function<T, Object> converter) {
JsonObject object = new JsonObject();
map.forEach((key, value) -> {
object.getMap().put(key, converter.apply(value));
});
return object;
}
private static <T> Map<String, T> fromObject(JsonObject obj, String name) {
return fromObject(obj, name, o -> (T) o);
}
private static <T> Map<String, T> fromObject(JsonObject obj, String name, Function<Object, T> converter) {
JsonObject array = obj.getJsonObject(name);
if (array != null) {
Map<String, Object> map = array.getMap();
map.entrySet().forEach(entry -> entry.setValue(converter.apply(entry.getValue())));
return (Map<String, T>) map;
} else {
return null;
}
}
Map<String, Short> shortValues = new HashMap<>();
Map<String, Integer> integerValues = new HashMap<>();
Map<String, Long> longValues = new HashMap<>();
Map<String, Float> floatValues = new HashMap<>();
Map<String, Double> doubleValues = new HashMap<>();
Map<String, Boolean> booleanValues = new HashMap<>();
Map<String, String> stringValues = new HashMap<>();
Map<String, JsonObject> jsonObjectValues = new HashMap<>();
Map<String, JsonArray> jsonArrayValues = new HashMap<>();
Map<String, TestDataObject> dataObjectValues = new HashMap<>();
Map<String, TestEnum> enumValues = new HashMap<>();
Map<String, TestGenEnum> genEnumValues = new HashMap<>();
public DataObjectWithMaps() {
}
public DataObjectWithMaps(DataObjectWithMaps that) {
throw new UnsupportedOperationException("not used");
}
public DataObjectWithMaps(JsonObject json) {
booleanValues = fromObject(json, "booleanValues");
shortValues = fromObject(json, "shortValues", o -> Short.parseShort(o.toString()));
integerValues = fromObject(json, "integerValues");
longValues = fromObject(json, "longValues", o -> Long.parseLong(o.toString()));
floatValues = fromObject(json, "floatValues", o -> Float.parseFloat(o.toString()));
doubleValues = fromObject(json, "doubleValues");
stringValues = fromObject(json, "stringValues");
jsonObjectValues = fromObject(json, "jsonObjectValues", o -> (JsonObject) o);
jsonArrayValues = fromObject(json, "jsonArrayValues", o -> (JsonArray) o);
dataObjectValues = fromObject(json, "dataObjectValues", o -> new TestDataObject((JsonObject) o));
enumValues = fromObject(json, "enumValues", o -> TestEnum.valueOf(o.toString()));
genEnumValues = fromObject(json, "genEnumValues", o -> TestGenEnum.valueOf(o.toString()));
}
public DataObjectWithMaps setShortValues(Map<String, Short> shortValues) {
this.shortValues = shortValues;
return this;
}
public DataObjectWithMaps setIntegerValues(Map<String, Integer> integerValues) {
this.integerValues = integerValues;
return this;
}
public DataObjectWithMaps setLongValues(Map<String, Long> longValues) {
this.longValues = longValues;
return this;
}
public DataObjectWithMaps setFloatValues(Map<String, Float> floatValues) {
this.floatValues = floatValues;
return this;
}
public DataObjectWithMaps setDoubleValues(Map<String, Double> doubleValues) {
this.doubleValues = doubleValues;
return this;
}
public DataObjectWithMaps setBooleanValues(Map<String, Boolean> booleanValues) {
this.booleanValues = booleanValues;
return this;
}
public DataObjectWithMaps setStringValues(Map<String, String> stringValue) {
this.stringValues = stringValue;
return this;
}
public DataObjectWithMaps setEnumValues(Map<String, TestEnum> enumValues) {
this.enumValues = enumValues;
return this;
}
public DataObjectWithMaps setGenEnumValues(Map<String, TestGenEnum> genEnumValues) {
this.genEnumValues = genEnumValues;
return this;
}
public DataObjectWithMaps setDataObjectValues(Map<String, TestDataObject> dataObjectValues) {
this.dataObjectValues = dataObjectValues;
return this;
}
public DataObjectWithMaps setJsonObjectValues(Map<String, JsonObject> jsonObjectValues) {
this.jsonObjectValues = jsonObjectValues;
return this;
}
public DataObjectWithMaps setJsonArrayValues(Map<String, JsonArray> jsonArrayValues) {
this.jsonArrayValues = jsonArrayValues;
return this;
}
public JsonObject toJson() {
JsonObject json = new JsonObject();
if (booleanValues != null) {
json.put("booleanValues", toObject(booleanValues));
}
if (shortValues != null) {
json.put("shortValues", toObject(shortValues));
}
if (integerValues != null) {
json.put("integerValues", toObject(integerValues));
}
if (longValues != null) {
json.put("longValues", toObject(longValues));
}
if (floatValues != null) {
json.put("floatValues", toObject(floatValues));
}
if (doubleValues != null) {
json.put("doubleValues", toObject(doubleValues));
}
if (stringValues != null) {
json.put("stringValues", toObject(stringValues));
}
if (jsonObjectValues != null) {
json.put("jsonObjectValues", toObject(jsonObjectValues));
}
if (jsonArrayValues != null) {
json.put("jsonArrayValues", toObject(jsonArrayValues));
}
if (dataObjectValues != null) {
json.put("dataObjectValues", toObject(dataObjectValues, TestDataObject::toJson));
}
if (enumValues != null) {
json.put("enumValues", toObject(enumValues));
}
if (genEnumValues != null) {
json.put("genEnumValues", toObject(genEnumValues));
}
return json;
}
}