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);
        }
Пример #2
0
        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);
        }
Пример #3
0
        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));
        }
Пример #4
0
        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);
        }
Пример #5
0
        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));
            }
        }