private void EnsureStationHasTrack(Train train) { foreach (var track in train.Tracks) { var t = track; if (!Layout.HasTrack(t)) throw new TimetableException(string.Format(CultureInfo.CurrentCulture, Properties.Resources.TrackInStationReferredInTrainIsNotInLayout, track, track.Station, train)); } }
public void Add(Train train) { if (train == null) throw new ArgumentNullException(nameof(train)); train.Verify(); EnsureStationHasTrack(train); CreateTimetableLinks(train); _trains.Add(train); }
private void CreateTimetableLinks(Train train) { var calls = train.Calls.ToArray(); for (var i =0; i < (calls.Count() - 1); i++) { var j = i + 1; var from = calls[i].Track.Station; var to = calls[j].Track.Station; if (! from.Equals(to)) { var trackLink = Layout.TrackStretch(from, to); trackLink.Add(new StretchPassing(calls[i], calls[j])); } } }
public static void RecordHandler(IDataRecord record, Timetable timetable) { Train currentTrain = null; var key = Thread.CurrentThread.ManagedThreadId; if (CachedTrains.ContainsKey(key)) { currentTrain = CachedTrains[key]; } var identity = record.GetString(record.GetOrdinal("TrainNumber")); var category = GetCategory(record.GetString(record.GetOrdinal("Product"))); if (currentTrain == null) { currentTrain = new Train(category, identity); CachedTrains[key] = currentTrain; } if (currentTrain.Identity != identity) { timetable.Add(currentTrain); currentTrain = new Train(category, identity); CachedTrains[key] = currentTrain; } currentTrain.Add(GetCall(record, timetable)); }
private static void GetTrains(Timetable timetable, Excel.Workbook book) { Excel.Worksheet sheet = book.Worksheets["Trains"]; var r = 2; Train current = null; while (true) { var row = (Array)sheet.get_Range(Cell("A", r), Cell("K", r)).Cells.Value; if (row.GetValue(1, 1) == null) { break; } else { var type = row.Value(9).ToLowerInvariant(); switch (type) { case "traindef": if (current != null) timetable.Add(current); var number = row.Value(10); current = new Train(GetCategory(number.Substring(0, 1)), number); break; case "timetable": try { var track = timetable.Layout.Station(row.Value(3))[row.Value(4)]; current.Add(new StationCall(track, Time.Parse(row.Value(5)), Time.Parse(row.Value(6)))); } catch (Exception) { Debugger.Break(); throw; } break; default: break; } } r++; } if (current != null) timetable.Add(current); }