PageDefinition GetInheritedDefinitions(PageDirectory directory) { PageDefinition directoryDefinition; if (directory.ConfigFile != null) directoryDefinition = _pageParser.Parse(directory.ConfigFile.ResourceLocation); else directoryDefinition = new PageDefinition(); if (directory.Parent != null) return GetInheritedDefinitions(directory.Parent).Combine(directoryDefinition); return directoryDefinition; }
Item MatchList(PageDirectory directory, string url, UriSegmentParameterList urlSegmentParameters) { var validFiles= directory.Files.Where(p => p.ItemType != ItemType.ConfigFile); var validItems = directory.Directories.Select(p => (Item)p).Union(validFiles) .OrderBy(p => p.Priority); foreach (var item in validItems) { var match = MatchItem(item, url, urlSegmentParameters); if (match != null) return match; } return null; }
void FillItems(PageDirectory directory) { string directoryPath = _config.MapPath(directory.ResourceLocation); var directories = Directory.GetDirectories(directoryPath) .Select(p => new PageDirectory(Path.GetFileName(p))); directory.Directories.AddRange(directories); foreach (PageDirectory subItem in directory.Directories) FillItems(subItem); foreach (var parser in _parsers) { var parserFiles = Directory.GetFiles(directoryPath, string.Format("*{0}", parser.Extension)) .Where(p => Path.GetFileName(p) != ConfigFile.XRC_DIRECTORY_CONFIG_FILE) .Select(p => new PageFile(Path.GetFileName(p))); directory.Files.AddRange(parserFiles); } var configFiles = Directory.GetFiles(directoryPath, ConfigFile.XRC_DIRECTORY_CONFIG_FILE) .Select(p => new ConfigFile()); directory.ConfigFile = configFiles.FirstOrDefault(); }