public WFile(FileInfo file, string fileType, WDirectory parentDirectory)
 {
     Name = file.Name;
     FileSystemItem = file;
     ParentDirectory = parentDirectory;
     FileType = fileType;
 }
 public NewFile(WDirectory directory)
 {
     InitializeComponent();
     Owner = Window.GetWindow(Application.Current.MainWindow);
     FileDirectory = directory;
     FileType = FileType = ProjectManagementConsts.GeneralScript;
 }
 public WDirectory(DirectoryInfo directory, WDirectory parentDirectory)
 {
     Name = directory.Name;
     FileSystemItem = directory;
     ParentDirectory = parentDirectory;
     Children = new BindingList<WPath>();
 }
        public void AddNewItem(WDirectory parentDir, string name, string fileType = null)
        {
            //check config for existing item
            if (parentDir.ContainsFile(name))
            {
                throw new Exception("Item already exists in project!");
            }

            var parentDirInfo = (DirectoryInfo) parentDir.FileSystemItem;
            var parentDirPath = parentDirInfo.FullName.Substring(
                parentDirInfo.FullName.IndexOf(ProjectPath.Split('\\').Last(),
                    StringComparison.Ordinal));

            //check filesystem for existing item
            if (fileType != null) // if file
            {
                var parentProjectDirectory = ParentDirInfo(parentDir);
                if (parentDirInfo.GetFiles().Any(item => name == item.Name))
                {
                    throw new Exception("Item already exists in directory!");
                }
                var element = new XElement(FileTag, new XAttribute(NameAttribute, name),
                    new XAttribute(TypeAttribute, fileType));
                //add file
                GetDirectoryElement(parentDirPath, Configuration.Root.Element(PathsTag).Element(DirectoryTag))
                    .Add(element);
                var filePath = $"{parentDirInfo.FullName}\\{name}";
                File.Create(filePath);
                parentProjectDirectory.Children.Add(new WFile
                {
                    FileSystemItem = new FileInfo(filePath),
                    FileType = fileType
                });

                SaveConfiguration();
            }
            else //if directory
            {
                if (parentDirInfo.GetDirectories().Any(item => name == item.Name))
                {
                    throw new Exception("This directory already exists!");
                }
                var element = new XElement(DirectoryTag, new XAttribute(NameAttribute, name));
                //add directory
                GetDirectoryElement(parentDirPath, Configuration.Root.Element(PathsTag).Element(DirectoryTag))
                    .Add(element);
                parentDir.Children.Add(new WDirectory
                {
                    FileSystemItem = Directory.CreateDirectory($"{parentDirInfo.FullName}\\{name}")
                });
                SaveConfiguration();
            }
        }
 public override void ReadXml(XmlReader reader)
 {
     if (reader.MoveToContent() != XmlNodeType.Element
         || reader.LocalName.ToLower() != "directory") return;
     Name = reader.GetAttribute("Name");
     var inner = reader.ReadSubtree();
     inner.MoveToContent();
     while (inner.Read())
     {
         if (inner.NodeType == XmlNodeType.Element)
         {
             if (inner.LocalName.ToLower() == "file")
             {
                 var file = new WFile();
                 file.ReadXml(inner);
                 Children.Add(file);
             }
             else if (inner.LocalName.ToLower() == "directory")
             {
                 var directory = new WDirectory();
                 directory.ReadXml(inner);
                 Children.Add(directory);
             }
         }
     }
     inner.Close();
 }