Bug #1592
ferméVersioning - Méthode equals() ne fonctionne pas
Description
La méthode equals() de la classe DocumentVersionPK n'est pas correcte et ne fonctionne pas. En effet, en l'état elle compare un DocumentVersionPK avec un DocumentPK exclusivement, ce qui ne semble pas approprié et n'a d'ailleurs pas de sens. Je n'ai vu aucune utilisation particulière d'une telle relation d'égalité dans le code.
De plus, en comparant un DocumentVersionPK avec un DocumentPK, la méthode ne fonctionnerait pas et provoquerait systématiquement un NullPointerException, puisque dans le cas de DocumentVersionPK, les propriétés space et componentName sont nulles.
Code actuel :
public boolean equals(Object other) {
if (!(other instanceof DocumentPK)) {
return false;
}
return (id.equals(((DocumentPK) other).getId()))
&& (space.equals(((DocumentPK) other).getSpace()))
&& (componentName.equals(((DocumentPK) other).getComponentName()));
}
La méthode hashCode() n'est pas non plus adéquate en l'état.
Je suis tombé sur cette anomalie en ajoutant le support aux documents versionnés dans le mécanisme de synchronisation inter-Silverpeas (en effet, je fais usage de maps utilisant les clés DocumentVersionPK). Il faudrait comparer des DocumentVersionPK et ici seule la propriété id doit être comparée.
Solution par equals() :
public boolean equals(Object other) {
if (this other) {
return true;
}
if ((other null) || (getClass() != other.getClass())) {
return false;
}
DocumentVersionPK o = (DocumentVersionPK) other;
String thisId = getId();
String oId = o.getId();
if (thisId null) {
return (oId null);
}
return thisId.equals(oId);
}
Solution pour hashCode() :
public int hashCode() {
return (getId() != null) ? getId().hashCode() : 0;
}