/// <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); } }
/// <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); }
/// <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); }
/// <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); } }
/// <inheritdoc /> public override void AddChild(NamespaceNavigator nav) { }
private bool AntiLoopSelf(NamespaceNavigator nav) { return(AntiLoopSelf(nav.GetHashCode(), LoopSelfWard.Default)); }