From bdd1b6814ec7e1d796d4938c269f1d6dded31461 Mon Sep 17 00:00:00 2001 From: lukaseder Date: Fri, 11 Sep 2015 12:42:34 +0200 Subject: [PATCH] [#1364] Generate toString() on POJOs --- .../java/org/jooq/util/AbstractGenerator.java | 11 +++ .../java/org/jooq/util/GenerationTool.java | 2 + .../main/java/org/jooq/util/Generator.java | 16 ++++- .../java/org/jooq/util/JavaGenerator.java | 67 +++++++++++++++++++ .../main/resources/xsd/jooq-codegen-3.7.0.xsd | 5 ++ 5 files changed, 99 insertions(+), 2 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 d21d583ebd..a04bac7d5f 100644 --- a/jOOQ-codegen/src/main/java/org/jooq/util/AbstractGenerator.java +++ b/jOOQ-codegen/src/main/java/org/jooq/util/AbstractGenerator.java @@ -60,6 +60,7 @@ abstract class AbstractGenerator implements Generator { boolean generateRecords = true; boolean generatePojos = false; boolean generatePojosEqualsAndHashCode = false; + boolean generatePojosToString = true; boolean generateImmutablePojos = false; boolean generateInterfaces = false; boolean generateDaos = false; @@ -304,6 +305,16 @@ abstract class AbstractGenerator implements Generator { this.generatePojosEqualsAndHashCode = generatePojosEqualsAndHashCode; } + @Override + public boolean generatePojosToString() { + return generatePojosToString; + } + + @Override + public void setGeneratePojosToString(boolean generatePojosToString) { + this.generatePojosToString = generatePojosToString; + } + @Override public String fullyQualifiedTypes() { return fullyQualifiedTypes; 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 b08b1465df..0f657f6f7c 100644 --- a/jOOQ-codegen/src/main/java/org/jooq/util/GenerationTool.java +++ b/jOOQ-codegen/src/main/java/org/jooq/util/GenerationTool.java @@ -412,6 +412,8 @@ public class GenerationTool { generator.setFluentSetters(g.getGenerate().isFluentSetters()); if (g.getGenerate().isPojosEqualsAndHashCode() != null) generator.setGeneratePojosEqualsAndHashCode(g.getGenerate().isPojosEqualsAndHashCode()); + if (g.getGenerate().isPojosToString() != null) + generator.setGeneratePojosToString(g.getGenerate().isPojosToString()); if (g.getGenerate().getFullyQualifiedTypes() != null) generator.setFullyQualifiedTypes(g.getGenerate().getFullyQualifiedTypes()); 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 a7f613ec75..ab28bc449e 100644 --- a/jOOQ-codegen/src/main/java/org/jooq/util/Generator.java +++ b/jOOQ-codegen/src/main/java/org/jooq/util/Generator.java @@ -255,15 +255,27 @@ public interface Generator { void setFluentSetters(boolean fluentSetters); /** - * Whether equals and hashCode methods should be generated on POJOs + * Whether equals() and hashCode() methods should + * be generated on POJOs */ boolean generatePojosEqualsAndHashCode(); /** - * Whether equals and hashCode methods should be generated on POJOs + * Whether equals() and hashCode() methods should + * be generated on POJOs */ void setGeneratePojosEqualsAndHashCode(boolean generatePojosEqualsAndHashCode); + /** + * Whether a toString() method should be generated on POJOs + */ + boolean generatePojosToString(); + + /** + * Whether a toString() method should be generated on POJOs + */ + void setGeneratePojosToString(boolean generatePojosToString); + /** * A regular expression matching all the types in generated code that should * be fully qualified. 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 15d687a5b9..85a318bde8 100644 --- a/jOOQ-codegen/src/main/java/org/jooq/util/JavaGenerator.java +++ b/jOOQ-codegen/src/main/java/org/jooq/util/JavaGenerator.java @@ -2566,6 +2566,9 @@ public class JavaGenerator extends AbstractGenerator { generatePojoEqualsAndHashCode(tableOrUDT, out); } + if (generatePojosToString()) { + generatePojoToString(tableOrUDT, out); + } if (generateInterfaces() && !generateImmutablePojos()) { printFromAndInto(out, tableOrUDT); @@ -2694,6 +2697,70 @@ public class JavaGenerator extends AbstractGenerator { } } + protected void generatePojoToString(Definition tableOrUDT, JavaWriter out) { + final String className = getStrategy().getJavaClassName(tableOrUDT, Mode.POJO); + + out.println(); + + if (scala) { + out.tab(1).println("override def toString : String = {"); + + out.tab(2).println("val sb = new %s(\"%s (\")", StringBuilder.class, className); + out.tab(2).println(); + + String separator = ""; + for (TypedElementDefinition column : getTypedElements(tableOrUDT)) { + final String columnMember = getStrategy().getJavaMemberName(column, Mode.POJO); + final String columnType = getJavaType(column.getType()); + + if (columnType.equals("Array[scala.Byte]")) { + out.tab(2).println("sb%s.append(\"[binary...]\")", separator); + } + else { + out.tab(2).println("sb%s.append(%s)", separator, columnMember); + } + + separator = ".append(\", \")"; + } + + out.tab(2).println(); + out.tab(2).println("sb.append(\")\");"); + + out.tab(2).println("return sb.toString"); + out.tab(1).println("}"); + } + else { + out.tab(1).println("@Override"); + out.tab(1).println("public String toString() {"); + out.tab(2).println("%s sb = new %s(\"%s (\");", StringBuilder.class, StringBuilder.class, className); + out.tab(2).println(); + + String separator = ""; + for (TypedElementDefinition column : getTypedElements(tableOrUDT)) { + final String columnMember = getStrategy().getJavaMemberName(column, Mode.POJO); + final String columnType = getJavaType(column.getType()); + final boolean array = columnType.endsWith("[]"); + + if (array && columnType.equals("byte[]")) { + out.tab(2).println("sb%s.append(\"[binary...]\");", separator); + } + else if (array) { + out.tab(2).println("sb%s.append(%s.toString(%s));", separator, Arrays.class, columnMember); + } + else { + out.tab(2).println("sb%s.append(%s);", separator, columnMember); + } + + separator = ".append(\", \")"; + } + + out.tab(2).println(); + out.tab(2).println("sb.append(\")\");"); + out.tab(2).println("return sb.toString();"); + out.tab(1).println("}"); + } + } + private List> getTypedElements(Definition definition) { if (definition instanceof TableDefinition) { return ((TableDefinition) definition).getColumns(); diff --git a/jOOQ-meta/src/main/resources/xsd/jooq-codegen-3.7.0.xsd b/jOOQ-meta/src/main/resources/xsd/jooq-codegen-3.7.0.xsd index d940e8f73c..6f30161b5b 100644 --- a/jOOQ-meta/src/main/resources/xsd/jooq-codegen-3.7.0.xsd +++ b/jOOQ-meta/src/main/resources/xsd/jooq-codegen-3.7.0.xsd @@ -658,6 +658,11 @@ --> + + +