private Collection<ClassTypeInfo> filterImports(Map<String, PropertyInfo> properties) { Set<ClassTypeInfo> result = new HashSet<>(); for (PropertyInfo p : properties.values()) { p.getType().collectImports(result); } return result; } @Override
private void generateImport(DataObjectModel model, CodeWriter writer) { writer.println("import " + model.getType().getRaw().getName()); Set<String> genImports = new TreeSet<>(); for (PropertyInfo p : model.getPropertyMap().values()) { ClassKind propertyKind = p.getType().getKind(); if ((propertyKind == ClassKind.ENUM || propertyKind == ClassKind.DATA_OBJECT) && !p.getType().equals(model.getType())) { genImports.add(p.getType().getName()); } } for (String i : genImports) { writer.println("import " + i); } }
html.append("^|Name | Type ^| Description\n"); model.getPropertyMap().values().forEach(property -> { String propertytype = getDataType(property.getType()); if (propertytype != null) { String arrayPrefix = (property.isList() || property.isSet()) ? "Array of " : "";
private void genPropToJson(String before, String after, PropertyInfo prop, PrintWriter writer) { String indent = " "; if (prop.isList() || prop.isSet()) { writer.print(indent + "if (obj." + prop.getGetterMethod() + "() != null) {\n"); writer.print(indent + " JsonArray array = new JsonArray();\n"); writer.print(indent + " obj." + prop.getGetterMethod() + "().forEach(item -> array.add(" + before + "item" + after + "));\n"); writer.print(indent + " json.put(\"" + prop.getName() + "\", array);\n"); writer.print(indent + "}\n"); } else if (prop.isMap()) { writer.print(indent + "if (obj." + prop.getGetterMethod() + "() != null) {\n"); writer.print(indent + " JsonObject map = new JsonObject();\n"); writer.print(indent + " obj." + prop.getGetterMethod() + "().forEach((key, value) -> map.put(key, " + before + "value" + after + "));\n"); writer.print(indent + " json.put(\"" + prop.getName() + "\", map);\n"); writer.print(indent + "}\n"); } else { String sp = ""; if (prop.getType().getKind() != ClassKind.PRIMITIVE) { sp = " "; writer.print(indent + "if (obj." + prop.getGetterMethod() + "() != null) {\n"); } writer.print(indent + sp + "json.put(\"" + prop.getName() + "\", " + before + "obj." + prop.getGetterMethod() + "()" + after + ");\n"); if (prop.getType().getKind() != ClassKind.PRIMITIVE) { writer.print(indent + "}\n"); } } }
public static String fromPropertyInfoToScala(PropertyInfo info) { if (info.getKind().isValue()){ return toScalaType(info.getType(), false); } else if (info.getKind().isList()){ String ret = "scala.collection.mutable.Buffer"; ret += "[" + toScalaType(info.getType(), false) + "]"; return ret; } else if (info.getKind().isSet()){ String ret = "scala.collection.mutable.Set"; ret += "[" + toScalaType(info.getType(), false) + "]"; return ret; } else if (info.getKind().isMap()){ String ret = "scala.collection.mutable.Map"; ret += "[String, " + toScalaType(info.getType(), false) + "]"; return ret; } return "ERROR fromPropertyInfoToScala got " + info; }
public static String fromPropertyInfoToScalaTypeWithConversion(TypeInfo type, String name, PropertyInfo info) { List<TypeParamInfo> typeParams = new java.util.ArrayList<>(); List<TypeParamInfo> methodTypeParams = new java.util.ArrayList<>(); if (info.getKind().isValue()){ return toScalaWithConversion(name, info.getType(), typeParams, methodTypeParams); } else { String ret = name + ".asScala"; if (doesTypeRequireConversion(type)){ if (info.getKind().isList()) { ret += ".map(x => "+ toScalaWithConversion("x", info.getType(), typeParams, methodTypeParams) +")"; } else if (info.getKind().isSet()){ ret += ".map(x => "+ toScalaWithConversion("x", info.getType(), typeParams, methodTypeParams) +")"; } else if (info.getKind().isMap()){ /*TODO: expensive*/ ret += ".mapValues(x => "+ toScalaWithConversion("x", info.getType(), typeParams, methodTypeParams) +")"; ret = "collection.mutable.Map("+ ret + ".toSeq: _*)"; } } return ret; } }
if (prop.isSetter()) { String coll = prop.isList() ? "java.util.ArrayList" : "java.util.LinkedHashSet"; writer.print(indent + " " + coll + "<" + prop.getType().getName() + "> list = new " + coll + "<>();\n"); writer.print(indent + " ((Iterable<Object>)member.getValue()).forEach( item -> {\n"); writer.print(indent + " if (item instanceof " + cast + ")\n"); writer.print(indent + " });\n"); } else if (prop.isSetter()) { writer.print(indent + " java.util.Map<String, " + prop.getType().getName() + "> map = new java.util.LinkedHashMap<>();\n"); writer.print(indent + " ((Iterable<java.util.Map.Entry<String, Object>>)member.getValue()).forEach(entry -> {\n"); writer.print(indent + " if (entry.getValue() instanceof " + cast + ")\n");
model.getPropertyMap().values().forEach(prop -> { if ((prop.isDeclared() || inheritConverter) && prop.getGetterMethod() != null && prop.isJsonifiable()) { ClassKind propKind = prop.getType().getKind(); if (propKind.basic) { if (propKind == ClassKind.STRING) { genPropToJson("", "", prop, writer); } else { switch (prop.getType().getSimpleName()) { case "char": case "Character": switch (propKind) { case API: if (prop.getType().getName().equals("io.vertx.core.buffer.Buffer")) { genPropToJson("java.util.Base64.getEncoder().encodeToString(", ".getBytes())", prop, writer); break; case OTHER: if (prop.getType().getName().equals(Instant.class.getName())) { genPropToJson("DateTimeFormatter.ISO_INSTANT.format(", ")", prop, writer);
model.getPropertyMap().values().forEach(prop -> { if (prop.isDeclared() || inheritConverter) { ClassKind propKind = prop.getType().getKind(); if (propKind.basic) { if (propKind == ClassKind.STRING) { genPropFromJson("String", "(String)", "", prop, writer); } else { switch (prop.getType().getSimpleName()) { case "boolean": case "Boolean": switch (propKind) { case API: if (prop.getType().getName().equals("io.vertx.core.buffer.Buffer")) { genPropFromJson("String", "io.vertx.core.buffer.Buffer.buffer(java.util.Base64.getDecoder().decode((String)", "))", prop, writer); break; case DATA_OBJECT: genPropFromJson("JsonObject", "new " + prop.getType().getName() + "((JsonObject)", ")", prop, writer); break; case ENUM: genPropFromJson("String", prop.getType().getName() + ".valueOf((String)", ")", prop, writer); break; case OBJECT: break; case OTHER: if (prop.getType().getName().equals(Instant.class.getName())) { genPropFromJson("String", "Instant.from(DateTimeFormatter.ISO_INSTANT.parse((String)", "))", prop, writer);
writer.printf(" %s(): %s;\n", getter == null ? entry.getKey() : getter, genType(property.getType())); writer.print(" */\n"); writer.printf(" %s(%s: %s): %s;\n", property.getSetterMethod(), cleanReserved(entry.getKey()), genType(property.getType()), model.getType().getRaw().getSimpleName()); writer.print(" */\n"); writer.printf(" %s(%s: %s): %s;\n", property.getAdderMethod(), cleanReserved(entry.getKey()), genType(property.getType()), model.getType().getRaw().getSimpleName());
.stream() .filter(filterProperties()) .map(p -> " " + p.getName() + ": " + applyPropertyKind(mapKotlinType(p.getType()), p.getKind()) + "? = null") .collect(Collectors.joining(",\n")); writer.print(paramsInfo);
private static void assertProperty( PropertyInfo property, String expectedName, String expectedSetter, String expectedAdder, String expectedGetter, TypeInfo expectedType, boolean expectedDeclared, PropertyKind expectedKind, boolean expectedJsonifiable) { assertNotNull(property); assertEquals("Was expecting property to have be declared=" + expectedDeclared, expectedDeclared, property.isDeclared()); assertEquals(expectedSetter, property.getSetterMethod()); assertEquals(expectedAdder, property.getAdderMethod()); assertEquals(expectedGetter, property.getGetterMethod()); assertEquals(expectedName, property.getName()); assertEquals(expectedType, property.getType()); assertEquals(expectedKind, property.getKind()); assertEquals(expectedJsonifiable, property.isJsonifiable()); }