public static Dictionary EntityOrdering()

in incubator-tools/entity_sorting_csharp/entity_sorting_csharp.cs [7:62]


    public static Dictionary<string, object> EntityOrdering(Dictionary<string, object> jsonContent)
    {
        if (jsonContent.ContainsKey("entities") && jsonContent["entities"] is List<Dictionary<string, object>> entities)
        {
            // Sorting children
            foreach (var entity in entities)
            {
                if (entity.ContainsKey("properties") && entity["properties"] is List<Dictionary<string, object>> properties)
                {
                    properties.Sort((a, b) =>
                    {
                        var x = GetNormalizedX(a);
                        var y = GetNormalizedX(b);
                        return x.CompareTo(y);
                    });
                    entity["properties"] = properties;
                }
            }

            var entitiesByPage = new List<List<Dictionary<string, object>>>();
            for (int i = 0; i < entities.Count; i++)
            {
                var pageRef = GetPageRef(entities[i]);
                int pageNumber = pageRef.ContainsKey("page") ? Convert.ToInt32(pageRef["page"]) : 0;
                if (pageNumber >= entitiesByPage.Count)
                {
                    for (int j = entitiesByPage.Count; j <= pageNumber; j++)
                    {
                        entitiesByPage.Add(new List<Dictionary<string, object>>());
                    }
                }
                entitiesByPage[pageNumber].Add(entities[i]);
            }

            // Sorting entities
            var entitiesArray = new List<Dictionary<string, object>>();
            foreach (var page in entitiesByPage)
            {
                var sortArray = new List<Dictionary<string, object>>();
                foreach (var item in page)
                {
                    sortArray.Add(new Dictionary<string, object>
                    {
                        { "y", GetNormalizedY(item) },
                        { "entity", item }
                    });
                }

                sortArray = sortArray.OrderBy(item => GetNormalizedY(item["entity"])).ToList();
                entitiesArray.AddRange(sortArray.Select(item => item["entity"] as Dictionary<string, object>));
            }
            jsonContent["entities"] = entitiesArray;
        }

        return jsonContent;
    }