diff --git a/jOOQ-codegen/src/main/java/org/jooq/util/AbstractGenerator.java b/jOOQ-codegen/src/main/java/org/jooq/util/AbstractGenerator.java
index 2265150df8..8fb99e7089 100644
--- a/jOOQ-codegen/src/main/java/org/jooq/util/AbstractGenerator.java
+++ b/jOOQ-codegen/src/main/java/org/jooq/util/AbstractGenerator.java
@@ -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
diff --git a/jOOQ-codegen/src/main/java/org/jooq/util/GenerationTool.java b/jOOQ-codegen/src/main/java/org/jooq/util/GenerationTool.java
index 28889bb163..2aa1f9233c 100644
--- a/jOOQ-codegen/src/main/java/org/jooq/util/GenerationTool.java
+++ b/jOOQ-codegen/src/main/java/org/jooq/util/GenerationTool.java
@@ -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());
diff --git a/jOOQ-codegen/src/main/java/org/jooq/util/Generator.java b/jOOQ-codegen/src/main/java/org/jooq/util/Generator.java
index 0b506e4cc0..24d52cd311 100644
--- a/jOOQ-codegen/src/main/java/org/jooq/util/Generator.java
+++ b/jOOQ-codegen/src/main/java/org/jooq/util/Generator.java
@@ -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
*/
diff --git a/jOOQ-codegen/src/main/java/org/jooq/util/JavaGenerator.java b/jOOQ-codegen/src/main/java/org/jooq/util/JavaGenerator.java
index 81156947c0..985277bead 100644
--- a/jOOQ-codegen/src/main/java/org/jooq/util/JavaGenerator.java
+++ b/jOOQ-codegen/src/main/java/org/jooq/util/JavaGenerator.java
@@ -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 %s. %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 %s. %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 %s. %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 %s. %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 %s. %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 %s. %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 %s 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("}");
}
}
diff --git a/jOOQ-meta/src/main/resources/xsd/jooq-codegen-3.2.0.xsd b/jOOQ-meta/src/main/resources/xsd/jooq-codegen-3.2.0.xsd
index 858ec21519..fd3405675c 100644
--- a/jOOQ-meta/src/main/resources/xsd/jooq-codegen-3.2.0.xsd
+++ b/jOOQ-meta/src/main/resources/xsd/jooq-codegen-3.2.0.xsd
@@ -543,6 +543,18 @@
byte code
-->
+
+
+