/// <summary>
        /// Creates a  directory
        /// </summary>
        /// <param name="parent">Parent</param>
        /// <param name="name">Name</param>
        /// <param name="comment">Comment</param>
        /// <returns>Rhe directory</returns>
        static public IBufferDirectory Create(this IBufferDirectory parent, string name,
                                              string comment)
        {
            if (parent.GetDirectoryNames().Contains(name))
            {
                throw new Exception(name + " already exists");
            }
            IBufferDirectory result = new BufferDirectoryWrapper(parent as BufferDirectoryWrapper,
                                                                 data.Create(parent.Id, name, comment));

            StaticExtensionDataPerformerInterfaces.Data.SubmitChanges();
            return(result);
        }
        /// <summary>
        /// Creates a tree
        /// </summary>
        /// <param name="data">Database interface</param>
        /// <returns>roots of trees</returns>
        static IBufferDirectory[] CreateTree(this IDatabaseInterface data)
        {
            Dictionary <object, IParentSet> dictionary  = new Dictionary <object, IParentSet>();
            IEnumerable <object>            list        = data.Elements;
            List <IBufferDirectory>         directories = new List <IBufferDirectory>();

            foreach (object o in list)
            {
                IBufferItem item = data[o];
                IParentSet  ps   = null;
                if (item is IBufferData)
                {
                    ps = new BufferItemWrapper(item as IBufferData);
                }
                else
                {
                    ps = new BufferDirectoryWrapper(item);
                }
                dictionary[o] = ps;
            }
            foreach (IParentSet ps in dictionary.Values)
            {
                IBufferItem it = (ps as IBufferItem);
                object      o  = it.ParentId;
                if (!o.Equals(it.Id))
                {
                    if (dictionary.ContainsKey(o))
                    {
                        ps.Parent = dictionary[o] as IBufferItem;
                    }
                }
            }
            List <IBufferDirectory> l = new List <IBufferDirectory>();

            foreach (IParentSet ps in dictionary.Values)
            {
                if (ps is IBufferDirectory)
                {
                    IBufferDirectory item = (ps as IBufferDirectory);
                    if (item.Parent == null)
                    {
                        l.Add(item);
                    }
                }
            }
            return(l.ToArray());
        }