/// <summary>
        /// Creates inert DiffFiles and adds them to the folderNode, so that further operations
        /// can be performed on them later.
        /// </summary>
        /// <param name="folderNode"></param>
        /// <param name="fileNames"></param>
        /// <param name="ownerType"></param>
        private void AddFileNodesToFolderNode(ref DiffFolder folderNode, string[] fileNames, DiffFolder.TypeOfOwner ownerType)
        {
            foreach (string fileName in fileNames)
            {
                if (Path.GetExtension(fileName).ToLower() != ".aaz")
                {
                    DiffFile fileNode = new DiffFile(Path.GetFileName(fileName));

                    switch (ownerType)
                    {
                    case DiffFolder.TypeOfOwner.Parent:
                        fileNode.FilePathPrevGen = fileName;
                        break;

                    case DiffFolder.TypeOfOwner.Generated:
                        fileNode.FilePathTemplate = fileName;
                        break;

                    case DiffFolder.TypeOfOwner.User:
                        fileNode.FilePathUser = fileName;
                        break;
                    }
                    folderNode.AddFile(fileNode, ownerType);
                }
            }
        }
        private void PerformDiffOfFolder(DiffFolder diffFolder)
        {
            bool fileNeedsToBeCounted = false;

            if (UniqueFilesForCount == null)
            {
                GetTotalFileCount();
            }

            for (int i = 0; i < diffFolder.Files.Length; i++)
            {
                PerformDiffOfFile(diffFolder.Files[i], ref fileNeedsToBeCounted);
            }
        }
 /// <summary>
 ///
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
 {
     try
     {
         RootFolder = null;
         SetupFolders();
         AnalyseFiles();
         return;
     }
     catch (Exception ex)
     {
         Controller.ReportError(ex);
     }
 }
        private void ProcessFolder(string folder, DiffFolder parentFolder, bool topFolder, DiffFolder.TypeOfOwner ownerType)
        {
            string singleFolderName = Slyce.Common.Utility.GetSingleDirectoryName(folder).ToLower();
            // TODO: We need to add the ability for the user to specify folders that should be ignored
            if (singleFolderName == ".svn" ||
                singleFolderName == "_svn")
            {
                return;
            }
            if (!Directory.Exists(folder))
            {
                return;
            }
            // Make sure the folder exists in the user folder structure on disk
            string stagingFolder = "";

            switch (ownerType)
            {
                case DiffFolder.TypeOfOwner.Parent:
                    stagingFolder = folder.Replace(PreviousGenerationFolder, StagingFolder);
                    break;
                case DiffFolder.TypeOfOwner.Generated:
                    stagingFolder = folder.Replace(Controller.Instance.GetTempFilePathForComponent(ComponentKey.WorkbenchFileGenerator), StagingFolder);
                    break;
                case DiffFolder.TypeOfOwner.User:
                    stagingFolder = folder.Replace(Controller.Instance.ProjectSettings.ProjectPath, StagingFolder);
                    break;
            }
            if (!Directory.Exists(stagingFolder))
            {
                Directory.CreateDirectory(stagingFolder);
            }
            DiffFolder folderNode = null;

            if (parentFolder != null)
            {
                string folderName = folder.Substring(folder.LastIndexOf(Path.DirectorySeparatorChar) + 1);

                foreach (DiffFolder dFolder in parentFolder.SubFolders)
                {
                    if (dFolder.Name == folderName)
                    {
                        folderNode = dFolder;
                        break;
                    }
                }
                if (folderNode == null)
                {
                    folderNode = new DiffFolder(folderName);
                    parentFolder.AddSubFolder(folderNode);
                }
            }
            else
            {
                if (RootFolder == null)
                {
                    RootFolder = new DiffFolder("Root");
                }
                folderNode = RootFolder;
            }
            string[] folders = Directory.GetDirectories(folder);
            string[] fileNames = Directory.GetFiles(folder);

            foreach (string folderName in folders)
            {
                ProcessFolder(folderName, folderNode, ownerType);
            }
            AddFileNodesToFolderNode(ref folderNode, fileNames, ownerType);
            // Perform a diff on all files in the folder
            PerformDiffOfFolder(folderNode);
        }
 private void ProcessFolder(string folder, DiffFolder parentFolder, DiffFolder.TypeOfOwner ownerType)
 {
     ProcessFolder(folder, parentFolder, false, ownerType);
 }
        private void PerformDiffOfFolder(DiffFolder diffFolder)
        {
            bool fileNeedsToBeCounted = false;

            if (UniqueFilesForCount == null)
            {
                GetTotalFileCount();
            }

            for (int i = 0; i < diffFolder.Files.Length; i++)
            {
                PerformDiffOfFile(diffFolder.Files[i], ref fileNeedsToBeCounted);
            }
        }
 /// <summary>
 /// 
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
 {
     try
     {
         RootFolder = null;
         SetupFolders();
         AnalyseFiles();
         return;
     }
     catch (Exception ex)
     {
         Controller.ReportError(ex);
     }
 }
        /// <summary>
        /// Creates inert DiffFiles and adds them to the folderNode, so that further operations
        /// can be performed on them later.
        /// </summary>
        /// <param name="folderNode"></param>
        /// <param name="fileNames"></param>
        /// <param name="ownerType"></param>
        private void AddFileNodesToFolderNode(ref DiffFolder folderNode, string[] fileNames, DiffFolder.TypeOfOwner ownerType)
        {
            foreach (string fileName in fileNames)
            {
                if (Path.GetExtension(fileName).ToLower() != ".aaz")
                {
                    DiffFile fileNode = new DiffFile(Path.GetFileName(fileName));

                    switch (ownerType)
                    {
                        case DiffFolder.TypeOfOwner.Parent:
                            fileNode.FilePathPrevGen = fileName;
                            break;
                        case DiffFolder.TypeOfOwner.Generated:
                            fileNode.FilePathTemplate = fileName;
                            break;
                        case DiffFolder.TypeOfOwner.User:
                            fileNode.FilePathUser = fileName;
                            break;
                    }
                    folderNode.AddFile(fileNode, ownerType);
                }
            }
        }
        private void ProcessFolder(string folder, DiffFolder parentFolder, bool topFolder, DiffFolder.TypeOfOwner ownerType)
        {
            string singleFolderName = Slyce.Common.Utility.GetSingleDirectoryName(folder).ToLower();

            // TODO: We need to add the ability for the user to specify folders that should be ignored
            if (singleFolderName == ".svn" ||
                singleFolderName == "_svn")
            {
                return;
            }
            if (!Directory.Exists(folder))
            {
                return;
            }
            // Make sure the folder exists in the user folder structure on disk
            string stagingFolder = "";

            switch (ownerType)
            {
            case DiffFolder.TypeOfOwner.Parent:
                stagingFolder = folder.Replace(PreviousGenerationFolder, StagingFolder);
                break;

            case DiffFolder.TypeOfOwner.Generated:
                stagingFolder = folder.Replace(Controller.Instance.GetTempFilePathForComponent(ComponentKey.WorkbenchFileGenerator), StagingFolder);
                break;

            case DiffFolder.TypeOfOwner.User:
                stagingFolder = folder.Replace(Controller.Instance.ProjectSettings.ProjectPath, StagingFolder);
                break;
            }
            if (!Directory.Exists(stagingFolder))
            {
                Directory.CreateDirectory(stagingFolder);
            }
            DiffFolder folderNode = null;

            if (parentFolder != null)
            {
                string folderName = folder.Substring(folder.LastIndexOf(Path.DirectorySeparatorChar) + 1);

                foreach (DiffFolder dFolder in parentFolder.SubFolders)
                {
                    if (dFolder.Name == folderName)
                    {
                        folderNode = dFolder;
                        break;
                    }
                }
                if (folderNode == null)
                {
                    folderNode = new DiffFolder(folderName);
                    parentFolder.AddSubFolder(folderNode);
                }
            }
            else
            {
                if (RootFolder == null)
                {
                    RootFolder = new DiffFolder("Root");
                }
                folderNode = RootFolder;
            }
            string[] folders   = Directory.GetDirectories(folder);
            string[] fileNames = Directory.GetFiles(folder);

            foreach (string folderName in folders)
            {
                ProcessFolder(folderName, folderNode, ownerType);
            }
            AddFileNodesToFolderNode(ref folderNode, fileNames, ownerType);
            // Perform a diff on all files in the folder
            PerformDiffOfFolder(folderNode);
        }
 private void ProcessFolder(string folder, DiffFolder parentFolder, DiffFolder.TypeOfOwner ownerType)
 {
     ProcessFolder(folder, parentFolder, false, ownerType);
 }