public XrcUrl BuildUrl(UriSegmentParameterList segmentParameters = null) { string currentName = BuildSegmentUrl(segmentParameters); XrcUrl url; if (ItemType == ItemType.Directory) { if (Parent == null) url = new XrcUrl(currentName); else url = Parent.BuildUrl(segmentParameters).Append(currentName); url = url.AppendTrailingSlash(); } else if (ItemType == ItemType.PageFile) { XrcUrl parentUrl; if (Parent == null) parentUrl = new XrcUrl("~"); else parentUrl = Parent.BuildUrl(segmentParameters); if (((PageFile)this).IsIndex) url = parentUrl; else url = parentUrl.Append(currentName); } else throw new XrcException(string.Format("BuildUrl not supported on '{0}'.", ItemType)); return url; }
public PageLocatorResult Locate(XrcUrl url) { if (url == null) throw new ArgumentNullException("url"); var urlSegmentParameters = new UriSegmentParameterList(); var matchItem = MatchItem(_pageStructure.GetRoot(), url.Path, urlSegmentParameters); if (matchItem == null) return null; return new PageLocatorResult(matchItem, urlSegmentParameters); }
public void It_Should_be_possible_get_a_not_found_page() { var url = new XrcUrl("~/test"); var target = CreateTarget(); SetupUrl(url, null, null); Assert.AreEqual(false, target.PageExists(url)); var page = target.GetPage(url); Assert.IsNull(page); _pageLocator.Verify(p => p.Locate(url)); }
public Page(string resourceLocation, XrcUrl url, PageActionList actions, PageParameterList parameters, ModuleDefinitionList modules, UriSegmentParameterList urlSegmentsParameters, Configuration.IHostingConfig hostingConfig) { _actions = actions; _parameters = parameters; _modules = modules; _urlSegmentsParameters = urlSegmentsParameters; _url = url; _resourceLocation = resourceLocation; _hostingConfig = hostingConfig; }
public IPage GetPage(XrcUrl url) { PageLocatorResult locatorResult = _pageLocator.Locate(url); if (locatorResult == null) return null; PageFile page = locatorResult.Page; PageDefinition pageDefinition = GetPageDefinition(page); SetLayout(pageDefinition, page, locatorResult.UrlSegmentsParameters); var pageUrl = page.BuildUrl(locatorResult.UrlSegmentsParameters); return new Page(page.ResourceLocation, pageUrl, pageDefinition.Actions, pageDefinition.Parameters, pageDefinition.Modules, locatorResult.UrlSegmentsParameters, _hostingConfig); }
public bool PageExists(XrcUrl url) { throw new NotImplementedException(); }
public Pages.IPage GetPage(XrcUrl url) { throw new NotImplementedException(); }
// TODO Valutare come e se fare cache del risultato di GetPage e IsDefined anche perchè condividono parte del codice. // Probabilmente si può mettere in cache l'intera IPage con dipendenza al file public bool PageExists(XrcUrl url) { PageLocatorResult locatorResult = _pageLocator.Locate(url); return locatorResult != null; }
private void SetupUrl(XrcUrl url, PageLocatorResult locatorResult, PageDefinition parserResult) { _pageLocator.Setup(p => p.Locate(url)).Returns(locatorResult); if (locatorResult != null) _pageParser.Setup(p => p.Parse(locatorResult.Page.ResourceLocation)).Returns(parserResult); }