/// <summary>
        /// Adds a child item with the given type
        /// (<see cref="SolutionItemType.SolutionRootItem"/> cannot be added here).
        /// </summary>
        /// <param name="displayName"></param>
        /// <param name="type"></param>
        /// <returns></returns>
        public static IItemModel AddStaticChild(string displayName
                                                , SolutionModelItemType type
                                                , IItemChildrenModel parent)
        {
            if (parent.FindChild(displayName) != null)
            {
                throw new ArgumentException("Item '" + displayName + "' already exists.");
            }

            IItemModel newItem = null;

            switch (type)
            {
            case SolutionModelItemType.File:
                newItem = new FileItemModel(parent, displayName);
                break;

            case SolutionModelItemType.Folder:
                newItem = new FolderItemModel(parent, displayName);
                break;

            case SolutionModelItemType.Project:
                newItem = new ProjectItemModel(parent, displayName);
                break;

            // This should be created via AddSolutionRootItem() method
            case SolutionModelItemType.SolutionRootItem:
            default:
                throw new ArgumentException(type.ToString());
            }

            parent.AddChild(newItem);

            return(newItem);
        }
        /// <summary>
        /// Adds a child item with the given type
        /// (<see cref="SolutionItemType.SolutionRootItem"/> cannot be added here).
        ///
        /// This wrapper uses a long input for conversion when reading from file.
        /// </summary>
        /// <param name="displayName"></param>
        /// <param name="type"></param>
        /// <returns></returns>
        public IItemModel AddChild(string displayName
                                   , long longType
                                   , IItemChildrenModel parent)
        {
            if (parent.FindChild(displayName) != null)
            {
                throw new ArgumentException("Item '" + displayName + "' already exists.");
            }

            SolutionModelItemType type = (SolutionModelItemType)longType;

            return(AddChild(displayName, type, parent));
        }