public override void AddChild(WPath childPath)
 {
     //do nothing
 }
 public override void AddChild(WPath childPath)
 {
     childPath.ParentDirectory = this;
     Children.Add(childPath);
 }
        //should be moved to pathwrapper
        private WPath ParentDirInfo(WPath wPath)
        {
            var parentDirInfo = wPath.FileSystemItem;
            var dirName = parentDirInfo.FullName;
            var projectName = WFiles[0].Name;

            //add a 1 char offset unless we're looking in the project root
            var parentProjectDirectory = (WDirectory) WFiles[0];

            //if parent project dir is not the project root
            if (dirName.Split('\\').Last() != projectName)
            {
                var splitPath =
                    dirName.Substring(dirName.LastIndexOf(projectName)
                                      + projectName.Count())
                        .Split(new[] {"\\"}, StringSplitOptions
                            .RemoveEmptyEntries).ToList();
                if (parentDirInfo.Extension != "") //is file
                {
                    splitPath.RemoveAt(splitPath.Count - 1);
                }
                if (splitPath.Count == 1 && splitPath[0] == projectName)
                    return parentProjectDirectory;
                foreach (var dir in splitPath)
                {
                    parentProjectDirectory = parentProjectDirectory[dir];
                }
            }
            return parentProjectDirectory;
        }
 public abstract void AddChild(WPath childPath);
        public void RemovePath(WPath wPath, bool delete = true)
        {
            if (wPath.Children != null && wPath.Children.Count > 0)
            {
                // ReSharper disable once ForCanBeConvertedToForeach
                for (var index = 0; index < wPath.Children.Count; index++)
                {
                    RemovePath(wPath.Children[index], delete);
                }
            }

            var name = wPath.FileSystemItem.FullName;
            var splitPath = name.Substring(name.IndexOf(Name)).Split('\\').ToList();
            splitPath.RemoveAt(splitPath.Count - 1);
            var element = Configuration.Root.Element(PathsTag);
            var itemPath = wPath.FileSystemItem.FullName;
                //save file WPath before the item is removed from configuration
            //get parents
            foreach (var directory in splitPath)
            {
                element = (from dirElement in element.Elements(DirectoryTag)
                    where
                        string.Equals(dirElement.Attribute(NameAttribute).Value, directory,
                            StringComparison.CurrentCultureIgnoreCase)
                    select dirElement).First();
            }

            var tag = FileTag;
            if (wPath is WDirectory)
                tag = DirectoryTag;

            //remove from configuration and config.xml
            try
            {
                (from childElement in element.Elements(tag)
                    where
                        string.Equals(childElement.Attribute(NameAttribute).Value, wPath.FileSystemItem.Name,
                            StringComparison.CurrentCultureIgnoreCase)
                    select childElement).First().Remove();
                SaveConfiguration();
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }

            //remove from WFiles
            var parentProjectDirectory = ParentDirInfo(wPath);
            parentProjectDirectory.Children.Remove(wPath);

            try
            {
                //delete WPath if delete is true and WPath exists
                if (!delete) return;
                if (wPath is WDirectory && Directory.Exists(wPath.FileSystemItem.FullName))
                    Directory.Delete(itemPath, true);
                else if (File.Exists(wPath.FileSystemItem.FullName))
                {
                    File.Delete(itemPath);
                }
            }
            catch (IOException)
            {
                throw new IOException("Item(s) could not be deleted from your filesystem. Try removing them manually.");
            }
        }