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; } } }