[#674] Add <fluentSetters/> code generation flag to let generated
setters return this
This commit is contained in:
parent
77a9892368
commit
b92ce8ab59
@ -57,6 +57,7 @@ abstract class AbstractGenerator implements Generator {
|
||||
boolean generateJPAAnnotations = false;
|
||||
boolean generateValidationAnnotations = false;
|
||||
boolean generateGlobalObjectReferences = true;
|
||||
boolean fluentSetters = false;
|
||||
|
||||
protected GeneratorStrategyWrapper strategy;
|
||||
|
||||
@ -197,6 +198,16 @@ abstract class AbstractGenerator implements Generator {
|
||||
this.generateGlobalObjectReferences = generateGlobalObjectReferences;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean fluentSetters() {
|
||||
return fluentSetters;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setFluentSetters(boolean fluentSetters) {
|
||||
this.fluentSetters = fluentSetters;
|
||||
}
|
||||
|
||||
// ----
|
||||
|
||||
@Override
|
||||
|
||||
@ -299,6 +299,8 @@ public class GenerationTool {
|
||||
generator.setGenerateValidationAnnotations(g.getGenerate().isValidationAnnotations());
|
||||
if (g.getGenerate().isGlobalObjectReferences() != null)
|
||||
generator.setGenerateGlobalObjectReferences(g.getGenerate().isGlobalObjectReferences());
|
||||
if (g.getGenerate().isFluentSetters() != null)
|
||||
generator.setFluentSetters(g.getGenerate().isFluentSetters());
|
||||
|
||||
// Generator properties that should in fact be strategy properties
|
||||
strategy.setInstanceFields(generator.generateInstanceFields());
|
||||
|
||||
@ -184,6 +184,16 @@ public interface Generator {
|
||||
*/
|
||||
void setGenerateGlobalObjectReferences(boolean generateGlobalObjectReferences);
|
||||
|
||||
/**
|
||||
* Whether fluent setters should be generated
|
||||
*/
|
||||
boolean fluentSetters();
|
||||
|
||||
/**
|
||||
* Whether fluent setters should be generated
|
||||
*/
|
||||
void setFluentSetters(boolean fluentSetters);
|
||||
|
||||
/**
|
||||
* The target directory
|
||||
*/
|
||||
|
||||
@ -507,6 +507,7 @@ public class JavaGenerator extends AbstractGenerator {
|
||||
ColumnDefinition column = table.getColumn(i);
|
||||
|
||||
final String comment = StringUtils.defaultString(column.getComment());
|
||||
final String setterReturnType = fluentSetters() ? className : "void";
|
||||
final String setter = getStrategy().getJavaSetterName(column, Mode.DEFAULT);
|
||||
final String getter = getStrategy().getJavaGetterName(column, Mode.DEFAULT);
|
||||
final String type = getJavaType(column.getType());
|
||||
@ -514,8 +515,10 @@ public class JavaGenerator extends AbstractGenerator {
|
||||
|
||||
out.tab(1).javadoc("Setter for <code>%s</code>. %s", name, comment);
|
||||
out.tab(1).overrideIf(generateInterfaces());
|
||||
out.tab(1).println("public void %s(%s value) {", setter, type);
|
||||
out.tab(1).println("public %s %s(%s value) {", setterReturnType, setter, type);
|
||||
out.tab(2).println("setValue(%s, value);", i);
|
||||
if (fluentSetters())
|
||||
out.tab(2).println("return this;");
|
||||
out.tab(1).println("}");
|
||||
|
||||
out.tab(1).javadoc("Getter for <code>%s</code>. %s", name, comment);
|
||||
@ -664,13 +667,14 @@ public class JavaGenerator extends AbstractGenerator {
|
||||
|
||||
for (ColumnDefinition column : table.getColumns()) {
|
||||
final String comment = StringUtils.defaultString(column.getComment());
|
||||
final String setterReturnType = fluentSetters() ? className : "void";
|
||||
final String setter = getStrategy().getJavaSetterName(column, Mode.DEFAULT);
|
||||
final String getter = getStrategy().getJavaGetterName(column, Mode.DEFAULT);
|
||||
final String type = getJavaType((column).getType());
|
||||
final String name = column.getQualifiedOutputName();
|
||||
|
||||
out.tab(1).javadoc("Setter for <code>%s</code>. %s", name, comment);
|
||||
out.tab(1).println("public void %s(%s value);", setter, type);
|
||||
out.tab(1).println("public %s %s(%s value);", setterReturnType, setter, type);
|
||||
|
||||
out.tab(1).javadoc("Getter for <code>%s</code>. %s", name, comment);
|
||||
printColumnJPAAnnotation(out, column);
|
||||
@ -814,6 +818,7 @@ public class JavaGenerator extends AbstractGenerator {
|
||||
|
||||
for (AttributeDefinition attribute : udt.getAttributes()) {
|
||||
final String comment = StringUtils.defaultString(attribute.getComment());
|
||||
final String setterReturnType = fluentSetters() ? className : "void";
|
||||
final String setter = getStrategy().getJavaSetterName(attribute, Mode.DEFAULT);
|
||||
final String getter = getStrategy().getJavaGetterName(attribute, Mode.DEFAULT);
|
||||
final String type = getJavaType((attribute).getType());
|
||||
@ -821,8 +826,10 @@ public class JavaGenerator extends AbstractGenerator {
|
||||
final String name = attribute.getQualifiedOutputName();
|
||||
|
||||
out.tab(1).javadoc("Setter for <code>%s</code>. %s", name, comment);
|
||||
out.tab(1).println("public void %s(%s value) {", setter, type);
|
||||
out.tab(1).println("public %s %s(%s value) {", setterReturnType, setter, type);
|
||||
out.tab(2).println("setValue(%s, value);", id);
|
||||
if (fluentSetters())
|
||||
out.tab(2).println("return this;");
|
||||
out.tab(1).println("}");
|
||||
|
||||
out.tab(1).javadoc("Getter for <code>%s</code>. %s", name, comment);
|
||||
@ -1336,8 +1343,9 @@ public class JavaGenerator extends AbstractGenerator {
|
||||
|
||||
for (ColumnDefinition column : table.getColumns()) {
|
||||
final String columnType = getJavaType(column.getType());
|
||||
final String columnGetter = getStrategy().getJavaGetterName(column, Mode.POJO);
|
||||
final String columnSetterReturnType = fluentSetters() ? className : "void";
|
||||
final String columnSetter = getStrategy().getJavaSetterName(column, Mode.POJO);
|
||||
final String columnGetter = getStrategy().getJavaGetterName(column, Mode.POJO);
|
||||
final String columnMember = getStrategy().getJavaMemberName(column, Mode.POJO);
|
||||
|
||||
// Getter
|
||||
@ -1353,8 +1361,10 @@ public class JavaGenerator extends AbstractGenerator {
|
||||
if (!generateImmutablePojos()) {
|
||||
out.println();
|
||||
out.tab(1).overrideIf(generateInterfaces());
|
||||
out.tab(1).println("public void %s(%s %s) {", columnSetter, columnType, columnMember);
|
||||
out.tab(1).println("public %s %s(%s %s) {", columnSetterReturnType, columnSetter, columnType, columnMember);
|
||||
out.tab(2).println("this.%s = %s;", columnMember, columnMember);
|
||||
if (fluentSetters())
|
||||
out.tab(2).println("return this;");
|
||||
out.tab(1).println("}");
|
||||
}
|
||||
}
|
||||
@ -1847,6 +1857,7 @@ public class JavaGenerator extends AbstractGenerator {
|
||||
out.tab(1).println("}");
|
||||
|
||||
for (ParameterDefinition parameter : routine.getInParameters()) {
|
||||
final String setterReturnType = fluentSetters() ? className : "void";
|
||||
final String setter = getStrategy().getJavaSetterName(parameter, Mode.DEFAULT);
|
||||
final String numberValue = parameter.getType().isGenericNumberType() ? "Number" : "Value";
|
||||
final String numberField = parameter.getType().isGenericNumberType() ? "Number" : "Field";
|
||||
@ -1860,8 +1871,10 @@ public class JavaGenerator extends AbstractGenerator {
|
||||
|
||||
if (routine.isSQLUsable()) {
|
||||
out.tab(1).javadoc("Set the <code>%s</code> parameter to the function to be used with a {@link org.jooq.Select} statement", parameter.getOutputName());
|
||||
out.tab(1).println("public void %s(%s<%s> field) {", setter, Field.class, getExtendsNumberType(parameter.getType()));
|
||||
out.tab(1).println("public %s %s(%s<%s> field) {", setterReturnType, setter, Field.class, getExtendsNumberType(parameter.getType()));
|
||||
out.tab(2).println("set%s(%s, field);", numberField, paramId);
|
||||
if (fluentSetters())
|
||||
out.tab(2).println("return this;");
|
||||
out.tab(1).println("}");
|
||||
}
|
||||
}
|
||||
|
||||
@ -543,6 +543,18 @@
|
||||
byte code
|
||||
-->
|
||||
<element name="globalObjectReferences" type="boolean" default="true" minOccurs="0" maxOccurs="1" />
|
||||
|
||||
<!--
|
||||
Generate fluent setters in
|
||||
|
||||
- records
|
||||
- pojos
|
||||
- interfaces
|
||||
|
||||
Fluent setters are against the JavaBeans specification, but can be quite
|
||||
useful to those users who do not depend on EL, JSP, JSF, etc.
|
||||
-->
|
||||
<element name="fluentSetters" type="boolean" default="false" minOccurs="0" maxOccurs="1" />
|
||||
</all>
|
||||
</complexType>
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user