Ejemplo n.º 1
0
        public override async Task <GraphReply> GetGraph(GraphRequest request, ServerCallContext context)
        {
            if (_displayedNodes == null)
            {
                var allAccession = new HashSet <string>(await _driver.ListResultAccession());
                _displayedNodes = _graph.Reader.Vertices.Where(v => allAccession.Contains(v.Value)).Select(v => v.Key)
                                  .ToHashSet();
            }

            var nodeLineages = await _driver.GetLineageByAccession();

            var response = new GraphReply();

            response.Graph = _graph.GetSimplifiedGraph(request.ClusteringLevel, v => _displayedNodes.Contains(v));
            response.Lineages.AddRange(response.Graph.Nodes.Where(v => nodeLineages.ContainsKey(v.Name)).Select(v =>
            {
                var lineage = new GraphLineage {
                    Id = v.Id
                };
                lineage.Lineages.AddRange(nodeLineages[v.Name]);
                return(lineage);
            }));
            return(response);
        }