private async void OnCreateGraph() { IsReady = false; Save(); var request = new AnalysisRequest { Spec = Document.Text, PackagesToAnalyze = PackagesToAnalyze != null?PackagesToAnalyze.ToArray() : null, UsedTypesOnly = UsedTypesOnly, AllEdges = AllEdges, CreateClustersForNamespaces = CreateClustersForNamespaces }; try { myCTS = new CancellationTokenSource(); var doc = await myAnalysisClient.AnalyseAsync(request, myCTS.Token); myCTS.Dispose(); myCTS = null; if (doc != null) { BuildGraph(doc); } } finally { IsReady = true; } }
public AnalysisDocument Execute(SystemPackaging config, CancellationToken cancellationToken) { myConfig = config; myCancellationToken = cancellationToken; myRelevantPackages = PackagesToAnalyze.Any() ? myConfig.Packages .Where(p => PackagesToAnalyze.Any(name => p.Name.Equals(name, StringComparison.OrdinalIgnoreCase))) .ToList() : myConfig.Packages; myPackageToTypesMap = new Dictionary <string, List <Type> >(); Load(); Console.WriteLine("Analyzing ..."); var edges = Analyze() .Distinct() .ToList(); Console.WriteLine(); if (myAssemblyLoader.SkippedAssemblies.Any()) { Console.WriteLine("Skipped assemblies:"); foreach (var asm in myAssemblyLoader.SkippedAssemblies) { Console.WriteLine(" {0}", asm); } Console.WriteLine(); } Console.WriteLine("Building Graph ..."); return(GenerateDocument(edges)); }
private void BuildGraph(AnalysisDocument response) { if (!response.Nodes.Any() && !response.Edges.Any()) { MessageBox.Show("Neither nodes nor edges found"); return; } var presentation = myPresentationCreationService.CreatePresentation(Path.GetTempPath()); var builder = new RelaxedGraphBuilder(); foreach (var edge in response.Edges) { builder.TryAddEdge(edge.Item1, edge.Item2); } foreach (var node in response.Nodes) { builder.TryAddNode(node); } foreach (var cluster in response.Clusters) { builder.TryAddCluster(cluster.Key, cluster.Value); } var captionModule = presentation.GetPropertySetFor <Caption>(); // add potentially empty clusters { var spec = SpecUtils.Deserialize(Document.Text); var emptyClusters = spec.Packages .Where(p => PackagesToAnalyze == null || PackagesToAnalyze.Contains(p.Name)) .SelectMany(p => p.Clusters) .Where(cluster => !response.Clusters.Any(c => c.Key == cluster.Id)); foreach (var cluster in emptyClusters) { builder.TryAddCluster(cluster.Id, Enumerable.Empty <string>()); captionModule.Add(new Caption(cluster.Id, cluster.Name)); } } presentation.Graph = builder.Graph; foreach (var caption in response.Captions) { captionModule.Add(new Caption(caption.Key, caption.Value)); } var converter = new BrushConverter(); var nodeStyles = presentation.GetPropertySetFor <NodeStyle>(); foreach (var style in response.NodeStyles) { var brush = (Brush)converter.ConvertFromString(style.Value); brush.Freeze(); nodeStyles.Add(new NodeStyle(style.Key) { FillColor = brush }); } var edgeStyles = presentation.GetPropertySetFor <EdgeStyle>(); foreach (var style in response.EdgeStyles) { var brush = (Brush)converter.ConvertFromString(style.Value); brush.Freeze(); edgeStyles.Add(new EdgeStyle(style.Key) { Color = brush }); } Model.Presentation = presentation; // only synchronize our own presentation myGraphToSpecSynchronizer.Presentation = presentation; }