public void CreateXMLFile()
        {
            var parms = new CopyCommandParameters
                            {
                                CopySubdirectories = true,
                                DeleteExistingDirectoriesFirst = true,
                                DeleteExistingFilesFirst = true,
                                WildCard = "*.*",
                                FileName = "",
                                RegExFilter = "",
                                            PostCopyAction = ""
                            };

            var cmd1 = new CopyFileCommand
                      	{
                      		CommandParameters = parms,
                      		SourceDirectory = @"D:\T001\TestFolder",
                      		TargetDirectory = @"D:\T002\TestFolder"
                      	};

            var cmd2 = new CopyFileCommand
                       	{
                       		CommandParameters = parms,
                       		SourceDirectory = @"D:\T001",
                       		TargetDirectory = @"D:\T015"
                       	};

            var cmd3 = new CopyFileCommand
                       	{
                       		CommandParameters = parms,
                       		SourceDirectory = @"D:\T001",
                       		TargetDirectory = @"D:\T003"
                       	};

            var list = new List<CopyFileCommand> {cmd1,cmd2,cmd3};

            var root = new CopyFileOperation
                       	{
                       		CopyFileCommands = list
                       	};

            var u = new HelperUtility();

            var serializer = new XmlSerializer(typeof (CopyFileOperation));
            var output = Path.Combine(@"D:\CS_Test", u.XMLCommandFileName);
            var fs = new FileStream(output, FileMode.Create);
            serializer.Serialize(fs,root);
            fs.Close();
        }
 private void AssignCopyOperationByCopyMode(CopyFileCommand cmd, DirectoryInfo currSrcInfo, DirectoryInfo newTargInfo)
 {
     switch (cmd.CommandParameters.Mode)
     {
         case CopyMode.CopyByWildCard:
             DoCopyFilesByWildCard(cmd.CommandParameters, newTargInfo, currSrcInfo);
             break;
         case CopyMode.CopyByFileName:
             DoCopyFilesByFileName(cmd.CommandParameters, newTargInfo, currSrcInfo);
             break;
         case CopyMode.CopyByRegEx:
             DoCopyFilesByRegEx(cmd.CommandParameters, newTargInfo, currSrcInfo);
             break;
         default:
             throw new Exception(String.Format("Invlaid Copy Mode Presented: {0}",cmd.CommandParameters.Mode));
     }
 }
        public void SetUp()
        {
            var parms = new CopyCommandParameters
                            {
                                CopySubdirectories = true,
                                DeleteExistingDirectoriesFirst = true,
                                DeleteExistingFilesFirst = true,
                                WildCard = "*.*"
                            };

            var cmd1 = new CopyFileCommand
                      	{
                      		CommandParameters = parms,
                                        SourceDirectory = @"D:\CS_Test",
                      		TargetDirectory = @"D:\T002"
                      	};

            var cmd2 = new CopyFileCommand
                       	{
                       		CommandParameters = parms,
                       		SourceDirectory = @"D:\T001\TestFolder",
                       		TargetDirectory = @"D:\T015\TestFolder"
                       	};

            var cmd3 = new CopyFileCommand
                       	{
                       		CommandParameters = parms,
                       		SourceDirectory = @"D:\T001",
                       		TargetDirectory = @"D:\T003"
                       	};

            var list = new List<CopyFileCommand> {cmd1,cmd2,cmd3};

            _copyFileOp = new CopyFileOperation
                       	{
                       		CopyFileCommands = list
                       	};
        }
        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 bool ValidateCopyCommand(CopyFileCommand command)
        {
            if(!Directory.Exists(command.SourceDirectory))
            {
                _log.LogAndDisplay(string.Format("Source Directory Invalid:  {0}", command.SourceDirectory),LoggerMode.LogAndDisplayConsoleLine);
                return false;
            }

            if (!Directory.Exists(command.TargetDirectory))
            {
                try
                {
                    Directory.CreateDirectory(command.TargetDirectory);
                }
                catch(Exception e)
                {
                    _log.LogAndDisplay("Failed to create Target Directory!",LoggerMode.LogAndDisplayConsoleLine);
                    _log.LogAndDisplay(" Target: " + command.TargetDirectory,LoggerMode.LogAndDisplayConsoleLine);
                    _log.LogAndDisplay(e,LoggerMode.LogOnlyNoDisplay);
                    return false;
                }

                _log.LogAndDisplay(string.Format("Successfully Created Target Directory: {0}", command.TargetDirectory),
                     LoggerMode.LogOnlyNoDisplay);
            }

            return true;
        }
        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);
        }