Ejemplo n.º 1
0
 public static CustTreeItems FillCustTreeItems(System.Data.IDataReader r)
 {
     CustTreeItems cti = new CustTreeItems();
     cti.Name = r.GetString(0);
     cti.HasPermissions = Convert.ToBoolean(r.GetByte(1));
     return cti;
 }
Ejemplo n.º 2
0
 public static void AddPermissionsToControl(CustTreeItems cti)
 {
     foreach(Permission p in DAL.DAL.ExecuteDataReader("S_Permissions_ByControlName", fillPermission,
         DAL.DAL.Parameter("ControlName", cti.Name)))
     {
         p.ParentItem = cti;
         cti.Options.Add(p);
     }
 }
Ejemplo n.º 3
0
 public static void InsertSubItems(CustTreeItems parent)
 {
     foreach(CustTreeItems cti in 
         DAL.DAL.ExecuteDataReader("S_Control_ByParentName",FillCustTreeItems,
                     DAL.DAL.Parameter("ParentName", parent.Name)))
     {
         cti.Parent = parent;
         if (cti.HasPermissions)
         {
             AddPermissionsToControl(cti);
         }
         else
         {
             InsertSubItems(cti);
         }
         parent.Items.Add(cti);
     }
 }
Ejemplo n.º 4
0
        //SELECT METHODS
        public static MenuItems GetTreeMenu()
        {
            MenuItems mu = new MenuItems();
            List<MenuItem> dbmi = new List<MenuItem>();
            Queue<Tuple<string,CustTreeItems>> toAddParent = new Queue<Tuple<string,CustTreeItems>>();
            
            dbmi.AddRange(DAL.DAL.ExecuteDataReader("S_AllControls_ControlName_PermissionName", FillMenuItem));
            
            List<CustTreeItems> menulist = new List<CustTreeItems>();
            Dictionary<string, CustTreeItems> itemsDictionary = new Dictionary<string, CustTreeItems>();
            Dictionary<string, CustTreeItems> addPermissions = new Dictionary<string, CustTreeItems>();

            foreach(var t in dbmi)
            {
                CustTreeItems c;
                if (!itemsDictionary.ContainsKey(t.Name))
                {
                    c = new CustTreeItems();
                    c.Name = t.Name;
                    c.HasAccess = false;
                }
                else
                {
                    c = itemsDictionary[t.Name];
                }
                if (!string.IsNullOrEmpty(t.PermissionName))
                {
                    c.HasPermissions = true;
                    c.Options.Add(new Permission(c, t.PermissionName, t.PermissionDescription, false));
                }
                if (!string.IsNullOrEmpty(t.ParentName))
                {
                    c.HasParent = true;
                    if (itemsDictionary.ContainsKey(t.ParentName))
                    {
                        CustTreeItems parent = itemsDictionary[t.ParentName];
                        c.Parent = parent;
                        int count = parent.Items.Where(x => x.Name == c.Name).Count();
                        if(count == 0)
                        parent.Items.Add(c);

                        itemsDictionary.TryAdd(t.Name, c);
                    }
                    else
                    {
                        toAddParent.Enqueue(Tuple.Create(t.ParentName,c));
                    }
                }
                else
                {
                    itemsDictionary.TryAdd(t.Name, c);
                }
                itemsDictionary.TryAdd(t.Name, c);
            }

            //niet zo efficient maar mijn vermoedelijke efficientere manier liet het afweten
            //als parent in itemsdictionary -> bind 
            //als parent niet in itemsdicionary -> enqueue en voer op het einde uit
            //in het beste scenario staat alles op volgorde, in het slechtste staat mijn parent steeds op het einde
            while(toAddParent.Count > 0)
            {
                Tuple<string, CustTreeItems> it = toAddParent.Dequeue();
                CustTreeItems child = it.Item2;
                if (itemsDictionary.ContainsKey(it.Item1))
                {
                    CustTreeItems parent = itemsDictionary[it.Item1];
                    child.Parent = parent;
                    int count = parent.Items.Where(x => x.Name == child.Name).Count();
                    if (count == 0)
                        parent.Items.Add(child);
                    itemsDictionary.TryAdd(it.Item1, child);
                }
                else
                {
                    toAddParent.Enqueue(it);
                }

            }


            //foreach(MenuItem menuitem in dbmi)
            //{
            //    CustTreeItems cti;
            //    if (itemsDictionary.ContainsKey(menuitem.Name))
            //    {
            //        cti = itemsDictionary[menuitem.Name] ?? new CustTreeItems(menuitem.Name);
            //    }
            //    else
            //    {
            //        cti = new CustTreeItems(menuitem.Name);
            //    }
            //    cti.HasAccess = false;
            //    if (!string.IsNullOrEmpty(menuitem.PermissionName))
            //    {
            //        cti.HasPermissions = true;
            //        cti.Options.Add(new Permission(cti, menuitem.PermissionName, menuitem.PermissionDescription, false));
            //    }
            //    if (cti.HasParent = !string.IsNullOrEmpty(menuitem.ParentName))
            //    {
            //        CustTreeItems parent;
            //        if (itemsDictionary.TryGetValue(menuitem.ParentName, out parent))
            //        {
            //            parent.Items.Add(cti);
            //            cti.Parent = parent;
            //        }
            //        else
            //        {
            //            toAddParent.Add( Tuple.Create(menuitem.ParentName, cti) );
            //        }
            //    }
            //    foreach(var tuple in toAddParent)
            //    {
            //        if(tuple.Item1 == menuitem.Name)
            //        {
            //            CustTreeItems child = tuple.Item2;
            //            child.Parent = cti;
            //            cti.Items.Add(child);
            //            break;
            //        }
            //    }
            //    itemsDictionary.TryAdd(menuitem.Name, cti);
            //}

            ////itemsDictionary.Values.Where(treeitem => !treeitem.HasParent).ToList().ForEach(x => mu.Items.Add(x));
            foreach (var v in itemsDictionary)
            {
                if (!v.Value.HasParent)
                {
                    mu.Items.Add(v.Value);
                }
            }
            return mu;
        }