From b92ce8ab59b45da3c83d3dd5fe9380dd42226b68 Mon Sep 17 00:00:00 2001 From: lukaseder Date: Sun, 6 Oct 2013 10:52:27 +0200 Subject: [PATCH] [#674] Add code generation flag to let generated setters return this --- .../java/org/jooq/util/AbstractGenerator.java | 11 ++++++++ .../java/org/jooq/util/GenerationTool.java | 2 ++ .../main/java/org/jooq/util/Generator.java | 10 ++++++++ .../java/org/jooq/util/JavaGenerator.java | 25 ++++++++++++++----- .../main/resources/xsd/jooq-codegen-3.2.0.xsd | 12 +++++++++ 5 files changed, 54 insertions(+), 6 deletions(-) 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 --> + + +