/// <summary> /// Creates a new comparison item and add it to the CopmparisonRepository /// </summary> /// <param name="id">The comparison unit Id</param> /// <param name="comparsionSide">The side of the first string to compare</param> /// <param name="str">The string to compare</param> public bool LoadString(string id, ComparisonSide comparsionSide, string str, out string message) { //check the string validity: if (!IsValidString(str, out message)) { message = "String is not valid"; return(false); } lock (LockObj) { if (ComparisonRepository.ContainsKey(id)) { //places the string in the correct side of the unit var comparisonUnit = ComparisonRepository[id]; AssignString(comparisonUnit, comparsionSide, str); return(true); } else { //creates a new comparison unit in the repository CreateNewComparisonUnit(id, comparsionSide, str); return(true); } } }
/// <summary> /// Creates a new comparison item and add it to the CopmparisonRepository /// </summary> /// <param name="id">The comparison unit Id</param> /// <param name="comparsionSide">The side of the first string to compare</param> /// <param name="str">The string to compare</param> private void CreateNewComparisonUnit(string id, ComparisonSide comparsionSide, string str) { lock (LockObj)//for thread saftey { var comparisonUnit = new ComparisonUnit(_stringCoparerService); //Adds the string to the proper side AssignString(comparisonUnit, comparsionSide, str); ComparisonRepository.Add(id, comparisonUnit); } }
private void AssignString(ComparisonUnit comparisonUnit, ComparisonSide comparsionSide, string str) { switch (comparsionSide) { case ComparisonSide.Right: comparisonUnit.Right = str; break; case ComparisonSide.Left: comparisonUnit.Left = str; break; } }
public Task SetContent(string id, string content, ComparisonSide side) { if (string.IsNullOrWhiteSpace(id)) { throw new ArgumentException("Value can't be null or empty string", nameof(id)); } if (content?.Length > MaxLength) { throw new NotSupportedException("Content is to large"); } using (var client = _clientManager.GetClient()) { client.Set($"{id}:{side.ToString()}", content); } return(Task.CompletedTask); }
public Task SetContent(string id, string content, ComparisonSide side) { if (string.IsNullOrWhiteSpace(id)) { throw new ArgumentException("Value can't be null or empty string", nameof(id)); } if (content?.Length > MaxLength) { throw new NotSupportedException("Content is to large"); } var comparisonContent = new ComparisonContent { Id = id }; Set(comparisonContent, content, side); _store.AddOrUpdate(id, comparisonContent, (key, val) => Set(val, content, side)); return(Task.CompletedTask); }
private static ComparisonContent Set(ComparisonContent comparisonContent, string content, ComparisonSide side) { if (side == ComparisonSide.Left) { comparisonContent.Left = content; } if (side == ComparisonSide.Right) { comparisonContent.Right = content; } return(comparisonContent); }
private async Task <IActionResult> SetComparisonContent(string id, string content, ComparisonSide side) { if (content == null) { return(BadRequest()); } IDisposable loggingScope = null; if (content.Length > _contentRepository.MaxLength) { return(StatusCode(413)); } try { loggingScope = _logger.BeginScope("ComparisonID: {0}; Side: {2}", id, side); _logger.LogInformation("Setting comparison content"); byte[] buffer; try { buffer = Convert.FromBase64String(content); } catch (FormatException ex) { _logger.LogError(ex, "Failed to parse content. Content: {0}", content); return(BadRequest("Invalid content format. Expected base64 encoded string.")); } var decodedContent = Encoding.UTF8.GetString(buffer); await _contentRepository.SetContent(id, decodedContent, side).ConfigureAwait(false); _logger.LogInformation("Content set"); return(Ok()); } finally { loggingScope?.Dispose(); } }