private void CreateOutcomePage([NotNull] ExcelReportEngine engine, [NotNull] IQualityAnalyzer analyzer, [NotNull] QualityAnalyzerResult outcome) { var p = engine.AddPage(analyzer.Label); engine.AddHeader(p, "Finding Type", "Finding Name", "Description"); var findings = outcome.Findings?.ToArray(); if (findings?.Any() ?? false) { string text; foreach (var finding in findings) { if (finding is IIdentity identity) { if (identity is IDataFlow flow) { text = $"Flow from {_model.GetIdentityTypeName(flow.Source)} '{flow.Source.Name}' to {_model.GetIdentityTypeName(flow.Target)} '{flow.Target.Name}'."; } else if (identity is IThreatEvent threatEvent) { text = $"Threat Event applied to {_model.GetIdentityTypeName(threatEvent.Parent)} '{threatEvent.Parent.Name}'."; } else { text = null; } engine.AddRow(p, _model.GetIdentityTypeName(identity), identity.Name, text); } else { engine.AddRow(p, finding.GetType().Name, finding.ToString()); } } } }
private void AddOutcomePage([NotNull] PdfDocument doc, [NotNull] PdfStandardFont font, [NotNull] IQualityAnalyzer analyzer, [NotNull] QualityAnalyzerResult outcome) { var page = doc.Pages.Add(); var bitmap = GetBitmap(analyzer); var textSize = WriteText(page, analyzer.Label, new PdfStandardFont(font, font.Size, PdfFontStyle.Bold), 0, 0); textSize = WriteText(page, $"{outcome.Assessment.GetEnumLabel()}", font, 0, 0, null, true); var gaugeImage = PdfImage.FromImage(bitmap); page.Graphics.DrawImage(gaugeImage, new RectangleF(page.Graphics.ClientSize.Width - 150 - textSize.Width, -2, 150, 18)); var y = textSize.Height + 2; textSize = WriteText(page, analyzer.Description, font, 0, y); y += textSize.Height + 10; page.Graphics.DrawLine(PdfPens.Black, 0, y, page.Graphics.ClientSize.Width, y); y += 10; var findings = outcome.Findings?.ToArray(); if (findings?.Any() ?? false) { PdfImage img; string text; foreach (var finding in findings) { if (y > page.Graphics.ClientSize.Height - textSize.Height * 5) { y = 0; page = doc.Pages.Add(); } text = null; if (finding is IIdentity identity) { img = PdfImage.FromImage(identity.GetImage(ImageSize.Medium)); if (identity is IDataFlow flow) { text = $"Flow from {_model.GetIdentityTypeName(flow.Source)} '{flow.Source.Name}' to {_model.GetIdentityTypeName(flow.Target)} '{flow.Target.Name}'."; } else if (identity is IThreatEvent threatEvent) { text = $"Threat Event applied to {_model.GetIdentityTypeName(threatEvent.Parent)} '{threatEvent.Parent.Name}'."; } } else { img = PdfImage.FromImage(Resources.undefined); } page.Graphics.DrawImage(img, new RectangleF(0, y, 16, 16)); textSize = WriteText(page, finding.ToString(), font, 18, y + 2); if (text != null) { y += textSize.Height + 5; textSize = WriteText(page, text, font, 18, y); } y += textSize.Height + 10; } } else { WriteText(page, "--- The Analyzer has not identified any problem.", font, 0, y); } }