[#5354] Add <javaBeansGettersAndSetters/> to the code generator to support JavaBeans

This commit is contained in:
lukaseder 2017-04-21 18:24:36 +02:00
parent cd14e6a0ea
commit 4c7dd2f806
7 changed files with 148 additions and 51 deletions

View File

@ -51,50 +51,51 @@ import org.jooq.tools.JooqLogger;
*/
abstract class AbstractGenerator implements Generator {
private static final JooqLogger log = JooqLogger.getLogger(AbstractGenerator.class);
private static final JooqLogger log = JooqLogger.getLogger(AbstractGenerator.class);
boolean generateDeprecated = true;
boolean generateRelations = true;
boolean generateInstanceFields = true;
boolean generateGeneratedAnnotation = true;
boolean useSchemaVersionProvider = false;
boolean useCatalogVersionProvider = false;
boolean generateRoutines = true;
boolean generateSequences = true;
boolean generateUDTs = true;
boolean generateTables = true;
boolean generateRecords = true;
boolean generatePojos = false;
boolean generatePojosEqualsAndHashCode = false;
boolean generatePojosToString = true;
boolean generateImmutablePojos = false;
boolean generateInterfaces = false;
boolean generateImmutableInterfaces = false;
boolean generateDaos = false;
boolean generateJPAAnnotations = false;
boolean generateValidationAnnotations = false;
boolean generateSpringAnnotations = false;
boolean generateQueues = true;
boolean generateLinks = true;
boolean generateGlobalObjectReferences = true;
boolean generateGlobalCatalogReferences = true;
boolean generateGlobalSchemaReferences = true;
boolean generateGlobalRoutineReferences = true;
boolean generateGlobalSequenceReferences = true;
boolean generateGlobalTableReferences = true;
boolean generateGlobalUDTReferences = true;
boolean generateGlobalQueueReferences = true;
boolean generateGlobalLinkReferences = true;
boolean generateFluentSetters = false;
boolean generateVarargsSetters = true;
String generateFullyQualifiedTypes = "";
boolean generateJavaTimeTypes = false;
boolean generateTableValuedFunctions = false;
boolean generateEmptyCatalogs = false;
boolean generateEmptySchemas = false;
boolean generateDeprecated = true;
boolean generateRelations = true;
boolean generateInstanceFields = true;
boolean generateGeneratedAnnotation = true;
boolean useSchemaVersionProvider = false;
boolean useCatalogVersionProvider = false;
boolean generateRoutines = true;
boolean generateSequences = true;
boolean generateUDTs = true;
boolean generateTables = true;
boolean generateRecords = true;
boolean generatePojos = false;
boolean generatePojosEqualsAndHashCode = false;
boolean generatePojosToString = true;
boolean generateImmutablePojos = false;
boolean generateInterfaces = false;
boolean generateImmutableInterfaces = false;
boolean generateDaos = false;
boolean generateJPAAnnotations = false;
boolean generateValidationAnnotations = false;
boolean generateSpringAnnotations = false;
boolean generateQueues = true;
boolean generateLinks = true;
boolean generateGlobalObjectReferences = true;
boolean generateGlobalCatalogReferences = true;
boolean generateGlobalSchemaReferences = true;
boolean generateGlobalRoutineReferences = true;
boolean generateGlobalSequenceReferences = true;
boolean generateGlobalTableReferences = true;
boolean generateGlobalUDTReferences = true;
boolean generateGlobalQueueReferences = true;
boolean generateGlobalLinkReferences = true;
boolean generateFluentSetters = false;
boolean generateJavaBeansGettersAndSetters = false;
boolean generateVarargsSetters = true;
String generateFullyQualifiedTypes = "";
boolean generateJavaTimeTypes = false;
boolean generateTableValuedFunctions = false;
boolean generateEmptyCatalogs = false;
boolean generateEmptySchemas = false;
protected GeneratorStrategyWrapper strategy;
protected String targetEncoding = "UTF-8";
protected String targetEncoding = "UTF-8";
final Language language;
AbstractGenerator(Language language) {
@ -507,6 +508,16 @@ abstract class AbstractGenerator implements Generator {
this.generateFluentSetters = fluentSetters;
}
@Override
public boolean generateJavaBeansGettersAndSetters() {
return generateJavaBeansGettersAndSetters;
}
@Override
public void setGenerateJavaBeansGettersAndSetters(boolean javaBeansGettersAndSetters) {
this.generateJavaBeansGettersAndSetters = javaBeansGettersAndSetters;
}
@Override
public boolean generateVarargsSetters() {
return generateVarargsSetters;

View File

@ -49,39 +49,50 @@ public class DefaultGeneratorStrategy extends AbstractGeneratorStrategy {
private String targetDirectory;
private String targetPackage;
private boolean instanceFields = true;
private boolean instanceFields = true;
private boolean javaBeansGettersAndSetters = false;
// -------------------------------------------------------------------------
// Initialisation
// -------------------------------------------------------------------------
@Override
public final void setInstanceFields(boolean instanceFields) {
public void setInstanceFields(boolean instanceFields) {
this.instanceFields = instanceFields;
}
@Override
public final boolean getInstanceFields() {
public boolean getInstanceFields() {
return instanceFields;
}
@Override
public final String getTargetDirectory() {
public void setJavaBeansGettersAndSetters(boolean javaBeansGettersAndSetters) {
this.javaBeansGettersAndSetters = javaBeansGettersAndSetters;
}
@Override
public boolean getJavaBeansGettersAndSetters() {
return javaBeansGettersAndSetters;
}
@Override
public String getTargetDirectory() {
return targetDirectory;
}
@Override
public final void setTargetDirectory(String directory) {
public void setTargetDirectory(String directory) {
this.targetDirectory = directory;
}
@Override
public final String getTargetPackage() {
public String getTargetPackage() {
return targetPackage;
}
@Override
public final void setTargetPackage(String packageName) {
public void setTargetPackage(String packageName) {
this.targetPackage = packageName;
}
@ -104,14 +115,33 @@ public class DefaultGeneratorStrategy extends AbstractGeneratorStrategy {
return definition.getOutputName().toUpperCase();
}
private String getterSetterSuffix(Definition definition) {
// [#5354] Please forgive me but this is how it works.
if (javaBeansGettersAndSetters) {
String name = getJavaMemberName(definition);
if (Character.isUpperCase(name.charAt(0)))
return name;
if (name.length() > 1 && Character.isUpperCase(name.charAt(1)))
return name;
char chars[] = name.toCharArray();
chars[0] = Character.toUpperCase(chars[0]);
return new String(chars);
}
else
return getJavaClassName0(definition, Mode.DEFAULT);
}
@Override
public String getJavaSetterName(Definition definition, Mode mode) {
return "set" + getJavaClassName0(definition, Mode.DEFAULT);
return "set" + getterSetterSuffix(definition);
}
@Override
public String getJavaGetterName(Definition definition, Mode mode) {
return "get" + getJavaClassName0(definition, Mode.DEFAULT);
return "get" + getterSetterSuffix(definition);
}
@Override
@ -232,7 +262,7 @@ public class DefaultGeneratorStrategy extends AbstractGeneratorStrategy {
return result.toString();
}
private final String getSubPackage(Definition definition) {
private String getSubPackage(Definition definition) {
if (definition instanceof TableDefinition) {
return "tables";
}

View File

@ -559,6 +559,8 @@ public class GenerationTool {
generator.setGenerateGlobalLinkReferences(g.getGenerate().isGlobalLinkReferences());
if (g.getGenerate().isFluentSetters() != null)
generator.setGenerateFluentSetters(g.getGenerate().isFluentSetters());
if (g.getGenerate().isJavaBeansGettersAndSetters() != null)
generator.setGenerateJavaBeansGettersAndSetters(g.getGenerate().isJavaBeansGettersAndSetters());
if (g.getGenerate().isVarargSetters() != null)
generator.setGenerateVarargsSetters(g.getGenerate().isVarargSetters());
if (g.getGenerate().isPojosEqualsAndHashCode() != null)
@ -597,6 +599,7 @@ public class GenerationTool {
// Generator properties that should in fact be strategy properties
strategy.setInstanceFields(generator.generateInstanceFields());
strategy.setJavaBeansGettersAndSetters(generator.generateJavaBeansGettersAndSetters());
if (true)

View File

@ -386,6 +386,16 @@ public interface Generator {
*/
void setGenerateFluentSetters(boolean fluentSetters);
/**
* Whether getters and setters should be generated JavaBeans style (or jOOQ style).
*/
boolean generateJavaBeansGettersAndSetters();
/**
* Whether getters and setters should be generated JavaBeans style (or jOOQ style).
*/
void setGenerateJavaBeansGettersAndSetters(boolean javaBeansGettersAndSetters);
/**
* Whether varargs setters should be generated for array types.
*/

View File

@ -75,6 +75,16 @@ public interface GeneratorStrategy {
*/
boolean getInstanceFields();
/**
* Whether getters and setters should be generated JavaBeans style (or jOOQ style).
*/
void setJavaBeansGettersAndSetters(boolean javaBeansGettersAndSetters);
/**
* Whether getters and setters should be generated JavaBeans style (or jOOQ style).
*/
boolean getJavaBeansGettersAndSetters();
/**
* This is applied to definitions that can result in reference static and
* instance members. For instance, the reference instance of a

View File

@ -107,6 +107,16 @@ class GeneratorStrategyWrapper extends AbstractGeneratorStrategy {
return delegate.getInstanceFields();
}
@Override
public void setJavaBeansGettersAndSetters(boolean javaBeansGettersAndSetters) {
delegate.setJavaBeansGettersAndSetters(javaBeansGettersAndSetters);
}
@Override
public boolean getJavaBeansGettersAndSetters() {
return delegate.getJavaBeansGettersAndSetters();
}
@Override
public String getFileHeader(Definition definition, Mode mode) {
return delegate.getFileHeader(definition, mode);

View File

@ -972,6 +972,29 @@
-->
<element name="fluentSetters" type="boolean" default="false" minOccurs="0" maxOccurs="1" />
<!--
Modify DefaultGeneratorStrategy behaviour to generate getters and setters in JavaBeans style in
- records
- pojos
- interfaces
If this flag is set to false, then:
- Column name : X_INDEX
- Attribute name: xIndex
- Getter name : getXIndex()
- Setter name : setXIndex()
If this flag is set to false, then:
- Getter name : getxIndex()
- Setter name : setxIndex()
Custom GeneratorStrategy implementations are unaffected.
-->
<element name="javaBeansGettersAndSetters" type="boolean" default="false" minOccurs="0" maxOccurs="1" />
<!--
Generate varargs setters for array types for convenience.