package com.faforever.client.events; import com.faforever.client.api.FafApiAccessor; import com.faforever.client.api.PlayerEvent; import com.faforever.client.chat.PlayerInfoBean; import com.faforever.client.player.PlayerService; import javax.annotation.Resource; import java.util.Collections; import java.util.Map; import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletionStage; import java.util.concurrent.ThreadPoolExecutor; import static java.util.function.Function.identity; import static java.util.stream.Collectors.toMap; public class EventServiceImpl implements EventService { @Resource FafApiAccessor fafApiAccessor; @Resource PlayerService playerService; @Resource ThreadPoolExecutor threadPoolExecutor; @Override public CompletionStage<Map<String, PlayerEvent>> getPlayerEvents(String username) { PlayerInfoBean playerForUsername = playerService.getPlayerForUsername(username); if (playerForUsername == null) { return CompletableFuture.completedFuture(Collections.emptyMap()); } int playerId = playerForUsername.getId(); return CompletableFuture.supplyAsync(() -> fafApiAccessor.getPlayerEvents(playerId).stream() .collect(toMap(PlayerEvent::getEventId, identity())), threadPoolExecutor); } }