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); }