Esempio n. 1
0
        internal static int?GetRatingDistributionItemCount(int ratingValue, LocaleDistributionItem item)
        {
            var result =
                item.ReviewStatistics.RatingDistribution.FirstOrDefault(
                    ratingDistributionItem => ratingDistributionItem.RatingValue == ratingValue);

            return(result != null ? (int?)result.Count : null);
        }
Esempio n. 2
0
        private IEnumerable <ProductRating> GetProductRatings(Product product)
        {
            Log.Debug("In GetProductRatings");

            long productId;

            if (!long.TryParse(product.Id, out productId))
            {
                var message = string.Format("Product ID is not in the correct format. Skipping. PID: {0}", product.Id);
                Log.Error(message);
                if (ExecutionLogLoggerMessageLimit == 0 || _executionLogLoggerMessageCount++ <= ExecutionLogLoggerMessageLimit)
                {
                    _executionLogLogger.AddCustomMessage(message);
                }
                else if (ExecutionLogLoggerMessageLimit != 0)
                {
                    Log.ErrorFormat("ExecutionLogLogger message limit of {0} has been exceeded.",
                                    ExecutionLogLoggerMessageLimit);
                }

                return(Enumerable.Empty <ProductRating>());
            }

            var externalReviewStatistics = ComputeExternalReviewStatistics(product.Id, product.NativeReviewStatistics,
                                                                           product.ReviewStatistics);

            var nativeLocaleDistributionItems   = GetAggregatedLocaleDistributionItems(product.NativeReviewStatistics);
            var externalLocaleDistributionItems = GetAggregatedLocaleDistributionItems(externalReviewStatistics);

            var generalLocaleList = GetCombinedLocaleList(GetDisplayLocaleList(nativeLocaleDistributionItems), GetDisplayLocaleList(externalLocaleDistributionItems));

            var result = generalLocaleList.Select(generalLocaleString =>
            {
                LocaleDistributionItem nativeDistributionItem =
                    nativeLocaleDistributionItems.FirstOrDefault(
                        item => item.DisplayLocale.Equals(generalLocaleString, StringComparison.OrdinalIgnoreCase));

                LocaleDistributionItem externalDistributionItem =
                    externalLocaleDistributionItems.FirstOrDefault(
                        item => item.DisplayLocale.Equals(generalLocaleString, StringComparison.OrdinalIgnoreCase));

                var localizedNativeReviewStatistics   = GetReviewStatistics(nativeDistributionItem);
                var localizedExternalReviewStatistics = GetReviewStatistics(externalDistributionItem);

                var resultItem = new ProductRating(productId, generalLocaleString,
                                                   localizedNativeReviewStatistics,
                                                   localizedExternalReviewStatistics);

                return(resultItem);
            });

            Log.Debug("Exiting GetProductRatings");

            return(result);
        }
Esempio n. 3
0
        private static ReviewStatistics GetCopyOfReviewStatistics(LocaleDistributionItem localeDistributionItem)
        {
            var result = new ReviewStatistics();

            result.RatingDistribution = localeDistributionItem.ReviewStatistics.RatingDistribution.Select(
                item => new RatingDistributionItem {
                RatingValue = item.RatingValue, Count = item.Count
            })
                                        .ToList();

            result.TotalReviewCount = localeDistributionItem.ReviewStatistics.TotalReviewCount;

            return(result);
        }
Esempio n. 4
0
        private static ReviewStatistics GetExternalReviewStatistics(string pid, LocaleDistributionItem nativeLocaleDistributionItem, LocaleDistributionItem combinedLocaleDistributionItem)
        {
            var result = new ReviewStatistics {
                RatingDistribution = new List <RatingDistributionItem>(5)
            };

            for (int i = 1; i <= 5; i++)
            {
                var nativeItemCount   = GetRatingDistributionItemCount(i, nativeLocaleDistributionItem);
                var combinedItemCount = GetRatingDistributionItemCount(i, combinedLocaleDistributionItem);

                if (combinedItemCount == null && nativeItemCount == null)
                {
                    continue;
                }

                if (nativeItemCount == null)
                {
                    nativeItemCount = 0;
                }

                if (combinedItemCount == null)
                {
                    combinedItemCount = 0;
                }

                if (combinedItemCount >= nativeItemCount)
                {
                    combinedItemCount = combinedItemCount - nativeItemCount;
                }
                else if (nativeItemCount > 0)
                {
                    combinedItemCount = 0;
                }

                var externalItemCount = combinedItemCount;

                result.RatingDistribution.Add(new RatingDistributionItem
                {
                    RatingValue = i,
                    Count       = externalItemCount.Value
                });
            }

            result.TotalReviewCount = result.RatingDistribution.Sum(rd => rd.Count);

            return(result);
        }
Esempio n. 5
0
        private ReviewStatistics ComputeExternalReviewStatistics(string pid, ReviewStatistics nativeReviewStatistics, ReviewStatistics reviewStatisticsNodeFromBazaarVoiceData)
        {
            var result = new ReviewStatistics();

            var resultLocaleDistributionList = new List <LocaleDistributionItem>();

            result.LocaleDistribution = resultLocaleDistributionList;

            foreach (var nativeLocaleDistributionItem in nativeReviewStatistics.LocaleDistribution ?? Enumerable.Empty <LocaleDistributionItem>())
            {
                var matchFound = false;

                foreach (var combinedLocaleDistributionItem in reviewStatisticsNodeFromBazaarVoiceData.LocaleDistribution ?? Enumerable.Empty <LocaleDistributionItem>())
                {
                    if (nativeLocaleDistributionItem.DisplayLocale.Equals(combinedLocaleDistributionItem.DisplayLocale, StringComparison.Ordinal))
                    {
                        matchFound = true;
                        break;
                    }
                }

                if (matchFound)
                {
                    continue;
                }

                throw new ApplicationException(
                          string.Format(
                              "There is a locale {0} in the native LocaleDistributionItem which doesn't exist in the combined LocaleDistributionItem. PID: {1}",
                              nativeLocaleDistributionItem.DisplayLocale, pid));
            }

            foreach (var combinedLocaleDistributionItem in reviewStatisticsNodeFromBazaarVoiceData.LocaleDistribution ?? Enumerable.Empty <LocaleDistributionItem>())
            {
                ReviewStatistics       resultReviewStatistics;
                LocaleDistributionItem foundNativeLocaleDistributionItem = null;

                foreach (var nativeLocaleDistributionItem in nativeReviewStatistics.LocaleDistribution ?? Enumerable.Empty <LocaleDistributionItem>())
                {
                    if (combinedLocaleDistributionItem.DisplayLocale.Equals(nativeLocaleDistributionItem.DisplayLocale, StringComparison.Ordinal))
                    {
                        foundNativeLocaleDistributionItem = nativeLocaleDistributionItem;
                        break;
                    }
                }

                if (foundNativeLocaleDistributionItem != null)
                {
                    Log.DebugFormat("GetExternalReviewStatistics. PID: {0}", pid);
                    resultReviewStatistics = GetExternalReviewStatistics(pid, foundNativeLocaleDistributionItem, combinedLocaleDistributionItem);
                }
                else
                {
                    resultReviewStatistics = GetCopyOfReviewStatistics(combinedLocaleDistributionItem);
                }

                var resultLocaleDistributionItem = new LocaleDistributionItem
                {
                    DisplayLocale    = combinedLocaleDistributionItem.DisplayLocale,
                    ReviewStatistics = resultReviewStatistics
                };

                resultLocaleDistributionList.Add(resultLocaleDistributionItem);
            }

            return(result);
        }
Esempio n. 6
0
        private static ReviewStatistics GetReviewStatistics(LocaleDistributionItem localeDistributionItem)
        {
            var result = (localeDistributionItem ?? LocaleDistributionItem.Empty).ReviewStatistics;

            return(result);
        }