protected override void HandleValidNode(NodeGeometry geometry)
            {
                if (geometry.CurrentSegmentReplacement.oldSegmentEndId != null && geometry.CurrentSegmentReplacement.newSegmentEndId != null)
                {
                    ISegmentEndId oldSegmentEndId = geometry.CurrentSegmentReplacement.oldSegmentEndId;
                    ISegmentEndId newSegmentEndId = geometry.CurrentSegmentReplacement.newSegmentEndId;

                    SegmentEndFlags flags;
                    if (oldSegmentEndId.StartNode)
                    {
                        flags = invalidSegmentFlags[oldSegmentEndId.SegmentId].startNodeFlags;
                    }
                    else
                    {
                        flags = invalidSegmentFlags[oldSegmentEndId.SegmentId].endNodeFlags;
                    }

                    if (flags.IsDefault())
                    {
                        return;
                    }

                    Log._Debug($"JunctionRestrictionsManager.NodeWatcher.HandleValidNode({geometry.NodeId}): Segment replacement detected: {oldSegmentEndId.SegmentId} -> {newSegmentEndId.SegmentId}\n" +
                               $"Moving segmend end flags {flags} to new segment end."
                               );

                    junctionRestrictionsManager.SetSegmentEndFlags(newSegmentEndId.SegmentId, newSegmentEndId.StartNode, flags);
                }
            }
            protected override void HandleValidNode(NodeGeometry geometry)
            {
                // update segment defaults
                foreach (SegmentEndGeometry endGeo in geometry.SegmentEndGeometries)
                {
                    if (endGeo == null)
                    {
                        continue;
                    }

                    SegmentGeometry segGeo = endGeo.GetSegmentGeometry(true);

                    if (segGeo.IsValid())
                    {
                        junctionRestrictionsManager.HandleValidSegment(segGeo);
                    }
                }

                if (geometry.CurrentSegmentReplacement.oldSegmentEndId != null && geometry.CurrentSegmentReplacement.newSegmentEndId != null)
                {
                    ISegmentEndId oldSegmentEndId = geometry.CurrentSegmentReplacement.oldSegmentEndId;
                    ISegmentEndId newSegmentEndId = geometry.CurrentSegmentReplacement.newSegmentEndId;

                    SegmentEndFlags flags;
                    if (oldSegmentEndId.StartNode)
                    {
                        flags = invalidSegmentFlags[oldSegmentEndId.SegmentId].startNodeFlags;
                        invalidSegmentFlags[oldSegmentEndId.SegmentId].startNodeFlags.Reset();
                    }
                    else
                    {
                        flags = invalidSegmentFlags[oldSegmentEndId.SegmentId].endNodeFlags;
                        invalidSegmentFlags[oldSegmentEndId.SegmentId].endNodeFlags.Reset();
                    }

                    if (!flags.IsDefault())
                    {
                        Log._Debug($"JunctionRestrictionsManager.NodeWatcher.HandleValidNode({geometry.NodeId}): Segment replacement detected: {oldSegmentEndId.SegmentId} -> {newSegmentEndId.SegmentId}\n" +
                                   $"Moving segmend end flags {flags} to new segment end."
                                   );

                        junctionRestrictionsManager.SetSegmentEndFlags(newSegmentEndId.SegmentId, newSegmentEndId.StartNode, flags);
                    }
                }
            }