private void AttachInnerConduitsToTerminals(ConduitClosureInfo conduitClosureInfo, ConduitClosurePassingByConduitAttached @event, ConduitClosureInfoSide sidePosition)
        {
            // Get side
            var side = conduitClosureInfo.Sides.Find(s => s.Position == sidePosition);

            // Get conduit end kind (to be placed on terminal)
            var endKind = @event.IncommingSide == sidePosition ? ConduitEndKindEnum.Incomming : ConduitEndKindEnum.Outgoing;

            // Get port position
            var portPosition = @event.IncommingSide == sidePosition ? @event.IncommingPortPosition : @event.OutgoingPortPosition;

            // Get port
            var port = side.Ports.Find(p => p.Position == portPosition);

            // Get multi conduit
            var multiConduit = conduitNetworkQueryService.GetConduitInfo(@event.ConduitId);

            int terminalPosition = 1;

            foreach (var innerConduit in multiConduit.Children)
            {
                // Get related segment info
                var relatedSegmentInfo = FindRelatedSegmentInfo((ConduitInfo)innerConduit, conduitClosureInfo.PointOfInterestId);

                // Create terminal
                var newTerminal = new ConduitClosureTerminalInfo()
                {
                    Position           = terminalPosition,
                    ConnectionKind     = ConduitClosureInternalConnectionKindEnum.NotConnected,
                    LineId             = innerConduit.Id,
                    LineSegmentId      = relatedSegmentInfo.Segment.Id,
                    LineSegmentEndKind = endKind
                };

                // Try find other side
                var otherEndTerminalInfo = FindRelatedTerminal(conduitClosureInfo, relatedSegmentInfo.Segment.Id);

                if (otherEndTerminalInfo != null)
                {
                    newTerminal.ConnectedToSide     = otherEndTerminalInfo.Side;
                    newTerminal.ConnectedToPort     = otherEndTerminalInfo.Port;
                    newTerminal.ConnectedToTerminal = otherEndTerminalInfo.Terminal;
                    newTerminal.ConnectionKind      = otherEndTerminalInfo.ConnectionKind;

                    // Update the other end as well
                    var otherEndPort = conduitClosureInfo.Sides.Find(s => s.Position == otherEndTerminalInfo.Side).Ports.Find(p => p.Position == otherEndTerminalInfo.Port).Terminals.Find(t => t.Position == otherEndTerminalInfo.Terminal);
                    otherEndPort.ConnectedToSide     = sidePosition;
                    otherEndPort.ConnectedToPort     = portPosition;
                    otherEndPort.ConnectedToTerminal = terminalPosition;
                    otherEndPort.ConnectionKind      = otherEndTerminalInfo.ConnectionKind;
                }

                port.Terminals.Add(newTerminal);

                terminalPosition++;
            }
        }
        private void AttachSingleConduitToPortTerminal(ConduitClosureInfo conduitClosureInfo, Guid conduitId, ConduitClosureInfoSide sideParam, int portPosition, int terminalPosition)
        {
            // Get conduit
            var conduit = conduitNetworkQueryService.GetConduitInfo(conduitId);

            // Find the conduit segment that is related to the point of interest of the conduit closure
            var relatedSegmentInfo = FindRelatedSegmentInfo(conduit, conduitClosureInfo.PointOfInterestId);

            var side    = conduitClosureInfo.Sides.Find(s => s.Position == sideParam);
            var endKind = relatedSegmentInfo.RelationType == ConduitRelationTypeEnum.Incomming ? ConduitEndKindEnum.Incomming : ConduitEndKindEnum.Outgoing;

            // Find or create port
            ConduitClosurePortInfo port = null;

            if (!side.Ports.Exists(p => p.Position == portPosition))
            {
                port = new ConduitClosurePortInfo()
                {
                    Position       = portPosition,
                    ConnectionKind = ConduitClosureInternalConnectionKindEnum.NotConnected
                };

                side.Ports.Add(port);
            }
            else
            {
                port = side.Ports.Find(p => p.Position == portPosition);
            }


            // Create terminal
            var newTerminal = new ConduitClosureTerminalInfo()
            {
                Position           = terminalPosition,
                ConnectionKind     = ConduitClosureInternalConnectionKindEnum.NotConnected,
                LineId             = conduitId,
                LineSegmentId      = relatedSegmentInfo.Segment.Id,
                LineSegmentEndKind = endKind
            };

            port.Terminals.Add(newTerminal);
        }