/// <summary> /// Looks up an existing saga data of the given type with a property of the specified name and the specified value /// </summary> public async Task <ISagaData> Find(Type sagaDataType, string propertyName, object propertyValue) { lock (_lock) { var valueFromMessage = (propertyValue ?? "").ToString(); foreach (var data in _data.Values) { if (data.GetType() != sagaDataType) { continue; } var sagaValue = Reflect.Value(data, propertyName); var valueFromSaga = (sagaValue ?? "").ToString(); if (valueFromMessage.Equals(valueFromSaga)) { var clone = Clone(data); Correlated?.Invoke(clone); return(clone); } } CouldNotCorrelate?.Invoke(); return(null); } }
/// <summary> /// Looks up an existing saga data of the given type with a property of the specified name and the specified value /// </summary> public async Task <ISagaData> Find(Type sagaDataType, string propertyName, object propertyValue) { lock (_lock) { var valueFromMessage = (propertyValue ?? "").ToString(); foreach (var data in _data.Values) { if (data.GetType() != sagaDataType) { continue; } var sagaValue = Reflect.Value(data, propertyName); var valueFromSaga = (sagaValue ?? "").ToString(); if (valueFromMessage.Equals(valueFromSaga)) { var id = data.Id; if (_sagaDatasToCauseConflict.ContainsKey(id)) { if (!_previousDatas.TryGetValue(id, out var previousSagaData)) { throw new ArgumentException($"Sorry, but weirdly the saga data ID {id} could not be found in the storage for previous saga data versions"); } var cloneOfPreviousSagaData = Clone(previousSagaData); _sagaDatasToCauseConflict.TryRemove(id, out _); Correlated?.Invoke(cloneOfPreviousSagaData); return(cloneOfPreviousSagaData); } var clone = Clone(data); Correlated?.Invoke(clone); return(clone); } } CouldNotCorrelate?.Invoke(); return(null); } }
private void parse_correlatedFeatures() { string filePath = Path.GetDirectoryName(System.AppDomain.CurrentDomain.BaseDirectory); filePath += "\\Correlated.txt"; string[] lines = System.IO.File.ReadAllLines(filePath); List <string> first = new List <string>(); List <string> second = new List <string>(); foreach (string line in lines) { string[] vars = line.Split(' '); Correlated.Add(vars[0], vars[1]); first.Add(vars[0]); second.Add(vars[1]); } filePath = Path.GetDirectoryName(System.AppDomain.CurrentDomain.BaseDirectory); filePath += "\\Equation.txt"; string[] lines2 = System.IO.File.ReadAllLines(filePath); if (!Switched) { int idx = 0; foreach (string line in lines2) { string[] vars = line.Split(','); if (vars[0] != "-nan(ind)") { float a = float.Parse(vars[0], CultureInfo.InvariantCulture.NumberFormat); float b = float.Parse(vars[1], CultureInfo.InvariantCulture.NumberFormat); Tuple <string, string> current = new Tuple <string, string>(first[idx], second[idx]); lin_reg_eq[current] = new Tuple <float, float>(a, b); } idx++; } } }
protected override void InternalAggregate(Correlated <TCorrelated> input) { base.InternalAggregate(input); this.CorrelationKeys.UnionWith(input.CorrelationKeys); }
protected override TCorrelated GetInValue(Correlated <TCorrelated> input) => input.Row;