From 4e53ff73ea17e7809b6383fc1f832d17e9e2f9cd Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Thu, 17 Apr 2014 16:39:19 +0200 Subject: [PATCH] Improved sorting of tables and matches. --- .../src/main/java/mage/server/RoomImpl.java | 4 +-- .../java/mage/server/game/GamesRoomImpl.java | 36 ++++++++++++++++--- Mage/src/mage/game/Table.java | 16 +++++++++ 3 files changed, 50 insertions(+), 6 deletions(-) diff --git a/Mage.Server/src/main/java/mage/server/RoomImpl.java b/Mage.Server/src/main/java/mage/server/RoomImpl.java index aca939e722e..62b4f420820 100644 --- a/Mage.Server/src/main/java/mage/server/RoomImpl.java +++ b/Mage.Server/src/main/java/mage/server/RoomImpl.java @@ -36,8 +36,8 @@ import java.util.UUID; */ public abstract class RoomImpl implements Room { - private UUID chatId; - private UUID roomId; + private final UUID chatId; + private final UUID roomId; public RoomImpl() { roomId = UUID.randomUUID(); diff --git a/Mage.Server/src/main/java/mage/server/game/GamesRoomImpl.java b/Mage.Server/src/main/java/mage/server/game/GamesRoomImpl.java index e6b9a5078e7..18305d05053 100644 --- a/Mage.Server/src/main/java/mage/server/game/GamesRoomImpl.java +++ b/Mage.Server/src/main/java/mage/server/game/GamesRoomImpl.java @@ -87,8 +87,7 @@ public class GamesRoomImpl extends RoomImpl implements GamesRoom, Serializable { ArrayList tableList = new ArrayList<>(); ArrayList matchList = new ArrayList<>(); List allTables = new ArrayList<>(tables.values()); - Collections.sort(allTables, new TimestampSorter()); - Collections.reverse(allTables); + Collections.sort(allTables, new TableListSorter()); for (Table table: allTables) { if (table.getState() != TableState.FINISHED) { tableList.add(new TableView(table)); @@ -197,10 +196,39 @@ public class GamesRoomImpl extends RoomImpl implements GamesRoom, Serializable { } -class TimestampSorter implements Comparator
{ +/** + * Sorts the tables for table and match view of the client room + * + * @author LevelX2 + */ +class TableListSorter implements Comparator
{ @Override public int compare(Table one, Table two) { - return one.getCreateTime().compareTo(two.getCreateTime()); + // priority 1 - Not started yet + if (one.getState().equals(TableState.STARTING) || one.getState().equals(TableState.WAITING)) { + if (two.getState().equals(TableState.STARTING) || two.getState().equals(TableState.WAITING)) { + return two.getCreateTime().compareTo(one.getCreateTime()); + } else { + return -1; // one has higher priority + } + } + // priority 2 - Not finished yet -> Sorted by time started + if (two.getState().equals(TableState.STARTING) || two.getState().equals(TableState.WAITING)) { + return -1; + } else if (one.getEndTime() == null) { + if (two.getEndTime() == null) { + return two.getStartTime().compareTo(one.getStartTime()); + } else { + return -1; + } + } + // priority 3 - Finished tables -> Sorted by time finished + if (two.getEndTime() == null) { + return 1; + } else { + return two.getEndTime().compareTo(one.getEndTime()); + } + } } diff --git a/Mage/src/mage/game/Table.java b/Mage/src/mage/game/Table.java index 3a05080be83..0b3679a0a47 100644 --- a/Mage/src/mage/game/Table.java +++ b/Mage/src/mage/game/Table.java @@ -255,4 +255,20 @@ public class Table implements Serializable { this.tournamentSubTable = tournamentSubTable; } + public Date getStartTime() { + if (isTournament) { + return tournament.getStartTime(); + } else { + return match.getStartTime(); + } + } + + public Date getEndTime() { + if (isTournament) { + return tournament.getEndTime(); + } else { + return match.getEndTime(); + } + } + }