private void OnInheritanceGraphCompleted(TypeRelationshipDocument document) { if (!document.Edges.Any()) { MessageBox.Show("No nodes found"); return; } var presentation = myPresentationCreationService.CreatePresentation(Path.GetDirectoryName(AssemblyToAnalyseLocation)); var captionModule = presentation.GetPropertySetFor <Caption>(); var tooltipModule = presentation.GetPropertySetFor <ToolTipContent>(); var edgeStyleModule = presentation.GetPropertySetFor <EdgeStyle>(); var builder = new RelaxedGraphBuilder(); foreach (var edge in document.Edges) { var e = builder.TryAddEdge(edge.Item1, edge.Item2); edgeStyleModule.Add(new EdgeStyle(e.Id) { Color = edge.Item3 == ReferenceType.DerivesFrom ? Brushes.Black : Brushes.Blue }); } presentation.Graph = builder.Graph; foreach (var desc in document.Descriptors) { captionModule.Add(new Caption(desc.Id, desc.Name)); tooltipModule.Add(new ToolTipContent(desc.Id, desc.FullName)); } if (myAddToGraph && Model.Presentation != null && Model.Presentation.Graph != null) { presentation = Model.Presentation.UnionWith(presentation, () => myPresentationCreationService.CreatePresentation(Path.GetDirectoryName(AssemblyToAnalyseLocation))); myAddToGraph = false; } if (document.FailedItems.Any()) { foreach (var item in document.FailedItems) { var sb = new StringBuilder(); sb.AppendLine("Loading failed"); sb.AppendFormat("Item: {0}", item.Item); sb.AppendLine(); sb.AppendFormat("Reason: {0}", item.FailureReason); myStatusMessageService.Publish(new StatusMessage(sb.ToString())); } } Model.Presentation = presentation; }
private void TakeSiblingsOf( TypeRelationshipDocument document, HashSet<TypeDescriptor> visitedTypes, params TypeDescriptor[] roots ) { if( !roots.Any() ) { return; } var typesToFollow = new HashSet<TypeDescriptor>(); foreach( var root in roots ) { visitedTypes.Add( root ); var node = myBuilder.Graph.FindNode( root.Id ); document.AddNode( root ); foreach( var edge in node.In ) { var source = myIdToTypeMap[ edge.Source.Id ]; document.AddEdge( source, root ); typesToFollow.Add( source ); } // TODO: down only - otherwise we need a "MaxDepth" //foreach( var edge in node.Out ) //{ // var target = myIdToTypeMap[ edge.Target.Id ]; // document.AddEdge( root, target ); // typesToFollow.Add( target ); //} } typesToFollow.ExceptWith( visitedTypes ); TakeSiblingsOf( document, visitedTypes, typesToFollow.ToArray() ); }
internal void WriteTo( string forTypeId, TypeRelationshipDocument document ) { var visitedTypes = new HashSet<TypeDescriptor>(); TakeSiblingsOf( document, visitedTypes, myIdToTypeMap[ forTypeId ] ); foreach( var edge in document.Graph.Edges ) { document.EdgeTypes.Add( edge.Id, myEdgeTypes[ edge.Id ] ); } }
private void OnInheritanceGraphCompleted(TypeRelationshipDocument document) { try { if (document == null) { return; } if (!document.Graph.Nodes.Any()) { MessageBox.Show("No nodes found"); return; } var presentation = PresentationCreationService.CreatePresentation(Path.GetDirectoryName(AssemblyToAnalyseLocation)); var captionModule = presentation.GetPropertySetFor <Caption>(); var tooltipModule = presentation.GetPropertySetFor <ToolTipContent>(); var edgeStyleModule = presentation.GetPropertySetFor <EdgeStyle>(); presentation.Graph = document.Graph; foreach (var desc in document.Descriptors) { captionModule.Add(new Caption(desc.Id, desc.Name)); tooltipModule.Add(new ToolTipContent(desc.Id, desc.FullName)); } foreach (var entry in document.EdgeTypes) { edgeStyleModule.Add(new EdgeStyle(entry.Key) { Color = entry.Value == ReferenceType.DerivesFrom ? Brushes.Black : Brushes.Blue }); } if (myAddToGraph && Model.Presentation != null && Model.Presentation.Graph != null) { presentation = Model.Presentation.UnionWith(presentation, () => PresentationCreationService.CreatePresentation(Path.GetDirectoryName(AssemblyToAnalyseLocation))); myAddToGraph = false; } if (document.FailedItems.Any()) { foreach (var item in document.FailedItems) { var sb = new StringBuilder(); sb.AppendLine("Loading failed"); sb.AppendFormat("Item: {0}", item.Item); sb.AppendLine(); sb.AppendFormat("Reason: {0}", item.FailureReason); StatusMessageService.Publish(new StatusMessage(sb.ToString())); } } Model.Presentation = presentation; } finally { myCancelBackgroundProcessing = null; ProgressValue = 0; IsReady = true; } }