Beispiel #1
0
        /// <summary>
        /// Set first level navigation value
        /// </summary>
        /// <param name="namespace"></param>
        /// <param name="value"></param>
        /// <exception cref="ArgumentNullException"></exception>
        public void SetFirstLevelNavValue(string @namespace, EndValueNamespaceNavigationNode value)
        {
            if (string.IsNullOrWhiteSpace(@namespace))
            {
                throw new ArgumentNullException(nameof(@namespace));
            }
            if (value == null)
            {
                throw new ArgumentNullException(nameof(value));
            }
            value = FixedValue(value);

            var firstMatched = _namespaceNavigators.FirstOrDefault(x => string.CompareOrdinal(x.NamespaceFragment, @namespace) == 0);

            if (firstMatched == null)
            {
                var nav = new NamespaceNavigator(@namespace);
                nav.AppendValue(value);
                _namespaceNavigators.Add(nav);
            }
            else
            {
                firstMatched.AppendValue(value);
            }
        }
Beispiel #2
0
        /// <summary>
        /// Set to all navigation node
        /// </summary>
        /// <param name="value"></param>
        /// <exception cref="ArgumentNullException"></exception>
        public void SetAllNavValue(EndValueNamespaceNavigationNode value)
        {
            if (value == null)
            {
                throw new ArgumentNullException(nameof(value));
            }
            if (!HasAllValue())
            {
                ForAllNavNode = new NamespaceNavigator("*");
            }

            ForAllNavNode.AppendValue(value);
        }
Beispiel #3
0
        /// <summary>
        /// Set default navigation node value
        /// </summary>
        /// <param name="value"></param>
        /// <exception cref="ArgumentNullException"></exception>
        public void SetDefaultNavValue(EndValueNamespaceNavigationNode value)
        {
            if (value == null)
            {
                throw new ArgumentNullException(nameof(value));
            }
            if (!HasDefaultValue())
            {
                DefaultNavNode = new NamespaceNavigator("Default");
            }

            DefaultNavNode.AppendValue(value);
        }
        public virtual void AddChild(NamespaceNavigator nav)
        {
            if (nav == null)
            {
                return;
            }
            if (NamespaceFragment == "*")
            {
                return;
            }
            if (AntiLoopSelf(nav))
            {
                return;
            }

            nav.ParentNav = this;
            nav.UpdateFullValueSegmentFromParent(FullNamespaceFragment);
            _nextNavs.Add(nav.NamespaceFragment.GetHashCode(), nav);
        }
Beispiel #5
0
        /// <summary>
        /// Set fluent linked navigation value
        /// </summary>
        /// <param name="namespace"></param>
        /// <param name="value"></param>
        /// <exception cref="ArgumentNullException"></exception>
        public void SetFluentLinkedNavValue(string @namespace, EndValueNamespaceNavigationNode value)
        {
            if (string.IsNullOrWhiteSpace(@namespace))
            {
                throw new ArgumentNullException(nameof(@namespace));
            }
            if (value == null)
            {
                throw new ArgumentNullException(nameof(value));
            }
            value = FixedValue(value);

            var nss        = @namespace.Split('.');
            var root       = TouchRootNode(nss[0], out var createdMode);
            var currentNav = root;

            for (var i = 1; i < nss.Length; i++)
            {
                var _ = _namespaceNavigators.FirstOrDefault(x => x.NamespaceFragment == nss[i]);
                if (_ == null)
                {
                    _ = new NamespaceNavigator(nss[i]);
                    currentNav.AddChild(_);
                }

                currentNav = _;

                if (nss[i] == "*")
                {
                    break;
                }
            }

            currentNav.AppendValue(value);

            if (createdMode)
            {
                _namespaceNavigators.Add(root);
            }
        }
Beispiel #6
0
 /// <inheritdoc />
 public override void AddChild(NamespaceNavigator nav)
 {
 }
 private bool AntiLoopSelf(NamespaceNavigator nav)
 {
     return(AntiLoopSelf(nav.GetHashCode(), LoopSelfWard.Default));
 }