Fix drawn players
This commit is contained in:
@@ -69,23 +69,26 @@ public class Tournament extends AbstractEntity {
|
|||||||
.collect(Collectors.toCollection(ArrayList::new));
|
.collect(Collectors.toCollection(ArrayList::new));
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean hasPlayersDrawnOutMaxOnce() {
|
public List<Player> getDrawnOutPlayers() {
|
||||||
var drawnOutPlayers = new HashSet<Player>();
|
var drawnOutPlayers = new ArrayList<Player>();
|
||||||
for (var event : events) {
|
for (var event : events) {
|
||||||
for (var group : event.getGroups()) {
|
for (var group : event.getGroups()) {
|
||||||
for (var round : group.getRounds()) {
|
for (var round : group.getRounds()) {
|
||||||
var drawnOut = round.getDrawnOut();
|
var drawnOut = round.getDrawnOut();
|
||||||
if (drawnOut != null) {
|
if (drawnOut != null) {
|
||||||
if (!drawnOutPlayers.add(drawnOut.getPlayer1())) {
|
drawnOutPlayers.add(drawnOut.getPlayer1());
|
||||||
return false;
|
if (drawnOut.getPlayer2() != null) {
|
||||||
}
|
drawnOutPlayers.add(drawnOut.getPlayer2());
|
||||||
if (drawnOut.getPlayer2() != null && !drawnOutPlayers.add(drawnOut.getPlayer2())) {
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return drawnOutPlayers;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean hasPlayersDrawnOutMaxOnce() {
|
||||||
|
var drawnOutPlayers = this.getDrawnOutPlayers();
|
||||||
|
return drawnOutPlayers.size() == new HashSet<>(drawnOutPlayers).size();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -61,15 +61,16 @@ public class TournamentPlayService {
|
|||||||
round.setStatus(Status.NOT_STARTED);
|
round.setStatus(Status.NOT_STARTED);
|
||||||
|
|
||||||
if (remainingTeams.size() % 2 == 1) {
|
if (remainingTeams.size() % 2 == 1) {
|
||||||
var random = new Random();
|
var drawnOutPlayers = tournament.getDrawnOutPlayers();
|
||||||
var drawnOutPlayers = getDrawnOutPlayers(tournament);
|
var tryPosition = remainingTeams.size() - 1;
|
||||||
do {
|
do {
|
||||||
var randomTeam = remainingTeams.get(random.nextInt(remainingTeams.size()));
|
var tryDrawOutTeam = remainingTeams.get(tryPosition);
|
||||||
if (!drawnOutPlayers.contains(randomTeam.getPlayer1()) && (randomTeam.getPlayer2() == null || !drawnOutPlayers.contains(randomTeam.getPlayer2()))) {
|
if (!drawnOutPlayers.contains(tryDrawOutTeam.getPlayer1()) && (tryDrawOutTeam.getPlayer2() == null || !drawnOutPlayers.contains(tryDrawOutTeam.getPlayer2()))) {
|
||||||
remainingTeams.remove(randomTeam);
|
remainingTeams.remove(tryDrawOutTeam);
|
||||||
round.setDrawnOut(randomTeam);
|
round.setDrawnOut(tryDrawOutTeam);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
tryPosition--;
|
||||||
} while(true);
|
} while(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -92,47 +93,6 @@ public class TournamentPlayService {
|
|||||||
return tournament;
|
return tournament;
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<Player> getDrawnOutPlayers(Tournament tournament) {
|
|
||||||
var players = new ArrayList<Player>();
|
|
||||||
|
|
||||||
for (var event : tournament.getEvents()) {
|
|
||||||
for (var group : event.getGroups()) {
|
|
||||||
var playersInGroup = group.getTeams().stream()
|
|
||||||
.map(this::getPlayersInTeam)
|
|
||||||
.flatMap(List::stream)
|
|
||||||
.toList();
|
|
||||||
|
|
||||||
for (var player : playersInGroup) {
|
|
||||||
for (var round : group.getRounds()) {
|
|
||||||
var foundInRound = false;
|
|
||||||
for (var match : round.getMatches()) {
|
|
||||||
if (playerIsInMatch(match, player)) {
|
|
||||||
foundInRound = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!foundInRound) {
|
|
||||||
players.add(player);
|
|
||||||
log.info(player.getFullName() + " is al uitgeloot in het toernooi.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return players;
|
|
||||||
}
|
|
||||||
|
|
||||||
private List<Player> getPlayersInTeam(Team team) {
|
|
||||||
return team.getPlayer2() == null ? List.of(team.getPlayer1()) : List.of(team.getPlayer1(), team.getPlayer2());
|
|
||||||
}
|
|
||||||
|
|
||||||
private boolean playerIsInTeam(Team team, Player player) {
|
|
||||||
return Objects.equals(team.getPlayer1(), player) || Objects.equals(team.getPlayer2(), player);
|
|
||||||
}
|
|
||||||
|
|
||||||
private boolean playerIsInMatch(Match match, Player player) {
|
|
||||||
return playerIsInTeam(match.getTeam1(), player) || playerIsInTeam(match.getTeam2(), player);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void printRound(Round round, List<StandingsEntry> standings) {
|
private void printRound(Round round, List<StandingsEntry> standings) {
|
||||||
for (var match: round.getMatches()) {
|
for (var match: round.getMatches()) {
|
||||||
log.info("%s - %s".formatted(
|
log.info("%s - %s".formatted(
|
||||||
|
|||||||
Reference in New Issue
Block a user