// implementation /// <summary> /// Enumerate child data folders in a parent data folder /// </summary> /// <param name="parentFolder"> /// A folder in a tree whose children to enumerate. /// </param> /// <param name="level"> /// The level number of folders being enumerated, according to the current depth (not an index in <see cref="_levelTraits"/>) /// </param> /// <returns></returns> private List <IRepoFileContainerDescriptor> EnumerateChildren(IRepoFileContainerDescriptor parentFolder, int level) { Check.Require(level >= Constants.DataFolderLevelLeaf && level < LevelCount); ICalendarHistoricalFolderTraits traits = GetLevelTraits(level); string parentAbsolutePath = GetAbsolutePath(parentFolder); IEnumerable <string> allDirPaths = DirectoryProvider.EnumerateDirectories(parentAbsolutePath, traits.NameMask); List <IRepoFileContainerDescriptor> retval = new List <IRepoFileContainerDescriptor>(); foreach (string name in allDirPaths.Select((p) => DirectoryProvider.GetLastPathComponent(p))) { CalendarHistoricalFolderInternalDescriptor internalDesc = traits.GetDescriptor(parentFolder, name); if (null != internalDesc) { IRepoFileContainerDescriptor descr = GetDescriptor(parentFolder, internalDesc); retval.Add(descr); } else { _log.WarnFormat("Data folder name {0}/{1} is malformed, ignoring", parentFolder == null ? "" : parentFolder.RelativePath, name); } } return(retval); }