private LinkingNode[] GetLinkingNodes(Tagonomy tagonomy) { var nodes = tagonomy.Nodes .Where(x => x.ElementsArray.Any(e => e is ReferenceNodeElement)) .Select(x => new LinkingNode { Node = x, References = x.GetElements <ReferenceNodeElement>() }).ToArray(); return(nodes); }
private async Task PopulateData() { if (HyperStore == null || string.IsNullOrWhiteSpace(TagonomyId)) { return; } var documentId = HyperDocumentId.Create <Tagonomy>(TagonomyId); var argTagonomy = new RetrieveHyperDocumentArgs(documentId); var doc = await HyperStore.ExecuteAsync(argTagonomy); if (argTagonomy.ExecutionResult.IsNotSuccess) { return; } _rootTagonomy = doc?.GetPayload <Tagonomy>(); _unprocessedSourceTagonomies.Clear(); _processedSourceTagonomies.Clear(); var args = new FindHyperDocumentsArgs(typeof(Tagonomy), true); _allTagonomies = ((await this.HyperStore.ExecuteAsyncThrows(args)) ?? new Node.Common.HyperDocument[0]) .Select(x => x.GetPayload <Tagonomy>()) .ToArray(); _unprocessedSourceTagonomies.Add(_rootTagonomy.Id, _rootTagonomy); while (_unprocessedSourceTagonomies.Any()) { foreach (var unprocTagonomie in _unprocessedSourceTagonomies.Select(x => x.Value).ToArray()) { var linkingNodesInner = GetLinkingNodes(unprocTagonomie); ProcessLinkingNodes(linkingNodesInner, unprocTagonomie, true); } } GoBackwards(); }
public async Task EditAsync(Tagonomy item) { await OnEdit.InvokeAsync(item); }
public async Task ManageAsync(Tagonomy item) { await OnManage.InvokeAsync(item); }
public void ShowPropertyGrid(Tagonomy item) { SelectedItem = item; IsShowProperty = true; }
/// <summary> /// Processes all linking nodes of a single source Tagonomy. /// </summary> private void ProcessLinkingNodes(LinkingNode[] linkingNodes, Tagonomy sourceTagonomy, bool forwardLinking) { if (sourceTagonomy == null && linkingNodes.Any()) { var id = linkingNodes.First().Node.TagonomyId; sourceTagonomy = _allTagonomies.FirstOrDefault(x => x.Id == id); } if (sourceTagonomy == null) { return; // TODO: Log error } if (forwardLinking) { _unprocessedSourceTagonomies.Remove(sourceTagonomy.Id); } _processedSourceTagonomies.Add(sourceTagonomy.Id, sourceTagonomy); foreach (var linkingNode in linkingNodes) { foreach (var reference in linkingNode.References) { var targetTagonomy = _allTagonomies.FirstOrDefault(x => x.Id == reference.TagonomyDocumentId.Id); if (targetTagonomy == null) { continue; // TODO: Log error } var link = Links.FirstOrDefault(x => x.SourceTagonomy == sourceTagonomy && x.TargetTagonomy == targetTagonomy); if (link == null) { link = new TagonomiesLink { SourceTagonomy = sourceTagonomy, TargetTagonomy = targetTagonomy, IsForwardLink = forwardLinking }; Links.Add(link); if (forwardLinking) { if (!_unprocessedSourceTagonomies.ContainsKey(targetTagonomy.Id) && !_processedSourceTagonomies.ContainsKey(targetTagonomy.Id)) { _unprocessedSourceTagonomies.Add(targetTagonomy.Id, targetTagonomy); } } } if (!link.ReferencedNodes.Any(r => r.ReferenceId == reference.Id)) { var referenceNode = new TagonomiesLink.ReferenceSlim { ReferenceId = reference.Id, IsMandatory = reference.IsMandatory, SourceNode = linkingNode.Node }; link.ReferencedNodes.Add(referenceNode); } } } }