private static void AddTaxonVerticesIn(NatureAreaTaxonCodes result, Vertex vertex) { var taxonVerticeIdsIn = vertex.OutId(EL.In, VL.T); foreach (var taxonVertexId in taxonVerticeIdsIn) { result.Taxons.Add(taxonVertexId); } }
private static void AddNatureAreaOrTaxon(NatureAreaTaxonCodes result, Vertex vertex) { if (vertex.Label == VL.T) { result.Taxons.Add(vertex.Id); } else if (vertex.Label == VL.NA) { result.NatureAreas.Add(vertex.Id); AddTaxonVerticesIn(result, vertex); } else if ((vertex.Label == VL.AA && vertex.Id.Contains("-")) || vertex.Label == VL.CA) { AddTaxonVerticesIn(result, vertex); } }
private NatureAreaTaxonCodes GetNatureAreaAndTaxonCodes(params string[] codes) { var result = new NatureAreaTaxonCodes(); foreach (string code in codes) { var vertex = _g.V(code); var stack = new Stack <Vertex>(); stack.Push(vertex); var processedVertices = new HashSet <string>(); while (stack.Count > 0) { vertex = stack.Pop(); processedVertices.Add(vertex.Id); AddNatureAreaOrTaxon(result, vertex); var inVertices = vertex.Out(EL.In); foreach (var inVertex in inVertices) { if (!processedVertices.Contains(inVertex.Id)) { AddNatureAreaOrTaxon(result, inVertex); } } var children = vertex.In(EL.Child); foreach (var child in children) { if (!processedVertices.Contains(child.Id)) { stack.Push(child); } } } } return(result); }