|
From: <max...@us...> - 2003-02-02 16:26:10
|
Update of /cvsroot/hibernate/Hibernate2/src/net/sf/hibernate/tool/hbm2java
In directory sc8-pr-cvs1:/tmp/cvs-serv21450/src/net/sf/hibernate/tool/hbm2java
Modified Files:
BasicRenderer.java
Log Message:
Changed toString() generation to avoid possible stackoverflow in recursive models.
hbm2java now only includes the primary key in the toString generation.
If one wishes to include a certain property in the toString generation one
can add <meta attribute="use-in-tostring">true</meta> to the field or set etc.
Note: because of <meta> tag inheritance you can have all properties included by inserting
the <meta> in the top of the mapping file instead of adding the tag to all properties.
Note2: Current implementation does not include fields from the super class.
Index: BasicRenderer.java
===================================================================
RCS file: /cvsroot/hibernate/Hibernate2/src/net/sf/hibernate/tool/hbm2java/BasicRenderer.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -C2 -d -r1.7 -r1.8
*** BasicRenderer.java 1 Feb 2003 13:25:08 -0000 1.7
--- BasicRenderer.java 2 Feb 2003 16:26:07 -0000 1.8
***************
*** 227,264 ****
doFieldAccessors(classMapping, class2classmap, writer);
! writer.println();
! writer.println(" public String toString() {");
! //easier to use reflectionToString() than worry about superclasses
! writer.println(" return ToStringBuilder.reflectionToString(this);");
! writer.println(" }");
! writer.println();
! if ( classMapping.mustImplementEquals() ) {
! writer.println(" public boolean equals(Object other) {");
! writer.println(" if ( !(other instanceof " + classMapping.getGeneratedName() + ") ) return false;");
! writer.println(" " + classMapping.getGeneratedName() + " castOther = (" + classMapping.getGeneratedName() + ") other;");
! writer.println(" return new EqualsBuilder()");
! for (Iterator fields = classMapping.getFields().iterator(); fields.hasNext();) {
! Field field = (Field) fields.next();
! if ( field.isIdentifier() ) {
! writer.println(" .append(this." + field.getName() + ", castOther." + field.getName() + StringHelper.CLOSE_PAREN);
! }
! }
! writer.println(" .isEquals();");
! writer.println(" }");
! writer.println();
!
! writer.println(" public int hashCode() {");
! writer.println(" return new HashCodeBuilder()");
! for (Iterator fields = classMapping.getFields().iterator(); fields.hasNext();) {
! Field field = (Field) fields.next();
! if ( field.isIdentifier() ) {
! writer.println(" .append(" + field.getName() + StringHelper.CLOSE_PAREN);
! }
! }
! writer.println(" .toHashCode();");
! writer.println(" }");
! writer.println();
! }
writer.println("}");
--- 227,233 ----
doFieldAccessors(classMapping, class2classmap, writer);
! doToString(classMapping, writer);
! doEqualsAndHashCode(classMapping, writer);
writer.println("}");
***************
*** 271,274 ****
--- 240,289 ----
}
+
+ public void doEqualsAndHashCode(ClassMapping classMapping, PrintWriter writer) {
+ if ( classMapping.mustImplementEquals() ) {
+ writer.println(" public boolean equals(Object other) {");
+ writer.println(" if ( !(other instanceof " + classMapping.getGeneratedName() + ") ) return false;");
+ writer.println(" " + classMapping.getGeneratedName() + " castOther = (" + classMapping.getGeneratedName() + ") other;");
+ writer.println(" return new EqualsBuilder()");
+ for (Iterator fields = classMapping.getFields().iterator(); fields.hasNext();) {
+ Field field = (Field) fields.next();
+ if ( field.isIdentifier() ) {
+ writer.println(" .append(this." + field.getName() + ", castOther." + field.getName() + StringHelper.CLOSE_PAREN);
+ }
+ }
+ writer.println(" .isEquals();");
+ writer.println(" }");
+ writer.println();
+
+ writer.println(" public int hashCode() {");
+ writer.println(" return new HashCodeBuilder()");
+ for (Iterator fields = classMapping.getFields().iterator(); fields.hasNext();) {
+ Field field = (Field) fields.next();
+ if ( field.isIdentifier() ) {
+ writer.println(" .append(" + field.getName() + StringHelper.CLOSE_PAREN);
+ }
+ }
+ writer.println(" .toHashCode();");
+ writer.println(" }");
+ writer.println();
+ }
+ }
+
+ public void doToString(ClassMapping classMapping, PrintWriter writer) {
+
+ writer.println(" public String toString() {");
+ writer.println(" return new ToStringBuilder(this)");
+ for (Iterator fields = classMapping.getFields().iterator(); fields.hasNext();) {
+ Field field = (Field) fields.next();
+ if (field.isIdentifier() || field.getMetaAsBool("use-in-tostring")) {
+ writer.println(" .append(\"" + field.getName() + "\"," + field.getName() + ")");
+ }
+ }
+ writer.println(" .toString();");
+ writer.println(" }");
+ writer.println();
+
+ }
public void doFieldAccessors(ClassMapping classMapping, Map class2classmap, PrintWriter writer) {
|