public IList<TrendRoot> Build(IList<GroupRoot> groupRoots, ComparatorMap comparatorMap,
            int childAreaTypeId, int profileId, IList<IndicatorMetadata> indicatorMetadataList, bool isNearestNeighbour)
        {
            _isParentAreaNearestNeighbour = isNearestNeighbour;

            List<TrendRoot> trendRoots = new List<TrendRoot>();
            ITrendDataReader trendReader = ReaderFactory.GetTrendDataReader();

            var childAreaCodes = GetChildAreaCodes(comparatorMap, childAreaTypeId, profileId);

            if (groupRoots != null)
            {
                var metadataCollection = new IndicatorMetadataCollection(indicatorMetadataList);
                foreach (GroupRoot root in groupRoots)
                {
                    Grouping grouping = root.Grouping.FirstOrDefault();

                    if (grouping != null)
                    {
                        IndicatorMetadata indicatorMetadata = metadataCollection.GetIndicatorMetadataById(root.IndicatorId);
                        GroupRootTrendBuilderBase builder = GroupRootTrendBuilderBase.New(grouping, indicatorMetadata);
                        TrendRoot trendRoot = builder.BuildTrendRoot(comparatorMap, root, trendReader, childAreaCodes);
                        trendRoots.Add(trendRoot);
                    }
                }
            }

            return trendRoots;
        }
        private void AssignRecentTrends()
        {
            if (GroupData.Areas != null)
            {
                var trendCalculator = new TrendMarkerCalculator();
                var trendReader = ReaderFactory.GetTrendDataReader();
                var trendMarkersProvider = new TrendMarkersProvider(trendReader, trendCalculator);

                var areas = GroupData.Areas.ToList();
                AddParentAreas(areas);

                var metadataCollection = new IndicatorMetadataCollection(GroupData.IndicatorMetadata);
                foreach (var groupRoot in GroupData.GroupRoots)
                {
                    var grouping = groupRoot.Grouping.FirstOrDefault();

                    var indicatorMetaData = metadataCollection.GetIndicatorMetadataById(groupRoot.IndicatorId);

                    var recentTrends = indicatorMetaData == null
                        ? new Dictionary<string, TrendMarkerResult>()
                        : trendMarkersProvider.GetTrendResults(areas, indicatorMetaData, grouping);

                    groupRoot.RecentTrends = recentTrends;
                }
            }
        }