From 22dbcbf90df3223001c95239b11bd9e4f34a2b94 Mon Sep 17 00:00:00 2001 From: Keir Nellyer Date: Thu, 9 Jun 2016 23:41:17 +0100 Subject: [PATCH] Move util method to sequence CompletableFuture's to new class 'UtilFuture' --- .../mineplex/core/common/util/UtilFuture.java | 24 +++++++++++++++++++ .../mineplex/core/report/ReportManager.java | 13 ++-------- 2 files changed, 26 insertions(+), 11 deletions(-) create mode 100644 Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilFuture.java diff --git a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilFuture.java b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilFuture.java new file mode 100644 index 000000000..10e853922 --- /dev/null +++ b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilFuture.java @@ -0,0 +1,24 @@ +package mineplex.core.common.util; + +import java.util.List; +import java.util.concurrent.CompletableFuture; +import java.util.stream.Collectors; + +public class UtilFuture +{ + /** + * Returns a {@link CompletableFuture} which will complete when supplied futures have completed. + * This is a workaround for {@link CompletableFuture#anyOf(CompletableFuture[])} returning void. + * + * @param futures the futures to wait to complete + * @param the return type of the supplied futures + * @return a future which will complete when all supplied futures have completed + */ + public static CompletableFuture> sequence(List> futures) + { + CompletableFuture futuresCompletedFuture = CompletableFuture.allOf(futures.toArray(new CompletableFuture[futures.size()])); + + return futuresCompletedFuture.thenApply(v -> + futures.stream().map(CompletableFuture::join).collect(Collectors.toList())); + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/report/ReportManager.java b/Plugins/Mineplex.Core/src/mineplex/core/report/ReportManager.java index a4cb1fc4e..f63460baa 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/report/ReportManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/report/ReportManager.java @@ -11,7 +11,6 @@ import java.util.Set; import java.util.UUID; import java.util.concurrent.CompletableFuture; import java.util.logging.Level; -import java.util.stream.Collectors; import com.google.gson.Gson; import com.google.gson.JsonObject; @@ -25,6 +24,7 @@ import mineplex.core.common.jsonchat.JsonMessage; import mineplex.core.common.util.BukkitFuture; import mineplex.core.common.util.C; import mineplex.core.common.util.F; +import mineplex.core.common.util.UtilFuture; import mineplex.core.portal.Portal; import mineplex.core.preferences.PreferencesManager; import mineplex.core.report.command.ReportHandlerNotification; @@ -230,21 +230,12 @@ public class ReportManager public CompletableFuture calculatePriority(Report report) { // todo take into account age of report - return sequence(_reportProfileRepository.getProfiles(report.getReporterIds())).thenApply(reportProfiles -> reportProfiles.stream() + return UtilFuture.sequence(_reportProfileRepository.getProfiles(report.getReporterIds())).thenApply(reportProfiles -> reportProfiles.stream() .mapToInt(profile -> profile.getReputation(report.getCategory())) .map(operand -> operand * 100) .sum()); } - // todo move to utility class - private static CompletableFuture> sequence(List> futures) - { - CompletableFuture futuresCompletedFuture = CompletableFuture.allOf(futures.toArray(new CompletableFuture[futures.size()])); - - return futuresCompletedFuture.thenApply(v -> - futures.stream().map(CompletableFuture::join).collect(Collectors.toList())); - } - public void publishChatSnap(Report report, boolean updateChat) { // todo is this the best way to store Future's?