public static void MergeGroups(DashboardItemGroupCollection fromGroups, DashboardMerger dashboardMerger)
        {
            DashboardItemGroupCollection toGroups = dashboardMerger.OriginalDashboard.Groups;
            IList <DashboardItem>        newItems = dashboardMerger.NewItems;

            foreach (DashboardItemGroup group in fromGroups)
            {
                AddGroupCopy(group, dashboardMerger, (groupCopy) => {
                    toGroups.Add(groupCopy);
                    newItems.Add(groupCopy);
                });
            }
        }
        static void AddGroupCopy(DashboardItemGroup originalGroup, DashboardMerger dashboardMerger, Action <DashboardItemGroup> addGroupDelegate)
        {
            DashboardItemGroupCollection toGroups  = dashboardMerger.OriginalDashboard.Groups;
            DashboardItemGroup           groupCopy = CreateGroupCopy(originalGroup);

            if (toGroups.Any(g => g.ComponentName == originalGroup.ComponentName))
            {
                if (ResolveGroupNamesConflict(groupCopy, originalGroup.ComponentName, toGroups, dashboardMerger.GroupNamesMap))
                {
                    addGroupDelegate(groupCopy);
                }
            }
            else
            {
                addGroupDelegate(groupCopy);
            }
        }