@Override public String apply(JavaProperty item) { return item.getName(); } }, ", ") + ");")
@Override public JavaMethod apply(JavaProperty property) { String methodName = "set" + property.getNameCapitalized(); return new JavaMethodBuilder() .addToModifiers(Modifier.PUBLIC) .withName(methodName) .withReturnType(VOID) .withArguments(new JavaProperty[]{property}) .addToAttributes(BODY, "this." + property.getName() + "=" + property.getName() + ";") .build(); } },
private String getBody(JavaProperty property) { String name = property.getName(); JavaType type = property.getType(); String className = type.getClassName(); StringBuilder sb = new StringBuilder(); if (type.isCollection()) { sb.append("this." + name + ".clear();"); if (className.contains("Map")) { sb.append("if (" + name + " != null) {this." + name + ".putAll(" + name + ");} return (T) this;"); } else if (className.contains("List") || className.contains("Set")) { JavaType unwraped = TypeAs.UNWRAP_COLLECTION_OF.apply(property.getType()); String addToMethodName = "addTo" + property.getNameCapitalized(); sb.append("if (" + name + " != null) {for (" + unwraped.getSimpleName() + " item : " + name + "){this." + addToMethodName + "(item);}} return (T) this;"); } return sb.toString(); } else if (isBuildable(property)) { JavaType builder = combine(UNWRAP_COLLECTION_OF, BUILDER).apply(property.getType()); String propertyName = property.getName(); String builderClass = builder.getSimpleName(); return "if (" + propertyName + "!=null){ this." + propertyName + "= new " + builderClass + "(" + propertyName + "); _visitables.add(this." + propertyName + ");} return (T) this;"; } return "this." + property.getName() + "=" + property.getName() + "; return (T) this;"; }
private static String toEquals(JavaType type, Collection<JavaProperty> properties) { String simpleName = type.getClassName(); JavaType superClass = type.getSuperClass(); StringBuilder sb = new StringBuilder(); sb.append("\n"); sb.append("if (this == o) return true;").append("\n"); sb.append("if (o == null || getClass() != o.getClass()) return false;").append("\n"); //If base fluent is the superclass just skip. if (!Constants.BASE_FLUENT.getClassName().equals(superClass.getClassName())) { sb.append("if (!super.equals(o)) return false;").append("\n"); } sb.append(simpleName).append(" that = (").append(simpleName).append(") o;").append("\n"); for (JavaProperty property : properties) { String name = property.getName(); if (BuilderUtils.isPrimitive(property.getType())) { sb.append("if (").append(name).append(" != ").append("that.").append(name).append(") return false;").append("\n"); } else if (BuilderUtils.isDescendant(type, property.getType())) { sb.append("if (").append(name).append(" != null &&").append(name).append(" != this ? !").append(name).append(".equals(that.").append(name).append(") :") .append("that.").append(name).append(" != null &&").append(name).append(" != this ) return false;").append("\n"); } else { sb.append("if (").append(name).append(" != null ? !").append(name).append(".equals(that.").append(name).append(") :") .append("that.").append(name).append(" != null) return false;").append("\n"); } } sb.append("return true;").append("\n"); return sb.toString(); }
@Override public JavaMethod apply(JavaProperty property) { String methodName = "with" + property.getNameCapitalized(); JavaType unwraped = combine(UNWRAP_COLLECTION_OF, UNWRAP_ARRAY_OF).apply(property.getType()); String addToMethodName = "addTo" + property.getNameCapitalized(); JavaProperty arrayProperty = new JavaPropertyBuilder(property) .withType(new JavaTypeBuilder(unwraped) .withArray(true) .build()) .withArray(true) .build(); return new JavaMethodBuilder() .addToModifiers(Modifier.PUBLIC) .withName(methodName) .withReturnType(T) .withArguments(new JavaProperty[]{arrayProperty}) .addToAttributes(BODY, "this." + property.getName() + ".clear(); if (" + property.getName() + " != null) {for (" + unwraped.getSimpleName() + " item :" + property.getName() + "){ this." + addToMethodName + "(item);}} return (T) this;") .build(); }
@Override public JavaMethod apply(JavaProperty property) { String methodName = "end" + captializeFirst(property.getType().isCollection() ? singularize(property.getName()) : property.getName()); return new JavaMethodBuilder() .addToModifiers(Modifier.PUBLIC) .withReturnType(N) .withName(methodName) .addToAttributes(BODY, "return and();") .build(); } };
body = "return this." + property.getName() + ";"; } else if (isBuildable(property)) { if (isList(property.getType()) || isSet(property.getType())) { body = "return build(" + property.getName() + ");"; } else { body = "return this." + property.getName() + "!=null?this." + property.getName() + ".build():null;"; } else { body = "return this." + property.getName() + ";"; body = "return this." + property.getName() + ";";
public JavaType apply(JavaProperty property) { return new JavaTypeBuilder() .withClassName(captializeFirst(property.getName() + "Nested")) .withGenericTypes(new JavaType[]{N}) .build(); } };
@Override public JavaMethod apply(JavaProperty property) { JavaType mapType = property.getType(); JavaType keyType = mapType.getGenericTypes()[0]; JavaProperty keyProperty = new JavaPropertyBuilder().withName("key").withType(keyType).build(); String methodName = "removeFrom" + property.getNameCapitalized(); return new JavaMethodBuilder() .addToModifiers(Modifier.PUBLIC) .withName(methodName) .withReturnType(T) .withArguments(new JavaProperty[]{keyProperty}) .addToAttributes(BODY, "if(key != null) {this." + property.getName() + ".remove(key);} return (T)this;") .build(); } }, WITH_NEW_NESTED {
@Override public Set<JavaMethod> apply(JavaProperty property) { Set<JavaMethod> result = new LinkedHashSet<JavaMethod>(); JavaClazz clazz = PropertyAs.CLASS.apply(property); for (JavaMethod constructor : getInlineableConstructors(property)) { String ownPrefix = property.getType().isCollection() ? "addNew" : "withNew"; String ownName = ownPrefix + captializeFirst(property.getType().isCollection() ? singularize(property.getName()) : property.getName()); String delegatePrefix = property.getType().isCollection() ? "addTo" : "with"; String delegateName = delegatePrefix + captializeFirst(property.getName()); String args = StringUtils.join(constructor.getArguments(), new Function<JavaProperty, String>() { @Override public String apply(JavaProperty item) { return item.getName(); } }, ", "); result.add(new JavaMethodBuilder() .addToModifiers(Modifier.PUBLIC) .withReturnType(T) .withArguments(constructor.getArguments()) .withName(ownName) .addToAttributes(BODY, "return " + delegateName + "(new " + clazz.getType().getSimpleName() + "(" + args + "));") .build()); } return result; } };
@Override public JavaMethod apply(JavaProperty property) { String prefix = property.getType().isBoolean() ? "is" : "get"; String methodName = prefix + property.getNameCapitalized(); JavaType type = property.getType(); Boolean isBuildable = isBuildable(type); JavaType targetType = isBuildable ? VISITABLE_BUILDER.apply(type) : TypeAs.UNWRAP_ARRAY_OF.apply(type); String body = String.format(isBuildable ? BUILDABLE_ARRAY_GETTER_TEXT : SIMPLE_ARRAY_GETTER_TEXT,type.getClassName(), targetType.getSimpleName(), property.getName(), type.getClassName()); return new JavaMethodBuilder() .addToModifiers(Modifier.PUBLIC) .withName(methodName) .withReturnType(property.getType()) .withArguments(new JavaProperty[]{}) .addToAttributes(BODY, body) .build(); } },
@Override public JavaMethod apply(JavaProperty property) { //We need to repackage because we are nesting under this class. JavaType nestedType = PropertyAs.NESTED_TYPE.apply(property); JavaType rewraped = new JavaTypeBuilder(nestedType).withGenericTypes(new JavaType[]{T}).build(); String prefix = property.getType().isCollection() ? "addNew" : "withNew"; String methodName = prefix + captializeFirst(property.getType().isCollection() ? singularize(property.getName()) : property.getName()); return new JavaMethodBuilder() .addToModifiers(Modifier.PUBLIC) .withReturnType(rewraped) .withName(methodName) .addToAttributes(BODY, "return new " + rewraped.getSimpleName() + "();") .build(); } }, WITH_NEW_LIKE_NESTED {
@Override public JavaMethod apply(JavaProperty property) { JavaType mapType = property.getType(); JavaType keyType = mapType.getGenericTypes()[0]; JavaType valueType = mapType.getGenericTypes()[1]; JavaProperty keyProperty = new JavaPropertyBuilder().withName("key").withType(keyType).build(); JavaProperty valueProperty = new JavaPropertyBuilder().withName("value").withType(valueType).build(); String methodName = "addTo" + property.getNameCapitalized(); return new JavaMethodBuilder() .addToModifiers(Modifier.PUBLIC) .withName(methodName) .withReturnType(T) .withArguments(new JavaProperty[]{keyProperty, valueProperty}) .addToAttributes(BODY, "if(key != null && value != null) {this." + property.getName() + ".put(key, value);} return (T)this;") .build(); } }, REMOVE_FROM_MAP {
@Override public JavaMethod apply(JavaProperty property) { JavaType nestedType = PropertyAs.NESTED_TYPE.apply(property); //We need to repackage because we are nesting under this class. JavaType rewraped = new JavaTypeBuilder(nestedType).withGenericTypes(new JavaType[]{T}).build(); String prefix = "edit"; String methodNameBase = captializeFirst(property.getName()); String methodName = prefix + methodNameBase; return new JavaMethodBuilder() .addToModifiers(Modifier.PUBLIC) .withReturnType(rewraped) .withName(methodName) .addToAttributes(BODY, "return withNew" + methodNameBase + "Like(get" + methodNameBase + "());") .build(); } }, AND {
JavaType builder = combine(UNWRAP_COLLECTION_OF, BUILDER).apply(property.getType()); String builderClass = builder.getSimpleName(); body = "for (" + item.getType().getSimpleName() + " item : items) {" + builderClass + " builder = new " + builderClass + "(item);_visitables.remove(builder);this." + property.getName() + ".remove(builder);} return (T)this;"; } else if (descendants.size() > 0) { body = "for (" + item.getType().getSimpleName() + " item : items) {" + StringUtils.join(descendants, new Function<JavaProperty, String>() { body = "for (" + item.getType().getSimpleName() + " item : items) {this." + property.getName() + ".remove(item);} return (T)this;";
@Override public JavaMethod apply(JavaProperty property) { String builderName = TypeAs.UNWRAP_COLLECTION_OF.apply(property.getType()).getSimpleName("Builder"); String classPrefix = getClassPrefix(property); String prefix = property.getType().isCollection() ? "addTo" : "with"; String withMethodName = prefix + captializeFirst(property.getName()); return new JavaMethodBuilder() .addToModifiers(Modifier.PUBLIC) .withReturnType(N) .withName("and") .addToAttributes(BODY, "return (N) " + classPrefix + withMethodName + "(builder.build());") .build(); }
JavaType builder = combine(UNWRAP_COLLECTION_OF, BUILDER).apply(property.getType()); String builderClass = builder.getSimpleName(); body = "for (" + item.getType().getSimpleName() + " item : items) {" + builderClass + " builder = new " + builderClass + "(item);_visitables.add(builder);this." + property.getName() + ".add(builder);} return (T)this;"; } else if (descendants.size() > 0) { body = "for (" + item.getType().getSimpleName() + " item : items) {" + StringUtils.join(descendants, new Function<JavaProperty, String>() { body = "for (" + item.getType().getSimpleName() + " item : items) {this." + property.getName() + ".add(item);} return (T)this;";
@Override public JavaMethod apply(JavaProperty property) { JavaType baseType = TypeAs.UNWRAP_COLLECTION_OF.apply(property.getType()); JavaType nestedType = PropertyAs.NESTED_TYPE.apply(property); //JavaType nestedUnwrapped = new JavaTypeBuilder(nestedType).withGenericTypes(new JavaType[0]).build(); //We need to repackage because we are nesting under this class. JavaType rewraped = new JavaTypeBuilder(nestedType).withGenericTypes(new JavaType[]{T}).build(); String prefix = property.getType().isCollection() ? "addNew" : "withNew"; String suffix = "Like"; String methodName = prefix + captializeFirst(property.getType().isCollection() ? singularize(property.getName()) : property.getName()) + suffix; return new JavaMethodBuilder() .addToModifiers(Modifier.PUBLIC) .withReturnType(rewraped) .withName(methodName) .addNewArgument() .withName("item") .withType(baseType) .endArgument() .addToAttributes(BODY, "return new " + rewraped.getSimpleName() + "(item);") .build(); } }, EDIT_NESTED {