public static IObjectTree<IFileableCmisObject> GetRemoteDirectoryTree(IFolder parent, IList<ITree<IFileableCmisObject>> descendants, IFilterAggregator filter, IIgnoredEntitiesStorage ignoredStorage, IPathMatcher matcher) {
IList<IObjectTree<IFileableCmisObject>> children = new List<IObjectTree<IFileableCmisObject>>();
if (descendants != null) {
foreach (var child in descendants) {
if (child.Item is IFolder) {
string reason;
var folder = child.Item as IFolder;
if (!filter.FolderNamesFilter.CheckFolderName(folder.Name, out reason) && !filter.InvalidFolderNamesFilter.CheckFolderName(folder.Name, out reason)) {
if (folder.AreAllChildrenIgnored()) {
ignoredStorage.AddOrUpdateEntryAndDeleteAllChildrenFromStorage(new IgnoredEntity(folder, matcher));
Logger.Info(string.Format("Folder {0} with Id {1} is ignored", folder.Name, folder.Id));
children.Add(new ObjectTree<IFileableCmisObject> {
Item = child.Item,
Children = new List<IObjectTree<IFileableCmisObject>>()
});
} else {
ignoredStorage.Remove(folder.Id);
children.Add(GetRemoteDirectoryTree(folder, child.Children, filter, ignoredStorage, matcher));
}
} else {
Logger.Info(reason);
}
} else if (child.Item is IDocument) {
string reason;
if (!filter.FileNamesFilter.CheckFile(child.Item.Name, out reason)) {
children.Add(new ObjectTree<IFileableCmisObject> {
Item = child.Item,
Children = new List<IObjectTree<IFileableCmisObject>>()
});
} else {
Logger.Info(reason);
}
}
}
}
var tree = new ObjectTree<IFileableCmisObject> {
Item = parent,
Children = children
};
return tree;
}