private void RecomputeTimeBase()
        {
            _baseTimeSeconds = 86400;
            _maxTimeSeconds  = 0;

            foreach (Train train in TrainList)
            {
                TrainLocationTime first = train.TrainTimes.FirstOrDefault();
                if (first == null)
                {
                    continue;
                }
                if (first.ArrivalTime?.Time != null && first.ArrivalTime.Time.AbsoluteSeconds < _baseTimeSeconds)
                {
                    _baseTimeSeconds = first.ArrivalTime.Time.AbsoluteSeconds;
                }
                else if (first.DepartureTime?.Time != null && first.DepartureTime.Time.AbsoluteSeconds < _baseTimeSeconds)
                {
                    _baseTimeSeconds = first.DepartureTime.Time.AbsoluteSeconds;
                }
                TrainLocationTime last = train.TrainTimes.LastOrDefault();
                if (last.DepartureTime?.Time != null && last.DepartureTime.Time.AbsoluteSeconds > _maxTimeSeconds)
                {
                    _maxTimeSeconds = last.DepartureTime.Time.AbsoluteSeconds;
                }
                else if (last.ArrivalTime?.Time != null && last.ArrivalTime.Time.AbsoluteSeconds > _maxTimeSeconds)
                {
                    _maxTimeSeconds = last.ArrivalTime.Time.AbsoluteSeconds;
                }
            }

            // Round up/down to nearest hour
            _baseTimeSeconds = (_baseTimeSeconds / 3600) * 3600;
            _maxTimeSeconds  = (_maxTimeSeconds / 3600 + 1) * 3600;
        }
示例#2
0
        /// <summary>
        /// Convert a <see cref="TrainLocationTimeModel" /> instance to a <see cref="TrainLocationTime" /> instance.
        /// </summary>
        /// <param name="model">The object to be converted.</param>
        /// <param name="locations">A dictionary of known locations, to use to resolve the location reference in the model.</param>
        /// <param name="notes">A dictionary of known footnotes, to use to resolve any footnote references in the model.</param>
        /// <param name="options">Document options to use to determine how to format strings.</param>
        /// <returns>A <see cref="TrainLocationTime" /> object containing the same data as the <c>model</c> parameter, with ID references resolved.</returns>
        /// <exception cref="NullReferenceException">Thrown if the <c>model</c> parameter is <c>null</c>.</exception>
        /// <exception cref="ArgumentNullException">Thrown if the <c>options</c> parameter is <c>null</c>.</exception>
        public static TrainLocationTime ToTrainLocationTime(
            this TrainLocationTimeModel model,
            Dictionary <string, Location> locations,
            Dictionary <string, Note> notes,
            DocumentOptions options)
        {
            if (model is null)
            {
                throw new NullReferenceException();
            }
            if (options is null)
            {
                throw new ArgumentNullException(nameof(options));
            }

            TrainLocationTime output = new TrainLocationTime
            {
                Pass              = model.Pass ?? false,
                ArrivalTime       = model.Arrival?.ToTrainTime(notes),
                DepartureTime     = model.Departure?.ToTrainTime(notes),
                Path              = model.Path,
                Platform          = model.Platform,
                Line              = model.Line,
                FormattingStrings = options.FormattingStrings,
            };

            if (model.LocationId != null && locations != null && locations.ContainsKey(model.LocationId))
            {
                output.Location = locations[model.LocationId];
            }

            return(output);
        }
示例#3
0
        public void TrainLocationTimeExtensionsClass_ToTrainLocationTimeModelMethod_ThrowsArgumentNullException_IfParameterIsNull()
        {
            TrainLocationTime testObject = null;

            _ = testObject.ToTrainLocationTimeModel();

            Assert.Fail();
        }
示例#4
0
        public void TrainLocationTimeModelExtensionsClassToTrainLocationTimeMethodReturnsNullIfFirstParameterIsNull()
        {
            TrainLocationTimeModel testObject = null;

            TrainLocationTime testResult = testObject.ToTrainLocationTime(new Dictionary <string, Location>(), new Dictionary <string, Note>(), GetDocumentOptions());

            Assert.IsNull(testResult);
        }
示例#5
0
        public void TrainLocationTimeModelExtensionsToTrainLocationTimeMethodReturnsObjectWithCorrectLocationPropertyIfLocationIdPropertyOfFirstParameterIsPresentAsKeyInSecondParameter()
        {
            Dictionary <string, Location> locationMap = GetRandomLocationMap();
            Dictionary <string, Note>     noteMap     = GetRandomNotes();
            TrainLocationTimeModel        testObject  = GetTrainLocationTimeModel(locationMap, noteMap);

            TrainLocationTime testResult = testObject.ToTrainLocationTime(locationMap, noteMap, GetDocumentOptions());

            Assert.AreSame(locationMap[testObject.LocationId], testResult.Location);
        }
示例#6
0
        public void TrainLocationTimeModelExtensionsClassToTrainLocationTimeMethodReturnsObjectWithCorrectLineProperty()
        {
            Dictionary <string, Location> locationMap = GetRandomLocationMap();
            Dictionary <string, Note>     noteMap     = GetRandomNotes();
            TrainLocationTimeModel        testObject  = GetTrainLocationTimeModel(locationMap, noteMap);

            TrainLocationTime testResult = testObject.ToTrainLocationTime(locationMap, noteMap, GetDocumentOptions());

            Assert.AreEqual(testObject.Line, testResult.Line);
        }
        private static List <TrainLocationTime> GetTrainLocationTimeList(int min, int max, TimeOfDay beforeTime)
        {
            int count = _rnd.Next(min, max);
            List <TrainLocationTime> items = new List <TrainLocationTime>(count);

            for (int i = 0; i < count; ++i)
            {
                TrainLocationTime item = GetTrainLocationTime(beforeTime);
                items.Add(item);
            }
            return(items);
        }
示例#8
0
        public void TrainLocationTimeModelExtensionsClassToTrainLocationTimeMethodReturnsObjectWithNullLocationPropertyIfLocationIdPropertyOfFirstParameterIsNull()
        {
            Dictionary <string, Location> locationMap = GetRandomLocationMap();
            Dictionary <string, Note>     noteMap     = GetRandomNotes();
            TrainLocationTimeModel        testObject  = GetTrainLocationTimeModel(locationMap, noteMap);

            testObject.LocationId = null;

            TrainLocationTime testResult = testObject.ToTrainLocationTime(locationMap, noteMap, GetDocumentOptions());

            Assert.IsNull(testResult.Location);
        }
示例#9
0
        public void TrainLocationTimeExtensionsClass_ToTrainLocationTimeModelMethod_ThrowsArgumentNullExceptionWithCorrectParamNameProperty_IfParameterIsNull()
        {
            TrainLocationTime testObject = null;

            try
            {
                _ = testObject.ToTrainLocationTimeModel();
                Assert.Fail();
            }
            catch (ArgumentNullException ex)
            {
                Assert.AreEqual("tlt", ex.ParamName);
            }
        }
示例#10
0
        public void TrainLocationTimeModelExtensionsClassToTrainLocationTimeMethodReturnsObjectWithCorrectFormattingStringsProperty()
        {
            Dictionary <string, Location> locationMap = GetRandomLocationMap();
            Dictionary <string, Note>     noteMap     = GetRandomNotes();
            DocumentOptions        options            = GetDocumentOptions();
            TrainLocationTimeModel testObject         = GetTrainLocationTimeModel(locationMap, noteMap);

            TrainLocationTime testResult = testObject.ToTrainLocationTime(locationMap, noteMap, options);

            Assert.AreEqual(options.FormattingStrings.Complete, testResult.FormattingStrings.Complete);
            Assert.AreEqual(options.FormattingStrings.Hours, testResult.FormattingStrings.Hours);
            Assert.AreEqual(options.FormattingStrings.Minutes, testResult.FormattingStrings.Minutes);
            Assert.AreEqual(options.FormattingStrings.TimeWithoutFootnotes, testResult.FormattingStrings.TimeWithoutFootnotes);
        }
示例#11
0
        public void TrainLocationTimeModelExtensionsToTrainLocationTimeMethodReturnsObjectWithNullLocationPropertyIfLocationIdPropertyOfFirstParameterIsNotPresentAsKeyInSecondParameter()
        {
            Dictionary <string, Location> locationMap = GetRandomLocationMap();
            Dictionary <string, Note>     noteMap     = GetRandomNotes();
            TrainLocationTimeModel        testObject  = GetTrainLocationTimeModel(locationMap, noteMap);

            do
            {
                testObject.LocationId = _random.NextHexString(8);
            } while (locationMap.ContainsKey(testObject.LocationId));

            TrainLocationTime testResult = testObject.ToTrainLocationTime(locationMap, noteMap, GetDocumentOptions());

            Assert.IsNull(testResult.Location);
        }
        /// <summary>
        /// Convert a <see cref="TrainLocationTime" /> instance to a <see cref="TrainLocationTimeModel" /> instance.
        /// </summary>
        /// <param name="tlt">The object to be converted.</param>
        /// <returns>A <see cref="TrainLocationTimeModel" /> instance containing the same data as the parameter in serialisable form.</returns>
        /// <exception cref="NullReferenceException">Thrown if the parameter is <c>null</c>.</exception>
        public static TrainLocationTimeModel ToYamlTrainLocationTimeModel(this TrainLocationTime tlt)
        {
            if (tlt is null)
            {
                throw new NullReferenceException();
            }

            return(new TrainLocationTimeModel
            {
                Arrival = tlt.ArrivalTime.ToYamlTrainTimeModel(),
                Departure = tlt.DepartureTime.ToYamlTrainTimeModel(),
                LocationId = tlt.Location.Id,
                Pass = tlt.Pass,
                Platform = tlt.Platform,
                Path = tlt.Path,
                Line = tlt.Line,
            });
        }
        /// <summary>
        /// Convert a <see cref="TrainLocationTime"/> instance into a <see cref="TrainLocationTimeModel"/> instance.
        /// </summary>
        /// <param name="tlt">The instance to be converted.</param>
        /// <returns>A <see cref="TrainLocationTimeModel"/> instance containing the same data as the parameter.</returns>
        public static TrainLocationTimeModel ToTrainLocationTimeModel(this TrainLocationTime tlt)
        {
            if (tlt is null)
            {
                throw new ArgumentNullException(nameof(tlt));
            }

            return(new TrainLocationTimeModel
            {
                ArrivalTime = tlt.ArrivalTime.ToTrainTimeModel(),
                DepartureTime = tlt.DepartureTime.ToTrainTimeModel(),
                LocationId = tlt.Location.Id,
                Pass = tlt.Pass,
                Platform = tlt.Platform,
                Path = tlt.Path,
                Line = tlt.Line,
            });
        }