public void InnerConduitCut(SingleConduitInfo singleConduitInfo, MultiConduitInnerConduitCut @event) { // Get the multi conduit var multiConduit = conduitNetworkQueryService.GetMultiConduitInfo(@event.MultiConduitId); // Get the walk of interest of the multi conduit var walkOfInterest = routeNetworkQueryService.GetWalkOfInterestInfo(multiConduit.WalkOfInterestId); // Get the node var nodeWhereToCut = routeNetworkQueryService.GetRouteNodeInfo(@event.PointOfInterestId); ConduitCutter.CutConduit(singleConduitInfo, walkOfInterest, nodeWhereToCut); conduitNetworkQueryService.UpdateSingleConduitInfo(singleConduitInfo); }
// Apply inner conduit cut event private void Apply(MultiConduitInnerConduitCut @event) { }
private void OnMultiConduitInnerConduitCut(ConduitClosureInfo conduitClosure, MultiConduitInnerConduitCut @event) { // Get multi conduit var multiConduit = conduitNetworkQueryService.GetMultiConduitInfo(@event.MultiConduitId); // Get the inner conduit that is cut var innerConduit = multiConduit.Children.OfType <ConduitInfo>().Single(c => c.SequenceNumber == @event.InnerConduitSequenceNumber); var relatedSegments = FindRelatedSegmentInfo(innerConduit, @event.PointOfInterestId); if (relatedSegments.Exists(s => s.RelationType == ConduitRelationTypeEnum.Incomming)) { var incommingSegment = relatedSegments.Find(s => s.RelationType == ConduitRelationTypeEnum.Incomming); // Find incomming terminal if (conduitClosure.Sides.Exists(s => s.Ports.Exists(p => p.MultiConduitId == @event.MultiConduitId && p.MultiConduitSegmentEndKind == ConduitEndKindEnum.Incomming))) { var side = conduitClosure.Sides.Find(s => s.Ports.Exists(p => p.MultiConduitId == @event.MultiConduitId && p.MultiConduitSegmentEndKind == ConduitEndKindEnum.Incomming)); var port = side.Ports.Find(p => p.MultiConduitId == @event.MultiConduitId && p.MultiConduitSegmentEndKind == ConduitEndKindEnum.Incomming); if (port.Terminals.Exists(t => t.Position == @event.InnerConduitSequenceNumber)) { var terminal = port.Terminals.Find(t => t.Position == @event.InnerConduitSequenceNumber); terminal.ConnectionKind = ConduitClosureInternalConnectionKindEnum.NotConnected; terminal.ConnectedToSide = 0; terminal.ConnectedToPort = 0; terminal.ConnectedToTerminal = 0; terminal.LineSegmentId = incommingSegment.Segment.Id; terminal.LineSegment = null; // to force re-resolving } } } if (relatedSegments.Exists(s => s.RelationType == ConduitRelationTypeEnum.Outgoing)) { var outgoingSegment = relatedSegments.Find(s => s.RelationType == ConduitRelationTypeEnum.Outgoing); // Find incomming terminal if (conduitClosure.Sides.Exists(s => s.Ports.Exists(p => p.MultiConduitId == @event.MultiConduitId && p.MultiConduitSegmentEndKind == ConduitEndKindEnum.Outgoing))) { var side = conduitClosure.Sides.Find(s => s.Ports.Exists(p => p.MultiConduitId == @event.MultiConduitId && p.MultiConduitSegmentEndKind == ConduitEndKindEnum.Outgoing)); var port = side.Ports.Find(p => p.MultiConduitId == @event.MultiConduitId && p.MultiConduitSegmentEndKind == ConduitEndKindEnum.Outgoing); if (port.Terminals.Exists(t => t.Position == @event.InnerConduitSequenceNumber)) { var terminal = port.Terminals.Find(t => t.Position == @event.InnerConduitSequenceNumber); terminal.ConnectionKind = ConduitClosureInternalConnectionKindEnum.NotConnected; terminal.ConnectedToSide = 0; terminal.ConnectedToPort = 0; terminal.ConnectedToTerminal = 0; terminal.LineSegmentId = outgoingSegment.Segment.Id; terminal.LineSegment = null; // to force re-resolving } } } conduitClosureRepository.UpdateConduitClosureInfo(conduitClosure); }