private static string BuildGraphViz(VisualGraphGeneratedMessage graph)
 {
     var filename = Path.GetTempFileName() + ".dot";
     using (var f = File.Open(filename, FileMode.OpenOrCreate))
     {
         f.SetLength(0);
         using (var writer = new StreamWriter(f))
         {
             writer.WriteLine("digraph d {");
             writer.WriteLine("\trankdir = LR;");
             if (graph.Connections == null) MessageBox.Show("connections null");
             if (graph.Nodes == null) MessageBox.Show("nodes null");
             foreach (var c in graph.Connections)
             {
                 writer.WriteLine("\t\"" + c.To + "\" -> \"" + c.From + "\";");
             }
             writer.WriteLine();
             foreach(var n in graph.Nodes)
             {
                 writer.WriteLine("\t\"" + n.FullName + "\"[label=\"" + n.DisplayName + "\", " + GetShape(n) + "];");
             }
             writer.WriteLine("}");
         }
     }
     return filename;
 }
 private static string Builddgml(VisualGraphGeneratedMessage graph)
 {
     var filename = Path.GetTempFileName() + ".dgml";
     using (var f = File.Open(filename, FileMode.OpenOrCreate))
     {
         f.SetLength(0);
         using (var writer = new StreamWriter(f))
         {
             writer.WriteLine("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
             writer.WriteLine("<DirectedGraph xmlns=\"http://schemas.microsoft.com/vs/2009/dgml\">");
             writer.WriteLine("<Nodes>");
             foreach (var n in graph.Nodes)
             {
                 writer.WriteLine("<Node Id=\"" + SecurityElement.Escape(n.FullName) + "\" Group=\"" + GetGroup(n) + "\" Label=\"" + SecurityElement.Escape(n.DisplayName) + "\" />");
             }
             writer.WriteLine("</Nodes>");
             writer.WriteLine("<Links>");
             foreach (var c in graph.Connections)
             {
                 writer.WriteLine("<Link Source=\"" + SecurityElement.Escape(c.From) + "\" Target=\"" + SecurityElement.Escape(c.To) + "\" Category=\"links\"/>");
             }
             writer.WriteLine("</Links>");
             writer.WriteLine("</DirectedGraph>");
         }
     }
     return filename;
 }
 public void GenerateAndShowGraphFor(VisualGraphGeneratedMessage message)
 {
     try
     {
         var filename = Builddgml(message);
         Open(filename);
     }
     catch (Exception ex)
     {
         MessageBox.Show(ex.ToString());
     }
 }
 public void GenerateAndShowGraphFor(VisualGraphGeneratedMessage message)
 {
     if (_visualizer == null)
     {
         _visualizer = new AGLVisualizer(_mode, _dte, _transparent, _client);
         _visualizer.Closed += _visualizer_Closed;
         _visualizer.WindowState = FormWindowState.Maximized;
     }
     var parent = Control.FromHandle(new IntPtr(_dte.MainWindow.HWnd));
     _visualizer.Parent = parent;
     _visualizer.Location = NativeWinPlacementAPI.GetPlacement(new IntPtr(_dte.MainWindow.HWnd));
     _visualizer.StartPosition = FormStartPosition.CenterScreen;
     Logger.Write("Location is " + _visualizer.Location);
     var root = message.Nodes.First(x => x.IsRootNode);
     if(root != null)
         _lastSignature = root.FullName;
     _visualizer.Display(message);
     _visualizer.Visible = false;
     _visualizer.Show();
     
 }
        public void Display(VisualGraphGeneratedMessage message)
        {
            Controls.Clear();
            if(_gViewer != null) Controls.Remove(_gViewer); 
            _gViewer = new GViewer
                          {
                              Dock = DockStyle.Fill,
                              LayoutAlgorithmSettingsButtonVisible = false,
                              NavigationVisible = false,
                              ToolBarIsVisible = false,
                              SaveButtonVisible = false,
                              SaveGraphButtonVisible = false,
                              AutoSizeMode = AutoSizeMode.GrowOnly,
                              AutoScroll = false,
            };
            _gViewer.HorizontalScroll.Enabled = false;
            _gViewer.VerticalScroll.Enabled = false;
            _gViewer.HorizontalScroll.Visible = false;
            _gViewer.VerticalScroll.Visible = false;
            _gViewer.DoubleClick += AGLVisualizer_DoubleClick;
            if (_mode == DisplayMode.Dark)
            {

                BackColor = System.Drawing.Color.Black;
                _gViewer.OutsideAreaBrush = new SolidBrush(System.Drawing.Color.Black);
            }
            else
            {
                BackColor = System.Drawing.Color.LightGray;
                _gViewer.OutsideAreaBrush = new SolidBrush(System.Drawing.Color.LightGray);
            }
            _gViewer.CurrentLayoutMethod = LayoutMethod.UseSettingsOfTheGraph;
            _gViewer.Graph = BuildGraphFrom(message);
            Controls.Add(_gViewer);
            selectNode(FindSearchedNode(message).Id);
        }
 private static void ConvertToGraphMessage(VisualGraphGeneratedMessage message, AffectedGraph graph)
 {
     foreach (var node in graph.AllNodes())
     {
         message.Nodes.Add(new GraphNode
                           {
                               Assembly = node.Assembly,
                               DisplayName = node.DisplayName,
                               FullName = node.FullName,
                               IsInterface = node.IsInterface,
                               IsChange = node.IsChange,
                               IsRootNode = node.IsRootNode,
                               IsTest = node.IsTest,
                               Name = node.Name,
                               Type = node.Type,
                               InTestAssembly = node.InTestAssembly,
                               IsProfiledTest = node.Profiled,
                               Complexity = node.Complexity,
                           });
     }
     foreach (var c in graph.AllConnections())
     {
         message.Connections.Add(new Connection {From = c.From, To = c.To});
     }
 }
 public VisualGraphGeneratedMessage GetVisualizationGraphFor(string cacheName)
 {
     var ret = new VisualGraphGeneratedMessage();
     if (minimizerGraphsAndRiskIsOff())
         return ret;
     Logger.WriteDebug("Generating graph from minimizer for '" + cacheName + "'");
     var graph = _minimizer.GetGraphFor(cacheName, _configuration.AllSettings("mm-MinimizerDebug") == "true");
     Logger.WriteDebug("graph generated with " + graph.AllNodes().Count() + " nodes " + graph.AllConnections().Count() + " connections.");
     EnrichGraphWithProfilerInformation(cacheName, graph);
     ConvertToGraphMessage(ret, graph);
     return ret;
 }
        public VisualGraphGeneratedMessage GetProfiledGraphFor(string cacheName)
        {

            var ret = new VisualGraphGeneratedMessage();
            if (minimizerGraphsAndRiskIsOff())
                return ret;
            Logger.WriteDebug("Generating graph from profiler for '" + cacheName + "'");
            var graph = _profilerData.GetProfiledGraphFor(cacheName);
            Logger.WriteDebug("graph generated with " + graph.AllNodes().Count() + " nodes " + graph.AllConnections().Count() + " connections.");
            _minimizer.EnrichGraph(graph);
            ConvertToGraphMessage(ret, graph);
            return ret;
        }
        public VisualGraphGeneratedMessage GetLastAffectedGraph()
        {

            var ret = new VisualGraphGeneratedMessage();
            var graph = _minimizer.GetLastAffectedGraph();
            if (graph == null) return ret;
            Logger.WriteDebug("Getting last affected graph from the minimizer");
            ConvertToGraphMessage(ret, graph);
            Logger.WriteDebug("Graph has " + graph.AllNodes().Count() +  "nodes.");
            return ret;
        }
 private Graph BuildGraphFrom(VisualGraphGeneratedMessage affectedGraph)
 {
     var graph = new Graph("graph")
                     {
                         Attr = {BackgroundColor = Color.Transparent}
                     };
     if (affectedGraph.Connections != null)
     {
         _gViewer.LayoutAlgorithmSettingsButtonVisible = true;
         _gViewer.ForeColor = System.Drawing.Color.FromArgb(1,2,3);
         foreach (var x in affectedGraph.Connections)
         {
             var edge = graph.AddEdge(x.From, x.To);
             if (_mode == DisplayMode.Dark)
             {
                 edge.Attr.Color = Color.White;
             }
         }
     }
     graph.Attr.LayerDirection = LayerDirection.LR;
     if (affectedGraph.Nodes != null)
         foreach (var y in affectedGraph.Nodes)
         {
             var n = graph.FindNode(y.FullName) ?? graph.AddNode(y.FullName);
             n.LabelText = y.DisplayName;
             
             n.Attr.Shape = Shape.Box;
             if (y.IsRootNode)
                 n.Attr.FillColor = Color.LightGreen;
             else if (y.IsChange)
                 n.Attr.FillColor = Color.Maroon;
             else if (y.IsTest && y.IsProfiledTest)
                 n.Attr.FillColor = Color.Yellow;
             else if (y.IsTest)
                 n.Attr.FillColor = Color.DarkGoldenrod;
             else if (y.IsInterface)
                 n.Attr.FillColor = Color.LightBlue;
                 //TODO GREG PUT ON FEATURE TOGGLE
             else if (false && y.Complexity > 15)
                 n.Attr.FillColor = Color.LightPink;
             else
                 n.Attr.FillColor = Color.White;
         }
     return graph;
 }
 private Node FindSearchedNode(VisualGraphGeneratedMessage graph)
 {
     foreach(var n in graph.Nodes)
     {
         if(n.IsRootNode)
         {
             return _gViewer.Graph.FindNode(n.FullName);
         }
     }
     return null;
 }