[#1364] Generate toString() on POJOs

This commit is contained in:
lukaseder 2015-09-11 12:42:34 +02:00
parent 61a0b5bb4d
commit bdd1b6814e
5 changed files with 99 additions and 2 deletions

View File

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

View File

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

View File

@ -255,15 +255,27 @@ public interface Generator {
void setFluentSetters(boolean fluentSetters);
/**
* Whether equals and hashCode methods should be generated on POJOs
* Whether <code>equals()</code> and <code>hashCode()</code> methods should
* be generated on POJOs
*/
boolean generatePojosEqualsAndHashCode();
/**
* Whether equals and hashCode methods should be generated on POJOs
* Whether <code>equals()</code> and <code>hashCode()</code> methods should
* be generated on POJOs
*/
void setGeneratePojosEqualsAndHashCode(boolean generatePojosEqualsAndHashCode);
/**
* Whether a <code>toString()</code> method should be generated on POJOs
*/
boolean generatePojosToString();
/**
* Whether a <code>toString()</code> 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.

View File

@ -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<? extends TypedElementDefinition<? extends Definition>> getTypedElements(Definition definition) {
if (definition instanceof TableDefinition) {
return ((TableDefinition) definition).getColumns();

View File

@ -658,6 +658,11 @@
-->
<element name="pojosEqualsAndHashCode" type="boolean" default="false" minOccurs="0" maxOccurs="1" />
<!--
Generate basic toString() methods in POJOs
-->
<element name="pojosToString" type="boolean" default="true" minOccurs="0" maxOccurs="1" />
<!--
Generate immutable POJOs for usage of the ResultQuery.fetchInto(Class) API
This overrides any value set in <pojos/>