예제 #1
0
        static void Main(string[] args)
        {
            List <IElement> elements = new List <IElement>();

            elements.Add(new Ramp("Airramp", true, 20, 3, true));
            elements.Add(new Led(69, true, Color.Red, 10));
            elements.Add(new Target('Y', false, 15));

            Console.WriteLine("Report state at the beginning:");
            IVisitor reportVisitor = new ReportVisitor();

            VisitorClient.ElementsAcceptVisitor(elements, reportVisitor);

            Console.WriteLine("\nGet points:");
            IVisitor pointVisitor = new PointVisitor();

            VisitorClient.ElementsAcceptVisitor(elements, pointVisitor);

            Console.WriteLine("\nReset elements");
            IVisitor resetVisitor = new ResetVisitor();

            VisitorClient.ElementsAcceptVisitor(elements, resetVisitor);

            Console.WriteLine("\nReport state at the end:");
            VisitorClient.ElementsAcceptVisitor(elements, reportVisitor);
        }
        public async Task <IActionResult> Index([NotNull][ItemNotNull] IEnumerable <IFormFile> files, [CanBeNull] string format, [CanBeNull] string title, [CanBeNull] string publisher, [CanBeNull] string website)
        {
            if (files is null)
            {
                throw new ArgumentNullException(nameof(files));
            }

            IFormFile[] uploadedFiles = files.ToArray();

            if (uploadedFiles.Length == 0)
            {
                return(BadRequest("No files uploaded."));
            }

            if (uploadedFiles.Any(x => x.Length <= 0))
            {
                return(BadRequest("Invalid file length."));
            }

            if (uploadedFiles.Any(x => x.ContentType != _microsoftWordDocument.ToString()))
            {
                return(BadRequest("Invalid file format."));
            }

            Queue <MemoryStream> documentQueue = new Queue <MemoryStream>(uploadedFiles.Length);

            foreach (IFormFile file in uploadedFiles)
            {
                MemoryStream memoryStream = new MemoryStream();
                await file.CopyToAsync(memoryStream);

                documentQueue.Enqueue(memoryStream);
            }

            MemoryStream output =
                await Process(
                    documentQueue,
                    title ?? "[REPORT TITLE]",
                    publisher ?? "[PUBLISHER]",
                    website ?? "[PUBLISHER WEBSITE]");

            output.Seek(0, SeekOrigin.Begin);

            if (format != "html")
            {
                return(new FileStreamResult(output, _microsoftWordDocument));
            }

            ReportVisitor visitor = new ReportVisitor(output);

            return
                (new ContentResult
            {
                Content = visitor.Document.Elements().Single().BodyToHtml().ToString(),
                ContentType = "text/html",
                StatusCode = 200
            });
        }
예제 #3
0
        public void PrettyPrint()
        {
            ReportVisitor report = new ReportVisitor();

            foreach (var item in items)
            {
                item.Accept(report.AsVisitor());
            }

            report.Print();
        }
예제 #4
0
        private static void Visitor()
        {
            var bank    = new Bank();
            var visitor = new ReportVisitor();

            foreach (IReportVisitee account in bank.Accounts)
            {
                account.Accept(visitor);
            }
            visitor.PrintReport();
        }
예제 #5
0
        private void ReportVisitor()
        {
            var bank    = new Bank();
            var visitor = new ReportVisitor();

            foreach (IReportVisitee account in bank.Accounts)
            {
                account.Accept(visitor);
            }

            Assert.Equal(2, visitor.DebitAccountCount);
            Assert.Equal(4, visitor.AccountCount);
        }
예제 #6
0
        static void Main(string[] args)
        {
            var arguments = new Dictionary <string, string>();

            for (var index = 0; index < args.Length; index = index + 2)
            {
                arguments.Add(args[index].Substring(1), args[index + 1]);
            }

            GraphClient.Connect();

            if (arguments.ContainsKey("dacpac"))
            {
                var databaseVisitor    = new DatabaseVisitor(GraphClient);
                var databaseServerNode = GetDatabaseServerNode(arguments["server"]);

                GraphClient.CreateRelationship(databaseServerNode, new DatabaseServerContainsDatabase(databaseVisitor.Visit(arguments["dacpac"])));
            }
            else if (arguments.ContainsKey("dacpac-references"))
            {
                var storedProcedureDependencyVisitor = new StoredProcedureDependencyVisitor(GraphClient);
                storedProcedureDependencyVisitor.Visit(arguments["dacpac-references"]);

                var viewDependencyVisitor = new ViewDependencyVisitor(GraphClient);
                viewDependencyVisitor.Visit(arguments["dacpac-references"]);
            }
            else if (arguments.ContainsKey("assembly"))
            {
                var assemblyVisitor = new AssemblyVisitor(GraphClient);
                GraphClient.CreateRelationship(GraphClient.RootNode, new RootContainsAssembly(assemblyVisitor.Visit(arguments["assembly"])));
            }
            else if (arguments.ContainsKey("reports"))
            {
                var reportVisitor    = new ReportVisitor(GraphClient);
                var reportServerNode = GetReportServerNode(arguments["server"]);

                var directory = new DirectoryInfo(arguments["reports"]);
                foreach (var report in directory.EnumerateFiles("*.rdl"))
                {
                    GraphClient.CreateRelationship(reportServerNode, new ReportServerContainsReport(reportVisitor.Visit(report.FullName)));
                }
            }
            else if (arguments.ContainsKey("dotnet"))
            {
                var projectVisitor = new DotNetProjectVisitor(GraphClient);
                projectVisitor.Visit(arguments["dotnet"]);
            }
        }
예제 #7
0
        public void WhenGetPositionAndStateNoneReportCommand()
        {
            var mockRobot = new Mock <IRobot>();

            mockRobot.SetupGet(r => r.CurrentPosition).Returns(new Position(new Location(1, 1), Direction.North));
            mockRobot.SetupGet(r => r.LateralSpeed).Returns(1);
            var mockCalculator = new Mock <ICalculator>();

            mockCalculator.Setup(c => c.GetPositionAndState(It.IsAny <ICommand>()));
            var reportVisitor = new ReportVisitor(mockRobot.Object, mockCalculator.Object);
            var result        = reportVisitor.GetPositionAndState(new Right()
            {
                Position = new Position(new Location(1, 1), Direction.North)
            });

            Assert.Null(result.position);
            Assert.False(result.isMatched);
        }
예제 #8
0
        static (XElement Document, XElement Footnotes) Execute([NotNull] XElement footnotes, [NotNull] XElement document, int footnoteId, int revisionId)
        {
            ReportVisitor visitor = new ReportVisitor();

            if (!(visitor.Visit(footnotes) is XElement visited))
            {
                throw new ArgumentException("This should never be thrown.");
            }

            XElement modifiedFootnotes =
                visited

                .RemoveByAll(W + "commentRangeStart")
                .RemoveByAll(W + "commentRangeEnd")
                .RemoveByAll(W + "commentReference")
                .RemoveByAll(x => (string)x.Attribute(W + "val") == "CommentReference")

                // Remove elements that should almost never exist.
                .RemoveByAll(x => x.Name == W + "jc" && !x.Ancestors(W + "tbl").Any())

                // Alter bold, italic, and underline elements.
                .ChangeBoldToStrong()
                .ChangeItalicToEmphasis()
                .ChangeUnderlineToTableCaption()
                .ChangeUnderlineToFigureCaption()
                .ChangeUnderlineToSourceNote()
                .ChangeSuperscriptToReference()

                // Mark insert requests for the production team.
                .MergeRuns()

                // Set table styles.
                .SetTableStyles(revisionId)

                // Remove elements used above, but not needed in the output.
                .RemoveByAll(W + "u")
                .RemoveByAllIfEmpty(W + "tcPr")
                .RemoveByAllIfEmpty(W + "rPr")
                .RemoveByAllIfEmpty(W + "pPr")
                .RemoveByAllIfEmpty(W + "t")
                .RemoveByAllIfEmpty(W + "r")
                .RemoveByAll(x => x.Name == W + "p" && !x.HasElements && x.Parent?.Name != W + "tc")
                .RemoveBy(x => (int)x.Attribute(W + "id") < 1);

            modifiedFootnotes.Descendants(W + "p")
            .Attributes()
            .Remove();

            // There shouldn't be more than one run style.
            foreach (XElement runProperties in modifiedFootnotes.Descendants(W + "rPr").Where(x => x.Elements(W + "rStyle").Count() > 1))
            {
                XElement[] styles =
                    runProperties.Elements(W + "rStyle")
                    .ToArray();

                styles.Remove();

                IEnumerable <XElement> distinct =
                    styles.Distinct(XNode.EqualityComparer)
                    .Cast <XElement>()
                    .ToArray();

                if (distinct.Any(x => (string)x.Attribute(W + "val") == "FootnoteReference"))
                {
                    distinct = distinct.Where(x => (string)x.Attribute(W + "val") == "FootnoteReference");
                }

                runProperties.AddFirst(distinct);
            }

            (int oldId, int newId)[] footnoteMapping =