Пример #1
0
        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());
                    }
                }
            }
        }
Пример #2
0
        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);
            }
        }