Пример #1
0
        /// <summary>
        /// Clear all the items (named or anonymous).
        /// </summary>
        /// <param name="recursive"></param>
        public void ClearItems(bool recursive = false)
        {
            if (OnItemRemoved != null)
            {
                foreach (var kvp in Items)
                {
                    OnItemRemoved(kvp.Key, kvp.Value);
                }
                foreach (var item in AnonymousItems)
                {
                    OnItemRemoved(null, item);
                }

                Items.Clear();
                AnonymousItems.Clear();
            }
            else
            {
                Items.Clear();
                AnonymousItems.Clear();
            }

            if (recursive)
            {
                foreach (var subnode in Subnodes.Values)
                {
                    subnode.ClearItems(recursive);
                }
            }
        }
Пример #2
0
 private bool RemoveAnonymousItem(Queue <string> nameParts, U item, bool failQuiet)
 {
     if (nameParts.Count == 0)
     {
         var removed = AnonymousItems.Remove(item);
         if (OnItemRemoved != null)
         {
             OnItemRemoved(null, item);
         }
         return(removed);
     }
     else
     {
         var first = nameParts.Dequeue();
         if (!Subnodes.ContainsKey(first))
         {
             if (failQuiet)
             {
                 return(false);
             }
             throw new UriTreeException(
                       String.Format(
                           "Could not remove item '{0}' from group with full name '{1}'; " +
                           "missing intermediate node with name '{2}'.",
                           item, FullName, first
                           )
                       );
         }
         return(Subnodes[first].RemoveAnonymousItem(nameParts, item, failQuiet));
     }
 }
Пример #3
0
 private void AddAnonymousItem(Queue <string> nameParts, U item)
 {
     if (nameParts.Count == 0)
     {
         AnonymousItems.Add(item);
         if (OnItemAdded != null)
         {
             OnItemAdded(null, item);
         }
     }
     else
     {
         var first = nameParts.Dequeue();
         if (!Subnodes.ContainsKey(first))
         {
             throw new UriTreeException(
                       String.Format(
                           "Could not add item '{0}' to group with full name '{1}'; " +
                           "missing intermediate node with name '{2}'. Consider using InsertItem instead.",
                           item, FullName, first
                           )
                       );
         }
         Subnodes[first].AddAnonymousItem(nameParts, item);
     }
 }
Пример #4
0
 /// <summary>
 /// Remove an anonymous item from this group.
 /// </summary>
 /// <param name="item"></param>
 public bool RemoveAnonymousItem(U item, bool searchRecursive = true)
 {
     if (!AnonymousItems.Remove(item) && searchRecursive)
     {
         if (IsLeaf)
         {
             return(false);
         }
         return(Subnodes.Any(kvp => kvp.Value.RemoveAnonymousItem(item, searchRecursive)));
     }
     if (OnItemRemoved != null)
     {
         OnItemRemoved(null, item);
     }
     return(true);
 }
Пример #5
0
 private void InsertAnonymousItem <NodeType>(Queue <string> nameParts, U item)
     where NodeType : UriTreeMutableGroup <T, U>
 {
     if (nameParts.Count == 0)
     {
         AnonymousItems.Add(item);
         if (OnItemAdded != null)
         {
             OnItemAdded(null, item);
         }
     }
     else
     {
         var first = nameParts.Dequeue();
         if (!Subnodes.ContainsKey(first))
         {
             var newNode = (T)Activator.CreateInstance(typeof(NodeType), first);
             newNode.SetParent((T)this);
         }
         Subnodes[first].InsertAnonymousItem <NodeType>(nameParts, item);
     }
 }
Пример #6
0
 /// <summary>
 /// Add an anonymous item to this group.
 /// </summary>
 /// <param name="item"></param>
 public void AddAnonymousItem(U item)
 {
     AnonymousItems.Add(item);
 }