public Constructor copyConstructor(Type type, CopyConstructorMode mode) { final Constructor constructor = Constructor.of().public_().add(Field.of(variableName(), type).final_()); columns() .forEachOrdered( c -> { switch (mode) { case FIELD: { constructor.add( "this." + variableName(c) + " = " + variableName() + "." + GETTER_METHOD_PREFIX + typeName(c) + "();"); break; } case SETTER: case BUILDER: { final String setterPrefix = (mode == SETTER) ? SETTER_METHOD_PREFIX : BUILDER_METHOD_PREFIX; if (c.isNullable()) { constructor.add( variableName() + "." + GETTER_METHOD_PREFIX + typeName(c) + "().ifPresent(this::" + setterPrefix + typeName(c) + ");"); } else { constructor.add( setterPrefix + typeName(c) + "(" + variableName() + ".get" + typeName(c) + "());"); } break; } } }); return constructor; }
public Field fieldFor(Column c) { return Field.of(variableName(c), Type.of(c.getMapping())); }