Project

General

Profile

Actions

Bug #1592

closed

Versioning - Méthode equals() ne fonctionne pas

Added by Philippe Bazart almost 11 years ago. Updated almost 11 years ago.

Status:
Closed
Priority:
Normal
Category:
Fichiers joints
Start date:
01/27/2011
Due date:
% Done:

100%

Estimated time:
Spent time:
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 #1

Updated by Emmanuel Hugonnet almost 11 years ago

  • Category set to Fichiers joints
  • Status changed from New to Resolved
  • Target version set to Version 5.5
Actions #2

Updated by Philippe Bazart almost 11 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).

Actions #3

Updated by Philippe Bazart almost 11 years ago

Voir getDocVersionFormRS() dans VersioningDao.
De toute façon, seul id est la clé dans la table...

Actions #4

Updated by Philippe Bazart almost 11 years ago

  • Status changed from Re-opened to Resolved
Actions #5

Updated by Nicolas Eysseric almost 11 years ago

  • Status changed from Resolved to Closed
  • % Done changed from 0 to 100
Actions

Also available in: Atom PDF