From 4c7dd2f8068ff6bb499c509bfe182c49e8473710 Mon Sep 17 00:00:00 2001 From: lukaseder Date: Fri, 21 Apr 2017 18:24:36 +0200 Subject: [PATCH] [#5354] Add to the code generator to support JavaBeans --- .../java/org/jooq/util/AbstractGenerator.java | 93 +++++++++++-------- .../jooq/util/DefaultGeneratorStrategy.java | 50 ++++++++-- .../java/org/jooq/util/GenerationTool.java | 3 + .../main/java/org/jooq/util/Generator.java | 10 ++ .../java/org/jooq/util/GeneratorStrategy.java | 10 ++ .../jooq/util/GeneratorStrategyWrapper.java | 10 ++ .../resources/xsd/jooq-codegen-3.10.0.xsd | 23 +++++ 7 files changed, 148 insertions(+), 51 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 552505805b..29581f74f5 100644 --- a/jOOQ-codegen/src/main/java/org/jooq/util/AbstractGenerator.java +++ b/jOOQ-codegen/src/main/java/org/jooq/util/AbstractGenerator.java @@ -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; diff --git a/jOOQ-codegen/src/main/java/org/jooq/util/DefaultGeneratorStrategy.java b/jOOQ-codegen/src/main/java/org/jooq/util/DefaultGeneratorStrategy.java index cc3eb96a45..e7ab3efb76 100644 --- a/jOOQ-codegen/src/main/java/org/jooq/util/DefaultGeneratorStrategy.java +++ b/jOOQ-codegen/src/main/java/org/jooq/util/DefaultGeneratorStrategy.java @@ -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"; } 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 2ba1ebd476..c16453d14a 100644 --- a/jOOQ-codegen/src/main/java/org/jooq/util/GenerationTool.java +++ b/jOOQ-codegen/src/main/java/org/jooq/util/GenerationTool.java @@ -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) 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 6d23779b76..5140be585d 100644 --- a/jOOQ-codegen/src/main/java/org/jooq/util/Generator.java +++ b/jOOQ-codegen/src/main/java/org/jooq/util/Generator.java @@ -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. */ diff --git a/jOOQ-codegen/src/main/java/org/jooq/util/GeneratorStrategy.java b/jOOQ-codegen/src/main/java/org/jooq/util/GeneratorStrategy.java index 4b2e259dc3..037f654983 100644 --- a/jOOQ-codegen/src/main/java/org/jooq/util/GeneratorStrategy.java +++ b/jOOQ-codegen/src/main/java/org/jooq/util/GeneratorStrategy.java @@ -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 diff --git a/jOOQ-codegen/src/main/java/org/jooq/util/GeneratorStrategyWrapper.java b/jOOQ-codegen/src/main/java/org/jooq/util/GeneratorStrategyWrapper.java index c4d3ed5b9b..9824483352 100644 --- a/jOOQ-codegen/src/main/java/org/jooq/util/GeneratorStrategyWrapper.java +++ b/jOOQ-codegen/src/main/java/org/jooq/util/GeneratorStrategyWrapper.java @@ -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); diff --git a/jOOQ-meta/src/main/resources/xsd/jooq-codegen-3.10.0.xsd b/jOOQ-meta/src/main/resources/xsd/jooq-codegen-3.10.0.xsd index 3a3100a489..4073aabc58 100644 --- a/jOOQ-meta/src/main/resources/xsd/jooq-codegen-3.10.0.xsd +++ b/jOOQ-meta/src/main/resources/xsd/jooq-codegen-3.10.0.xsd @@ -972,6 +972,29 @@ --> + + +