Hi Michele, thank you very much for your contribution so far. May it be possible for you to create a new issue for this in castor bug tracking under:
http://jira.codehaus.org/browse/CASTOR and attach you additions as a unified patch to the new issue. The patch would make my work just a bit easier then without. Having said that I'll try to get your additions into next release. Regards Ralf Michele Mazzucco schrieb: > I added this code to the org.exolab.castor.builder.SourceFactory class: > > /** > * Create an "hashCode" method on the given JClass. > * > * @param jclass the JClass in wich we create the hashCode method. > */ > public static void createHashCodeMethod(JClass jclass) { > if (jclass == null) { > throw new IllegalArgumentException("JClass must not be > null"); > } > > // The argument is not null > JField[] fields = jclass.getFields(); > > // Creates the method signature > JMethod jMethod = new JMethod(JType.Int, "hashCode"); > jMethod.setComment("Override the java.lang.Object.hashCode > method"); > > // The hashCode method has no arguments > jclass.addMethod(jMethod); > > JSourceCode jsc = jMethod.getSourceCode(); > > // The following steps came from Effective Java Programming > Language > Guide by Joshua Bloch, chapter 3 > jsc.add("int result = 17;"); > > for (int i = 0; i <fields.length; i++) { > JField temp = fields[i]; > // If the field is an object the hashCode method is > called recursively > > JType type = temp.getType(); > String name = temp.getName(); > if (type.isPrimitive()) { > if (type == JType.Boolean) { > jsc.add("result = 37 * result + (" + > name + "?0:1);"); > } else > if ((type == JType.Byte) || > (type == JType.Short) || > (type == JType.Int)) { > > jsc.add("result = 37 * result + (int)" > + name + ";"); > } else if (type == JType.Long) { > jsc.add("result = 37 * result + (int)(" > + name + "^(" + name + > ">>>32));"); > } else if (type == JType.Float) { > jsc.add("result = 37 * result + > Float.floatToIntBits(" + name + ");"); > } else if (type == JType.Double) { > jsc.add("long tmp = > Double.doubleToLongBits(" + name + ");"); > jsc.add("result = 37 * result + > (int)(tmp^(tmp>>>32));"); > } > } else { > // Calculates hashCode in a recursive manner. > jsc.add("result = 37 * result + " + name + > ".hashCode();"); > } > } > jsc.add(""); > jsc.add("return result;"); > } //createHashCodeMethod > > > > > and into the createSourceCode() method I've added the following control > > //create equals() method? > if (component.hasEquals()) { > createEqualsMethod(jClass); > createHashCodeMethod(jClass); > } > > since the hashCode method *must* be added when the equals method is > created (see Effective Java Programming Language Guide by Joshua Bloch, > chapter 3). > > > Best regards, > Michele > > > > Ralf Joachim wrote: > >>Hi Michele, >> >>SourceGenerator seams not to be able to generate hashcode() / equals() >>methods at the moment. In general I don't see a reason why it should not >>be possible to improve SourceGenerator to also generate them. As with >>other open source projects we are open for contributions. So you are >>open to volunteer on this addition. >> >>Regards >>Ralf >>Castor JDO, committer >> >> >>Michele Mazzucco schrieb: >> >>>Hi all, >>> >>>is it possible to "autogenerate" the hashCode() method on java objects >>>created from the xml schema?, otherwise checks on the server side could >>>return wrong values (i.e. checking if an object sent by by client is >>>stored in a collection hosted by the server side). >>> >>> >>>Thanks in advance, >>>Michele >>> >>>------------------------------------------------- >>>If you wish to unsubscribe from this list, please send an empty >>>message to the following address: >>> >>>[EMAIL PROTECTED] >>>------------------------------------------------- >> >>------------------------------------------------- >>If you wish to unsubscribe from this list, please send an empty message >>to the following address: >> >>[EMAIL PROTECTED] >>------------------------------------------------- >> > > > ------------------------------------------------- > If you wish to unsubscribe from this list, please > send an empty message to the following address: > > [EMAIL PROTECTED] > ------------------------------------------------- -- Syscon Ingenieurbüro für Meß- und Datentechnik GmbH Ralf Joachim Raiffeisenstraße 11 D-72127 Kusterdingen Germany Tel. +49 7071 3690 52 Mobil: +49 173 9630135 Fax +49 7071 3690 98 Email: [EMAIL PROTECTED] Web: www.syscon-world.de ------------------------------------------------- If you wish to unsubscribe from this list, please send an empty message to the following address: [EMAIL PROTECTED] -------------------------------------------------

