/// <summary> /// Validates a record. /// </summary> /// <param name="record">The record to validate.</param> /// <param name="values">The validated record. This dictionary might not contain a valid record. It's only valid if the return list is empty.</param> /// <returns>Returns a list of errors if the record is not valid; otherwise an empty list.</returns> public List <Error> ValidateRecord(Dictionary <string, object> record, out Dictionary <string, string> values) { values = new Dictionary <string, string>(); var errors = new List <Error>(); var seriesKey = new Dictionary <string, string>(); foreach (var dim in KeyFamily.Dimensions) { ValidateComponent(dim, record, values, errors, "Dimension"); // build series key string name = dim.Concept.Id; string value = null; if (values.TryGetValue(name, out value)) { seriesKey.Add(name, value); } } foreach (var attr in KeyFamily.Attributes) { ValidateComponent(attr, record, values, errors, "Attribute"); } if (KeyFamily.TimeDimension != null) { ValidateComponent(KeyFamily.TimeDimension, record, values, errors, "Time dimension"); string name = KeyFamily.TimeDimension.Concept.Id; string value = null; if (values.TryGetValue(name, out value)) { seriesKey.Add(name, value); } } if (KeyFamily.PrimaryMeasure != null) { ValidateComponent(KeyFamily.PrimaryMeasure, record, values, errors, "Primary measure"); } string seriesKeyString = ValuesToString(seriesKey); if (_keys.ContainsKey(seriesKeyString)) { var error = new DuplicateKeyError(seriesKeyString, 0, 0, string.Format("Duplicate key: {0}", seriesKeyString)); errors.Add(error); } else { _keys.Add(seriesKeyString, true); } return(errors); }
/// <summary> /// Validates a record. /// </summary> /// <param name="record">The record to validate.</param> /// <param name="values">The validated record. This dictionary might not contain a valid record. It's only valid if the return list is empty.</param> /// <returns>Returns a list of errors if the record is not valid; otherwise an empty list.</returns> public List<Error> ValidateRecord(Dictionary<string, object> record, out Dictionary<string, string> values) { values = new Dictionary<string, string>(); var errors = new List<Error>(); var seriesKey = new Dictionary<string, string>(); foreach (var dim in KeyFamily.Dimensions) { ValidateComponent(dim, record, values, errors, "Dimension"); // build series key string name = dim.Concept.Id; string value = null; if (values.TryGetValue(name, out value)) { seriesKey.Add(name, value); } } foreach (var attr in KeyFamily.Attributes) { ValidateComponent(attr, record, values, errors, "Attribute"); } if (KeyFamily.TimeDimension != null) { ValidateComponent(KeyFamily.TimeDimension, record, values, errors, "Time dimension"); string name = KeyFamily.TimeDimension.Concept.Id; string value = null; if (values.TryGetValue(name, out value)) { seriesKey.Add(name, value); } } if (KeyFamily.PrimaryMeasure != null) { ValidateComponent(KeyFamily.PrimaryMeasure, record, values, errors, "Primary measure"); } string seriesKeyString = ValuesToString(seriesKey); if (_keys.ContainsKey(seriesKeyString)) { var error = new DuplicateKeyError(seriesKeyString, 0, 0, string.Format("Duplicate key: {0}", seriesKeyString)); errors.Add(error); } else { _keys.Add(seriesKeyString, true); } return errors; }