protected static List <RecursiveObject> FillRecursive(EXP_DIC_PrimaryOTD[] list, long?parentId, string[] listPermissions, bool withRemarks, Dictionary <long, string> remarks, bool disabled) { var recursiveObjects = new List <RecursiveObject>(); var queryList = list.Where(x => x.ParentId == parentId).ToList(); if (queryList.Count == 0 && withRemarks) { var otdRemark = remarks.ContainsKey(parentId.Value) ? remarks[parentId.Value] : null; recursiveObjects.Add(new RecursiveObject() { id = parentId.Value + 100000, text = otdRemark ?? "", title = otdRemark ?? "", type = "remark", state = new FlatTreeAttribute() { opened = true, selected = false, disabled = disabled }, }); } foreach (EXP_DIC_PrimaryOTD item in queryList) { bool isChecked; var secRolespermissions = listPermissions.Contains(item.Id.ToString()); if (secRolespermissions) { isChecked = true; } else { isChecked = false; } var recursiveObject = new RecursiveObject { text = "[" + item.Code + "]-" + item.NameRu, title = "[" + item.Code + "]-" + item.NameRu, id = item.Id, // icon = "fa x icon-state-danger", state = new FlatTreeAttribute { selected = isChecked, opened = true, disabled = disabled }, children = FillRecursive(list, item.Id, listPermissions, withRemarks, remarks, disabled) }; if (recursiveObject.children.Count == 0 || recursiveObject.children.Any(e => e.type == "remark")) { recursiveObject.type = "leaf"; } recursiveObjects.Add(recursiveObject); } return(recursiveObjects); }
public async Task AppendMany_Recursive_With_Predicate_Tests() { var items = new ConcurrentBag <RecursiveObject>(); var func = Create.SimpleFunc <RecursiveObject>( b => b.AppendMany(c => c.Select(msg => msg.Children).Where(msg => msg.Id != 12).Recursive()).Handler(msg => items.Add(msg))); var source = new RecursiveObject { Id = 1, Children = new[] { new RecursiveObject { Id = 11, Children = new[] { new RecursiveObject { Id = 111 }, new RecursiveObject { Id = 112 } } }, new RecursiveObject { Id = 12, Children = new[] { new RecursiveObject { Id = 121 }, new RecursiveObject { Id = 122 } } } } }; await func(source); Assert.Equal(5, items.Count); Assert.Contains(items, i => i.Id == 1); Assert.Contains(items, i => i.Id == 11); Assert.Contains(items, i => i.Id == 111); Assert.Contains(items, i => i.Id == 112); Assert.Contains(items, i => i.Id == 12); }
public void HasChangesRecursively_RecursiveObjects_ReturnsFalse() { var recursiveObject1 = new RecursiveObject(); recursiveObject1.Reference = recursiveObject1; var recursiveObject2 = new RecursiveObject(); recursiveObject2.Reference = recursiveObject2; Assert.IsFalse(ChangeDetector.HasChanges( recursiveObject1, recursiveObject2)); }
private static List <RecursiveObject> GetAdditionalMenuChildren(int idMenu, List <Spartan_Additional_Menu> additionalMenu) { List <RecursiveObject> List = new List <RecursiveObject>(); var Parents = additionalMenu.Where(AM => AM.ParentMenu == idMenu); foreach (var Node in Parents) { if (List.Any(L => L.text == Node.MenuName)) { RecursiveObject Item = List.FirstOrDefault(L => L.text == Node.MenuName); RecursiveObject item = new RecursiveObject(); item.id = Node.idMenu; item.Image = null; item.moduleOrder = Node.idMenu; item.state = new FlatTreeAttribute() { check = false, opened = false, selected = false }; item.text = Node.OptionMenu; item.Objects = new List <RecursiveInnerObject>(); item.children = new List <RecursiveObject>(); item.AdditionalMenu = GetAdditionalMenuChildren(Node.idMenu, additionalMenu); item.Link = Node.OptionPath; Item.AdditionalMenu.Add(item); } else { RecursiveObject item = new RecursiveObject(); item.id = Node.idMenu; item.Image = null; item.moduleOrder = Node.idMenu; item.state = new FlatTreeAttribute() { check = false, opened = false, selected = false }; item.text = Node.MenuName; item.Objects = new List <RecursiveInnerObject>(); item.children = new List <RecursiveObject>(); if (!string.IsNullOrWhiteSpace(Node.OptionPath)) { RecursiveObject SubMenu = new RecursiveObject(); SubMenu.id = Node.idMenu; SubMenu.text = Node.OptionMenu; SubMenu.state = new FlatTreeAttribute() { check = false, opened = false, selected = false }; SubMenu.Link = Node.OptionPath; if (item.AdditionalMenu == null) { item.AdditionalMenu = new List <RecursiveObject>(); } item.AdditionalMenu.Add(SubMenu); } if (item.AdditionalMenu == null) { item.AdditionalMenu = new List <RecursiveObject>(); } item.AdditionalMenu.AddRange(GetAdditionalMenuChildren(Node.idMenu, additionalMenu)); //item.Link = Node.OptionPath; List.Add(item); } } return(List); }
private static void TraverseSubAssets(ScriptableObject mainAsset, Action <ScriptableObject> visit, RecursiveObject fieldObj = null) { if (fieldObj != null) { // Add object as sub-asset if possible if (fieldObj.IncludeSelf) { var objType = fieldObj.Value.GetType(); // Direct child if (objType.IsSubclassOf(typeof(ScriptableObject))) { visit((ScriptableObject)fieldObj.Value); } // Array / List else if ( ReflectionUtil.IsArrayOf(objType, typeof(ScriptableObject)) || ReflectionUtil.IsListOf(objType, typeof(ScriptableObject))) { foreach (var sa in (IEnumerable)fieldObj.Value) { TraverseSubAssets(mainAsset, visit, new RecursiveObject(sa, true)); } return; // skip fields of list and array } } // Follow all sub fields that are marked as SubAsset foreach (var fieldInfo in fieldObj.Value.GetType().GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance)) { if (fieldInfo.GetCustomAttributes(typeof(SubAssetAttribute), false).Length > 0) { TraverseSubAssets(mainAsset, visit, new RecursiveObject(fieldInfo.GetValue(fieldObj.Value), true)); } } } else { TraverseSubAssets(mainAsset, visit, new RecursiveObject(mainAsset, false)); } }