Exemple #1
0
        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);
            }
        }
Exemple #2
0
        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);
            }
        }
Exemple #3
0
        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);
        }