private static Options GetCommandLineArguments(string[] args) { List <string> singleParams = new List <string>(); List <string> doubleParams = new List <string>(); List <string> doubleParamsValues = new List <string>(); for (int i = 0; i < args.Length; i++) { if (args[i].Substring(0, 2) == Configurator.GetConstantString("DoubleHyphen")) { singleParams.Add(args[i]); continue; } else if (args[i].Substring(0, 1) == Configurator.GetConstantString("Hyphen")) { if (i == (args.Length - 1)) { Console.WriteLine($"Invalid command line parameter '{args[i]}'."); Environment.Exit(-1); } doubleParams.Add(args[i]); doubleParamsValues.Add(args[i + 1]); i++; continue; } else { Console.WriteLine($"Invalid command line parameter '{args[i]}'."); Environment.Exit(-1); } } Options options = new Options(); foreach (string param in singleParams) { string[] keyValuePair = param.Split('='); if (keyValuePair.Length == 1) { if (keyValuePair[0] == Configurator.GetConstantString("StopwatchCommandLineParameter")) { options.Stopwatch = true; } else if (keyValuePair[0] == Configurator.GetConstantString("LoggerCommandLineParameter")) { options.Logger = true; } else { Console.WriteLine($"Invalid command line parameter '{param}'."); Environment.Exit(-1); } } else if (keyValuePair.Length == 2) { if (keyValuePair[0] == Configurator.GetConstantString("ValidationRuleCommandLineParameter")) { options.Rule = keyValuePair[1]; } else if (keyValuePair[0] == "--storage") { options.Storage = keyValuePair[1]; } else { Console.WriteLine($"Invalid command line parameter '{param}'."); Environment.Exit(-1); } } else { Console.WriteLine($"Invalid command line parameter '{param}'."); Environment.Exit(-1); } } for (int i = 0; i < doubleParams.Count; i++) { if (doubleParams[i] == Configurator.GetConstantString("ShortValidationRuleCommandLineParameter")) { options.Rule = doubleParamsValues[i]; } else if (doubleParams[i] == Configurator.GetConstantString("ShortStorageCommandLineParameter")) { options.Storage = doubleParamsValues[i]; } else { Console.WriteLine($"Invalid command line parameter '{doubleParams[i]}'."); Environment.Exit(-1); } } return(options); }
private static void SetCommandLineSettings(string[] args) { IConfigurationRoot validationRules = null; try { validationRules = new ConfigurationBuilder() .SetBasePath(AppDomain.CurrentDomain.BaseDirectory) .AddJsonFile(Configurator.GetSetting("ValidationRulesFileName")) .Build(); } catch (FileNotFoundException) { Console.WriteLine($"{Configurator.GetConstantString("MissingValidation")} {Configurator.GetSetting("ConstantStringsFileName")}"); Console.WriteLine(Configurator.GetConstantString("ClosingProgram")); Environment.Exit(-1); } catch (FormatException) { Console.WriteLine(Configurator.GetConstantString("InvalidValidationFile")); Console.WriteLine(Configurator.GetConstantString("ClosingProgram")); Environment.Exit(-1); } Options options = GetCommandLineArguments(args); if (options.Storage.Equals(Configurator.GetConstantString("FileStorage"), StringComparison.InvariantCultureIgnoreCase)) { SetFileService(); } else if (options.Storage.Equals(Configurator.GetConstantString("MemoryStorage"), StringComparison.InvariantCultureIgnoreCase)) { SetMemoryService(); } else { Console.WriteLine($"Wrong command line argument {options.Storage}."); Environment.Exit(-1); } if (options.Rule.Equals(Configurator.GetConstantString("CustomRule"), StringComparison.InvariantCultureIgnoreCase)) { SetCustomService(validationRules); } else if (options.Rule.Equals(Configurator.GetConstantString("DefaultRule"), StringComparison.InvariantCultureIgnoreCase)) { SetDefaultService(validationRules); } else { Console.WriteLine($"Wrong command line argument {options.Rule}."); Environment.Exit(-1); } if (fileCabinetService is FileCabinetFilesystemService) { try { fileCabinetService.Restore(fileCabinetService.MakeSnapshot()); } #pragma warning disable CA1031 // Do not catch general exception types catch (Exception) #pragma warning restore CA1031 // Do not catch general exception types { Console.WriteLine(Configurator.GetConstantString("InvalidFile")); Console.WriteLine(Configurator.GetConstantString("ClosingProgram")); Environment.Exit(-1); } } if (options.Logger) { SetLogger(); } if (options.Stopwatch) { SetStopwatch(); } }
private static void SetStopwatch() { fileCabinetService = new ServiceMeter(fileCabinetService); Console.WriteLine(Configurator.GetConstantString("UseStopwatch")); }
private static void SetLogger() { fileCabinetService = new ServiceLogger(fileCabinetService); Console.WriteLine(Configurator.GetConstantString("UseLogger")); }
private static void SetCustomService(IConfigurationRoot configuration) { fileCabinetService.SetRecordValidator(new ValidatorBuilder().CreateValidator(configuration.GetSection("custom"))); Console.WriteLine(Configurator.GetConstantString("UseCustomRules")); }
private static void SetMemoryService() { fileCabinetService = new FileCabinetMemoryService(); Console.WriteLine(Configurator.GetConstantString("UseMemory")); }
private void UpdateRecord(FileCabinetRecord record, IEnumerable <IEnumerable <string> > fieldsAndValuesToSet) { foreach (var keyValuePair in fieldsAndValuesToSet) { var key = keyValuePair.First(); var value = keyValuePair.Last(); if (key.Equals(Configurator.GetConstantString("ParameterId"), StringComparison.InvariantCultureIgnoreCase)) { throw new ArgumentException(Configurator.GetConstantString("IdChange"), nameof(fieldsAndValuesToSet)); } if (key.Equals(Configurator.GetConstantString("ParameterFirstName"), StringComparison.InvariantCultureIgnoreCase)) { var legacy = record.FirstName; record.FirstName = value; var validationResult = this.recordValidator.ValidateParameters(record); if (!validationResult.Item1) { record.FirstName = legacy; throw new ArgumentException(validationResult.Item2, nameof(fieldsAndValuesToSet)); } continue; } if (key.Equals(Configurator.GetConstantString("ParameterLastName"), StringComparison.InvariantCultureIgnoreCase)) { var legacy = record.LastName; record.LastName = value; var validationResult = this.recordValidator.ValidateParameters(record); if (!validationResult.Item1) { record.LastName = legacy; throw new ArgumentException(validationResult.Item2, nameof(fieldsAndValuesToSet)); } continue; } if (key.Equals(Configurator.GetConstantString("ParameterDateOfBirth"), StringComparison.InvariantCultureIgnoreCase)) { var conversionResult = Converter.ConvertStringToDateTime(value); if (!conversionResult.Item1) { throw new ArgumentException(conversionResult.Item2, nameof(fieldsAndValuesToSet)); } var legacy = record.DateOfBirth; record.DateOfBirth = conversionResult.Item3; var validationResult = this.recordValidator.ValidateParameters(record); if (!validationResult.Item1) { record.DateOfBirth = legacy; throw new ArgumentException(validationResult.Item2, nameof(fieldsAndValuesToSet)); } continue; } if (key.Equals(Configurator.GetConstantString("ParameterPatronymicLetter"), StringComparison.InvariantCultureIgnoreCase)) { var conversionResult = Converter.ConvertStringToChar(value); if (!conversionResult.Item1) { throw new ArgumentException(conversionResult.Item2, nameof(fieldsAndValuesToSet)); } var legacy = record.PatronymicLetter; record.PatronymicLetter = conversionResult.Item3; var validationResult = this.recordValidator.ValidateParameters(record); if (!validationResult.Item1) { record.PatronymicLetter = legacy; throw new ArgumentException(validationResult.Item2, nameof(fieldsAndValuesToSet)); } continue; } if (key.Equals(Configurator.GetConstantString("ParameterIncome"), StringComparison.InvariantCultureIgnoreCase)) { var conversionResult = Converter.ConvertStringToDecimal(value); if (!conversionResult.Item1) { throw new ArgumentException(conversionResult.Item2, nameof(fieldsAndValuesToSet)); } var legacy = record.Income; record.Income = conversionResult.Item3; var validationResult = this.recordValidator.ValidateParameters(record); if (!validationResult.Item1) { record.Income = legacy; throw new ArgumentException(validationResult.Item2, nameof(fieldsAndValuesToSet)); } continue; } if (key.Equals(Configurator.GetConstantString("ParameterHeight"), StringComparison.InvariantCultureIgnoreCase)) { var conversionResult = Converter.ConvertStringToShort(value); if (!conversionResult.Item1) { throw new ArgumentException(conversionResult.Item2, nameof(fieldsAndValuesToSet)); } var legacy = record.Height; record.Height = conversionResult.Item3; var validationResult = this.recordValidator.ValidateParameters(record); if (!validationResult.Item1) { record.Height = legacy; throw new ArgumentException(validationResult.Item2, nameof(fieldsAndValuesToSet)); } continue; } throw new ArgumentException(Configurator.GetConstantString("KeyNotExist"), nameof(fieldsAndValuesToSet)); } }
/// <summary> /// Defragments file. /// </summary> /// <returns>Amount of purged records.</returns> /// <exception cref="InvalidOperationException">Thrown always, because can't purge in memory service.</exception> public int Purge() { throw new InvalidOperationException(Configurator.GetConstantString("PurgeInMemory")); }
/// <summary> /// Writes a record into current stream. /// </summary> /// <param name="record">Record to write.</param> /// <exception cref="ArgumentNullException">Thrown when given record is null.</exception> public void Write(FileCabinetRecord record) { if (record is null) { throw new ArgumentNullException(nameof(record), Configurator.GetConstantString("NullRecord")); } string writing = $"{record.Id},{record.FirstName},{record.PatronymicLetter},{record.LastName},{record.DateOfBirth.ToString(Configurator.GetConstantString("DateFormatMD"), CultureInfo.InvariantCulture)},{record.Height},{record.Income}"; this.writer.WriteLine(writing); }