public static string[] MakeItemList(string[] items, bool categoryOnly) { var query = from item in items from parent in QueryParents(item) select parent; var result = query.Concat(items) .Distinct() .Where(item => categoryOnly == true ? NameValidator.VerifyCategoryPath(item) : true) .OrderBy(item => item) .ToArray(); if (result.Any() == true) { return(result); } return(new string[] { PathUtility.Separator, }); IEnumerable <string> QueryParents(string path) { return(EnumerableUtility.Ancestors(path, item => { if (item == PathUtility.Separator) { return null; } if (NameValidator.VerifyItemPath(item) == true) { return new ItemName(item).CategoryPath; } return new CategoryName(item).ParentPath; })); } }
public void PrivateTypeFailTest() { var typeContext = this.dataBase.TypeContext; var type = typeContext.Types.RandomSample(); var category = EnumerableUtility.Ancestors(type as IItem).Random(item => item.Parent != null) as ITypeCategory; type.SetPrivate(this.admin); try { this.InvokeFail <PermissionDeniedException>(() => type.SetPublic(this.member)); this.InvokeFail <PermissionException>(() => type.SetPrivate(this.member)); this.InvokeFail <PermissionDeniedException>(() => type.AddAccessMember(this.member, this.someone.UserID, AccessType.ReadWrite)); this.InvokeFail <PermissionDeniedException>(() => type.RemoveAccessMember(this.member, this.someone.UserID)); this.InvokeFail <PermissionDeniedException>(() => type.Lock(this.member, RandomUtility.NextString())); this.InvokeFail <PermissionException>(() => type.Unlock(this.member)); this.InvokeFail <PermissionDeniedException>(() => type.RenameTest(this.member)); this.InvokeFail <PermissionDeniedException>(() => type.MoveTest(this.member)); this.InvokeFail <PermissionDeniedException>(() => type.Delete(this.member)); } finally { type.SetPublic(this.admin); } }
public static TreeViewItemViewModel GetRoot(TreeViewItemViewModel viewModel) { if (viewModel.Parent == null) { return(viewModel); } return(EnumerableUtility.Ancestors(viewModel, item => item.Parent).First()); }
private string GetPath(TreeViewItemViewModel viewModel) { var ancestors = EnumerableUtility.Ancestors(viewModel, item => item.Parent); var items = EnumerableUtility.Friends(viewModel, ancestors) .Reverse() .Select(item => item.DisplayName.EscapeChar(PathUtility.SeparatorChar)); return(string.Join(PathUtility.Separator, items)); }
public void Show() { this.IsVisible = true; var items = EnumerableUtility.Ancestors(this, item => item.Parent); foreach (var item in items) { item.IsVisible = true; item.IsExpanded = true; } }
public void ExpandAncestors() { foreach (var item in EnumerableUtility.Ancestors(this, i => i.Parent)) { if (item == null) { continue; } item.IsExpanded = true; } }
public PSDItemViewModel GetDocumentViewModel() { var items = EnumerableUtility.Ancestors <TreeViewItemViewModel>(this, item => item.Parent); foreach (var item in items) { if (item is PSDItemViewModel viewModel) { return(viewModel); } } return(null); }
static IEnumerable <string> QueryParents(string path) { return(EnumerableUtility.Ancestors(path, item => { if (item == PathUtility.Separator) { return null; } if (NameValidator.VerifyItemPath(item) == true) { return new ItemName(item).CategoryPath; } return new CategoryName(item).ParentPath; })); }
public void LockedTableFailTest() { var tableContext = this.dataBase.TableContext; var table = tableContext.Tables.RandomSample(); var child = table.Childs.Random(); var category = EnumerableUtility.Ancestors(table as IItem).Random(item => item.Parent != null) as ITableCategory; table.Lock(this.admin, string.Empty); try { this.InvokeFail <PermissionException>(() => table.SetPublic(this.member)); this.InvokeFail <PermissionDeniedException>(() => table.SetPrivate(this.member)); this.InvokeFail <PermissionException>(() => table.AddAccessMember(this.member, this.someone.UserID, AccessType.ReadWrite)); this.InvokeFail <PermissionException>(() => table.RemoveAccessMember(this.member, this.someone.UserID)); this.InvokeFail <PermissionException>(() => table.Lock(this.member, RandomUtility.NextString())); this.InvokeFail <PermissionDeniedException>(() => table.Unlock(this.member)); this.InvokeFail <PermissionDeniedException>(() => table.RenameTest(this.member)); this.InvokeFail <PermissionDeniedException>(() => table.MoveTest(this.member)); this.InvokeFail <PermissionDeniedException>(() => table.Delete(this.member)); this.InvokeFail <PermissionDeniedException>(() => table.NewTable(this.member)); this.InvokeFail <PermissionDeniedException>(() => table.Revert(this.member, 0)); this.InvokeFail <CremaException>(() => category.SetPublic(this.member)); this.InvokeFail <CremaException>(() => category.SetPrivate(this.member)); this.InvokeFail <CremaException>(() => category.AddAccessMember(this.member, this.someone.UserID, AccessType.ReadWrite)); this.InvokeFail <CremaException>(() => category.RemoveAccessMember(this.member, this.someone.UserID)); this.InvokeFail <CremaException>(() => category.Lock(this.member, RandomUtility.NextString())); this.InvokeFail <CremaException>(() => category.Unlock(this.member)); this.InvokeFail <CremaException>(() => category.RenameTest(this.member)); this.InvokeFail <CremaException>(() => category.MoveTest(this.member)); this.InvokeFail <CremaException>(() => category.Delete(this.member)); this.InvokeFail <PermissionException>(() => child.SetPublic(this.member)); this.InvokeFail <PermissionDeniedException>(() => child.SetPrivate(this.member)); this.InvokeFail <PermissionException>(() => child.AddAccessMember(this.member, this.someone.UserID, AccessType.ReadWrite)); this.InvokeFail <PermissionException>(() => child.RemoveAccessMember(this.member, this.someone.UserID)); this.InvokeFail <PermissionException>(() => child.Lock(this.member, RandomUtility.NextString())); this.InvokeFail <PermissionException>(() => child.Unlock(this.member)); this.InvokeFail <PermissionDeniedException>(() => child.RenameTest(this.member)); this.InvokeFail <PermissionDeniedException>(() => child.MoveTest(this.member)); this.InvokeFail <PermissionDeniedException>(() => child.Delete(this.member)); } finally { table.Unlock(this.admin); } }