Example #1
0
 public Task <Result <GetEquipmentDetailsResult> > HandleAsync(GetEquipmentDetails query)
 {
     if (query.EquipmentIdsToQuery.Count > 0 || query.InterestIdsToQuery.Count > 0)
     {
         return(QueryByEquipmentOrInterestIds(query));
     }
     else
     {
         if (query.InterestIdsToQuery.Count == 0 && query.EquipmentIdsToQuery.Count == 0)
         {
             return(Task.FromResult(Result.Fail <GetEquipmentDetailsResult>(new GetEquipmentDetailsError(GetEquipmentDetailsErrorCodes.INVALID_QUERY_ARGUMENT_NO_INTEREST_OR_EQUPMENT_IDS_SPECIFIED, "Invalid query. No equipment or interest ids specified. Therefore nothing to query."))));
         }
         else
         {
             throw new ApplicationException("Unexpected combination of query arguments in GetEquipmentDetails query:\r\n" + JsonConvert.SerializeObject(query));
         }
     }
 }
Example #2
0
        private Task <Result <GetEquipmentDetailsResult> > QueryByEquipmentOrInterestIds(GetEquipmentDetails query)
        {
            List <SpanEquipmentWithRelatedInfo> spanEquipmentsToReturn = new List <SpanEquipmentWithRelatedInfo>();
            List <NodeContainer> nodeContainersToReturn = new List <NodeContainer>();

            // Fetch span equipments by id
            var spanEquipmentsByIdResult = GetSpanEquipmentsById(query.EquipmentIdsToQuery);

            if (spanEquipmentsByIdResult.IsSuccess)
            {
                spanEquipmentsToReturn.AddRange(spanEquipmentsByIdResult.Value);
            }
            else
            {
                Result.Fail <GetEquipmentDetailsResult>(new GetEquipmentDetailsError(GetEquipmentDetailsErrorCodes.INVALID_QUERY_ARGUMENT_ERROR_LOOKING_UP_SPECIFIED_EQUIPMENT_BY_EQUIPMENT_ID, spanEquipmentsByIdResult.Errors.First().Message));
            }

            // Get eventually single span segment request
            var traceThisSpanSegmentIdOnly = GetSingleSpanSegmentTraceOnlyIdIfSpecificed(query.EquipmentIdsToQuery);

            // Fetch equipment by interest id
            foreach (var interestId in query.InterestIdsToQuery)
            {
                if (!_utilityNetwork.TryGetEquipment <IEquipment>(interestId, out IEquipment equipment))
                {
                    return(Task.FromResult(
                               Result.Fail <GetEquipmentDetailsResult>(new GetEquipmentDetailsError(GetEquipmentDetailsErrorCodes.INVALID_QUERY_ARGUMENT_ERROR_LOOKING_UP_SPECIFIED_EQUIPMENT_BY_INTEREST_ID, $"Cannot find equipment with interest id: {interestId}"))
                               ));
                }

                if (equipment is SpanEquipment spanEquipment)
                {
                    spanEquipmentsToReturn.Add(new SpanEquipmentWithRelatedInfo(spanEquipment));
                }

                if (equipment is NodeContainer nodeContainer)
                {
                    nodeContainersToReturn.Add(nodeContainer);
                }
            }

            var result = new GetEquipmentDetailsResult()
            {
                SpanEquipment      = new LookupCollection <SpanEquipmentWithRelatedInfo>(spanEquipmentsToReturn),
                NodeContainers     = new LookupCollection <NodeContainer>(nodeContainersToReturn),
                RouteNetworkTraces = query.EquipmentDetailsFilter.IncludeRouteNetworkTrace ? AddTraceRefsToSpanEquipments(spanEquipmentsToReturn, traceThisSpanSegmentIdOnly) : null
            };

            return(Task.FromResult(
                       Result.Ok <GetEquipmentDetailsResult>(result)
                       ));
        }