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); }
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); }
// // Returns the statistics on the raised reviews // public static ReviewStatistics[] GetReviewStatistics(CommitReview[] reviewList, string workingDirectory, Simple credentials, Logging logger, StatisticGenerated statGenerated) { // Track our updates Object writeLock = new object(); int reviewCount = 0; var properties = new List <ReviewStatistics>(reviewList.Length); // We need to spin through every review and pull out the information about each one logger.Log("Starting to pull out the review stats from generated reviews"); ParallelLoopResult result = Parallel.ForEach(reviewList, new ParallelOptions { MaxDegreeOfParallelism = 16 }, (thisReview, loopState) => { // Get our properties ReviewStatistics reviewProperties = GetPropertiesOfReview(thisReview, workingDirectory, credentials, logger); if (reviewProperties == null) { loopState.Stop(); } // Continue? if (loopState.IsStopped == false) { // Update lock (writeLock) { logger.Log("Updating review properties"); // Update properties.Add(reviewProperties); statGenerated(++reviewCount); } } }); // How did we do? if (result.IsCompleted == false) { logger.Log("The review statistics completed unsuccessfully"); return(null); } // Return our properties logger.Log("Created {0} review stats", properties.Count); return(properties.ToArray()); }
// Constructor for xml file end. public ProductRating(long pid, string generalLocaleString, ReviewStatistics nativeReviewStatistics, ReviewStatistics externalReviewStatistics) { PID = pid; LanguageString = generalLocaleString; NativeRatings = nativeReviewStatistics != null ? new RatingCounts(nativeReviewStatistics.RatingDistribution) : new RatingCounts(); ExternalRatings = externalReviewStatistics != null ? new RatingCounts(externalReviewStatistics.RatingDistribution) : new RatingCounts(); NativeTotalReviewCount = nativeReviewStatistics != null ? nativeReviewStatistics.TotalReviewCount : 0; ExternalTotalReviewCount = externalReviewStatistics != null ? externalReviewStatistics.TotalReviewCount : 0; }
private static IEnumerable <LocaleDistributionItem> GetAggregatedLocaleDistributionItems( ReviewStatistics reviewStatistics) { var distinctGeneralLocaleStrings = reviewStatistics.LocaleDistribution.Distinct(GeneralLocalLocaleDistributionItemComparerObject) .Select(item => GetGeneralLocaleString(item.DisplayLocale)); var result = distinctGeneralLocaleStrings.Select(localeString => reviewStatistics.LocaleDistribution.Where( item => GetGeneralLocaleString(item.DisplayLocale).Equals(localeString, StringComparison.OrdinalIgnoreCase)) .Select( item => new LocaleDistributionItem { DisplayLocale = GetGeneralLocaleString(item.DisplayLocale), ReviewStatistics = item.ReviewStatistics }) .Aggregate((aggregate, next) => aggregate + next)); return(result); }
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); }