Imposer une methode Equals pour une recherche dans une List

Imposer une methode Equals pour une recherche dans une List - Java - Programmation

Marsh Posté le 02-10-2006 à 13:27:51    

Bonjour,
J'ai 2 listes de droits ACL à comparer.
Je fais cela :
 
lppi.containsAll(defaultPermissions);
 
Le problème est que containsAll utilise la methose equals d'une classe (ProjectPermissionItem) que je ne peux overrider car privée. La méthode par défaut compare tous les champs un à un et aboutit à un resultat non pertinent. J'aimerais la overrider ou dire à à contains d'utiliser ma methode equals...
 
 
Comment faire (interface , heritage?)
 
 
Merci

Reply

Marsh Posté le 02-10-2006 à 13:27:51   

Reply

Marsh Posté le 02-10-2006 à 13:33:57    

equals dérive de Object, comment cette méthode peut elle être privée ?

Reply

Marsh Posté le 02-10-2006 à 13:37:52    

Au fait je me suis mal exprimer :)
Ce que je fais c'est etendre ma classe mere comme suit:
 

Code :
  1. public class C_ProjectPermissionItem extends ProjectPermissionItem {
  2. public C_ProjectPermissionItem(int type, String grantee, Project project)
  3.   throws InvalidDataException, PSException {
  4.  super(type, grantee, project);
  5.  // TODO Auto-generated constructor stub
  6. }
  7. public boolean equals(C_ProjectPermissionItem cppi) throws PSException {
  8.  // TODO Auto-generated method stub
  9.  if (this.getGranteeString().compareTo(cppi.getGranteeString()) == 0
  10.    && this.getPermission() == cppi.getPermission()
  11.    && this.getType() == cppi.getType())
  12.   return true;
  13.  else
  14.   return false;
  15. }
  16. }

Reply

Marsh Posté le 02-10-2006 à 13:38:15    

Je veux uiliser cet equal la et pas celui de la classe mere comment faire?

Reply

Marsh Posté le 02-10-2006 à 13:40:51    

si les éléments que tu compares sont bien de type C_ProjectPermissionItem, c'est ta méthode equals qui sera utilisée

Reply

Marsh Posté le 02-10-2006 à 13:47:02    

Comment puis je caster une liste de type ProjectPermissionItem en C_ProjectPermissionItem ?
sachant que C_ProjectPermissionItem herite de ProjectPermissionItem?

Reply

Marsh Posté le 02-10-2006 à 13:49:29    

tu peux pas
tu peux à la limite les wrapper dans C_ProjectPermissionItem, en ajoutant un constructeur  

Code :
  1. public C_ProjectPermissionItem(ProjectPermissionItem ppi) {
  2. ...
  3. }


et le code qui va bien

Reply

Marsh Posté le 02-10-2006 à 13:50:32    

List<C_ProjectPermissionItem> curPermissions = curProject
     .getProjectPermissions();
 
Est ce que ca c'est bon?

Reply

Marsh Posté le 02-10-2006 à 14:08:21    

Citation :

public boolean equals(C_ProjectPermissionItem cppi) throws PSException {
...
}


Citation :

Je veux uiliser cet equal la et pas celui de la classe mere comment faire?


 
tu redéfinis mal la méthode equals car elle doit prendre un Object en parametre :
 

Code :
  1. public boolean equals(Object cppi) throws PSException {
  2.   if (this == cppi) {
  3.     return true;
  4.   }
  5.   if (cppi instanceof C_ProjectPermissionItem) {
  6.     C_ProjectPermissionItem cp = (C_ProjectPermissionItem) cppi;
  7.     if (this.getGranteeString().equals(cp.getGranteeString())
  8.         && this.getPermission() == cp.getPermission()
  9.         && this.getType() == cp.getType()) {
  10.       return true;
  11.     } else {
  12.       return false;
  13.     }
  14.   }
  15.   return false;
  16. }


Message édité par Bidem le 02-10-2006 à 14:08:59
Reply

Marsh Posté le 02-10-2006 à 14:10:47    

Je teste ca :)

Reply

Marsh Posté le 02-10-2006 à 14:10:47   

Reply

Marsh Posté le 02-10-2006 à 14:33:06    

Ca marche pas :(...
Voila ce que je fais en detail:
Je commence par recuperer une liste ACL de mes droits par defaut:

Code :
  1. public static List<C_ProjectPermissionItem> getDefaultRights()
  2.   throws DataFormatException, PSException {
  3.  if (projectMap == null)
  4.   projectMap = getProjectMap(myProjectList);
  5.  Project defaultRightedProject = (Project) projectMap
  6.    .get((String) defaultRightProjectID);
  7.  displayProjectPermissions(defaultRightedProject);
  8.  if (defaultRightedProject != null) {
  9.   return (defaultPermissions = defaultRightedProject
  10.     .getProjectPermissions());
  11.  } else
  12.   return null;
  13. }


Reply

Marsh Posté le 02-10-2006 à 14:34:13    

ensuite je compare les droits du projet courant à ces doits par defaut:

Code :
  1. public static boolean compareToDefaultRights(
  2.   List<C_ProjectPermissionItem> lppi) throws DataFormatException,
  3.   PSException {
  4.  lppi.containsAll(defaultPermissions);
  5.  return lppi.containsAll(defaultPermissions);
  6. }

Reply

Marsh Posté le 02-10-2006 à 14:34:53    

le retour de lppi.containsAll(defaultPermissions) n'est pas bon car il semble pas prendre le bon equals :(

Reply

Marsh Posté le 02-10-2006 à 14:55:02    

Je vous ai perdu?

Reply

Marsh Posté le 02-10-2006 à 15:08:56    

noldor a écrit :

tu peux pas
tu peux à la limite les wrapper dans C_ProjectPermissionItem, en ajoutant un constructeur  

Code :
  1. public C_ProjectPermissionItem(ProjectPermissionItem ppi) {
  2. ...
  3. }


et le code qui va bien


 
 
Mias je le wrappe à quel niveau?
Une fois que j'ai recupérés ma liste de  ProjectPermissionItem grace à getProjectPermissions() , je fais comment pour les transformer en liste de C_ProjectPermissionItem sans faire un truc bête...?
Sachant qu'à la base je veux simplement modifier la methose equals pour la rendre moins restrictive?

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed