示例#1
0
        private CxWSPathNode[] GetNodesForPath(XmlNode Path)
        {
            List <CxWSPathNode> outputItems = new List <CxWSPathNode>();

            if (Path.FirstChild == null)
            {
                return(outputItems.ToArray());
            }

            foreach (XmlNode pathNode in Path.ChildNodes)
            {
                CxWSPathNode node = new CxWSPathNode();
                foreach (XmlNode pathSubNode in pathNode.ChildNodes)
                {
                    switch (pathSubNode.Name.ToLower())
                    {
                    case "filename": node.FileName = pathSubNode.InnerText; break;

                    case "line": node.Line = int.Parse(pathSubNode.InnerText); break;

                    case "column": node.Column = int.Parse(pathSubNode.InnerText); break;

                    case "name": node.Name = pathSubNode.InnerText; break;

                    case "length": node.Length = int.Parse(pathSubNode.InnerText); break;

                    case "nodeid": node.PathNodeId = int.Parse(pathSubNode.InnerText); break;
                    }
                }
                outputItems.Add(node);
            }

            return(outputItems.ToArray());
        }
        public IGraphPath FindPath(CxWSResultPath queryItem)
        {
            if (_graph == null || _graph.Paths == null)
            {
                return(null);
            }
            //gLocalViewer.Graph.Edges.Clear();
            //gLocalViewer.Graph.NodeMap.Clear();
            foreach (IGraphPath path in _graph.Paths)
            {
                if (path.DirectFlow.Count == queryItem.Nodes.Length)
                {
                    bool isFound = true;
                    for (int i = 0; i < path.DirectFlow.Count; i++)
                    {
                        IGraphItem   item     = path.DirectFlow[i];
                        CxWSPathNode pathItem = queryItem.Nodes[i];

                        if (item.Name != pathItem.Name || item.Line != pathItem.Line || item.Column != pathItem.Column)
                        {
                            isFound = false;
                            break;
                        }
                    }

                    if (isFound)
                    {
                        return(path);
                    }
                } // Check in cases when path contain 1 element, graph contain 2
                else if (path.DirectFlow.Count == 2 && queryItem.Nodes.Length == 1)
                {
                    IGraphItem   item1    = path.DirectFlow[0];
                    IGraphItem   item2    = path.DirectFlow[1];
                    CxWSPathNode pathItem = queryItem.Nodes[0];

                    if (item1.CompareTo(item2) == 0 && item1.CompareTo(pathItem) == 0)
                    {
                        return(path);
                    }
                }
                else if (path.DirectFlow.Count == 2 && queryItem.Nodes.Length > 2)
                {
                    GraphItem item1 = path.DirectFlow[0];
                    GraphItem item2 = path.DirectFlow[1];

                    CxWSPathNode pathItem1 = queryItem.Nodes[0];
                    CxWSPathNode pathItem2 = queryItem.Nodes[queryItem.Nodes.Length - 1];
                    if (item1.CompareTo(pathItem1) == 0 && item2.CompareTo(pathItem2) == 0)
                    {
                        return(path);
                    }
                }
            }

            return(null);
        }