public void OnTransponderDataReady(object sender, RawTransponderDataEventArgs e) { DataRecivedList = e.TransponderData; List <TrackDataContainer> tdcList = new List <TrackDataContainer>(); foreach (var data in e.TransponderData) { string[] inputFields; TrackDataContainer _tdc = new TrackDataContainer(); inputFields = data.Split(';'); _tdc.Tag = Convert.ToString(inputFields[0]); _tdc.X = Convert.ToInt32(inputFields[1]); _tdc.Y = Convert.ToInt32(inputFields[2]); _tdc.Altitude = Convert.ToInt32(inputFields[3]); _tdc.Timestamp = DateTime.ParseExact(inputFields[4], "yyyyMMddHHmmssfff", CultureInfo.InvariantCulture); tdcList.Add(_tdc); } if (tdcList.Count != 0) { ATMEvent atmEvent = new ATMEvent(tdcList); DataDecoded?.Invoke(this, atmEvent); } }
private void TransponderReceiverOnTransponderDataReady(object sender, RawTransponderDataEventArgs rawTransponderDataEventArgs) { List <string> values = rawTransponderDataEventArgs.TransponderData; CreateTrackObject(values); }
public void DataHandler_ExistingTrackInOrOutOfBounds_CorrectTracksRemoved(int x, int y, int altitude, bool result) { // Setup var inputStrings = new List <string>(); inputStrings.Add("test"); var args = new RawTransponderDataEventArgs(inputStrings); var track = Substitute.For <ITrack>(); track.Tag = "TrackOne"; track.CurrentPosition.x = 45000; track.CurrentPosition.y = 45000; track.CurrentAltitude = 10000; _fakeConverter.GetTrack(Arg.Any <string>()).Returns(track); // Act _uut.TransponderDataHandler(null, args); track.CurrentPosition.x = x; track.CurrentPosition.y = y; track.CurrentAltitude = altitude; _uut.TransponderDataHandler(null, args); // Assert Assert.That(_uut.Tracks.ContainsKey("TrackOne"), Is.EqualTo(result)); }
public void DataHandler_TracksUpdated_TracksUpdatedInvoked() { // Setup var inputStrings = new List <string> { "test", }; var args = new RawTransponderDataEventArgs(inputStrings); var track = Substitute.For <ITrack>(); track.Tag = "TrackOne"; track.CurrentPosition.x = 45000; track.CurrentPosition.y = 42000; track.CurrentAltitude = 10000; _fakeConverter.GetTrack("test").Returns(track); _uut.TransponderDataHandler(null, args); int called = 0; _uut.OnTrackUpdated += (s, a) => { called++; }; // Act _uut.TransponderDataHandler(null, args); // Assert Assert.That(called, Is.EqualTo(1)); }
private void HandlerOnRaiseTrackInsideMonitoringAreaEvent(object sender, RawTransponderDataEventArgs e) { char[] separators = { ';' }; foreach (var data in e.TransponderData) { var tokens = data.Split(separators, StringSplitOptions.RemoveEmptyEntries); string tag = tokens[0]; var xCoordinate = int.Parse(tokens[1]); var yCoordinate = int.Parse(tokens[2]); var zCoordinate = int.Parse(tokens[3]); var dateTime = GetDate(tokens[4]); if ((xCoordinate >= XOffset) && (xCoordinate <= (XOffset + XLength))) { if (yCoordinate >= YOffset && yCoordinate <= YOffset + YWidth) { if ((zCoordinate >= ZOffset) && (zCoordinate <= (zCoordinate + ZHeight))) { Console.WriteLine("Inbound: " + tag + "\t" + xCoordinate + "\t" + yCoordinate + "\t" + zCoordinate + "\t" + dateTime + dateTime.Millisecond); TrackfilterDTO DTO = new TrackfilterDTO(tag, xCoordinate, yCoordinate, zCoordinate, dateTime); FormattedDataEvent?.Invoke(this, new FormattedTransponderDataEventArgs(DTO)); } } } Console.WriteLine(); } }
public void DataHandler_ExistingTrackInOutOfBounds_CorrectTracksAreUpdated(int x, int y, int altitude, int nrOfCalls) { // Setup var inputStrings = new List <string>(); inputStrings.Add("test"); var args = new RawTransponderDataEventArgs(inputStrings); var track = Substitute.For <ITrack>(); track.Tag = "TrackOne"; track.CurrentPosition.x = 45000; track.CurrentPosition.y = 45000; track.CurrentAltitude = 10000; _fakeConverter.GetTrack(Arg.Any <string>()).Returns(track); // Act _uut.TransponderDataHandler(null, args); track.CurrentPosition.x = x; track.CurrentPosition.y = y; track.CurrentAltitude = altitude; _uut.TransponderDataHandler(null, args); // Assert track.Received(nrOfCalls).Update(Arg.Any <ICoordinate>(), Arg.Any <int>(), Arg.Any <DateTime>()); }
private void Reciever_TransponderDataReady(object sender, RawTransponderDataEventArgs e) { var trackInfoList = new List <TrackInfo>(); trackEventArgs = new TracksEventArgs(); foreach (var data in e.TransponderData) { var dataList = new List <string>(); var trackInfo = new TrackInfo(); dataList = data.Split(';').ToList(); var xcoordinate = Convert.ToInt32(dataList[1]); var ycoordinate = Convert.ToInt32(dataList[2]); if (xcoordinate < 85000 && ycoordinate < 85000) { trackInfo.Xcoor = xcoordinate; trackInfo.Ycoor = ycoordinate; trackInfo.Tag = dataList[0]; trackInfo.Altitude = Convert.ToInt32(dataList[3]); trackInfo.DataTime = DateTime.ParseExact( dataList[4], "yyyyMMddHHmmssfff", null); trackInfoList.Add(trackInfo); } } trackEventArgs.TrackInfos = trackInfoList; TracksInASEvent?.Invoke(this, trackEventArgs); }
public void Setup() { // Drivers/included _receiver = Substitute.For <ITransponderReceiver>(); _trackConverter = new TrackConverter(_receiver); _sorter = new Sorter(_trackConverter); _checker = new CheckForSeparationEvent(); // System under test _logger = new LogSeparationEvent(_checker); _warningCreator = new CreateWarning(_checker); // Stubs/mocks _ts = Substitute.For <ITrackSpeed>(); _tcc = Substitute.For <ITrackCompassCourse>(); // Driver _controller = new Controller(_sorter, _ts, _tcc, _checker, _warningCreator, _logger); // Data _fakeRawArgs = new RawTransponderDataEventArgs(new List <string>() { "Tag123;70000;70000;1000;20180420222222222", "Tag456;68000;68000;800;20180420222222222", "Tag789;89000;89000;5000;20180420222222222" }); // Assign to events _checker.SeperationEvents += _checker_SeperationEvents; _checker.NewSeperationEvents += _checker_FinishedSeperationEvents; }
public void ATMSystemUnitTests_CheckThatConflictDeletedAfterUpdate_1ConflictDeleted() { ConsoleSeparationEventArgs testArgs = null; _uut.ConsoleSeparationDataReady += (object o, ConsoleSeparationEventArgs a) => { testArgs = a; }; List <string> testData = new List <string>(); testData = new List <string>(); testData.Add("ATR423;45003;30000;15200;20151006213456789"); testData.Add("BCD123;20000;82890;11030;20151006213456789"); //Conflict testData.Add("XYZ987;22059;81654;11000;20151006213456789"); //Conflict RawTransponderDataEventArgs args = new RawTransponderDataEventArgs(testData); //Raise event _fakeTransponderReceiver.TransponderDataReady += Raise.EventWith(this, args); //Test that there is an initial conflict Assert.That(testArgs.conflictList.Count, Is.EqualTo(1)); //Raise event with updated data testData.Add("ATR423;39045;12932;14000;20151006213456789"); testData.Add("BCD123;10005;85890;12000;20151006213456789"); testData.Add("XYZ987;25059;75654;4000;20151006213456789"); args = new RawTransponderDataEventArgs(testData); _fakeTransponderReceiver.TransponderDataReady += Raise.EventWith(this, args); //Check that conflict doesnt exist anymore Assert.That(testArgs.conflictList.Count, Is.EqualTo(0)); }
private void ReceiverOnTransponderDataReady(object sender, RawTransponderDataEventArgs e) { // Just display data foreach (var data in e.TransponderData) { //create Track for potential monitoring string[] tokens = ParseDataString(data); Track track_ = BuildTrack(tokens); bool inScope_ = InScope(track_); bool found = false; if (inScope_) { for (int i = 0; i < Tracks.Count; i++) { if (track_.tag_ == Tracks[i].tag_) { found = true; System.Console.WriteLine("Track found i Tacks List"); if (track_ != Tracks[i]) { System.Console.WriteLine("Updating Track"); Tracks[i] = track_; } } } if (!found) { Tracks.Add(track_); } } } }
public void ATMSystemUnitTests_CheckThatExpectedAmmountOfConflictsExist_Expected1ConflictAfterUpdate() { ConsoleSeparationEventArgs testArgs = null; _uut.ConsoleSeparationDataReady += (object o, ConsoleSeparationEventArgs a) => { testArgs = a; }; List <string> testData = new List <string>(); testData.Add("ATR423;39045;12932;14000;20151006213456789"); testData.Add("BCD123;10005;85890;12000;20151006213456789"); testData.Add("XYZ987;25059;75654;4000;20151006213456789"); RawTransponderDataEventArgs args = new RawTransponderDataEventArgs(testData); //Raise event _fakeTransponderReceiver.TransponderDataReady += Raise.EventWith(this, args); //Raise event with updated data testData = new List <string>(); testData.Add("ATR423;45003;30000;15200;20151006213456789"); testData.Add("BCD123;20000;82890;11030;20151006213456789"); //Conflict testData.Add("XYZ987;22059;81654;11000;20151006213456789"); //Conflict args = new RawTransponderDataEventArgs(testData); _fakeTransponderReceiver.TransponderDataReady += Raise.EventWith(this, args); //Check that list contains 1 conflict Assert.That(testArgs.conflictList.Count, Is.EqualTo(1)); }
public void ATMSystemUnitTests_CheckThatOutOfBoundsFlightNotAdded_UpdatedTracks() { ConsoleSeparationEventArgs testArgs = null; _uut.ConsoleSeparationDataReady += (object o, ConsoleSeparationEventArgs a) => { testArgs = a; }; List <string> testData = new List <string>(); testData.Add("ATR423;39045;12932;14000;20151006213456789"); testData.Add("BCD123;10005;85890;12000;20151006213456789"); testData.Add("XYZ987;25059;75654;4000;20151006213456789"); RawTransponderDataEventArgs args = new RawTransponderDataEventArgs(testData); //Raise event _fakeTransponderReceiver.TransponderDataReady += Raise.EventWith(this, args); //Raise event with updated data testData = new List <string>(); testData.Add("ATR423;45003;30000;15200;20151006213456789"); testData.Add("BCD123;20000;92890;11030;20151006213456789"); //Flight now out of bounds testData.Add("XYZ987;22059;79654;5000;20151006213456789"); args = new RawTransponderDataEventArgs(testData); _fakeTransponderReceiver.TransponderDataReady += Raise.EventWith(this, args); //Check that data still only contains 3 tracks Assert.That(testArgs.tracks.Count, Is.EqualTo(2)); }
public void TransponderDataReadyEventRaised_TransponderDataConverter_ReturnsCorrectTrack() { //arrange var fakeTrack = Substitute.For <ITrack>(); fakeTrack.Tag = "ATR423"; fakeTrack.CurrentPosition.x = 39045; fakeTrack.CurrentPosition.y = 12932; fakeTrack.CurrentAltitude = 14000; fakeTrack.LastSeen = new DateTime(2015, 10, 6, 21, 34, 56, 789); var inputStrings = new List <string> { "ATR423;" + "39045;" + "12932;" + "14000;" + "20151006213456789" }; var args = new RawTransponderDataEventArgs(inputStrings); //act _transponderReceiver.TransponderDataReady += Raise.EventWith(_transponderReceiver, args); //Assert Assert.That(_trackController.Tracks.First().Key, Is.EqualTo(fakeTrack.Tag)); Assert.That(_trackController.Tracks.First().Value.CurrentPosition.x, Is.EqualTo(fakeTrack.CurrentPosition.x)); Assert.That(_trackController.Tracks.First().Value.CurrentPosition.y, Is.EqualTo(fakeTrack.CurrentPosition.y)); Assert.That(_trackController.Tracks.First().Value.CurrentAltitude, Is.EqualTo(fakeTrack.CurrentAltitude)); Assert.That(_trackController.Tracks.First().Value.LastSeen, Is.EqualTo(fakeTrack.LastSeen)); }
public void DataReceived(object o, RawTransponderDataEventArgs args) { //Add or update tracks foreach (var track in args.TransponderData) { TrackOperations.AddOrUpdate(track); } //Check if tracks are in airspace foreach (var track in TrackOperations.GetAll()) { track.WithinAirspace = Airspace.CalculateWithinAirspace(track.Position); } //Check for Separations if (TrackOperations.GetAll().Count > 1) { SeparationOperations.CheckForSeparations(TrackOperations.GetAll().ToList()); } //Check for outdated separations UpdateOldSeparations(); //Display everything OutputTerminal(); }
public void EventIsRaised() { var args = new RawTransponderDataEventArgs(testData); fakeTransponderReceiver.TransponderDataReady += Raise.EventWith(args); Assert.That(nEventsReceived, Is.EqualTo(1)); }
public void Update_TransponderDataTwice_UpdatedTracks(string trackWithin, string trackOutside, string trackWithinUD, string trackOutsideUD, double withinCourse, double withinVelocity) { //Arrange string withinTag = trackWithin.Split(';')[0]; var transponderData = new List <string>(); var track1 = trackWithin; var track2 = trackOutside; transponderData.Add(track1); transponderData.Add(track2); var transponderDataEventArgs = new RawTransponderDataEventArgs(transponderData); //Act _transponderReceiver.TransponderDataReady += Raise.EventWith(transponderDataEventArgs); //Re-Arrange transponderData = new List <string>(); track1 = trackWithinUD; track2 = trackOutsideUD; transponderData.Add(track1); transponderData.Add(track2); transponderDataEventArgs = new RawTransponderDataEventArgs(transponderData); //Act Again _transponderReceiver.TransponderDataReady += Raise.EventWith(transponderDataEventArgs); //Assert Assert.That(_updatedList.Count == 1, Is.True); Assert.That(_updatedList[0].Tag, Is.EqualTo(withinTag)); Assert.That(_updatedList[0].Course, Is.EqualTo(withinCourse)); Assert.That(_updatedList[0].Velocity, Is.EqualTo(withinVelocity)); Assert.That(_nEventReceived, Is.EqualTo(2)); }
private void OnTransponderDataReady(object sender, RawTransponderDataEventArgs rawTransponderDataEventArgs) { // formatting data for use foreach (string rawdata in rawTransponderDataEventArgs.TransponderData) { string[] rawData = rawdata.Split(';'); List<string> data = rawData.ToList(); if (int.Parse(data[1]) >= 10000 && int.Parse(data[1]) <= 90000 && int.Parse(data[2]) >= 10000 && int.Parse(data[2]) <= 90000 && int.Parse(data[3]) >= 500 && int.Parse(data[3]) <= 20000) { if (Tracks.Any(track => track.Tag == data[0])) // checks if track appears multiple times in list { Track AlreadyKnownTrack = (Track)Tracks.First(track => track.Tag == data[0]); // finds existing track with 'Tag' AlreadyKnownTrack.UpdateTrack(data[0], int.Parse(data[1]), int.Parse(data[2]), int.Parse(data[3]), new TimeStamp(data[4])); // updated old track instead of making new entry OnTrackEnteredAirspace(); } else { Tracks.Add(new Track(data[0], int.Parse(data[1]), int.Parse(data[2]), int.Parse(data[3]), new TimeStamp(data[4]))); } } // determine type of event // log event to file // render current events to screen } }
public void Setup() { _transponderReceiver = Substitute.For <ITransponderReceiver>(); _trackRendition = Substitute.For <ITrackRendition>(); _proximityDetectionData = new ProximityDetectionData(); _eventRendition = new EventRendition(); _proximityDetection = new ProximityDetection(_eventRendition, _proximityDetectionData); _trackUpdate = new TrackUpdate(_trackRendition, _proximityDetection); _filtering = new Filtering(_trackUpdate); _parsing = new Parsing(_transponderReceiver, _filtering); _trackData = new TrackData(); _faketrackList = new List <ITrackData>(); //_trackRendition = new TrackRendition(); _dataEvent = new RawTransponderDataEventArgs(new List <string>() { "JAS001;12345;67890;12000;20160101100909111" }); //_fakeTrackData = new TrackData //{ // Tag = "JAS001", // X = 12345, // Y = 67890, // Altitude = 12000, // Course = 0, // Velocity = 0, // TimeStamp = DateTime.ParseExact("20160101100909111", "yyyyMMddHHmmssfff", System.Globalization.CultureInfo.InvariantCulture) //}; }
//Run every time new data is present private void Update(RawTransponderDataEventArgs e) { //Decode Data List <TrackData> trackData = _decoder.Decode(e); //Filter data trackData = _filter.Filter(trackData); //Update existing flight data _data = _flightCalculator.Calculate(_data, trackData); //Collision Detect Tuple <List <string>, List <string> > collisionResult = _collisionDetector.SeperationCheck(trackData); List <string> collisionTags = collisionResult.Item1; List <string> displayCollisionList = collisionResult.Item2; //Set CollisionFlag on flights foreach (KeyValuePair <string, FlightData> entry in _data) { entry.Value.CollisionFlag = collisionTags.Contains(entry.Value.Tag); } //Display Data _display.Clear(); _display.Render(_data, displayCollisionList); }
public void TransponderDataReady_AddedTwoTracksNoConflict_OnSeparationEventRaised0Times() { //arrange var track1 = new List <string> { "ATR423;" + "39045;" + "12932;" + "14000;" + "20151006213456789" }; var args1 = new RawTransponderDataEventArgs(track1); var track2 = new List <string> { "KOL543;" + "80000;" + "45000;" + "9000;" + "20151006213456789" }; var args2 = new RawTransponderDataEventArgs(track2); //act _transponderReceiver.TransponderDataReady += Raise.EventWith(_transponderReceiver, args1); _transponderReceiver.TransponderDataReady += Raise.EventWith(_transponderReceiver, args2); //assert Assert.That(nEventsRaised, Is.EqualTo(0)); }
public void SetUp() { _writer = Substitute.For <IWriter>(); _calculateVelocity = new CalculateVelocity(); _calculateCourse = new CalculateCourse(); _transponderReceiver = Substitute.For <ITransponderReceiver>(); _logWriterToFile = Substitute.For <ILogWriter>(); _logWriterToConsole = Substitute.For <ILogWriter>(); _convertStringToDateTime = new ConvertStringToDateTime(); _eventController = new EventController(_logWriterToFile, _logWriterToConsole); _seperationEvent = new SeperationEvent(); _seperationTracks = new SeperationTracks(_seperationEvent, _eventController); _sortingTracks = new SortingTracks(_calculateVelocity, _calculateCourse, _writer, _seperationTracks); _filterAirspace = new FilterAirspace(_sortingTracks); _convertTrackData = new ConvertTrackData(_transponderReceiver, _convertStringToDateTime, _filterAirspace); var track = "BIJ515;12345;54321;17891;20180409153742853"; _myList = new List <string> { track }; var eventArgs = new RawTransponderDataEventArgs(_myList); _transponderReceiver.TransponderDataReady += Raise.EventWith(eventArgs); }
private void ReceiverOnTransponderDataReady(object sender, RawTransponderDataEventArgs e) { Console.Clear(); // Just display data foreach (var data in e.TransponderData) { TrackData trackData = new TrackData(data); warnings.ProcessTrackData(trackData); // warnings.PlanesAreTooDamnClose(); } Console.ForegroundColor = ConsoleColor.Cyan; Console.WriteLine("--- Planes --- {0}", DateTime.Now.ToString("T")); Console.ForegroundColor = ConsoleColor.Green; foreach (Plane plane in warnings.planeList) { Console.WriteLine(plane); warnings.PlanesAreTooDamnClose(plane); } if (warnings.planesInDanger.Count > 0) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("\n--- THESE N****S TOO CLOSE ---"); var prints = warnings.planesInDanger.Select(pair => string.Format("{0} is too close to {1} at {2}", pair.Item1.Data.Tag, pair.Item2.Data.Tag, DateTime.Now.ToString("T"))); foreach (var print in prints) { Console.WriteLine(print); } Console.ResetColor(); } }
public void Setup() { _listHandler = Substitute.For <IListHandler>(); _monitoredArea = new MonitoredArea(90000, 10000, 20000, 500); _transponderReceiver = Substitute.For <ITransponderReceiver>(); _flightExtractor = new FlightExtractor(); _parseTrackInfo = new ParseTrackInfo(); _timestampFormatter = new TimestampFormatter(); _trackObjectifier = new TrackObjectifier(_transponderReceiver, _monitoredArea, _parseTrackInfo, _flightExtractor, _timestampFormatter); ATM = new ATMSystem(_trackObjectifier, _listHandler); _argList = new List <string> { "ATR423;39045;12932;14000;20151006213456789", "DSD323;40000;12930;15000;20151006213456789" }; _args = new RawTransponderDataEventArgs(_argList); _trackObjectifier.TrackListReady += (sender, updatedArgs) => { _trackList = updatedArgs.TrackList; }; }
public void RaiseEvent_ListWith2_Correct2ndTrackYcor() { var args = new RawTransponderDataEventArgs(info); _transponderReceiver.TransponderDataReady += Raise.EventWith(args); Assert.That(_receivedArgs.TrackObjects[1].YCoordinate, Is.EqualTo(45678)); }
public void RaiseEvent_ListWith2_Correct1stTrackTimeStamp() { var args = new RawTransponderDataEventArgs(info); _transponderReceiver.TransponderDataReady += Raise.EventWith(args); Assert.That(_receivedArgs.TrackObjects[0].TimeStamp, Is.EqualTo(DateTime.ParseExact("20151006213456789", "yyyyMMddHHmmssfff", CultureInfo.InvariantCulture))); }
public void RaiseEvent_ListWith2_Correct2ndTrackAltitude() { var args = new RawTransponderDataEventArgs(info); _transponderReceiver.TransponderDataReady += Raise.EventWith(args); Assert.That(_receivedArgs.TrackObjects[1].Altitude, Is.EqualTo(2000)); }
public void RaiseEvent_ListWith2_Correct1stTrackXcor() { var args = new RawTransponderDataEventArgs(info); _transponderReceiver.TransponderDataReady += Raise.EventWith(args); Assert.That(_receivedArgs.TrackObjects[0].XCoordinate, Is.EqualTo(12345)); }
public void RaiseEvent_ListWith2_Correct1stTrackTag() { var args = new RawTransponderDataEventArgs(info); _transponderReceiver.TransponderDataReady += Raise.EventWith(args); Assert.That(_receivedArgs.TrackObjects[0].Tag, Is.EqualTo("Tag123")); }
public void RaiseEvent_ListWith2_Raised1Event() { var args = new RawTransponderDataEventArgs(info); _transponderReceiver.TransponderDataReady += Raise.EventWith(args); Assert.That(_nEventsRaised, Is.EqualTo(1)); }
public void SecondSet_CreateTracks_FilterTracks_UpdateTracks(string trackOneFirst, string trackOneSecond, double trackOneCourse, double trackOneVelocity) { //First position var data = new List <string>(); var args = new RawTransponderDataEventArgs(data); var track1 = trackOneFirst; data.Add(track1); _fakeTR.TransponderDataReady += Raise.EventWith(args); //Second position data = new List <string>(); track1 = trackOneSecond; data.Add(track1); _fakeTR.TransponderDataReady += Raise.EventWith(args); Assert.That(_updatedTrackList.Count == 1); Assert.That(_updatedTrackList[0].Tag, Is.EqualTo(trackOneFirst.Split(';')[0])); Assert.That(_updatedTrackList[0].Course, Is.EqualTo(trackOneCourse)); Assert.That(_updatedTrackList[0].Velocity, Is.EqualTo(trackOneVelocity)); }
public void EventRaisedDataAndReceivedCountCompare() { var args = new RawTransponderDataEventArgs(testData); fakeTransponderReceiver.TransponderDataReady += Raise.EventWith(args); Assert.That(nEventsReceived, Is.EqualTo(testData.Count)); }
private void Handledata(object sender, RawTransponderDataEventArgs e) { foreach (var planeInfo in e.TransponderData) { //AAA123;12345;12345;12345;12345678901234567 string[] words = planeInfo.Split(';'); List<string> stringList = words.ToList(); if (TracksList.Any(plane => plane.Tag == stringList[0])) { var item = TracksList.First(track => track.Tag == stringList[0]); item.UpdateTrack(stringList[0], int.Parse(stringList[1]), int.Parse(stringList[2]), int.Parse(stringList[3]), new TimeStamp(stringList[4])); } else { AddTrack(new Track(stringList[0], int.Parse(stringList[1]), int.Parse(stringList[2]), int.Parse(stringList[3]), new TimeStamp(stringList[4]))); } } }