[#1364] Generate toString() on POJOs
This commit is contained in:
parent
61a0b5bb4d
commit
bdd1b6814e
@ -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;
|
||||
|
||||
@ -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());
|
||||
|
||||
|
||||
@ -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.
|
||||
|
||||
@ -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();
|
||||
|
||||
@ -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/>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user