/// <summary> /// Crawls website and updates website's config with Rawpages /// </summary> /// <param name="config">Website's config</param> /// <returns> /// Updated website's config /// </returns> public WebsiteModel CrawlWebsite(WebsiteModel config) { config.AnalyzerConfig = new AnalyzerModel(); config.OrganizerConfig = new OrganizerModel(); config.ExportConfig = new ExportModel(); config.ExportConfig.Xml = string.Empty; var crawler = ConfigureCrawler(config.CrawlerConfig); List<RawPage> list = new List<RawPage>(); list = crawler.Crawl(); foreach (var rawPage in list) { string path = rawPage.Path; int idx = path.LastIndexOf('/'); string title = path; //idx == 0 ? path.Substring(0) : ("/" + path.Substring(idx + 1)); var newRawPage = new RawPageModel { Title = title, Url = rawPage.Url.ToString(), SitePath = path }; config.AnalyzerConfig.RawPages.Add(newRawPage); } return config; }
/// <summary> /// Analyzes website and creates XML document /// </summary> /// <param name="config">Website's config</param> /// <returns> /// Updated website's config /// </returns> public WebsiteModel AnalyzeWebsite(WebsiteModel config) { CrawlerHelper crawlHelper = new CrawlerHelper(); OrganizerHelper orgHelper = new OrganizerHelper(); config.OrganizerConfig = new OrganizerModel(); config.ExportConfig = new ExportModel(); config.ExportConfig.Xml = string.Empty; var crawler = crawlHelper.ConfigureCrawler(config.CrawlerConfig); var list = crawler.Crawl(); var analyzer = new WebsiteAnalyzer(config.AnalyzerConfig); var analyticsRunner = new AnalyticsRunner(crawler, analyzer); var site = analyticsRunner.Run(list); site.Name = config.Name; using (var sw = new StringWriter()) { var serializer = new XmlSerializer(typeof(Site)); serializer.Serialize(sw, site); config.ExportConfig.Xml = sw.ToString(); } config.OrganizerConfig.Pages = orgHelper.AddChildren(site.Root, site); return config; }
/// <summary> /// Recursively updates all pages and their properties /// </summary> /// <param name="parent">Node from which to start updating</param> /// <param name="site">Whole site</param> /// <param name="config">Website's config</param> /// <returns></returns> public void UpdateChildren(Page parent, Site site, WebsiteModel config) { foreach (var page in parent.Children.Reverse<Page>()) { var pageModel = GetPage(page.ID.ToString(), config); if (pageModel != null) { page.Name = pageModel.Title; if (page.Properties.Any()) { foreach (var property in page.Properties.Reverse<Property>()) { var propertyModel = GetProperty(property.ID.ToString(), pageModel); if (propertyModel != null) { if (property.Name != propertyModel.Name) { RenamePropertyReferences(site, property.Value, property.Name, propertyModel.Name, page.PageTypeID.ToString()); //RenamePropertiesName(site.Root, property.Name, propertyModel.Name, page.PageTypeID.ToString()); property.Name = propertyModel.Name; } property.Value = propertyModel.Html; } else { //RemovePropertiesFromPages(site.Root, property.Name, page.PageTypeID.ToString()); //RemovePropertyFromType(site, property.Name, page.PageTypeID.ToString()); //RemovePropertyReferences(site, property.Name); RemovePropertyFromTypeDefinition(site, property.Name, page.PageTypeID.ToString()); page.Properties.Remove(property); } } } if (page.Children.Any()) { UpdateChildren(page, site, config); } } else { parent.Children.Remove(page); } } }
/// <summary> /// Updates website's config if needed and maps it to database mirror /// </summary> /// <param name="website">Website's mirror for XML comparsion</param> /// <param name="config">Website's config</param> /// <returns> /// Database mirror /// </returns> public WebsiteMirror MapModelToMirror(WebsiteMirror website, WebsiteModel config) { OrganizerHelper orgHelper = new OrganizerHelper(); website.Name = config.Name; website.Xml = config.ExportConfig.Xml; website.Xsl = config.ExportConfig.Xsl; config.ExportConfig.Xml = string.Empty; config.ExportConfig.Xsl = string.Empty; // If XML is downloaded, retrieve it from the database, and deserialize and update each page of config.OrganizerModel if (website.Xml != string.Empty && website.Xml != null) { Site site; // Deserialize XML using (var sw = new StringReader(website.Xml)) { var serializer = new XmlSerializer(typeof(Site)); site = (Site)serializer.Deserialize(sw); } // Find changes in pages and properties (names, properties) and handle them orgHelper.UpdateChildren(site.Root, site, config); // Turn the object into XML using (var sw = new StringWriter()) { var serializer = new XmlSerializer(typeof(Site)); serializer.Serialize(sw, site); website.Xml = sw.ToString(); } // Update each page of config.OrganizerModel config.OrganizerConfig.Pages = orgHelper.AddChildren(site.Root, site); } // Finally, update website's config website.Config = JsonConvert.SerializeObject(config); return website; }
public void PostSaveWebsiteConfig(int id, WebsiteModel config) { WebpackApiController apiHelper = new WebpackApiController(); WebsiteMirror website = GetById(id); website = apiHelper.MapModelToMirror(website, config); apiHelper.Save(website); }
public void PostSaveXml(int id, WebsiteModel config) { WebpackApiController apiHelper = new WebpackApiController(); WebsiteMirror website = GetById(id); website.Xml = config.ExportConfig.Xml; website.Xsl = config.ExportConfig.Xsl; apiHelper.Save(website); }
public WebsiteModel PostRunImport(WebsiteModel config) { OrganizerHelper orgHelper = new OrganizerHelper(); //apply XSL string finalXml; if(config.ExportConfig.Xsl == null || config.ExportConfig.Xsl.Length == 0) { finalXml = config.ExportConfig.Xml; } else { finalXml = orgHelper.XslTransform(config.ExportConfig.Xml, config.ExportConfig.Xsl); } // na serializer zavolat novou metodu, která deserializuje jen XML - do objektu Site Site site; using (var sw = new StringReader(finalXml)) { var serializer = new XmlSerializer(typeof(Site)); site = (Site)serializer.Deserialize(sw); } WebpackImporter importer = new WebpackImporter(); importer.Import(site,ApplicationContext.Current); //ApplicationContext.Services.ContentTypeService return config; }
public WebsiteModel PostTransformXml(WebsiteModel config) { OrganizerHelper orgHelper = new OrganizerHelper(); config.ExportConfig.XmlPreview = config.ExportConfig.Xsl != string.Empty ? orgHelper.XslTransform(config.ExportConfig.Xml, config.ExportConfig.Xsl) : config.ExportConfig.Xml; return config; }
public WebsiteModel PostRunAnalyzer(WebsiteModel config) { AnalyzerHelper analyzerHelper = new AnalyzerHelper(); return analyzerHelper.AnalyzeWebsite(config); }
public WebsiteModel PostRunCrawler(WebsiteModel config) { CrawlerHelper crawlHelper = new CrawlerHelper(); return crawlHelper.CrawlWebsite(config); }
/// <summary> /// Returns page /// </summary> /// <param name="id">Page id</param> /// <param name="config">Website's config</param> /// <returns> /// Page /// </returns> public WebpackUI.Models.PageModel GetPage(string id, WebsiteModel config) { foreach (var page in config.OrganizerConfig.Pages) { if (page.Id == id) { return page; } else if (page.Children.Any()) { var child = GetChildPage(id, page); if (child != null) { return child; } } } return null; }