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

Mis à jour par Emmanuel Hugonnet il y a environ 13 ans

  • Catégorie mis à Fichiers joints
  • Statut changé de New à Resolved
  • Version cible mis à Version 5.5

Mis à jour par Anonyme il y a environ 13 ans

  • Statut changé de Resolved à Re-opened

Merci Manu mais en fait, componentName est toujours null avec DocumentVersionPK, donc c'est pas entièrement corrigé (ça plante même).

Mis à jour par Anonyme il y a environ 13 ans

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

Mis à jour par Anonyme il y a environ 13 ans

  • Statut changé de Re-opened à Resolved

Mis à jour par Nicolas Eysseric il y a environ 13 ans

  • Statut changé de Resolved à Closed
  • % réalisé changé de 0 à 100
Actions

Formats disponibles : Atom PDF