Пример #1
0
        // Méthode publique d'instance pour mettre à jour un objet Station avec les données détaillées d'une station
        // L'objet Station à mettre à jour est reçu en paramètre
        // Retourne un message d'erreur en cas d'erreur d'exécution, ou une chaine vide si tout s'est bien passé
        public override String getDetailStation(Station uneStation)
        {
            /* Exemple de données obtenues pour une station :
             *      "fields": {
             *          "etat": "En fonctionnement",
             *          "lastupdate": "2017-01-31T21:31:04+00:00",
             *          "nombrevelosdisponibles": 1,
             *          "nombreemplacementsactuels": 20,
             *          "nom": "Gares Sud - F\u00e9val",
             *          "nombreemplacementsdisponibles": 19,
             *          "idstation": 45,
             *          "coordonnees": [
             *              48.10225077,
             *              -1.673133314
             *          ]
             *      },
             */

            // initialisation des variables
            int    soclesDisponibles = 0, velosDisponibles = 0;
            String etat = "";

            try
            {
                // création d'un flux en lecture (StreamReader) à partir du service web
                String       url             = _adresseHebergeur + _urlDetailStation + uneStation.Id;
                StreamReader unFluxEnLecture = getFluxEnLecture(url);
                // création d'un objet JsonTextReader à partir du flux ; il servira à parcourir le flux JSON
                JsonTextReader leDocument = getDocumentJson(unFluxEnLecture);
                // vide la liste actuelle des stations
                //laListeStations.viderListeStations();

                // lire le document jusqu'à l'élément "fields" avec la méthode privée avancerJusqua
                bool finDocument = avancerJusqua(leDocument, "fields");

                // traiter jusqu'à la fin du document
                while (!finDocument)
                {
                    leDocument.Read();            // lire l'élément suivant
                    switch (leDocument.TokenType) // traiter en fonction du type d'élément
                    {
                    case JsonToken.StartObject:   // l'élément est un début d'objet JSON (donc une station)
                        break;

                    case JsonToken.PropertyName:             // l'élément est une propriété de l'objet JSON
                        switch (leDocument.Value.ToString()) // traiter en fonction du nom de la propriété
                        {
                        case "etat": leDocument.Read();
                            etat = leDocument.Value.ToString(); break;

                        case "nombrevelosdisponibles": leDocument.Read();
                            velosDisponibles = Convert.ToInt32(leDocument.Value); break;

                        case "nombreemplacementsdisponibles": leDocument.Read();
                            soclesDisponibles = Convert.ToInt32(leDocument.Value); break;
                        }     // fin switch interne
                        break;

                    case JsonToken.EndObject:           // l'élément est une fin d'objet JSON (donc une station)
                        // on valorise la station et on l'ajoute à l'objet laListeStations
                        uneStation.valoriser(soclesDisponibles, velosDisponibles, etat);
                        // lire le document jusqu'à l'élément "fields" avec la méthode privée avancerJusqua
                        finDocument = true;
                        break;
                    } // fin switch externe
                }
                return("");                                                  // il n'y a pas de problème, on retourne une chaine vide
            }
            catch (Exception ex)
            {
                return("Erreur : " + ex.Message);        // il y a un problème, on retourne le message d'ereur
            }
        }
Пример #2
0
        // Méthode publique d'instance pour mettre à jour un objet ListeStations avec l'ensemble des stations de la ville
        // L'objet ListeStations à mettre à jour est reçu en paramètre
        // Retourne un message d'erreur en cas d'erreur d'exécution, ou une chaine vide si tout s'est bien passé
        public override String getListeStations(ListeStations laListeStations)
        {
            /* Exemple de données obtenues pour une station :
             *      "fields": {
             *          "nom": "R\u00e9publique",
             *          "idstationmetrocorrespondance": "REP",
             *          "adressenumero": "19",
             *          "datemiseservice": "2009-06-22",
             *          "adressevoie": "Quai Lamartine",
             *          "nomcommune": "Rennes",
             *          "idstationproche1": 2,
             *          "possedetpe": "true",
             *          "nombreemplacementstheorique": 30,
             *          "codeinseecommune": "35238",
             *          "coordonnees": [
             *              48.1100259201,
             *              -1.6780371631
             *          ],
             *          "id": 1,
             *          "idstationproche2": 11,
             *          "idstationproche3": 10
             *      },
             */

            // initialisation des variables
            Station uneStation = new Station();
            String  id = "", nom = "", adressenumero = "", adressevoie = "", adresse = "";
            double  latitude = 0, longitude = 0;
            bool    possedetpe = false;

            try
            {
                // création d'un flux en lecture (StreamReader) à partir du service web
                String       url             = _adresseHebergeur + _urlListeStations;
                StreamReader unFluxEnLecture = getFluxEnLecture(url);
                // création d'un objet JsonTextReader à partir du flux ; il servira à parcourir le flux JSON
                JsonTextReader leDocument = getDocumentJson(unFluxEnLecture);

                // vide la liste actuelle des stations
                laListeStations.viderListeStations();

                // lire le document jusqu'à l'élément "fields" avec la méthode privée avancerJusqua
                bool finDocument = avancerJusqua(leDocument, "fields");

                // traiter jusqu'à la fin du document
                while (!finDocument)
                {
                    leDocument.Read();            // lire l'élément suivant
                    switch (leDocument.TokenType) // traiter en fonction du type d'élément
                    {
                    case JsonToken.StartObject:   // l'élément est un début d'objet JSON (donc une station)
                        // on crée un objet vide uneStation
                        uneStation = new Station();
                        break;

                    case JsonToken.PropertyName:             // l'élément est une propriété de l'objet JSON
                        switch (leDocument.Value.ToString()) // traiter en fonction du nom de la propriété
                        {
                        case "id": leDocument.Read();
                            id = leDocument.Value.ToString(); break;

                        case "nom": leDocument.Read();
                            nom = leDocument.Value.ToString(); break;

                        case "adressenumero": leDocument.Read();
                            adressenumero = leDocument.Value.ToString(); break;

                        case "adressevoie": leDocument.Read();
                            adressevoie = leDocument.Value.ToString(); break;

                        case "possedetpe": leDocument.Read();
                            possedetpe = Convert.ToBoolean(leDocument.Value.ToString()); break;

                        case "coordonnees":             // l'élément est un le tableau des coordonnées
                            leDocument.Read();          // lit l'élément début de tableau
                            leDocument.Read();          // lit le premier nombre
                            // (attention à la présence du point décimal à remplacer par virgule)
                            latitude = Convert.ToDouble(leDocument.Value.ToString().Replace(".", ","));
                            leDocument.Read();          // lit le second nombre
                            // (attention à la présence du point décimal à remplacer par virgule)
                            longitude = Convert.ToDouble(leDocument.Value.ToString().Replace(".", ","));
                            break;
                        }     // fin switch interne
                        break;

                    case JsonToken.EndObject:           // l'élément est une fin d'objet JSON (donc une station)
                        // on valorise la station et on l'ajoute à l'objet laListeStations
                        adresse = adressenumero + " " + adressevoie;
                        uneStation.valoriser(id, nom, adresse, latitude, longitude, possedetpe);
                        laListeStations.ajouteStation(uneStation);
                        // lire le document jusqu'à l'élément "fields" avec la méthode privée avancerJusqua
                        finDocument = avancerJusqua(leDocument, "fields");
                        break;
                    } // fin switch externe
                }
                return("");                                      // il n'y a pas de problème, on retourne une chaine vide
            }
            catch (Exception ex)
            {
                return("Erreur : " + ex.Message);        // il y a un problème, on retourne le message d'ereur
            }
        }
Пример #3
0
        // fonction privée statique pour valoriser l'objet uneStation à partir d'un jeu de balises XML
        private static void getDonneesStation(XmlReader leDocument, Station uneStation)
        {
            /* Exemple de données obtenues pour une station :
             *        <station>
             *              <number>75</number>
             *              <name>ZAC SAINT SULPICE</name>
             *              <address>RUE DE FOUGÈRES</address>
             *              <state>1</state>
             *              <latitude>48.1321</latitude>
             *              <longitude>-1.63528</longitude>
             *              <slotsavailable>20</slotsavailable>
             *              <bikesavailable>8</bikesavailable>
             *              <pos>0</pos>
             *              <district>Maurepas - Patton</district>
             *              <lastupdate>2013-01-29T11:23:02+01:00</lastupdate>
             *        </station>
             */

            // parcours des balises XML
            leDocument.ReadToFollowing("number");
            leDocument.Read();
            String number = leDocument.Value;

            leDocument.ReadToFollowing("name");
            leDocument.Read();
            String name = leDocument.Value;

            leDocument.ReadToFollowing("address");
            leDocument.Read();
            String address = leDocument.Value;

            leDocument.ReadToFollowing("state");
            leDocument.Read();
            String state = leDocument.Value;
            bool   open  = false;

            if (state == "1")
            {
                open = true;
            }

            leDocument.ReadToFollowing("latitude");
            leDocument.Read();
            double latitude = Convert.ToDouble(leDocument.Value.Replace(".", ","));

            leDocument.ReadToFollowing("longitude");
            leDocument.Read();
            double longitude = Convert.ToDouble(leDocument.Value.Replace(".", ","));

            leDocument.ReadToFollowing("slotsavailable");
            leDocument.Read();
            int slotsavailable = Convert.ToInt32(leDocument.Value);

            leDocument.ReadToFollowing("bikesavailable");
            leDocument.Read();
            int bikesavailable = Convert.ToInt32(leDocument.Value);

            leDocument.ReadToFollowing("pos");
            leDocument.Read();
            String pos           = leDocument.Value;
            bool   paiementCarte = false;

            if (pos == "1")
            {
                paiementCarte = true;
            }

            leDocument.ReadToFollowing("district");
            leDocument.Read();
            String district = leDocument.Value;

            uneStation.valoriser(number, name, address, open, latitude, longitude, slotsavailable, bikesavailable, paiementCarte, district);
        }