Comment récupérer les sous éléments d'un élément
Bonjour à tous,
Je suis actuellement entrain de faire une évolution sur une application existante. En effet, j'ai fait une fonction récursive qui permet de mettre à jour un groupe, le couac c'est lorsque le groupe contient un groupe qui le contient lui-même.
Je m'explique:
Soit un groupe G1 qui contient G2
Et G2 qui contient G1
Lors ce cas se présente, je me retrouve avec une boucle infinie. Pourriez vous le dire comment il est possible de gérer l'arrêt de cette fonction. J'ai essayé de récupérer le contenu de G1 et de le mettre dans un tableau, mais je n'y arrive pas...
Voici le code des 2 fonctions:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
| //Mise à jour des groupes
private void btnUpdatePortalTabGroupActionPerformed(java.awt.event.ActionEvent evt) {
cat.setLevel(Level.WARN);
System.out.println(lstGroupSearchPath.getSelectedValue().toString().isEmpty());
if (lstGroupSearchPath.getSelectedIndex() == -1) {
JOptionPane.showMessageDialog(getContentPane(), "Veuillez sélectionner un groupe!");
}
else {
//Itération sur les x groupes selectionnés
for ( int i = 0; i < lstGroupSearchPath.getSelectedValues().length; i++) {
//Initialiser - vider le tableau
//listGroups.add(groupHandler.getAvailableMembers(connect, lstGroupSearchPath.getSelectedValues()[i].toString()))[i];
Group group = (Group) (groupHandler.getAvailableMembers(connect, lstGroupSearchPath.getSelectedValues()[i].toString()))[0];
ParcoursGrpe(group);
//listGroups = null;
}
JOptionPane.showMessageDialog(getContentPane(), "Mise à jour des Onglets terminée");
}
}
//Parcours récursif de l'arborescence des groupes
private void ParcoursGrpe(Group group) {
boolean blIsGroup=false;
boolean blIsAccount=false;
// System.out.println("taille: " + group.getMembers().getValue().length);
if (group.getMembers().getValue() != null) {
//Parcours itératif sur la liste des membres du groupe
for (int j = 0; j < group.getMembers().getValue().length; j++) {
blIsAccount = group.getMembers().getValue()[j].getClass().toString().contains(".Account");
blIsGroup = group.getMembers().getValue()[j].getClass().toString().contains(".Group");
// Si le membre est un groupe, appel récursif
if (blIsGroup){
//System.out.println("Groupe trouvé : " + group.getMembers().getValue()[j].getSearchPath().getValue());
Group sousGrp = (Group) (groupHandler.getAvailableMembers(connect,group.getMembers().getValue()[j].getSearchPath().getValue()))[0];
// Si il n'y est pas on appel la fonction et on ajoute le nom du groupe en question dans le tableau
// if(grpExiste(sousGrp)){
//Sinon nada !
//System.out.println("Voici le groupe :" +grpExiste(sousGrp));
ParcoursGrpe(sousGrp);
// }
//else
// break;
}
else {
// Si le membre est un User, mise à jour de ces onglets
if (blIsAccount) {
try {
portalTab.removeTab(connect, group.getMembers().getValue()[j].getSearchPath().getValue());
portalTab.addPortalTabs(connect, templateSearchPath, group.getMembers().getValue()[j].getSearchPath().getValue());
} catch (Exception ex) {
System.out.println("Youhou");
java.util.logging.Logger.getLogger(GestionHabilitation.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
}
}
blIsAccount = false;
blIsGroup = false;
}
}
} |