private void HandleRowStamps(IDictionary <string, object> fields) { //TODO: handle associations correctly on entitymetadataslicer, rowstamps should not be here! var rowstampFields = new Dictionary <string, object>(); foreach (var pair in fields) { if (pair.Key == RowStampUtil.RowstampColumnName || pair.Key.Contains("." + RowStampUtil.RowstampColumnName)) { rowstampFields.Add(pair.Key, RowStampUtil.Convert(pair.Value)); } } foreach (var o in rowstampFields) { fields[o.Key] = o.Value; } }
public static DataMap Populate(ApplicationMetadata applicationMetadata, IEnumerable <KeyValuePair <string, object> > row) { IDictionary <string, object> attributes = new Dictionary <string, object>(StringComparer.OrdinalIgnoreCase); foreach (var pair in row) { object value; if (pair.Key == RowStampUtil.RowstampColumnName || pair.Key.Contains("." + RowStampUtil.RowstampColumnName)) { value = RowStampUtil.Convert(pair.Value); } else { value = Convert.ToString(pair.Value); } attributes[pair.Key] = value; } //true: avoid double rows interation for rowstamp handling return(new DataMap(applicationMetadata.Name, applicationMetadata.IdFieldName, attributes, true)); }
//needed to avoid "Fields" nesting in collectionData public SearchEntityResult GetAsRawDictionary([NotNull] EntityMetadata entityMetadata, [NotNull] SearchRequestDto searchDto, Boolean fetchMaxRowstamp = false) { if (entityMetadata == null) { throw new ArgumentNullException("entityMetadata"); } if (searchDto == null) { throw new ArgumentNullException("searchDto"); } var query = new EntityQueryBuilder().AllRows(entityMetadata, searchDto); var rows = Query(entityMetadata, query, searchDto); var enumerable = rows as dynamic[] ?? rows.ToArray(); Log.DebugFormat("returning {0} rows", enumerable.Count()); long?maxRowstamp = 0; IList <Dictionary <string, object> > list = new List <Dictionary <string, object> >(); foreach (var row in enumerable) { var dict = (IDictionary <string, object>)row; var item = new Dictionary <string, object>(); if (fetchMaxRowstamp) { if (dict.ContainsKey(RowStampUtil.RowstampColumnName)) { var rowstamp = RowStampUtil.Convert(dict[RowStampUtil.RowstampColumnName]); if (rowstamp > maxRowstamp) { maxRowstamp = rowstamp; } } } foreach (var column in dict) { item[FixKey(column.Key, entityMetadata)] = column.Value; } if (entityMetadata.Name == "relatedrecord") { item["hmachash"] = AuthUtils.HmacShaEncode(item["relatedreckey"].ToString()); } else if (entityMetadata.Name == "ticket" || entityMetadata.Name == "imac") { item["hmachash"] = AuthUtils.HmacShaEncode(item["ticketid"].ToString()); } else if (entityMetadata.IdFieldName != null && item.ContainsKey(entityMetadata.IdFieldName)) { //for compositions in general item["hmachash"] = AuthUtils.HmacShaEncode(item[entityMetadata.IdFieldName].ToString()); } list.Add(item); } return(new SearchEntityResult { MaxRowstampReturned = maxRowstamp == 0 ? null : maxRowstamp, ResultList = list, IdFieldName = entityMetadata.IdFieldName }); }