public void Serialize_WithClusters_IsDeserializable() { var spec = new SystemPackaging(); var package = new Package { Name = "P1" }; var cluster1 = new Cluster { Name = "C1", Id = "42" }; cluster1.Patterns.Add(new Include { Pattern = "*tests*" }); package.Clusters.Add(cluster1); spec.Packages.Add(package); var newSpec = SpecUtils.Deserialize(SpecUtils.Serialize(spec)); Assert.That(newSpec.Packages.Count, Is.EqualTo(1)); Assert.That(newSpec.Packages.Single().Clusters.Count, Is.EqualTo(1)); Assert.That(newSpec.Packages.Single().Clusters.Single().Includes.Count(), Is.EqualTo(1)); Assert.That(newSpec.Packages.Single().Clusters.Single().Includes.Single().Pattern, Is.EqualTo("*tests*")); }
private void UpdateSpec(SystemPackaging spec) { HandleNodeToClusterAssignment(spec); HandleRemovedClusters(spec); var transformationModule = myPresentation.GetModule <ITransformationModule>(); HandleClusterRenames(spec, transformationModule.Graph.Clusters); }
public static string Serialize(SystemPackaging spec) { using (var writer = new StringWriter()) { var settings = new XmlWriterSettings(); settings.Indent = true; settings.IndentChars = " "; settings.NewLineChars = Environment.NewLine; settings.NewLineHandling = NewLineHandling.Replace; settings.Encoding = Encoding.UTF8; using (var xmlWriter = XmlWriter.Create(writer, settings)) { XamlWriter.Save(spec, xmlWriter); return(writer.ToString()); } } }
private void HandleClusterRenames(SystemPackaging spec, IEnumerable <Model.Cluster> potentiallyRenamedClusters) { var specClusters = spec.Packages .SelectMany(p => p.Clusters) .ToList(); var captions = myPresentation.GetModule <ICaptionModule>(); foreach (var cluster in potentiallyRenamedClusters) { var specCluster = specClusters.FirstOrDefault(c => c.Id == cluster.Id); if (specCluster == null) { // this is a new cluster EMPTY not yet there in spec // -> nothing to do - will be handled once nodes are added to this new cluster } else { specCluster.Name = captions.Get(cluster.Id).DisplayText; } } }
private void HandleRemovedClusters(SystemPackaging spec) { var transformationModule = myPresentation.GetModule <ITransformationModule>(); var transformation = transformationModule.Items.OfType <DynamicClusterTransformation>().Single(); var removedExternalClusterIds = transformation.ClusterVisibility .Where(e => e.Value == false) .Select(e => e.Key); foreach (var clusterId in removedExternalClusterIds) { foreach (var package in spec.Packages) { var cluster = package.Clusters.FirstOrDefault(c => c.Id == clusterId); if (cluster != null) { package.Clusters.Remove(cluster); break; } } } }
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)); }
// this will also handle new clusters (but only if they have notes) private void HandleNodeToClusterAssignment(SystemPackaging spec) { var transformationModule = myPresentation.GetModule <ITransformationModule>(); var transformation = transformationModule.Items.OfType <DynamicClusterTransformation>().Single(); var captions = myPresentation.GetModule <ICaptionModule>(); var clusters = spec.Packages .SelectMany(p => p.Clusters) .ToList(); foreach (var entry in transformation.NodeToClusterMapping) { var clustersMatchingNode = clusters .Where(c => c.Matches(entry.Key)) .ToList(); // remove from all (potentially old) clusters var clustersToRemoveFrom = clustersMatchingNode .Where(c => entry.Value == null || c.Id != entry.Value); foreach (var cluster in clustersToRemoveFrom) { var exactMatch = cluster.Includes.FirstOrDefault(p => p.Pattern == entry.Key); if (exactMatch != null) { cluster.Patterns.Remove(exactMatch); } else { cluster.Patterns.Add(new Exclude { Pattern = entry.Key }); } } if (entry.Value == null) { continue; } // add to the cluster it should now belong to var clusterToAddTo = clusters .FirstOrDefault(c => c.Id == entry.Value); if (clusterToAddTo == null) { // --> new cluster added in UI clusterToAddTo = new Spec.Cluster { Name = captions.Get(entry.Value).DisplayText, Id = entry.Value }; clusters.Add(clusterToAddTo); spec.Packages.First().Clusters.Add(clusterToAddTo); } if (clusterToAddTo.Matches(entry.Key)) { // node already or again matched // -> ignore continue; } else { clusterToAddTo.Patterns.Add(new Include { Pattern = entry.Key }); } } }