// select id, firstname, lastname where firstname = 'John' and lastname = 'Doe' private void Select(string parameters) { if (string.IsNullOrEmpty(parameters)) { this.printer.Print(this.CabinetService.GetRecords(), FieldsCaseDictionary.Values.ToArray()); return; } char[] separators = { '=', ',', ' ' }; string[] inputs = parameters.Split("where", StringSplitOptions.RemoveEmptyEntries); string[] printedFields = inputs[0].Split(separators, StringSplitOptions.RemoveEmptyEntries); try { CheckUpdateFieldsInput(printedFields); this.CommandHandlersExtensions.ChangeFieldCase(printedFields); if (inputs.Length == 1) { this.printer.Print(this.CabinetService.GetRecords(), printedFields); return; } var conditionFields = inputs[1].Split(separators, StringSplitOptions.RemoveEmptyEntries); (bool founded, IEnumerable <FileCabinetRecord> record) = SearchDataInCache(conditionFields); if (founded) { this.printer.Print(record, printedFields); return; } CheckConditionFieldsInput(conditionFields); string conditionSeparator = CommandHandlersExtensions.FindConditionSeparator(conditionFields); Dictionary <string, string> conditions = this.CommandHandlersExtensions.CreateDictionaryOfFields(conditionFields, conditionSeparator); // finds records that satisfy the condition var records = this.expressionExtensions.FindSuitableRecords( conditions.Values.ToArray(), conditions.Keys.ToArray(), conditionSeparator, typeof(FileCabinetRecord)).ToArray(); this.printer.Print(records, printedFields); PutDataInCache(conditionFields, records); } catch (FileRecordNotFoundException ex) { this.modelWriter.LineWriter.Invoke($"{ex.Value} was not found"); } catch (FormatException ex) { this.modelWriter.LineWriter.Invoke(ex.Message); } catch (ArgumentNullException ex) { this.modelWriter.LineWriter.Invoke(ex.Message); } catch (ArgumentException ex) { this.modelWriter.LineWriter.Invoke(ex.Message); } }
private void Update(string parameters) { if (string.IsNullOrEmpty(parameters)) { this.modelWriter.LineWriter.Invoke("Write information"); return; } char[] separators = { '=', ',', ' ' }; string[] inputs = parameters.Split("where", StringSplitOptions.RemoveEmptyEntries); string[] updatedFields = inputs[0].Split(separators, StringSplitOptions.RemoveEmptyEntries); string[] conditionFields = inputs[1].Split(separators, StringSplitOptions.RemoveEmptyEntries); try { CheckConditionFieldsInput(conditionFields); CheckUpdateFieldsInput(updatedFields); // finds separator (or/and) string conditionSeparator = CommandHandlersExtensions.FindConditionSeparator(conditionFields); Dictionary <string, string> updates = this.CommandHandlersExtensions.CreateDictionaryOfFields(updatedFields, "set"); Dictionary <string, string> conditions = this.CommandHandlersExtensions.CreateDictionaryOfFields(conditionFields, conditionSeparator); List <int> recordsId = new List <int>(); // finds records that satisfy the condition var records = this.expressionExtensions.FindSuitableRecords( conditions.Values.ToArray(), conditions.Keys.ToArray(), conditionSeparator, typeof(FileCabinetRecord)).ToArray(); for (int i = 0; i < records.Length; i++) { FileCabinetRecord record = this.InputValidator.CheckInputFields(updates.Keys.ToArray(), updates.Values.ToArray(), records[i]); int id = records[i].Id; if (updates.ContainsKey("Id")) { string newId = updates["Id"]; CheckUpdateId(id.ToString(Culture), newId); } record.Id = id; this.CabinetService.EditRecord(record); recordsId.Add(id); } this.modelWriter.LineWriter.Invoke(CreateOutputText(recordsId.ToArray())); } catch (FileRecordNotFoundException ex) { this.modelWriter.LineWriter.Invoke($"{ex.Value} was not found"); } catch (FormatException ex) { this.modelWriter.LineWriter.Invoke(ex.Message); } catch (ArgumentNullException ex) { this.modelWriter.LineWriter.Invoke(ex.Message); } catch (ArgumentException ex) { this.modelWriter.LineWriter.Invoke(ex.Message); } }