Bug #1592
closed
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;
}
Updated by Emmanuel Hugonnet almost 15 years ago
- Category set to Fichiers joints
- Status changed from New to Resolved
- Target version set to Version 5.5
Updated by Anonymous almost 15 years ago
- Status changed from Resolved to Re-opened
Merci Manu mais en fait, componentName est toujours null avec DocumentVersionPK, donc c'est pas entièrement corrigé (ça plante même).
Updated by Anonymous almost 15 years ago
Voir getDocVersionFormRS() dans VersioningDao.
De toute façon, seul id est la clé dans la table...
Updated by Anonymous almost 15 years ago
- Status changed from Re-opened to Resolved
Updated by Nicolas Eysseric almost 15 years ago
- Status changed from Resolved to Closed
- % Done changed from 0 to 100