/// <summary>
 /// Puts the specified input.
 /// </summary>
 /// <param name="input">The input.</param>
 /// <returns></returns>
 public HttpResponseMessage Put(ServerDetailsModel input)
 {
     var configFileWriter = new ConfigFileWriter().UpdateConfigFile(input);
     return configFileWriter
         ? Request.CreateResponse(HttpStatusCode.Created, "Updated successfully")
         : Request.CreateErrorResponse(HttpStatusCode.NotModified, "Config file not modified");
 }
 /// <summary>
 /// Processes the xcopy.
 /// </summary>
 /// <param name="serverDetails">The server details.</param>
 public void ProcessXcopy(ServerDetailsModel serverDetails)
 {
     // Use ProcessStartInfo class
     var startInfo = new ProcessStartInfo();
     startInfo.CreateNoWindow = false;
     startInfo.UseShellExecute = false;
     //Give the name as Xcopy
     startInfo.FileName = "xcopy";
     //make the window Hidden
     startInfo.WindowStyle = ProcessWindowStyle.Hidden;
     //Send the Source and destination as Arguments to the process
     startInfo.Arguments = "\"" + serverDetails.SourceFileName + "\"" + " " + "\"" + serverDetails.DestinationFileLocation + "\"" + @" /e /y /I";
     try
     {
         // Start the process with the info we specified.
         // Call WaitForExit and then the using statement will close.
         using (Process exeProcess = Process.Start(startInfo))
         {
             exeProcess.WaitForExit();
             exeProcess.Close();
         }
     }
     catch (Exception exp)
     {
         throw exp;
     }
 }
 /// <summary>
 /// Deletes the old file.
 /// </summary>
 /// <param name="serverDetails">The server details.</param>
 public void DeleteOldFile(ServerDetailsModel serverDetails)
 {
     var dir = new DirectoryInfo(serverDetails.DestinationFileLocation);
     int fCount = Directory.GetFiles(serverDetails.DestinationFileLocation, "*.zip", SearchOption.AllDirectories).Length;
     if (fCount > serverDetails.FileLimit)
     {
         FileInfo oldFileName =
             dir.EnumerateFiles("*.zip", SearchOption.AllDirectories).OrderBy(d => d.CreationTime).First();
         File.Delete(serverDetails.DestinationFileLocation + "\\" + oldFileName);
     }
 }
        /// <summary>
        /// Reads the config file.
        /// </summary>
        /// <param name="serverDetailsRequest">The server details request.</param>
        /// <returns></returns>
        public ServerDetailsModel ReadConfigFile(ServerDetailsModel serverDetailsRequest)
        {
            //string path = Path.Combine(Environment.CurrentDirectory, "Config.json");
            //for testing purpose only
            const string path = @"D:\\DeployNowClient\\Config.json";

            var configList = JsonConvert.DeserializeObject<List<ServerDetailsModel>>(File.ReadAllText(path));

            var serverDetailsResponse = configList.FirstOrDefault(p => p.Region == serverDetailsRequest.Region);

            return (ServerDetailsModel)serverDetailsResponse;
        }
        /// <summary>
        /// Updates the config file.
        /// </summary>
        /// <param name="serverModels">The server models.</param>
        /// <returns></returns>
        public bool UpdateConfigFile(ServerDetailsModel serverModels)
        {
            const string path = @"C:\\Shared\\Dev\\DeployNow\\DeployNowClient\\Config.json";

            var configList = JsonConvert.DeserializeObject<List<ServerDetailsModel>>(File.ReadAllText(path));

            foreach (var config in configList.Where(config => serverModels.Region != null && config.Region == serverModels.Region))
            {
                //mapping the previous values to modified value
                config.ServerList = serverModels.ServerList;
            }
            var output = Newtonsoft.Json.JsonConvert.SerializeObject(configList, Newtonsoft.Json.Formatting.Indented);
            File.WriteAllText(path, output);
            return true;
        }
 /// <summary>
 /// Replaces the config file.
 /// </summary>
 /// <param name="serverDetails">The server details.</param>
 public void ReplaceConfigFile(ServerDetailsModel serverDetails)
 {
     var dir = new DirectoryInfo(serverDetails.DestinationFileLocation);
     FileInfo fileDetails = dir.EnumerateFiles("*.zip", SearchOption.AllDirectories).First();
     ZipArchive archive = ZipFile.Open(fileDetails.FullName, ZipArchiveMode.Update);
     //Gets the Web.config file for the server.
     IEnumerable<FileInfo> configFiles = dir.EnumerateFiles("*.config", SearchOption.AllDirectories);
     if (configFiles.Any())
     {
         FileInfo configFileDetails = dir.EnumerateFiles("*.config", SearchOption.AllDirectories).First();
         archive.Entries.First(p => p.Name == "Web.config").Delete();
         if (archive.Entries.Any(p => p.Name == "Web.Debug.config"))
         {
             archive.Entries.First(p => p.Name == "Web.Debug.config").Delete();
         }
         if (archive.Entries.Any(p => p.Name == "Web.Release.config"))
         {
             archive.Entries.First(p => p.Name == "Web.Release.config").Delete();
         }
         //Copies the web.config file to the zip file.
         archive.CreateEntryFromFile(configFileDetails.FullName, "Web.config");
     }
     archive.Dispose();
 }