Skip to content

Commit 3ff5e50

Browse files
Update attribute methods
1 parent 708279c commit 3ff5e50

File tree

1 file changed

+58
-54
lines changed

1 file changed

+58
-54
lines changed

csharp/Platform.Data.Doublets.Xml/DefaultXmlStorage.cs

Lines changed: 58 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -334,7 +334,7 @@ public bool IsNode(TLinkAddress possibleXmlNode)
334334
var isAttributeNode = IsAttributeNode(possibleXmlNode);
335335
return isElement || isTextNode || isAttributeNode;
336336
}
337-
337+
338338
#region Document
339339

340340
public IList<TLinkAddress> GetDocumentChildNodeLinkAddresses(TLinkAddress documentLinkAddress)
@@ -541,13 +541,13 @@ public TLinkAddress CreateTextNode(string text)
541541

542542
public void EnsureIsTextNode(TLinkAddress possibleTextNodeLinkAddress)
543543
{
544-
if(!IsTextNode(possibleTextNodeLinkAddress))
544+
if (!IsTextNode(possibleTextNodeLinkAddress))
545545
{
546546
throw new ArgumentException($"{possibleTextNodeLinkAddress} is not a text node link address");
547547
}
548548
}
549-
550-
549+
550+
551551
public string GetTextNode(TLinkAddress textNodeLinkAddress)
552552
{
553553
EnsureIsTextNode(textNodeLinkAddress);
@@ -565,61 +565,14 @@ public bool IsAttributeNode(TLinkAddress attributeNodeLinkAddress)
565565
return EqualityComparer.Equals(possibleAttributeNodeType, AttributeNodeType);
566566
}
567567

568-
#endregion
569-
570-
#region ElementNode
571-
572-
public TLinkAddress CreateElement(string name, TLinkAddress childrenNodesSequenceLinkAddress)
573-
{
574-
var elementLinkAddress = CreateElement(name);
575-
var elementChildrenNodesLinkAddress = CreateElementChildrenNodes(elementLinkAddress, childrenNodesSequenceLinkAddress);
576-
Links.GetOrCreate(elementLinkAddress, elementChildrenNodesLinkAddress);
577-
return elementLinkAddress;
578-
}
579-
580-
public bool IsElementChildrenNodes(TLinkAddress possibleElementChildrenNodesLinkAddress)
581-
{
582-
var possibleElementChildrenNodesType = Links.GetSource(possibleElementChildrenNodesLinkAddress);
583-
return EqualityComparer.Equals(possibleElementChildrenNodesType, ElementChildrenNodesType);
584-
}
585-
586-
public TLinkAddress GetElementChildrenNodesSequence(TLinkAddress childrenNodesLinkAddress)
587-
{
588-
return Links.GetTarget(childrenNodesLinkAddress);
589-
}
590-
591-
public IList<TLinkAddress> GetElementChildrenNodes(TLinkAddress elementLinkAddress)
568+
public void EnsureIsAttributeNode(TLinkAddress possibleAttributeNodeLinkAddress)
592569
{
593-
if (!IsDocument(elementLinkAddress))
570+
if (!IsAttributeNode(possibleAttributeNodeLinkAddress))
594571
{
595-
throw new ArgumentException("The passed link address is not an element link address.", nameof(elementLinkAddress));
572+
throw new AggregateException($"{possibleAttributeNodeLinkAddress} is not an attribute node link address");
596573
}
597-
var childrenNodes = new List<TLinkAddress>();
598-
Links.Each(new Link<TLinkAddress>(elementLinkAddress, Links.Constants.Any), elementToAnyLink =>
599-
{
600-
var possibleChildrenNodesLinkAddress = Links.GetTarget(elementToAnyLink);
601-
if (!IsDocumentChildrenNodesLinkAddress(possibleChildrenNodesLinkAddress))
602-
{
603-
return Links.Constants.Continue;
604-
}
605-
var childrenNodesSequenceLinkAddress = GetDocumentChildrenNodesSequence(possibleChildrenNodesLinkAddress);
606-
RightSequenceWalker<TLinkAddress> childrenNodesRightSequenceWalker = new(Links, new DefaultStack<TLinkAddress>(), IsNode);
607-
childrenNodes = childrenNodesRightSequenceWalker.Walk(childrenNodesSequenceLinkAddress).ToList();
608-
return Links.Constants.Continue;
609-
});
610-
return childrenNodes;
611574
}
612575

613-
public bool IsElementNode(TLinkAddress elementLinkAddress)
614-
{
615-
var possibleElementType = Links.GetSource(elementLinkAddress);
616-
return EqualityComparer.Equals(possibleElementType, ElementType);
617-
}
618-
619-
#endregion
620-
621-
#region AttributeNode
622-
623576
private TLinkAddress CreateAttributeNode(XmlAttribute xmlAttribute)
624577
{
625578
var attributeName = _stringToUnicodeSequenceConverter.Convert(xmlAttribute.Name);
@@ -671,6 +624,57 @@ public string GetAttributeValue(TLinkAddress attributeLinkAddress)
671624

672625
#endregion
673626

627+
#region ElementNode
628+
629+
public TLinkAddress CreateElement(string name, TLinkAddress childrenNodesSequenceLinkAddress)
630+
{
631+
var elementLinkAddress = CreateElement(name);
632+
var elementChildrenNodesLinkAddress = CreateElementChildrenNodes(elementLinkAddress, childrenNodesSequenceLinkAddress);
633+
Links.GetOrCreate(elementLinkAddress, elementChildrenNodesLinkAddress);
634+
return elementLinkAddress;
635+
}
636+
637+
public bool IsElementChildrenNodes(TLinkAddress possibleElementChildrenNodesLinkAddress)
638+
{
639+
var possibleElementChildrenNodesType = Links.GetSource(possibleElementChildrenNodesLinkAddress);
640+
return EqualityComparer.Equals(possibleElementChildrenNodesType, ElementChildrenNodesType);
641+
}
642+
643+
public TLinkAddress GetElementChildrenNodesSequence(TLinkAddress childrenNodesLinkAddress)
644+
{
645+
return Links.GetTarget(childrenNodesLinkAddress);
646+
}
647+
648+
public IList<TLinkAddress> GetElementChildrenNodes(TLinkAddress elementLinkAddress)
649+
{
650+
if (!IsDocument(elementLinkAddress))
651+
{
652+
throw new ArgumentException("The passed link address is not an element link address.", nameof(elementLinkAddress));
653+
}
654+
var childrenNodes = new List<TLinkAddress>();
655+
Links.Each(new Link<TLinkAddress>(elementLinkAddress, Links.Constants.Any), elementToAnyLink =>
656+
{
657+
var possibleChildrenNodesLinkAddress = Links.GetTarget(elementToAnyLink);
658+
if (!IsDocumentChildrenNodesLinkAddress(possibleChildrenNodesLinkAddress))
659+
{
660+
return Links.Constants.Continue;
661+
}
662+
var childrenNodesSequenceLinkAddress = GetDocumentChildrenNodesSequence(possibleChildrenNodesLinkAddress);
663+
RightSequenceWalker<TLinkAddress> childrenNodesRightSequenceWalker = new(Links, new DefaultStack<TLinkAddress>(), IsNode);
664+
childrenNodes = childrenNodesRightSequenceWalker.Walk(childrenNodesSequenceLinkAddress).ToList();
665+
return Links.Constants.Continue;
666+
});
667+
return childrenNodes;
668+
}
669+
670+
public bool IsElementNode(TLinkAddress elementLinkAddress)
671+
{
672+
var possibleElementType = Links.GetSource(elementLinkAddress);
673+
return EqualityComparer.Equals(possibleElementType, ElementType);
674+
}
675+
676+
#endregion
677+
674678
#endregion
675679
}
676680
}

0 commit comments

Comments
 (0)