Projet

Général

Profil

Actions

Bug #1592

fermé

Versioning - Méthode equals() ne fonctionne pas

Ajouté par Anonyme il y a environ 13 ans. Mis à jour il y a environ 13 ans.

Statut:
Closed
Priorité:
Normal
Assigné à:
-
Catégorie:
Fichiers joints
Début:
27/01/2011
Echéance:
% réalisé:

100%

Temps estimé:
Temps passé:
Navigateur:
Tous
Votre version de Silverpeas:
5.4.2
Système d'exploitation:
Votre base de données:
Toutes
Livraison en TEST:
Livraison en PROD:

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;
}
Actions

Formats disponibles : Atom PDF