public IResult<PageInstance> GetPage(IEnumerable<string> path, IEnumerable<KeyValuePair<string, string>> parameters, ClaimsPrincipal user, bool preview) { var results = (this.contentRepository.FindContent(path) ?? Enumerable.Empty<FindContentResult>()).ToArray(); if (!results.Any()) { var notFoundTemplate = this.contentRepository.GetTemplate(new[] { "404" }); var notFoundPage = notFoundTemplate == null ? null : this.BuildPage(notFoundTemplate, preview); return new NotFoundResult<PageInstance>(notFoundPage); } var result = preview ? results.TakeTemplateResult() : results.FavourRedirectResult(); var visitor = new ContentVisitor<IResult<PageInstance>>( template => { if (!result.Configuration.Conditions.SatisfiedBy(user)) { return this.CreateFailedAuthResult(user, preview); } var contextItems = this.BuildContext(parameters, result.Configuration); return new SuccessResult<PageInstance>(this.BuildPage(template, preview, contextItems, result.Configuration.CacheControl)); }, redirect => new MovedPermanentlyResult<PageInstance>(redirect.Location)); return result.Content.Accept(visitor); }
void IVisitable.Accept(ContentVisitor visitor) { visitor.Visit(this); visitor.Leave(this); }
public void accept(ContentVisitor visitor) { visitor.Visit(this); }