Пример #1
0
        static void Main(string[] args)
        {
            // Définition des éléments de position de la CCI
            string longitude = "5.724524";
            string latitude  = "45.188529";
            //string longitude = "5.726744267129334";
            //string latitude = "45.18521853612248";
            int distance = 400; // Périmètre de recherche autour de la CCI

            // Récupération des données des arrêts et appel de la méthode qui retire les doublons dans le dictionaire
            DataBusStation liste = new DataBusStation(new Connexion());
            Dictionary <string, List <string> > dicoStation = liste.dicoCreateAndClean(latitude, longitude, distance);

            // Récupération des données des lignes
            DataLineDetails dataLineDetails = new DataLineDetails(new Connexion());

            //Console.WriteLine(dataLineDetails.GetLineDetailsObject("SEM:12").color);// test d'affichage depuis l'API des lignes

            //affichage du dictionnaire
            Console.WriteLine("Liste des transports de l'aglomération autour de la CCI :" + "\n");

            foreach (KeyValuePair <string, List <string> > kvp in dicoStation)
            {
                Console.WriteLine("*****************************************************************");
                Console.WriteLine("  Arret = " + kvp.Key);
                Console.WriteLine("*****************************************************************\n");
                foreach (string line in kvp.Value)
                {
                    Console.WriteLine("      Ligne = " + dataLineDetails.GetLineDetailsObject(line).shortName);
                    Console.WriteLine("      Nom  = " + dataLineDetails.GetLineDetailsObject(line).longName);
                    Console.WriteLine("      Couleur  = " + dataLineDetails.GetLineDetailsObject(line).color + "\n");
                }
            }
        }
Пример #2
0
        public void GetLineDetailsObjectTest()
        {
            FakeConnexionApi fake = new FakeConnexionApi();                                     // Instancie une nouvelle FakeConnexion

            fake.resultatJson = Resource1.JsonDetailLine;                                       // Récupère les fake données dans les ressources

            DataLineDetails   dataLineDetails = new DataLineDetails(fake);                      // Connexion factice avec les données d'une ligne
            LineDetailsObject resultat        = dataLineDetails.GetLineDetailsObject("SEM:12"); // Crée la liste correspondant à la ligne SEM:12

            Assert.AreEqual(resultat.shortName, "12");                                          // Test si le nom court est 12
            Assert.IsTrue(resultat.color.Contains("009930"));                                   // Test la couleur
            Assert.IsTrue(resultat.longName.Contains("Eybens Maisons Neuves"));                 // Test le nom complet de la ligne
        }
Пример #3
0
 private static void AddLineToTracking(SqlConnection database, SqlInt32 fileId, int lineNumber, DataLineDetails lineType, string[] tokens)
 {
     try
     {
         int    inc1      = 0; //additional increment for lines that have a data attribute
         int    inc2      = 0; //additional increment for lines that have a sensor attribute
         int    inc3      = 0; //additional increment for lines that have a stop date
         var    startDate = ParseSrx400DateTime(tokens[0] + " " + tokens[1], lineNumber);
         string data      = null;
         if ((lineType & DataLineDetails.HasDataAttribute) == DataLineDetails.HasDataAttribute)
         {
             data = tokens[6];
             inc1 = 1;
         }
         if ((lineType & DataLineDetails.HasSensorAttribute) == DataLineDetails.HasSensorAttribute)
         {
             data = tokens[6 + inc1];
             inc2 = 1;
         }
         DateTime?stopDate = null;
         if ((lineType & DataLineDetails.HeaderHasStopDate) == DataLineDetails.HeaderHasStopDate &&
             (lineType & DataLineDetails.GpsModeIsOn) == 0)
         {
             stopDate = ParseSrx400DateTime(tokens[7 + inc1 + inc2] + " " + tokens[8 + inc1 + inc2], lineNumber);
             inc3     = 2;
         }
         var latLong = new Location {
             Lat = null, Long = null
         };
         if ((lineType & DataLineDetails.HeaderHasLatLong) == DataLineDetails.HeaderHasLatLong &&
             (lineType & DataLineDetails.GpsModeIsOn) == DataLineDetails.GpsModeIsOn)
         {
             latLong = ParseSrx400LatLong(tokens.Skip(7 + inc1 + inc2 + inc3).ToArray(), lineNumber);
         }
         const string sql = "INSERT INTO [dbo].[TelemetryDataSRX400TrackingData] (FileId, LineNumber, Date, Channel, Code, Antenna, Power, Data, Sensor, Events, Latitude, Longitude, StopDate)" +
                            " VALUES (@FileId, @LineNumber, @Date, @Channel, @Code, @Antenna, @Power, @Data, @Sensor, @Events, @Latitude, @Longitude, @StopDate)";
         using (var command = new SqlCommand(sql, database))
         {
             command.Parameters.Add(new SqlParameter("@FileId", SqlDbType.Int)
             {
                 Value = fileId
             });
             command.Parameters.Add(new SqlParameter("@LineNumber", SqlDbType.Int)
             {
                 Value = lineNumber
             });
             command.Parameters.Add(new SqlParameter("@Date", SqlDbType.DateTime2)
             {
                 Value = startDate
             });
             command.Parameters.Add(new SqlParameter("@Channel", SqlDbType.Int)
             {
                 Value = Int32.Parse(tokens[2])
             });
             command.Parameters.Add(new SqlParameter("@Code", SqlDbType.Int)
             {
                 Value = Int32.Parse(tokens[3])
             });
             command.Parameters.Add(new SqlParameter("@Antenna", SqlDbType.NVarChar)
             {
                 Value = tokens[4]
             });
             command.Parameters.Add(new SqlParameter("@Power", SqlDbType.Int)
             {
                 Value = Int32.Parse(tokens[5])
             });
             command.Parameters.Add(new SqlParameter("@Data", SqlDbType.NVarChar)
             {
                 IsNullable = true, Value = data
             });
             command.Parameters.Add(new SqlParameter("@Sensor", SqlDbType.NVarChar)
             {
                 IsNullable = true, Value = data
             });
             command.Parameters.Add(new SqlParameter("@Events", SqlDbType.Int)
             {
                 Value = Int32.Parse(tokens[6 + inc1 + inc2])
             });
             command.Parameters.Add(new SqlParameter("@Latitude", SqlDbType.Real)
             {
                 IsNullable = true, Value = latLong.Lat
             });
             command.Parameters.Add(new SqlParameter("@Longitude", SqlDbType.Real)
             {
                 IsNullable = true, Value = latLong.Long
             });
             command.Parameters.Add(new SqlParameter("@StopDate", SqlDbType.DateTime)
             {
                 IsNullable = true, Value = stopDate
             });
             command.ExecuteNonQuery();
         }
     }
     catch (IndexOutOfRangeException)
     {
         throw new FormatException("Unexpected token count (" + tokens.Length + ") in line " + lineNumber + ". Flags = " + lineType);
     }
 }
Пример #4
0
        public void ParseFileIntoDatabase(SqlInt32 fileId, SqlConnection database)
        {
            ClearDatabase(database, fileId);
            var             state            = ParseState.Start;
            var             changeDateTime   = new DateTime();
            int             changeLineNumber = 0;
            bool            haveScanTable    = false;
            DataLineDetails lineType         = 0;
            var             environment      = new Dictionary <string, string>();
            int             lineNumber       = 2;

            foreach (var line in GetLines(_bytes).Skip(lineNumber))
            {
                lineNumber++;
                switch (state)
                {
                case ParseState.Start:
                    if (line.StartsWith("changed: "))
                    {
                        changeDateTime   = ParseSrx400DateTime(line.Substring(9), lineNumber);
                        changeLineNumber = lineNumber;
                        state            = ParseState.ChangeSet;
                    }
                    else
                    {
                        throw new InvalidDataException("File does not begin with a change set date");
                    }
                    break;

                case ParseState.ChangeSet:
                    if (line == String.Empty)
                    {
                        continue;
                    }
                    if (line.Trim() == "ANTENNA GROUP:")
                    {
                        state = ParseState.AntennaGroup;
                        break;
                    }
                    if (line.Trim() == "HYDROPHONE GROUP:")
                    {
                        state = ParseState.HydrophoneGroup;
                        break;
                    }
                    if (line.Trim() == "Active scan_table:")
                    {
                        state = ParseState.ScanTable;
                        break;
                    }
                    if (line.StartsWith("Filter:"))
                    {
                        ParseKeyValue(line, environment);
                        if (line.StartsWith("Filter: Channel & Code"))
                        {
                            state = ParseState.FilterDetails;
                        }
                        break;
                    }
                    if (line.StartsWith("GPS data mode ="))
                    {
                        state = ParseState.GpsMode;
                        ParseKeyValue(line, environment);
                        break;
                    }
                    if (line.StartsWith("changed: "))
                    {
                        WriteEnvironmentToDatabase(database, fileId, changeLineNumber, changeDateTime, environment);
                        environment.Clear();
                        changeDateTime   = ParseSrx400DateTime(line.Substring(9), lineNumber);
                        changeLineNumber = lineNumber;
                        break;
                    }
                    if (line.Trim() == "Code_log data:")
                    {
                        lineType = 0;
                        WriteEnvironmentToDatabase(database, fileId, changeLineNumber, changeDateTime, environment);
                        if (!haveScanTable)
                        {
                            throw new FormatException("No scan table found before the data table");
                        }
                        state = ParseState.DataTable;
                        break;
                    }
                    if (!ParseKeyValue(line, environment))
                    {
                        throw new FormatException("Unrecognized environment parameter in file at line " + lineNumber);
                    }
                    break;

                case ParseState.AntennaGroup:
                    if (line == String.Empty)
                    {
                        state = ParseState.AntennaDetails;
                        break;
                    }
                    if (line.StartsWith("Antenna      Gain"))
                    {
                        continue;
                    }
                    AddLineToAntennas(database, fileId, lineNumber, changeDateTime, "Antenna",
                                      line.Trim().Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries));
                    break;

                case ParseState.AntennaDetails:
                    if (line == String.Empty)
                    {
                        state = ParseState.ChangeSet;
                        break;
                    }
                    if (!ParseAntennaKeyValue(line, "Antenna", environment))
                    {
                        throw new FormatException("Unrecognized antenna parameter in file at line " + lineNumber);
                    }
                    break;

                case ParseState.HydrophoneGroup:
                    if (line == String.Empty)
                    {
                        state = ParseState.HydrophoneDetails;
                        break;
                    }
                    if (line.StartsWith("Hydrophone   Gain"))
                    {
                        continue;
                    }
                    AddLineToAntennas(database, fileId, lineNumber, changeDateTime, "Hydrophone",
                                      line.Trim().Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries));
                    break;

                case ParseState.HydrophoneDetails:
                    if (line == String.Empty)
                    {
                        state = ParseState.ChangeSet;
                        break;
                    }
                    if (!ParseAntennaKeyValue(line, "Hydrophone", environment))
                    {
                        throw new FormatException("Unrecognized hydrophone parameter in file at line " + lineNumber);
                    }
                    break;

                case ParseState.FilterDetails:
                    if (line == String.Empty)
                    {
                        state = ParseState.ChangeSet;
                        break;
                    }
                    AddLineToFilters(database, fileId, lineNumber, changeDateTime,
                                     line.Trim().Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries));
                    break;

                case ParseState.GpsMode:
                    if (line == String.Empty)
                    {
                        state = ParseState.ChangeSet;
                        break;
                    }
                    if (line == "Reference position" || line == "  Latitude        Longitude")
                    {
                        continue;
                    }
                    AddLineToLocations(database, fileId, lineNumber, changeDateTime, line);
                    break;

                case ParseState.ScanTable:
                    if (line == String.Empty)
                    {
                        state = ParseState.ChangeSet;
                        break;
                    }
                    if (line.Trim() == "CHANNEL  FREQUENCY")
                    {
                        continue;
                    }
                    AddLineToChannels(database, fileId, lineNumber, changeDateTime,
                                      line.Trim().Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries));
                    haveScanTable = true;
                    break;

                case ParseState.DataTable:
                    if (line == String.Empty)
                    {
                        state = ParseState.End;
                        break;
                    }
                    var tokens = line.Trim().Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
                    if (tokens.Length == 2 && tokens[0] == "Start")
                    {
                        lineType = lineType | DataLineDetails.HeaderHasStopDate;
                        continue;
                    }
                    if (tokens.Length == 2 && tokens[0] == "Latitude")
                    {
                        lineType = lineType | DataLineDetails.HeaderHasLatLong;
                        continue;
                    }
                    if (tokens[0] == "Date")
                    {
                        if (tokens[6] == "Data")
                        {
                            lineType = lineType | DataLineDetails.HasDataAttribute;
                        }
                        if (tokens[6] == "Sensor" || tokens[7] == "Sensor")
                        {
                            lineType = lineType | DataLineDetails.HasSensorAttribute;
                        }
                        if (tokens[tokens.Length - 1] == "Longitude")
                        {
                            lineType = lineType | DataLineDetails.HeaderHasLatLong;
                        }
                        break;
                    }
                    if (tokens.Length > 2 && tokens[2] == "Battery")
                    {
                        AddLineToBatteryStatus(database, fileId, lineNumber,
                                               ParseSrx400DateTime(tokens[0] + " " + tokens[1], lineNumber), tokens[3]);
                        break;
                    }
                    if (tokens[0] == "GPS")
                    {
                        if (tokens[3] == "OFF")
                        {
                            if ((lineType & DataLineDetails.GpsModeIsOn) == DataLineDetails.GpsModeIsOn)
                            {
                                lineType = lineType ^ DataLineDetails.GpsModeIsOn;
                            }
                            continue;
                        }
                        if (tokens[3] == "ON")
                        {
                            AddLineToLocations(database, fileId, lineNumber, null,
                                               String.Join(" ", tokens.Skip(6).ToArray()));
                            lineType = lineType | DataLineDetails.GpsModeIsOn;
                        }
                        else
                        {
                            throw new FormatException("Unexpected GPS data mode in data table at line " + lineNumber);
                        }
                        break;
                    }
                    AddLineToTracking(database, fileId, lineNumber, lineType, tokens);
                    break;

                case ParseState.End:
                    if (line != String.Empty)
                    {
                        throw new InvalidDataException("Unexpected text after the data table at line " + lineNumber);
                    }
                    break;

                default:
                    throw new InvalidOperationException("Unhandled ParseState: " + state);
                }
            }
            if (state != ParseState.End && state != ParseState.DataTable)
            {
                throw new InvalidDataException("Data file ended prematurely");
            }
        }
Пример #5
0
 private static void AddLineToTracking(SqlConnection database, SqlInt32 fileId, int lineNumber, DataLineDetails lineType, string[] tokens)
 {
     try
     {
         int inc1 = 0; //additional increment for lines that have a data attribute
         int inc2 = 0; //additional increment for lines that have a sensor attribute
         int inc3 = 0; //additional increment for lines that have a stop date
         var startDate = ParseSrx400DateTime(tokens[0] + " " + tokens[1], lineNumber);
         string data = null;
         if ((lineType & DataLineDetails.HasDataAttribute) == DataLineDetails.HasDataAttribute)
         {
             data = tokens[6];
             inc1 = 1;
         }
         if ((lineType & DataLineDetails.HasSensorAttribute) == DataLineDetails.HasSensorAttribute)
         {
             data = tokens[6+inc1];
             inc2 = 1;
         }
         DateTime? stopDate = null;
         if ((lineType & DataLineDetails.HeaderHasStopDate) == DataLineDetails.HeaderHasStopDate &&
             (lineType & DataLineDetails.GpsModeIsOn) == 0)
         {
             stopDate = ParseSrx400DateTime(tokens[7 + inc1 + inc2] + " " + tokens[8 + inc1 + inc2], lineNumber);
             inc3 = 2;
         }
         var latLong = new Location { Lat = null, Long = null };
         if ((lineType & DataLineDetails.HeaderHasLatLong) == DataLineDetails.HeaderHasLatLong &&
             (lineType & DataLineDetails.GpsModeIsOn) == DataLineDetails.GpsModeIsOn)
         {
             latLong = ParseSrx400LatLong(tokens.Skip(7 + inc1 + inc2 + inc3).ToArray(), lineNumber);
         }
         const string sql = "INSERT INTO [dbo].[TelemetryDataSRX400TrackingData] (FileId, LineNumber, Date, Channel, Code, Antenna, Power, Data, Sensor, Events, Latitude, Longitude, StopDate)" +
                            " VALUES (@FileId, @LineNumber, @Date, @Channel, @Code, @Antenna, @Power, @Data, @Sensor, @Events, @Latitude, @Longitude, @StopDate)";
         using (var command = new SqlCommand(sql, database))
         {
             command.Parameters.Add(new SqlParameter("@FileId", SqlDbType.Int) { Value = fileId });
             command.Parameters.Add(new SqlParameter("@LineNumber", SqlDbType.Int) { Value = lineNumber });
             command.Parameters.Add(new SqlParameter("@Date", SqlDbType.DateTime2) { Value = startDate });
             command.Parameters.Add(new SqlParameter("@Channel", SqlDbType.Int) { Value = Int32.Parse(tokens[2]) });
             command.Parameters.Add(new SqlParameter("@Code", SqlDbType.Int) { Value = Int32.Parse(tokens[3]) });
             command.Parameters.Add(new SqlParameter("@Antenna", SqlDbType.NVarChar) { Value = tokens[4] });
             command.Parameters.Add(new SqlParameter("@Power", SqlDbType.Int) { Value = Int32.Parse(tokens[5]) });
             command.Parameters.Add(new SqlParameter("@Data", SqlDbType.NVarChar) { IsNullable = true, Value = data });
             command.Parameters.Add(new SqlParameter("@Sensor", SqlDbType.NVarChar) { IsNullable = true, Value = data });
             command.Parameters.Add(new SqlParameter("@Events", SqlDbType.Int) { Value = Int32.Parse(tokens[6 + inc1 + inc2]) });
             command.Parameters.Add(new SqlParameter("@Latitude", SqlDbType.Real) { IsNullable = true, Value = latLong.Lat });
             command.Parameters.Add(new SqlParameter("@Longitude", SqlDbType.Real) { IsNullable = true, Value = latLong.Long });
             command.Parameters.Add(new SqlParameter("@StopDate", SqlDbType.DateTime) { IsNullable = true, Value = stopDate });
             command.ExecuteNonQuery();
         }
     }
     catch (IndexOutOfRangeException)
     {
         throw new FormatException("Unexpected token count ("+tokens.Length+") in line "+lineNumber +". Flags = "+ lineType);
     }
 }