private void UpdateSegmentEndIndex(FiberInfo oldConduitInfo, FiberInfo newConduitInfo)
        {
            if (oldConduitInfo != null)
            {
                // Remove all old references
                foreach (var segment in oldConduitInfo.Segments)
                {
                    _fiberSegmentEndsByPointOfInterestId[segment.FromRouteNodeId].Remove(segment);
                    _fiberSegmentEndsByPointOfInterestId[segment.ToRouteNodeId].Remove(segment);
                }
            }

            // Add new references
            foreach (var segment in newConduitInfo.Segments)
            {
                if (!_fiberSegmentEndsByPointOfInterestId.ContainsKey(segment.FromRouteNodeId))
                {
                    _fiberSegmentEndsByPointOfInterestId[segment.FromRouteNodeId] = new List <ISegment>();
                }

                _fiberSegmentEndsByPointOfInterestId[segment.FromRouteNodeId].Add(segment);

                if (!_fiberSegmentEndsByPointOfInterestId.ContainsKey(segment.ToRouteNodeId))
                {
                    _fiberSegmentEndsByPointOfInterestId[segment.ToRouteNodeId] = new List <ISegment>();
                }

                _fiberSegmentEndsByPointOfInterestId[segment.ToRouteNodeId].Add(segment);
            }
        }
        private void UpdateSegmentPassByIndex(FiberInfo oldFiberInfo, FiberInfo newFiberInfo)
        {
            var conduitWalkOfInterest = routeNetworkQueryService.GetWalkOfInterestInfo(newFiberInfo.GetRoot().WalkOfInterestId);

            if (oldFiberInfo != null)
            {
                // Remove old references
                foreach (var segment in oldFiberInfo.Segments.OfType <FiberSegmentInfo>())
                {
                    var passThrougNodes = GetPassThroughNodes(segment, conduitWalkOfInterest);

                    foreach (var passThroughNode in passThrougNodes)
                    {
                        _fiberSegmentPassByPointOfInterestId[passThroughNode].Remove(segment);
                    }
                }
            }

            // Add new references
            foreach (var segment in newFiberInfo.Segments.OfType <FiberSegmentInfo>())
            {
                var passThrougNodes = GetPassThroughNodes(segment, conduitWalkOfInterest);

                foreach (var passThroughNode in passThrougNodes)
                {
                    if (!_fiberSegmentPassByPointOfInterestId.ContainsKey(passThroughNode))
                    {
                        _fiberSegmentPassByPointOfInterestId[passThroughNode] = new List <ISegment>();
                    }

                    _fiberSegmentPassByPointOfInterestId[passThroughNode].Add(segment);
                }
            }
        }
예제 #3
0
        public bool CheckIfConduitIsCut(Guid conduitId, Guid pointOfInterestId)
        {
            FiberInfo fiberCableToCheck = null;

            if (_fiberCableInfos.ContainsKey(conduitId))
            {
                fiberCableToCheck = _fiberCableInfos[conduitId];
            }
            else
            {
                throw new KeyNotFoundException("Cannot find any fiber cable with id: " + conduitId);
            }

            // Check if fiber cable is cut
            if (fiberCableToCheck.Segments.Exists(s => s.FromRouteNodeId == pointOfInterestId || s.ToRouteNodeId == pointOfInterestId))
            {
                return(true);
            }
            else
            {
                return(false);
            }
        }
 public void Update(FiberInfo oldConduitInfo, FiberInfo newConduitInfo)
 {
     UpdateSegmentEndIndex(oldConduitInfo, newConduitInfo);
     UpdateSegmentPassByIndex(oldConduitInfo, newConduitInfo);
     UpdateRouteSegmentPassByIndex(oldConduitInfo, newConduitInfo);
 }