public async Task QueryEquipmentDetailsOfCC_1() { var routeNetworkQuery = new GetRouteNetworkDetails(new RouteNetworkElementIdList() { TestRouteNetwork.CC_1 }) { RelatedInterestFilter = RelatedInterestFilterOptions.ReferencesFromRouteElementOnly }; // Act Result <GetRouteNetworkDetailsResult> routeNetworkQueryResult = await _queryDispatcher.HandleAsync <GetRouteNetworkDetails, Result <GetRouteNetworkDetailsResult> >(routeNetworkQuery); var interestIds = new InterestIdList(); interestIds.AddRange(routeNetworkQueryResult.Value.RouteNetworkElements[TestRouteNetwork.CC_1].InterestRelations.Select(r => r.RefId)); var equipmentQueryResult = await _queryDispatcher.HandleAsync <GetEquipmentDetails, Result <GetEquipmentDetailsResult> >( new GetEquipmentDetails(interestIds) ); // Assert equipmentQueryResult.IsSuccess.Should().BeTrue(); equipmentQueryResult.Value.SpanEquipment.Count.Should().Be(3); }
public static Result <NodeContainer> GetNodeContainerFromRouteNodeId(IQueryDispatcher queryDispatcher, Guid routeNodeId) { // Query all route node interests var routeNetworkInterestQuery = new GetRouteNetworkDetails(new RouteNetworkElementIdList() { routeNodeId }) { RelatedInterestFilter = RelatedInterestFilterOptions.ReferencesFromRouteElementOnly }; Result <GetRouteNetworkDetailsResult> interestsQueryResult = queryDispatcher.HandleAsync <GetRouteNetworkDetails, Result <GetRouteNetworkDetailsResult> >(routeNetworkInterestQuery).Result; if (interestsQueryResult.IsFailed) { return(Result.Fail(interestsQueryResult.Errors.First())); } var interestIdList = new InterestIdList(); interestIdList.AddRange(interestsQueryResult.Value.RouteNetworkElements[routeNodeId].InterestRelations.Select(r => r.RefId)); // Only query for equipments if interests are returned from the route network query if (interestIdList.Count > 0) { // Query all the equipments related to the route network element var equipmentQueryResult = queryDispatcher.HandleAsync <GetEquipmentDetails, Result <GetEquipmentDetailsResult> >( new GetEquipmentDetails(interestIdList) { EquipmentDetailsFilter = new EquipmentDetailsFilterOptions() { IncludeRouteNetworkTrace = false } } ).Result; if (equipmentQueryResult.IsFailed) { return(Result.Fail(equipmentQueryResult.Errors.First())); } if (equipmentQueryResult.Value.NodeContainers != null && equipmentQueryResult.Value.NodeContainers.Count > 0) { return(Result.Ok(equipmentQueryResult.Value.NodeContainers.First())); } } return(Result.Fail(new Error($"Failed to find node container in route node with id: {routeNodeId}"))); }
private RelatedEquipmentInfo GetRelatedInformation(Guid routeNodeId) { RelatedEquipmentInfo result = new(); // Get interest information from existing span equipment var interestQueryResult = _queryDispatcher.HandleAsync <GetRouteNetworkDetails, Result <GetRouteNetworkDetailsResult> >(new GetRouteNetworkDetails(new RouteNetworkElementIdList() { routeNodeId }) { RelatedInterestFilter = RelatedInterestFilterOptions.ReferencesFromRouteElementOnly }).Result; if (interestQueryResult.IsSuccess) { InterestIdList interestIdsToFetch = new InterestIdList(); foreach (var interestRel in interestQueryResult.Value.RouteNetworkElements.First().InterestRelations) { interestIdsToFetch.Add(interestRel.RefId); } if (interestIdsToFetch.Count == 0) { return(result); } var equipmentQueryResult = _queryDispatcher.HandleAsync <GetEquipmentDetails, Result <GetEquipmentDetailsResult> >(new GetEquipmentDetails(interestIdsToFetch)).Result; if (equipmentQueryResult.IsSuccess) { Dictionary <Guid, SpanEquipmentWithRelatedInfo> spanEquipmentByInterestId = equipmentQueryResult.Value.SpanEquipment.ToDictionary(s => s.WalkOfInterestId); if (equipmentQueryResult.Value.NodeContainers != null && equipmentQueryResult.Value.NodeContainers.Count > 0) { result.NodeContainer = equipmentQueryResult.Value.NodeContainers.First(); } foreach (var interestRel in interestQueryResult.Value.RouteNetworkElements.First().InterestRelations) { if (interestRel.RelationKind == RouteNetworkInterestRelationKindEnum.Start) { var spanEq = spanEquipmentByInterestId[interestRel.RefId]; result.OutgoingSpanEquipments.Add(spanEq); result.SpanEquipmentById.Add(spanEq.Id, spanEq); } else if (interestRel.RelationKind == RouteNetworkInterestRelationKindEnum.End) { var spanEq = spanEquipmentByInterestId[interestRel.RefId]; result.IngoingSpanEquipments.Add(spanEq); result.SpanEquipmentById.Add(spanEq.Id, spanEq); } } } else { _logger.LogError($"Error querying equipment details in route node with id: {routeNodeId} " + equipmentQueryResult.Errors.First().Message); } } else { _logger.LogError($"Error querying interests related to route node with id: {routeNodeId} " + interestQueryResult.Errors.First().Message); } return(result); }