public FragmentComposer(FragmentProvider fragmentProvider, PageProvider pageProvider) { Guard.VerifyArgumentNotNull(fragmentProvider, nameof(fragmentProvider)); Guard.VerifyArgumentNotNull(pageProvider, nameof(pageProvider)); _fragmentProvider = fragmentProvider; _pageProvider = pageProvider; _fragmentComposingFunctions = new Dictionary <string, Func <LayoutType, HtmlDocument> >(); compose(); }
public static int Main(string[] args) { IOptions options = new Options(); if (!CommandLine.Parser.Default.ParseArguments(args, options)) { ErrorWriterContext.Current.WriteLine(options.GetUsage()); return(Constants.ERROR); } OptionsContext.Current = new ProgramOptionsContext(options); if (IOContext.Current.DirectoryExists(OptionsContext.Current.Options.OutputDirectory)) { if (!OptionsContext.Current.Options.Force) { ErrorWriterContext.Current.WriteLine(Invariant($"Output Directory '{OptionsContext.Current.Options.OutputDirectory}' already exists in the current folder.")); return(Constants.ERROR); } else { System.IO.Directory.Delete(OptionsContext.Current.Options.OutputDirectory, true); } } // Metadata Providers IMetadataProvider fragmentMetadataProvider = new MetadataProvider(LayoutType.Fragment); IMetadataProvider pageMetadataProvider = new MetadataProvider(LayoutType.Page); IMetadataProvider blogPostMetadataProvider = new MetadataProvider(LayoutType.Post); // Page Providers FragmentProvider fragmentProvider = new FragmentProvider(fragmentMetadataProvider); PageProvider pageProvider = new PageProvider(pageMetadataProvider); BlogPostProvider blogPostProvider = new BlogPostProvider(blogPostMetadataProvider); // IDEA: have option to pick between static page and first blog page? // TODO: make "Blog" an optional header page that takes the user to the latest blog post IFragmentComposer fragmentComposer = new FragmentComposer(fragmentProvider, pageProvider); IReadOnlyDictionary <string, Func <LayoutType, HtmlAgilityPack.HtmlDocument> > fragmentComposingFunctions = fragmentComposer.FragmentComposingFunctions; // Composers ITemplateComposer pageComposer = new PageComposer(pageProvider, fragmentComposingFunctions); ITemplateComposer blogPostComposer = new BlogComposer(blogPostProvider, fragmentComposingFunctions); IList <IGenerator> generators = new List <IGenerator>() { new BasePageGenerator(pageComposer), new BasePageGenerator(blogPostComposer) }; IGenerator siteGenerator = new SiteGenerator(generators); try { siteGenerator.Generate(); } catch { // Other places that throw should write out an error message return(Constants.ERROR); } return(Constants.SUCCESS); }
public virtual ICrmEntitySearchResult GetResult(Document document, float score, int number) { if (document == null) { throw new ArgumentNullException("document"); } var logicalNameField = document.GetField(Index.LogicalNameFieldName); if (logicalNameField == null || !logicalNameField.IsStored) { return(null); } var logicalName = logicalNameField.StringValue; var primaryKeyLogicalNameField = document.GetField(Index.PrimaryKeyLogicalNameFieldName); if (primaryKeyLogicalNameField == null || !primaryKeyLogicalNameField.IsStored) { return(null); } var primaryKeyPropertyName = primaryKeyLogicalNameField.StringValue; var context = Index.DataContext; var primaryKeyField = document.GetField(Index.PrimaryKeyFieldName); if (primaryKeyField == null || !primaryKeyField.IsStored) { return(null); } var primaryKey = new Guid(primaryKeyField.StringValue); var titleField = document.GetField(Index.TitleFieldName); var title = string.Empty; if (logicalName != "annotation") { if (titleField == null || !titleField.IsStored) { return(null); } title = titleField.StringValue; } var entity = context.CreateQuery(logicalName).FirstOrDefault(e => e.GetAttributeValue <Guid>(primaryKeyPropertyName) == primaryKey); if (entity == null) { return(null); } var url = GetUrl(context, document, score, number, entity); var result = new CrmEntitySearchResult(entity, score, number, title, url); if (!Validate(context, result)) { return(null); } result.Fragment = FragmentProvider.GetFragment(document); return(result); }