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) { |