/// <summary> /// Finishes off bulk mapping of tags and page routes in a PageSummary object /// </summary> public virtual async Task <List <PageSummary> > MapAsync(ICollection <Page> dbPages, IExecutionContext executionContext) { var ids = dbPages .Select(p => p.PageId) .ToArray(); var routes = await _queryExecutor.ExecuteAsync(new GetPageRoutesByIdRangeQuery(ids), executionContext); var pageTags = await _dbContext .PageTags .AsNoTracking() .Where(p => ids.Contains(p.PageId)) .Select(t => new { PageId = t.PageId, Tag = t.Tag.TagText }) .ToListAsync(); var pages = new List <PageSummary>(ids.Length); foreach (var dbPage in dbPages) { var pageRoute = routes.GetOrDefault(dbPage.PageId); EntityNotFoundException.ThrowIfNull(pageRoute, dbPage.PageId); var page = new PageSummary() { FullUrlPath = pageRoute.FullUrlPath, HasDraftVersion = pageRoute.HasDraftVersion, HasPublishedVersion = pageRoute.HasPublishedVersion, PublishDate = pageRoute.PublishDate, LastPublishDate = pageRoute.LastPublishDate, PublishStatus = pageRoute.PublishStatus, Locale = pageRoute.Locale, PageId = pageRoute.PageId, PageType = pageRoute.PageType, Title = pageRoute.Title, UrlPath = pageRoute.UrlPath }; page.AuditData = _auditDataMapper.MapCreateAuditData(dbPage); if (!string.IsNullOrWhiteSpace(dbPage.CustomEntityDefinitionCode)) { var customEntityDefinition = _customEntityDefinitionRepository.GetByCode(dbPage.CustomEntityDefinitionCode); // Graciously fall-back if the definition has been removed, since this is typically just for display purposes page.CustomEntityName = customEntityDefinition?.Name ?? "Definition Missing"; } page.Tags = pageTags .Where(t => t.PageId == page.PageId) .Select(t => t.Tag) .ToArray(); pages.Add(page); } return(pages); }
public void TestInitialize() { stream = new MemoryStream(); BinaryWriter writer = new BinaryWriter(stream); PageSummary summary1 = new PageSummary() { AddressSpaceId = id1, Allocated = true, DataFileOffset = 0, Size = 1024, Used = 1024 }; PageSummary summary2 = new PageSummary() { AddressSpaceId = id2, Allocated = true, DataFileOffset = 1024, Size = 1024, Used = 100 }; PageSummary summary3 = new PageSummary() { AddressSpaceId = id1, Allocated = true, DataFileOffset = 2048, Size = 1024, Used = 200 }; PageSummary summary4 = new PageSummary() { AddressSpaceId = Guid.Empty, Allocated = false, DataFileOffset = 3072, Size = 1024, Used = 0 }; summary1.WriteToStream(writer); summary2.WriteToStream(writer); summary3.WriteToStream(writer); summary4.WriteToStream(writer); stream.Position = 0; }
internal static void AssertBasicDataMapping( string uniqueData, AddPageCommand addPageCommand, PageSummary page ) { var sluggedUniqueData = SlugFormatter.ToSlug(uniqueData); page.Should().NotBeNull(); page.PageId.Should().Be(addPageCommand.OutputPageId); page.AuditData.Should().NotBeNull(); page.AuditData.Creator.Should().NotBeNull(); page.AuditData.Creator.UserId.Should().BePositive(); page.FullUrlPath.Should().Be($"/{sluggedUniqueData}/{addPageCommand.UrlPath}"); page.Should().NotBeNull(); page.HasDraftVersion.Should().BeFalse(); page.Locale.Should().BeNull(); page.PageType.Should().Be(addPageCommand.PageType); page.PublishDate.Should().NotBeNull().And.NotBeDefault(); page.LastPublishDate.Should().NotBeNull().And.NotBeDefault(); page.PublishStatus.Should().Be(PublishStatus.Published); page.Tags.Should().ContainSingle(t => t == "Test"); page.Title.Should().Be(addPageCommand.Title); page.UrlPath.Should().Be(addPageCommand.UrlPath); }
/// <summary> /// Display the homepage/mainpage. If no page has been tagged with the 'homepage' tag, /// then a dummy PageSummary is put in its place. /// </summary> public ActionResult Index() { PageManager manager = new PageManager(); // Get the first locked homepage PageSummary summary = manager.FindByTag("homepage").FirstOrDefault(h => h.IsLocked); if (summary == null) { // Look for a none-locked page as a fallback summary = manager.FindByTag("homepage").FirstOrDefault(); } if (summary == null) { summary = new PageSummary(); summary.Title = "You have no mainpage set"; summary.Content = "To set a main page, create a page and assign the tag 'homepage' to it."; summary.CreatedBy = ""; summary.CreatedOn = DateTime.Now; summary.Tags = "homepage"; summary.ModifiedOn = DateTime.Now; summary.ModifiedBy = ""; } RoadkillContext.Current.Page = summary; return View(summary); }
/// <summary> /// Display the homepage/mainpage. If no page has been tagged with the 'homepage' tag, /// then a dummy PageSummary is put in its place. /// </summary> public ActionResult Index() { PageManager manager = new PageManager(); // Get the first locked homepage PageSummary summary = manager.FindByTag("homepage").FirstOrDefault(h => h.IsLocked); if (summary == null) { // Look for a none-locked page as a fallback summary = manager.FindByTag("homepage").FirstOrDefault(); } if (summary == null) { summary = new PageSummary(); summary.Title = SiteStrings.NoMainPage_Title; summary.Content = SiteStrings.NoMainPage_Label; summary.CreatedBy = ""; summary.CreatedOn = DateTime.Now; summary.Tags = "homepage"; summary.ModifiedOn = DateTime.Now; summary.ModifiedBy = ""; } RoadkillContext.Current.Page = summary; return View(summary); }
private List <IProjectPage> RebuildArea(PageSummary area) { var areaName = ResolveAreaName(area.Name); var knownAreas = new HashSet <string> { "Archive", "ContentCast", "DataSource", "GuidedSelling", "Internal", "PartnerAccess", "Platform", "Production", "Sandbox", "Vortex" }; if (!knownAreas.Contains(areaName)) { throw new InvalidOperationException($"Unknown area name '{area.Name}'."); } var result = new ConcurrentBag <IProjectPage>(); var projects = m_children[area.Id]; Parallel.ForEach( projects, new ParallelOptions { MaxDegreeOfParallelism = 5 }, project => { var page = RebuildProject(areaName, project); result.Add(page); }); var updated = UpdateAreaPage(result, area); if (updated) { Console.WriteLine("Rebuild [{0}] area summary ... UPDATED", areaName); } else { Console.WriteLine("Rebuild [{0}] area summary ... not changed", areaName); } return(result.ToList()); }
public async Task <PageSummary> ParsePageAsync(string url) { _logger.LogInformation($"Parse Url:{url}"); PageSummary pageSummary = new PageSummary(); List <Image> images = new List <Image>(); var config = Configuration.Default.WithDefaultLoader(); // Asynchronously get the document in a new context using the configuration var document = await BrowsingContext.New(config).OpenAsync(url); // return this so we can respond accordingly via our API pageSummary.StatusCode = document.StatusCode; // This CSS selector gets the desired content, for now we will select body element var cellSelector = "body"; // Perform the query to get all cells with the content var elements = document.QuerySelectorAll(cellSelector); // exclude text from script and style elements. ScrubElements(elements); var selectedElement = elements.FirstOrDefault(); if (selectedElement != null) { var words = selectedElement.TextContent.Words().ToList(); // get doc word count pageSummary.WordCount = words.Sum(m => m.Count); // trim down to top 10 words pageSummary.Words = words.OrderByDescending(m => m.Count).Take(10); foreach (var item in document.Images) { if (!string.IsNullOrEmpty(item.Source)) { images.Add(new Image() { Url = item.Source }); } } pageSummary.Images = images; } return(pageSummary); }
public void DebugThis() { Debug.Log(String.Format("Debugging Page {0}", Name)); Debug.Log(String.Format("Title: {0}", Title)); if (PageSummary != null) { PageSummary.DebugThis(); } Debug.Log("Entries:"); foreach (var item in Entries) { item.DebugThis(); } }
public void PageSummary_CreateFromStreamEmpty() { long pos = stream.Position; PageSummary target = PageSummary.ReadFromStream(reader); Assert.IsNotNull(target); Assert.AreEqual(demo.AddressSpaceId, target.AddressSpaceId); Assert.AreEqual(demo.Size, target.Size); Assert.AreEqual(demo.Used, target.Used); Assert.AreEqual(demo.DataFileOffset, target.DataFileOffset); Assert.AreEqual(demo.Allocated, target.Allocated); Assert.AreEqual(pos, target.PageFileIndex); PageSummary expectedToBeNull = PageSummary.ReadFromStream(reader); Assert.IsNull(expectedToBeNull); }
public void PageSummary_SerializeAndDeSerialize() { long pos = stream.Position; demo.WriteToStream(writer); Assert.AreEqual(pos, demo.PageFileIndex); stream.Position = pos; PageSummary target = PageSummary.ReadFromStream(reader); Assert.IsNotNull(target); Assert.AreEqual(demo.AddressSpaceId, target.AddressSpaceId); Assert.AreEqual(demo.Size, target.Size); Assert.AreEqual(demo.Used, target.Used); Assert.AreEqual(demo.DataFileOffset, target.DataFileOffset); Assert.AreEqual(demo.Allocated, target.Allocated); Assert.AreEqual(demo.PageFileIndex, target.PageFileIndex); }
public void PageIndex_AddEntryToPageIndexWithEntries() { using (target = new PageIndex(stream)) { PageSummary summary1 = new PageSummary() { Allocated = true, DataFileOffset = 4096, Size = 1024, AddressSpaceId = id1, Used = 300 }; target.AddOrUpdateEntry(summary1); Assert.AreEqual(3, target[id1].Count()); Assert.AreEqual(4096, target[id1][2].DataFileOffset); Assert.AreEqual(1024, target[id1][2].Size); Assert.IsTrue(target[id1][2].Allocated); Assert.AreEqual(132, target[id1][2].PageFileIndex); Assert.AreEqual(5120, target.EndOfPageIndex); } }
public void TestInitialise() { stream = new MemoryStream(); reader = new BinaryReader(stream); writer = new BinaryWriter(stream); demo = new PageSummary(); demo.Size = 1; demo.DataFileOffset = 2; demo.Allocated = true; demo.AddressSpaceId = Guid.NewGuid(); demo.Used = 200; writer.Write(demo.AddressSpaceId.ToByteArray()); writer.Write(demo.Size); writer.Write(demo.Used); writer.Write(demo.DataFileOffset); writer.Write(demo.Allocated); stream.Position = 0; }
public void PageIndex_AddEntryToEmptyPageIndex() { stream = new MemoryStream(); using (target = new PageIndex(stream)) { PageSummary summary1 = new PageSummary() { AddressSpaceId = id1, Allocated = true, DataFileOffset = 0, Size = 1024, Used = 1024 }; target.AddOrUpdateEntry(summary1); Assert.AreEqual(0, target[id1][0].DataFileOffset); Assert.AreEqual(1024, target[id1][0].Size); Assert.AreEqual(1024, target[id1][0].Used); Assert.IsTrue(target[id1][0].Allocated); Assert.AreEqual(0, target[id1][0].PageFileIndex); Assert.AreEqual(id1, target[id1][0].AddressSpaceId); Assert.AreEqual(1024, target.EndOfPageIndex); } }
public void PageIndex_MoveSummaryFromEmptyToUsed() { target = new PageIndex(stream); Assert.AreEqual(2, target[id1].Count); Assert.AreEqual(1, target.EmptyPages.Count); PageSummary summary = target.EmptyPages[0]; Assert.AreEqual(99, summary.PageFileIndex); summary.AddressSpaceId = id1; target.AddOrUpdateEntry(summary); stream.Position = 0; var newIndex = new PageIndex(stream); Assert.AreEqual(3, target[id1].Count); Assert.AreEqual(0, target.EmptyPages.Count); PageSummary retrieved = target[id1][2]; Assert.AreEqual(99, retrieved.PageFileIndex); }
private bool UpdateSummaryPage(IEnumerable <IProjectPage> pages, PageSummary summary) { var updated = new PageDocument(); var tbody = new XElement( "tbody", new XElement( "tr", new XElement("th", "Area"), new XElement("th", "Project"), new XElement("th", "Type"), new XElement("th", ".NET"), new XElement("th", "Owner"), new XElement("th", "Status"))); foreach (var page in pages.OrderBy(p => p.OrderKey)) { tbody.Add(page.RenderSummaryRow(false)); } updated.Root.Add( new XElement( "table", tbody)); var content = updated.Render(); var existing = m_confluence.GetCachedPage(summary); var before = NormalizeForComparison(existing.Content); var after = NormalizeForComparison(content); if (after == before) { return(false); } existing.Content = content; m_confluence.UpdatePage(existing); return(true); }
public async Task Parse_ShouldReturnPageSummary() { //arrange var logger = Substitute.For <ILogger <PageController> >(); var parserService = Substitute.For <IParserService>(); var url = "https://localhost"; var pageSummary = new PageSummary(); parserService.ParsePageAsync(url).Returns(Task.FromResult(pageSummary)); //act var sut = new PageController(parserService, logger); var response = await sut.Parse(url) as OkObjectResult; //assert response.Should().NotBeNull(); if (response != null) { response.Value.Should().NotBeNull(); response.Value.Should().BeOfType <PageSummary>(); response.Value.Should().Be(pageSummary); } }
public List <PageSummary> GenerateQuestionAndAnswersList(string guid, FormSchema formSchema) { var formAnswers = GetFormData(guid); var reducedAnswers = FormAnswersExtensions.GetReducedAnswers(formAnswers, formSchema); var formSummary = new List <PageSummary>(); foreach (var page in formSchema.Pages.ToList()) { var pageSummary = new PageSummary { PageTitle = page.Title, PageSlug = page.PageSlug }; var summaryBuilder = new SummaryDictionaryBuilder(); var formSchemaQuestions = page.ValidatableElements .Where(_ => _ != null) .ToList(); if (!formSchemaQuestions.Any() || !reducedAnswers.Where(p => p.PageSlug == page.PageSlug).Select(p => p).Any()) { continue; } formSchemaQuestions.ForEach(question => { var answer = _elementMapper.GetAnswerStringValue(question, formAnswers); summaryBuilder.Add(question.GetLabelText(), answer, question.Type); }); pageSummary.Answers = summaryBuilder.Build(); formSummary.Add(pageSummary); } return(formSummary); }
public ActionResult New(PageSummary summary) { if (!ModelState.IsValid) return View("Edit", summary); PageManager manager = new PageManager(); summary = manager.AddPage(summary); return RedirectToAction("Index", "Wiki", new { id = summary.Id, nocache = DateTime.Now.Ticks }); }
private IProjectPage RebuildProject(string areaName, PageSummary project) { Console.WriteLine("Processing page '{0} / {1}'...", areaName, project.Name); IProjectPage page; try { ProjectType projectType; var projectName = ResolveProjectName(project.Name, out projectType); var existing = m_confluence.GetCachedPage(project); var document = new PageDocument(existing.Content); switch (projectType) { case ProjectType.Library: page = new LibraryProjectPage(areaName, projectName, project.Name, document, m_owners); break; case ProjectType.Website: page = new WebsiteProjectPage(areaName, projectName, project.Name, document, m_owners); break; case ProjectType.Webservice: page = new WebserviceProjectPage(areaName, projectName, project.Name, document, m_owners); break; case ProjectType.Service: page = new ServiceProjectPage(areaName, projectName, project.Name, document, m_owners); break; case ProjectType.Console: page = new ConsoleProjectPage(areaName, projectName, project.Name, document, m_owners); break; case ProjectType.Windows: page = new WindowsProjectPage(areaName, projectName, project.Name, document, m_owners); break; case ProjectType.CloudRole: page = new CloudRoleProjectPage(areaName, projectName, project.Name, document, m_owners); break; case ProjectType.CloudService: page = new CloudServiceProjectPage(areaName, projectName, project.Name, document, m_owners); break; case ProjectType.FabricService: page = new FabricServiceProjectPage(areaName, projectName, project.Name, document, m_owners); break; case ProjectType.FabricApplication: page = new FabricApplicationProjectPage(areaName, projectName, project.Name, document, m_owners); break; default: throw new InvalidOperationException( $"Unknown how to process project of type '{projectType.ToString().ToLowerInvariant()}'."); } page.CheckPage(m_tfs); var updated = UpdateProjectPage(page, existing); if (updated) { Console.WriteLine("[{0}] {1} #{2}... UPDATED", areaName, projectName, projectType.ToString().ToLowerInvariant()); } else { Console.WriteLine("[{0}] {1} #{2}... not changed", areaName, projectName, projectType.ToString().ToLowerInvariant()); } } catch (Exception e) { throw new InvalidOperationException( $"An error occurred while processing page '{project.Name}' version {project.Version}.", e); } return(page); }