Ejemplo n.º 1
0
        private IActionResult ValidateDuplicatesDiffs(String tab, SidekaColumnConfig columns, SidekaDiff[] diffs, object[] data)
        {
            var idGetter = GetIdGetter(columns);
            var ids      = new HashSet <string>();

            foreach (var item in data)
            {
                ids.Add(idGetter(item));
            }

            foreach (var diff in diffs)
            {
                foreach (var added in diff.Added)
                {
                    var id = idGetter(added);
                    if (ids.Contains(id))
                    {
                        return(StatusCode((int)HttpStatusCode.BadRequest,
                                          new Dictionary <string, string>()
                        {
                            { "message",
                              string.Format("Duplicates item diff {0} in tab {1}", id, tab) }
                        }));
                    }
                    ids.Add(id);
                }
            }

            return(null);
        }
Ejemplo n.º 2
0
 private static Func <Object, String> GetIdGetter(SidekaColumnConfig config)
 {
     if (config.IsDict)
     {
         return(o => (string)((Dictionary <string, object>)o)["id"]);
     }
     else
     {
         var index = Array.IndexOf(config.Columns, ("id"));
         return(o => (String)((object[])o)[index]);
     }
 }
Ejemplo n.º 3
0
        private IActionResult Validate(SidekaColumnConfig columns, object[] diffTypes, string location, bool validateArrayLength = true)
        {
            var index = 0;

            foreach (var diffType in diffTypes)
            {
                Type t = diffType.GetType();
                bool isDiffTypeDict = t.IsGenericType && t.GetGenericTypeDefinition() == typeof(Dictionary <,>);
                if (columns.IsDict)
                {
                    if (!isDiffTypeDict)
                    {
                        return(StatusCode((int)HttpStatusCode.BadRequest,
                                          new Dictionary <string, string>()
                        {
                            { "message", string.Format("Invalid item, dict expected, at row {0} at {1}", index, location) }
                        }));
                    }
                }
                else
                {
                    if (!t.IsArray)
                    {
                        return(StatusCode((int)HttpStatusCode.BadRequest,
                                          new Dictionary <string, string>()
                        {
                            { "message", string.Format("Invalid item, array expected, at row {0} at {1}", index, location) }
                        }));
                    }
                    else if (columns.Columns.Length != ((object[])diffType).Length && validateArrayLength)
                    {
                        return(StatusCode((int)HttpStatusCode.BadRequest,
                                          new Dictionary <string, string>()
                        {
                            { "message",
                              string.Format("Invalid item, expecting array of length {0} instead of {1}, at row {2} at {3}",
                                            columns.Columns.Length, ((object[])diffType).Length, index, location) }
                        }));
                    }
                }
                index++;
            }
            return(null);
        }
Ejemplo n.º 4
0
        private object[] MergeDiffs(SidekaColumnConfig columns, SidekaDiff[] diffs, object[] dataArray)
        {
            var data     = dataArray.ToList();
            var idGetter = GetIdGetter(columns);

            foreach (var diff in diffs)
            {
                foreach (var added in diff.Added)
                {
                    data.Add(added);
                }

                foreach (var modified in diff.Modified)
                {
                    for (var i = 0; i <= data.Count - 1; i++)
                    {
                        var datumId    = idGetter(data[i]);
                        var modifiedId = idGetter(modified);
                        if (datumId == modifiedId)
                        {
                            data[i] = modified;
                        }
                    }
                }

                foreach (var deleted in diff.Deleted)
                {
                    for (var i = data.Count - 1; i >= 0; i--)
                    {
                        var datumId   = idGetter(data[i]);
                        var deletedId = idGetter(deleted);
                        if (datumId == deletedId)
                        {
                            data.RemoveAt(i);
                        }
                    }
                }
            }

            return(data.ToArray());
        }