/// <summary> /// See base docs. /// </summary> /// <param name="fetchedDetail"></param> /// <returns></returns> protected override CallsignRouteDetail DoFetchAircraft(AircraftFetcher <CallsignRouteFetcher.Key, CallsignRouteDetail> .FetchedDetail fetchedDetail) { var key = fetchedDetail.Key; var detail = fetchedDetail.Detail; if (!String.IsNullOrEmpty(key.Icao24) && !String.IsNullOrEmpty(key.Callsign)) { var callsignUsed = key.Callsign; var parsed = new Callsign(callsignUsed); var airlines = _StandingDataManager.FindAirlinesForCode(parsed.Code); var isPositioning = airlines.Any(r => r.IsPositioningFlightNumber(parsed.TrimmedNumber)); var isCharter = airlines.Any(r => r.IsCharterFlightNumber(parsed.TrimmedNumber)); Route route = null; if (!isPositioning && !isCharter) { var callsigns = _CallsignParser.GetAllRouteCallsigns(key.Callsign, key.OperatorIcao); foreach (var callsign in callsigns) { callsignUsed = callsign; route = _StandingDataManager.FindRoute(callsignUsed); if (route != null) { break; } } if (route == null) { callsignUsed = key.Callsign; } } detail = new CallsignRouteDetail() { Callsign = key.Callsign, UsedCallsign = callsignUsed, Icao24 = key.Icao24, Route = route, IsCharterFlight = isCharter, IsPositioningFlight = isPositioning, }; OnFetched(new EventArgs <CallsignRouteDetail>(detail)); } return(detail); }
public void CallsignParser_GetAllRouteCallsigns_Returns_The_Correct_Collection_Of_Callsigns() { var worksheet = new ExcelWorksheetData(TestContext); InitialiseStandingDataFromWorksheet(worksheet, countColumns: 3); var callsign = worksheet.EString("Callsign"); var operatorIcaoCode = worksheet.EString("OpCode"); var result = _CallsignParser.GetAllRouteCallsigns(callsign, operatorIcaoCode); var expectedText = worksheet.String("Result") ?? ""; var expectedResult = expectedText == "" ? new string[] {} : worksheet.Array <string>("Result").Select(r => r == null ? null : r.Trim()).ToArray(); var message = String.Format("{0} -> {1}", callsign, expectedText); Assert.AreEqual(expectedResult.Length, result.Count, message); foreach (var expected in expectedResult) { Assert.IsTrue(result.Contains(expected), "Missing '{0}'. {1}", expected, message); } }
/// <summary> /// See base docs. /// </summary> /// <param name="fetchedDetail"></param> /// <returns></returns> protected override CallsignRouteDetail DoFetchAircraft(AircraftFetcher <CallsignRouteFetcher.Key, CallsignRouteDetail> .FetchedDetail fetchedDetail) { var key = fetchedDetail.Key; var detail = fetchedDetail.Detail; if (!String.IsNullOrEmpty(key.Icao24) && !String.IsNullOrEmpty(key.Callsign)) { var callsignUsed = key.Callsign; Route route = null; var callsigns = _CallsignParser.GetAllRouteCallsigns(key.Callsign, key.OperatorIcao); foreach (var callsign in callsigns) { callsignUsed = callsign; route = _StandingDataManager.FindRoute(callsignUsed); if (route != null) { break; } } if (route == null) { callsignUsed = key.Callsign; } detail = new CallsignRouteDetail() { Callsign = key.Callsign, UsedCallsign = callsignUsed, Icao24 = key.Icao24, Route = route, }; OnFetched(new EventArgs <CallsignRouteDetail>(detail)); } return(detail); }
private void TranscribeDatabaseRecordsToJson(List <BaseStationFlight> dbFlights, List <ReportFlightJson> jsonFlights, List <ReportAircraftJson> jsonAircraft, List <ReportAirportJson> jsonAirports, List <ReportRouteJson> jsonRoutes, RequestReceivedEventArgs args, Parameters parameters) { var aircraftIdMap = new Dictionary <int, int>(); var airportMap = new Dictionary <string, int>(); var routeMap = new Dictionary <string, int>(); int rowNumber = parameters.FromRow < 1 ? 1 : parameters.FromRow + 1; foreach (var dbFlight in dbFlights) { var jsonFlight = AddReportFlightJson(dbFlight, jsonFlights, ref rowNumber); if (jsonAircraft != null) { var dbAircraft = dbFlight.Aircraft; if (dbAircraft == null) { jsonFlight.AircraftIndex = jsonAircraft.Count; jsonAircraft.Add(new ReportAircraftJson() { IsUnknown = true }); } else { int aircraftIndex; if (!aircraftIdMap.TryGetValue(dbAircraft.AircraftID, out aircraftIndex)) { aircraftIndex = jsonAircraft.Count; aircraftIdMap.Add(dbAircraft.AircraftID, aircraftIndex); jsonAircraft.Add(CreateReportAircraftJson(dbAircraft, args)); } jsonFlight.AircraftIndex = aircraftIndex; } } int routeIndex = -1; if (!String.IsNullOrEmpty(dbFlight.Callsign) && !routeMap.TryGetValue(dbFlight.Callsign, out routeIndex)) { var operatorCode = dbFlight.Aircraft != null ? dbFlight.Aircraft.OperatorFlagCode : null; foreach (var routeCallsign in _CallsignParser.GetAllRouteCallsigns(dbFlight.Callsign, operatorCode)) { var sdmRoute = StandingDataManager.FindRoute(routeCallsign); if (sdmRoute == null) { routeIndex = -1; } else { var jsonRoute = new ReportRouteJson() { FromIndex = BuildAirportJson(sdmRoute.From, airportMap, jsonAirports), ToIndex = BuildAirportJson(sdmRoute.To, airportMap, jsonAirports), }; foreach (var stopover in sdmRoute.Stopovers) { int index = BuildAirportJson(stopover, airportMap, jsonAirports); if (index != -1) { jsonRoute.StopoversIndex.Add(index); } } routeIndex = jsonRoutes.Count; jsonRoutes.Add(jsonRoute); routeMap.Add(dbFlight.Callsign, routeIndex); break; } } } jsonFlight.RouteIndex = routeIndex; } }