IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

Comment récupérer les sous éléments d'un élément


Sujet :

avec Java

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Décembre 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2012
    Messages : 3
    Points : 1
    Points
    1
    Par défaut 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 : 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;
                }
            }
    }

  2. #2
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 211
    Points : 8 316
    Points
    8 316
    Billets dans le blog
    52
    Par défaut
    Il faut que tu "flag" les groupes que tu as déjà parcours.

    Il y a plusieurs façon de faire :
    1. Ajoute un flag aux objets que tu parcours (A éviter)
    2. Passer en paramètres la liste des objets déjà parcouru
    3. Avoir en propriété de l'objet qui fait le parcours la liste des objets déjà parcouru

    Cordialement,
    Patrick Kolodziejczyk.
    Si une réponse vous a été utile pensez à
    Si vous avez eu la réponse à votre question, marquez votre discussion
    Pensez aux FAQs et aux tutoriels et cours.

  3. #3
    Nouveau Candidat au Club
    Femme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Décembre 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2012
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Merci
    Bonjour,

    C'est bien ce à quoi j'ai pensé. En fait, j'ai tenté de récupérer le premier groupe (G1). Je bloque au moment de savoir de quels fils il dispose car j'ai envie de créer un tableau qui prend tous les éléments existants. Une fois cela fait, j'ai envie de faire un test d’existence sur ce groupe.
    Plus concrètement:

    String [] listGroupsG1 = lstGroupSearchPath.getSelectedValue() ==> me donne le groupe sélectionner uniquement(D'où mon problème pour faire la suite car j'ignore comment lui faire savoir qu'il doit accepter le parcours que je lui demande via ma boucle for sur listGroupsG1...

    Merci d'avance pour vos réponses

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    En général, pour les travaux récursif sur des données pouvant être cyclique, je travaille comme ça, quand c'est possible. Soit X ton type de données:


    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
     
    // methode visible de l'extérieur
    public void travaillerRécusivement(X racine){
      travaillerRécusivement(new HashSet<X>(),racine);
    }
    //méthode interne récursive
    private  void travaillerRécusivement(Set<X> dejaVu, X aTraiter){
       if (dejaVu.contains(aTraiter))
         return;
       else {
         dejaVu.add(aTraiter);
         // traitement avec, pas exemple, dedans
         for (X child : atraiter.getChildren)
             travaillerRécusivement(dejaVu,child);
       }
    }
    Bon, ça nécessite que X soit immutable, en tout cas au moins durant le traitement. Si pas, faudra t'orienter vers des librairie fournissant un IdentityHashSet pour compenser.

  5. #5
    Nouveau Candidat au Club
    Femme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Décembre 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2012
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Hummm
    Je ne pense pas que ma liste ne sera pas muttable de suite.

    Je vais essayer votre principe sur la recursivité. Aussi, dans mon cas j'ai un booléen qui teste si l'enfant de G1 par exemple est un groupe ou un compte utilisateur. L'appel de la fonction récursive se fait à ce niveau. (Voir code)
    ...

  6. #6
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par Holyve974 Voir le message
    Aussi, dans mon cas j'ai un booléen qui teste si l'enfant de G1 par exemple est un groupe ou un compte utilisateur. L'appel de la fonction récursive se fait à ce niveau. (Voir code)
    ...
    Ca ne change pas grand chose, le principe étant de trainer une liste de ce qu'on a déjà vu / parcouru pour empêcher la récursivité.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 11/09/2006, 11h21
  2. Comment récupèrer les éléments d'une JList
    Par Orian dans le forum Composants
    Réponses: 13
    Dernier message: 10/09/2006, 11h53
  3. Comment récupérer les éléments d'un getComments
    Par AlexandraS dans le forum Langage
    Réponses: 6
    Dernier message: 31/05/2006, 11h21
  4. Comment récupérer les sous répertoires d'un répertoire
    Par charliejo dans le forum C++Builder
    Réponses: 2
    Dernier message: 15/02/2006, 08h47
  5. Comment récupérer les éléments d'un autre programme ?
    Par Henri_13 dans le forum API, COM et SDKs
    Réponses: 22
    Dernier message: 29/11/2005, 00h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo