[#674] Add <fluentSetters/> code generation flag to let generated

setters return this
This commit is contained in:
lukaseder 2013-10-06 10:52:27 +02:00
parent 77a9892368
commit b92ce8ab59
5 changed files with 54 additions and 6 deletions

View File

@ -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

View File

@ -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());

View File

@ -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
*/

View File

@ -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("}");
}
}

View File

@ -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>