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

Format d'�change (XML, JSON...) Java Discussion :

Tester si un �l�ment est vide dans fichier XML


Sujet :

Format d'�change (XML, JSON...) Java

  1. #1
    Membre �clair�
    Profil pro
    Inscrit en
    Ao�t 2008
    Messages
    256
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Ao�t 2008
    Messages : 256
    Par d�faut Tester si un �l�ment est vide dans fichier XML
    Bonjour � tous,

    Je cherche � savoir comment je peut savoir si un �l�ment contient bien une valeur. Bien �videmment, j'ai essay� avec les m�thodes isEmpty(), equals() , lenghts() mais rien n'y fait (dans le fichier XML ci-dessous mon probl�me survient sur streetnumber).
    Je vais mettre un exemple de mon fichier XML pour que cela soit plus claire ainsi que le code que j'exploite et la stacktrace.

    Fichier XML :
    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
     
     
     
    -<customer numberofnights="6" id="ZTNWAQGI" checkin="27/02/2015">
     
    <firstname>Nnh</firstname>
    <booking>
        <lastname>TOTO</lastname>
        <id type="idcard">nnnn</id>
        <address>
           <streetnumber/>
           <streetname/>
           <zipcode/>
           <city/>
           <country/>
       </address>
       <phone>onoi</phone>
       <email/>
       <room id="205" type="rt3" state="available"/>
       </customer>
    </booking>
    Le code :
    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
     
            final DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();        
     
     
                final DocumentBuilder builder = factory.newDocumentBuilder();		
                final Document document = builder.parse(new File(XmlDoc));
     
                /** Tant qu'il y a des réservations on continue */
                for (Map.Entry<String, Booking> entree : hmBooking.entrySet()) {
     
                    final Element racine = document.getDocumentElement();
                    final NodeList racineNoeuds = racine.getChildNodes();
                    final int nbRacineNoeuds = racineNoeuds.getLength();        
     
                    for (int i = 0; i < nbRacineNoeuds; i++) {
     
                        if(racineNoeuds.item(i).getNodeType() == Node.ELEMENT_NODE){
     
                            Element nodeElement = (Element) racineNoeuds.item(i);
     
                            if (nodeElement.getTagName().equals("customer")) {
     
                                /** Modifie les attributs de l'élément customer */
                                NodeList nlCustomer = document.getElementsByTagName("customer");
     
                                if (nlCustomer != null && nlCustomer.getLength() > 0) {
     
                                    for (int y = 0; y < nlCustomer.getLength(); y++) {
     
                                        Node node = nlCustomer.item(y);
                                        Element e = (Element) node;
     
                                        String id = e.getAttribute("id");
     
                                        if (id.equals(entree.getValue().getIdbooking())) { 
     
                                                Node streetnumber = document.getElementsByTagName("streetnumber").item(y);
                                                if(!streetnumber.equals(null)){
                                                streetnumber.setTextContent(entree.getValue().getStreetnumber());}
     
    /** IL N'Y A PAS TOUT LE CODE MAIS LA SUITE EST IDENTIQUE ET A LA FIN IL Y A LE TRANSFORMER */
    La stackTrace :
    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
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
     
    debug:
    Nnh
    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    	at ***.projet.XMLBooking.ModifXmlBooking(XMLBooking.java:219)
    	at ***.projet.jDialogBooking.SaveDataBooking(jDialogBooking.java:257)
    	at ***.projet.jDialogBooking.ModifBooking(jDialogBooking.java:730)
    	at ***.projet.jDialogBooking.jBValiderActionPerformed(jDialogBooking.java:667)
    	at ***.projet.jDialogBooking.access$100(jDialogBooking.java:41)
    	at ***.projet.jDialogBooking$3.actionPerformed(jDialogBooking.java:421)
    	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
    	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2346)
    	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
    	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
    	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
    	at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:289)
    	at java.awt.Component.processMouseEvent(Component.java:6525)
    	at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
    	at java.awt.Component.processEvent(Component.java:6290)
    	at java.awt.Container.processEvent(Container.java:2234)
    	at java.awt.Component.dispatchEventImpl(Component.java:4881)
    	at java.awt.Container.dispatchEventImpl(Container.java:2292)
    	at java.awt.Component.dispatchEvent(Component.java:4703)
    	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4898)
    	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4533)
    	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4462)
    	at java.awt.Container.dispatchEventImpl(Container.java:2278)
    	at java.awt.Window.dispatchEventImpl(Window.java:2739)
    	at java.awt.Component.dispatchEvent(Component.java:4703)
    	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:746)
    	at java.awt.EventQueue.access$400(EventQueue.java:97)
    	at java.awt.EventQueue$3.run(EventQueue.java:697)
    	at java.awt.EventQueue$3.run(EventQueue.java:691)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
    	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:86)
    	at java.awt.EventQueue$4.run(EventQueue.java:719)
    	at java.awt.EventQueue$4.run(EventQueue.java:717)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
    	at java.awt.EventQueue.dispatchEvent(EventQueue.java:716)
    	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
    	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:109)
    	at java.awt.WaitDispatchSupport$2.run(WaitDispatchSupport.java:184)
    	at java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:229)
    	at java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:227)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at java.awt.WaitDispatchSupport.enter(WaitDispatchSupport.java:227)
    	at java.awt.Dialog.show(Dialog.java:1084)
    	at java.awt.Component.show(Component.java:1654)
    	at java.awt.Component.setVisible(Component.java:1606)
    	at java.awt.Window.setVisible(Window.java:1014)
    	at java.awt.Dialog.setVisible(Dialog.java:1005)
    	at ***.projet.BuildResa.jBModifResaActionPerformed(BuildResa.java:1645)
    	at ***.projet.BuildResa.access$1400(BuildResa.java:41)
    	at ***.projet.BuildResa$17.actionPerformed(BuildResa.java:964)
    	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
    	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2346)
    	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
    	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
    	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
    	at java.awt.Component.processMouseEvent(Component.java:6525)
    	at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
    	at java.awt.Component.processEvent(Component.java:6290)
    	at java.awt.Container.processEvent(Container.java:2234)
    	at java.awt.Component.dispatchEventImpl(Component.java:4881)
    	at java.awt.Container.dispatchEventImpl(Container.java:2292)
    	at java.awt.Component.dispatchEvent(Component.java:4703)
    	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4898)
    	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4533)
    	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4462)
    	at java.awt.Container.dispatchEventImpl(Container.java:2278)
    	at java.awt.Window.dispatchEventImpl(Window.java:2739)
    	at java.awt.Component.dispatchEvent(Component.java:4703)
    	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:746)
    	at java.awt.EventQueue.access$400(EventQueue.java:97)
    	at java.awt.EventQueue$3.run(EventQueue.java:697)
    	at java.awt.EventQueue$3.run(EventQueue.java:691)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
    	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:86)
    	at java.awt.EventQueue$4.run(EventQueue.java:719)
    	at java.awt.EventQueue$4.run(EventQueue.java:717)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
    	at java.awt.EventQueue.dispatchEvent(EventQueue.java:716)
    	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
    	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
    	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    	at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
    BUILD SUCCESSFUL (total time: 1 minute 47 seconds)
    En vous remerciant � tous d'avance.

  2. #2
    Mod�rateur
    Avatar de joel.drigo
    Homme Profil pro
    Ing�nieur R&D - D�veloppeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 55
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : Ing�nieur R&D - D�veloppeur Java
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par d�faut
    Salut,

    Je ne comprends pas bien o� tu as la NullPointerException : il faudrait que tu ajoutes un commentaire sur la ligne exacte du genre // c'est ici la ligne 219A priori, je devine que le probl�le est dans ce bout de code :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    Node streetnumber = document.getElementsByTagName("streetnumber").item(y);
    if(!streetnumber.equals(null)){ // ici probablement la ligne 219
        streetnumber.setTextContent(entree.getValue().getStreetnumber());}
    D�j�, ne fait jamais un equals(null) : �a ne sert � rien. equals(null) retourne toujours false, car une instance sur laquelle on appelle une m�thode existe forc�ment, et ne peut pas �tre �gale � null. Par contre, si une variable pointe sur aucune instance, et, donc, est de valeur null, appeler equals() sur cette m�thode provoque forc�ment un NullPointerException.

    Pour tester si une instance est null, on utilise == :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    Node streetnumber = document.getElementsByTagName("streetnumber").item(y);
    if( streetnumber != null ){ 
        streetnumber.setTextContent(entree.getValue().getStreetnumber());
    }
    Par contre, ceci n'a rien � voir avec le fait de tester si un Element est vide, ou n'a pas de valeur. D�j� il faut d�finir ce que tu entends par "est vide" et "n'a pas de valeur". Un Element element n'a pas de fils si element.hasChildNodes() retourne false. Mais si cette m�thode retourne true, cela veut dire qu'elle a des nodes enfants : cela peut-�tre des Element, des Text, des commentaires (Comment), etc... Est-ce qu'un Element qui a un seul Node de type Comment est "vide" ? Un Element qui a uniquement en fils 3 nodes de type element, a-t-il une valeur ou pas ?

    L'API JDOM rend plus pratique ce genre de tests. Mais il est un peu tard maintenant pour changer.

    Pour r�cup�rer le contenu texte d'un Element org.w3c, tu peux faire comme �a :

    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
    public class XmlUtils {
       public static String getText(Element element) {
          return getText(element, false);
       }
       public static String getText(Element element, boolean newline) {
          StringBuilder builder = null;
          NodeList list = element.getChildNodes();
          for(int i = 0; i < list.getLength(); i++) {
              Node node = list.item(i);
              short type = node.getNodeType();
              if(type == Node.TEXT_NODE || type == Node.CDATA_SECTION_NODE) {
                 if ( builder==null ) {
                    builder = new StringBuilder();
                }
                if ( newline ) {
                   if ( builder.length()>0 ) {
                      builder.append(System.lineSeparator());
                   }
                }
                builder.append(node.getNodeValue());
             }
          }
          return builder==null?null:builder.toString();
       }
    }
    Avec cette m�thode tu peux tester si un Element a du texte :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    boolean adutexte = XmlUtils.getText(element)!=null;
    boolean napasdetexte = XmlUtils.getText(element)==null;
    L'expression "�a marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le probl�me.
    La plupart des r�ponses � vos questions sont d�j� dans les FAQs ou les Tutoriels, ou peut-�tre dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement pos�e et r�dig�e et vous aurez plus de chances de r�ponses adapt�es et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'�diteur de messages).
    Nouveau sur le forum ? Consultez Les R�gles du Club.

  3. #3
    Membre �clair�
    Profil pro
    Inscrit en
    Ao�t 2008
    Messages
    256
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Ao�t 2008
    Messages : 256
    Par d�faut
    Bonjour Jo�l,

    Super ! �a fonctionne tr�s bien par contre je suis d��u, juste parce que j'ai mis equals(null) au lieu de mettre != null cela n'a pas fonctionn� ... JAVA aurait pu faire l'impasse pour moi.

    Concernant la ligne 219, c'est effectivement celle que tu as comment� c'est � dire (c'�tait un test) :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
     
    Node streetnumber = document.getElementsByTagName("streetnumber").item(y);
    if(!streetnumber.equals(null)){ // ici probablement la ligne 219 ---> C'est bien celle là
        streetnumber.setTextContent(entree.getValue().getStreetnumber());}
    Tu as not� � la fin de ton message ceci :
    Avec cette m�thode tu peux tester si un Element a du texte :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    boolean adutexte = XmlUtils.getText(element)!=null;
    boolean napasdetexte = XmlUtils.getText(element)==null;
    Si j'essaie comme tu me l'a indiqu� �a ne fonctionne pas il faut absolument que je fasse comme �a :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
     
    /** Ceci fonctionne */
    streetnumber != null
     
    /** Ceci ne fonctionne pas  */
    streetnumber.getTextContent(element) != null
    Apr�s, bien �videmment je n'ai peut �tre pas fait les choses correctement donc l'erreur vient certainement de moi ? Sinon pour finir en laissant juste le nom du Node �a fonctionne.

    Qu'en penses-tu ?

    Merci d'avance

  4. #4
    Mod�rateur
    Avatar de joel.drigo
    Homme Profil pro
    Ing�nieur R&D - D�veloppeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 55
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : Ing�nieur R&D - D�veloppeur Java
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par d�faut
    Salut

    Citation Envoy� par Jb_One73 Voir le message
    Super ! �a fonctionne tr�s bien par contre je suis d��u, juste parce que j'ai mis equals(null) au lieu de mettre != null cela n'a pas fonctionn� ... JAVA aurait pu faire l'impasse pour moi.
    R�ponse courte : et oui, la syntaxe est rigoureuse
    R�ponse longue : clique sur le bouton "Montrer"

    Rappels:
    Il y a 2 sortes de types en Java : les types primitifis, comme int, boolean, long, double, char..., et les classes qui permettent de faire des objets
    Par d�finition, un objet, c'est des attributs et des m�thodes. Techniquement, c'est une zone de m�moire. On la manipule par une r�frence (l'adresse de la zone de m�moire).
    Une variable de type classe contient une r�f�rence. La syntaxe Java fait que lorsqu'on met une expression du type ".quelquechose", on fait appel � une m�thode ou un attribut de l'objet qui est d�sign� par cette r�f�rence..

    Les expressions toto==titi et toto.equals(titi) ont un sens diff�rent. La premi�re permet de tester si les r�f�rences sont �gales (les r�f�rences contenues dans les variables), et la seconde, si les objets sont �gaux logiquement (les objets d�sign�s par leur r�f�rence contenue dans les variables toto et titi). On ne peut pas demander � Java de consid�rer que toto.equals(titi) ex�cute toto==titi quand toto et titi sont nulls : c'est un cas hyper particulier qui n�cessiterait en plus pour l'ex�cuter qu'on teste syst�matiquement titi, donc de perdre du temps. La syntaxe n'est pas l� pour permettre au programmeur d'�crire des trucs avec la mauvaise syntaxe et que �a fonctionne quand m�me parce que logiquement �a pourrait marcher dans ce cas partilculier, mais pour indiquer pr�cisemment ce qu'on veut que le programme fasse. Or, quand on �crit toto.equals(titi) on veut pr�cisemment dire qu'on veut comparer les objets et non leur r�f�rence, et on ne voudrait pas que Java fasse que, pour des cas particuliers, �a ex�cute toto==titi, au d�triment de la logique de la syntaxe (et des performances, en plus).


    Citation Envoy� par Jb_One73 Voir le message
    Si j'essaie comme tu me l'a indiqu� �a ne fonctionne pas il faut absolument que je fasse comme �a :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
     
    /** Ceci fonctionne */
    streetnumber != null
     
    /** Ceci ne fonctionne pas  */
    streetnumber.getTextContent(element) != null
    Parce que les deux lignes n'ont pas le m�me sens : la premi�re permet de tester s'il y a un objet Element r�f�renc� par la variable streetnumber et la seconde permet d'appeler une m�thode qui n'existe pas sur un Element. De plus, la premi�re ne permet pas de tester si l'Element r�f�renc� par streetnumber contient du texte ou pas.

    Donc, ce serait plut�t comme �a que j'envisageais le code :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Element streetNumber = (Element)document.getElementsByTagName("streetnumber").item(y);
     
    if ( streetnumber != null ) [
       if ( XmlUtils.getText( streeNumber ) == null ) {
     
          // pas de texte dans l'élément référence par streeNummber
     
       }
    }
    L'expression "�a marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le probl�me.
    La plupart des r�ponses � vos questions sont d�j� dans les FAQs ou les Tutoriels, ou peut-�tre dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement pos�e et r�dig�e et vous aurez plus de chances de r�ponses adapt�es et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'�diteur de messages).
    Nouveau sur le forum ? Consultez Les R�gles du Club.

Discussions similaires

  1. R�ponses: 2
    Dernier message: 16/02/2015, 16h57
  2. [D�butant] [POO] Tester si la cellule est vide dans un tableau de cellules
    Par ghada97 dans le forum MATLAB
    R�ponses: 2
    Dernier message: 23/09/2013, 13h27
  3. [AC-2003] Tester si une cellule est vide dans un classeur excel et faire une boucle
    Par moilou2 dans le forum VBA Access
    R�ponses: 11
    Dernier message: 19/08/2009, 09h34
  4. R�ponses: 3
    Dernier message: 27/01/2009, 10h03
  5. [VBA-E]Tester si une cellule est vide dans un cas particulier
    Par tonnick dans le forum Macros et VBA Excel
    R�ponses: 3
    Dernier message: 26/09/2007, 10h12

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