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 : Sélectionner tout - Visualiser dans une fenêtre à part
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;
            }
        }
}