public void TestCreateTargetFileFromSourceFile()
 {
     var file = new FileInfo(@"D:\T001\TestFolder\Bin\DevServcerConflict.psd");
     var uF = new FileUtility(new LogAndDisplayController(new AppConfigurationModes{ExecutionMode = AppExecutionMode.ExecuteWithoutLog}));
     var targetDir = new DirectoryInfo(@"D:\T002");
     var newTargetFile = uF.ComputeTargetFileNameFromSourceFileName(targetDir, file);
     Assert.IsTrue(newTargetFile==@"D:\T002\DevServcerConflict.psd");
 }
        public void TestAssembleCompositeDirectory()
        {
            var origSrcDir = @"D:\T001";
            var currSrcDir = new DirectoryInfo(@"D:\T001\TestFolder");
            var targetDir = @"D:\T002";
            var fU = new FileUtility(new LogAndDisplayController(new AppConfigurationModes{ExecutionMode = AppExecutionMode.ExecuteWithoutLog}));
            var nTarget = fU.ComputeTargetDirectoryFromSourceDirectory(targetDir, origSrcDir, currSrcDir);

            Assert.IsTrue(nTarget == @"D:\T002\TestFolder","T91");

            origSrcDir = @"D:\T001\TestFolder";
            targetDir = @"D:\T002";
            currSrcDir = new DirectoryInfo(@"D:\T001\TestFolder\Bin\");
            nTarget = fU.ComputeTargetDirectoryFromSourceDirectory(targetDir, origSrcDir, currSrcDir);
            Assert.IsTrue(nTarget == @"D:\T002\Bin");

            origSrcDir = @"D:\T001\";
            currSrcDir = new DirectoryInfo(@"D:\T001\TestFolder\Bin");
            targetDir = @"D:\T002";
            nTarget = fU.ComputeTargetDirectoryFromSourceDirectory(targetDir, origSrcDir, currSrcDir);

            Assert.IsTrue(nTarget == @"D:\T002\TestFolder\Bin","T92");

            origSrcDir = @"D:\T001";
            currSrcDir = new DirectoryInfo(@"D:\T001\TestFolder\Bin");
            targetDir = @"D:\T002\";
            nTarget = fU.ComputeTargetDirectoryFromSourceDirectory(targetDir, origSrcDir, currSrcDir);

            Assert.IsTrue(nTarget == @"D:\T002\TestFolder\Bin","T93");

            origSrcDir = @"D:\T001\";
            currSrcDir = new DirectoryInfo(@"D:\T001\TestFolder\Bin\");
            targetDir = @"D:\T002\";
            nTarget = fU.ComputeTargetDirectoryFromSourceDirectory(targetDir, origSrcDir, currSrcDir);

            Assert.IsTrue(nTarget == @"D:\T002\TestFolder\Bin","T94");
        }
        private void ProcessCommand(CopyFileCommand command)
        {
            var fUtil = new FileUtility(_log);

            // By this point, command parameters have been validated
            if(command.CommandParameters.DeleteExistingFilesFirst)
            {
                fUtil.DeleteAllFilesInDirectoryTree(command.TargetDirectory);

                if(command.CommandParameters.DeleteExistingDirectoriesFirst)
                {
                    fUtil.DeleteAllDirectoriesInTreeExceptTopDirectory(command.TargetDirectory);
                }
            }

            DoCopyCommand(command, command.SourceDirectory);
        }
        private void DoCopyCommand(CopyFileCommand cmd, string currSourceDir)
        {
            var uF = new FileUtility(_log);

              var uH = new HelperUtility();

            var currSrcInfo = uH.ConvertStringPathToInfo(currSourceDir);

            if(currSrcInfo==null)
            {
                throw new Exception(String.Format("Invalid Srouce Directory Info: {0}", currSourceDir));
            }

            var newTargetDir = uF.ComputeTargetDirectoryFromSourceDirectory(cmd.TargetDirectory,cmd.SourceDirectory, currSrcInfo);

            if(newTargetDir == null)
            {
                return;
            }

            if(!Directory.Exists(newTargetDir))
            {
                try
                {
                    Directory.CreateDirectory(newTargetDir);
                }
                catch(Exception e)
                {
                    _log.LogAndDisplay(String.Format("Error Creating Target Directory: {0}",newTargetDir),e,LoggerMode.LogAndDisplayConsoleLine);

                    return;
                }
            }

            var newTargInfo = uH.ConvertStringPathToInfo(newTargetDir);

            if(newTargInfo==null)
            {
                _log.LogAndDisplay(String.Format("Invalid Target Directory Info: {0}", newTargetDir),LoggerMode.LogAndDisplayConsoleLine);

                return;
            }

            _log.DisplayCopyDirectoryStatus(currSrcInfo.FullName, newTargInfo.FullName);

            AssignCopyOperationByCopyMode(cmd, currSrcInfo, newTargInfo);

            if(!cmd.CommandParameters.CopySubdirectories)
            {
                return;
            }

            var dirs = currSrcInfo.GetDirectories();

            if(dirs.Length < 1)
            {
                return;
            }

            foreach (var dir in dirs)
            {
                DoCopyCommand(cmd, uH.RemoveTrailingDirectorySlash(dir.FullName));
            }
        }
        private void DoCopyFilesByWildCard(CopyCommandParameters parms, DirectoryInfo targDirInfo, DirectoryInfo srcDirInfo)
        {
            if(srcDirInfo==null)
            {
                _log.LogAndDisplay("DoCopyFilesByWildCard(): Invalid Source Directory Info!", LoggerMode.LogAndDisplayConsoleLine);

                return;
            }

            if(targDirInfo==null)
            {
                _log.LogAndDisplay("DoCopyFilesByWildCard(): Invalid Target Directory Info!", LoggerMode.LogAndDisplayConsoleLine);

                return;
            }

            var files = srcDirInfo.GetFiles(parms.WildCard);

            if(files.Length < 1)
            {
                return;
            }

            var uF = new FileUtility(_log);

            foreach (var file in files)
            {
                if(IsFileADirectory(file))
                {
                    continue;
                }

                uF.CopyFilesFromSrcToTarget(file, targDirInfo);
            }
        }