From e0bf2e1de0473cd1b2099a2c0595cb42e59fb8b9 Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Fri, 30 Aug 2013 16:07:14 +0200 Subject: [PATCH] [#2713] Add support for custom code sections in generated code --- .../java/org/jooq/util/JavaGenerator.java | 113 +++++++++++++++++- 1 file changed, 111 insertions(+), 2 deletions(-) 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 76a46c7c09..298a4fc03d 100644 --- a/jOOQ-codegen/src/main/java/org/jooq/util/JavaGenerator.java +++ b/jOOQ-codegen/src/main/java/org/jooq/util/JavaGenerator.java @@ -636,11 +636,19 @@ public class JavaGenerator extends AbstractGenerator { out.tab(1).println("}"); - + generateRecordClassFooter(table, out); out.println("}"); out.close(); } + /** + * Subclasses may override this method to provide record class footer code. + * + * @param table The table + * @param out The writer + */ + protected void generateRecordClassFooter(TableDefinition table, JavaWriter out) {} + private final String getRowType(Collection columns) { StringBuilder result = new StringBuilder(); String separator = ""; @@ -707,10 +715,21 @@ public class JavaGenerator extends AbstractGenerator { out.tab(1).javadoc("Copy data into another generated Record/POJO implementing the common interface %s", local); out.tab(1).println("public E into(E into);", qualified); + + generateInterfaceClassFooter(table, out); out.println("}"); out.close(); } + /** + * Subclasses may override this method to provide interface class footer + * code. + * + * @param table The table + * @param out The writer + */ + protected void generateInterfaceClassFooter(TableDefinition table, JavaWriter out) {} + protected void generateUDTs(SchemaDefinition schema) { log.info("Generating UDTs"); @@ -795,10 +814,19 @@ public class JavaGenerator extends AbstractGenerator { out.tab(2).println("getDataType();"); out.tab(1).println("}"); + generateUDTClassFooter(udt, out); out.println("}"); out.close(); } + /** + * Subclasses may override this method to provide udt class footer code. + * + * @param udt The udt + * @param out The writer + */ + protected void generateUDTClassFooter(UDTDefinition udt, JavaWriter out) {} + /** * Generating UDT record classes */ @@ -881,10 +909,19 @@ public class JavaGenerator extends AbstractGenerator { out.tab(2).println("super(%s);", udtId); out.tab(1).println("}"); + generateUDTRecordClassFooter(udt, out); out.println("}"); out.close(); } + /** + * Subclasses may override this method to provide udt record class footer code. + * + * @param udt The udt + * @param out The writer + */ + protected void generateUDTRecordClassFooter(UDTDefinition udt, JavaWriter out) {} + protected void generateUDTRoutines(SchemaDefinition schema) { for (UDTDefinition udt : database.getUDTs(schema)) { if (udt.getRoutines().size() > 0) { @@ -981,10 +1018,19 @@ public class JavaGenerator extends AbstractGenerator { out.tab(2).println("setList(list);"); out.tab(1).println("}"); + generateArrayClassFooter(array, out); out.println("}"); out.close(); } + /** + * Subclasses may override this method to provide array class footer code. + * + * @param array The array + * @param out The writer + */ + protected void generateArrayClassFooter(ArrayDefinition array, JavaWriter out) {} + protected void generateEnums(SchemaDefinition schema) { log.info("Generating ENUMs"); @@ -1048,10 +1094,19 @@ public class JavaGenerator extends AbstractGenerator { out.tab(2).println("return literal;"); out.tab(1).println("}"); + generateEnumClassFooter(e, out); out.println("}"); out.close(); } + /** + * Subclasses may override this method to provide enum class footer code. + * + * @param e The enum + * @param out The writer + */ + protected void generateEnumClassFooter(EnumDefinition e, JavaWriter out) {} + protected void generateRoutines(SchemaDefinition schema) { log.info("Generating routines"); @@ -1140,11 +1195,20 @@ public class JavaGenerator extends AbstractGenerator { out.tab(1).println("private %s() {", className); out.tab(2).println("super(\"%s\", %s);", pkg.getOutputName(), schemaIdentifier); out.tab(1).println("}"); - out.println("}"); + generatePackageClassFooter(pkg, out); + out.println("}"); out.close(); } + /** + * Subclasses may override this method to provide package class footer code. + * + * @param pkg The package + * @param out The writer + */ + protected void generatePackageClassFooter(PackageDefinition pkg, JavaWriter out) {} + /** * Generating central static table access */ @@ -1276,10 +1340,19 @@ public class JavaGenerator extends AbstractGenerator { } } + generateDaoClassFooter(table, out); out.println("}"); out.close(); } + /** + * Subclasses may override this method to provide dao class footer code. + * + * @param table The table + * @param out The writer + */ + protected void generateDaoClassFooter(TableDefinition table, JavaWriter out) {} + protected void generatePojos(SchemaDefinition schema) { log.info("Generating table POJOs"); @@ -1383,10 +1456,19 @@ public class JavaGenerator extends AbstractGenerator { printFromAndInto(out, table); } + generatePojoClassFooter(table, out); out.println("}"); out.close(); } + /** + * Subclasses may override this method to provide POJO class footer code. + * + * @param table The table + * @param out The writer + */ + protected void generatePojoClassFooter(TableDefinition table, JavaWriter out) {} + protected void generateTables(SchemaDefinition schema) { log.info("Generating tables"); @@ -1568,10 +1650,19 @@ public class JavaGenerator extends AbstractGenerator { out.tab(1).println("}"); } + generateTableClassFooter(table, out); out.println("}"); out.close(); } + /** + * Subclasses may override this method to provide table class footer code. + * + * @param table The table + * @param out The writer + */ + protected void generateTableClassFooter(TableDefinition table, JavaWriter out) {} + protected void generateSequences(SchemaDefinition schema) { log.info("Generating sequences"); @@ -1628,10 +1719,19 @@ public class JavaGenerator extends AbstractGenerator { printSchemaReferences(out, database.getTables(schema), Table.class, true); printSchemaReferences(out, database.getUDTs(schema), UDT.class, true); + generateSchemaClassFooter(schema, out); out.println("}"); out.close(); } + /** + * Subclasses may override this method to provide schema class footer code. + * + * @param schema The schema + * @param out The writer + */ + protected void generateSchemaClassFooter(SchemaDefinition schema, JavaWriter out) {} + protected void printFromAndInto(JavaWriter out, TableDefinition table) { String qualified = getStrategy().getFullJavaClassName(table, Mode.INTERFACE); @@ -1903,10 +2003,19 @@ public class JavaGenerator extends AbstractGenerator { } } + generateRoutineClassFooter(routine, out); out.println("}"); out.close(); } + /** + * Subclasses may override this method to provide routine class footer code. + * + * @param routine The routine + * @param out The writer + */ + protected void generateRoutineClassFooter(RoutineDefinition routine, JavaWriter out) {} + protected void printConvenienceMethodFunctionAsField(JavaWriter out, RoutineDefinition function, boolean parametersAsField) { // [#281] - Java can't handle more than 255 method parameters if (function.getInParameters().size() > 254) {