From 5e5211e07d87117daa84c20c6f7cea4be5d0b005 Mon Sep 17 00:00:00 2001 From: "marcins78@gmail.com" Date: Tue, 3 Jul 2012 20:45:30 +0000 Subject: [PATCH] Fixing initial issues with tournaments. --- .../gempukku/lotro/db/DbTournamentDAO.java | 118 ++++++++++++++++++ .../com/gempukku/lotro/hall/HallServer.java | 11 +- .../SingleEliminationRecurringQueue.java | 2 +- .../lotro/tournament/TournamentDAO.java | 2 +- .../lotro/tournament/TournamentInfo.java | 32 ++--- .../lotro/tournament/TournamentService.java | 6 +- .../lotro/server/provider/DaoProvider.java | 17 +++ .../src/main/webapp/js/gemp-007/hallUi.js | 104 +++++++-------- 8 files changed, 207 insertions(+), 85 deletions(-) create mode 100644 gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/db/DbTournamentDAO.java diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/db/DbTournamentDAO.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/db/DbTournamentDAO.java new file mode 100644 index 000000000..5cfc5b401 --- /dev/null +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/db/DbTournamentDAO.java @@ -0,0 +1,118 @@ +package com.gempukku.lotro.db; + +import com.gempukku.lotro.tournament.TournamentDAO; +import com.gempukku.lotro.tournament.TournamentInfo; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +public class DbTournamentDAO implements TournamentDAO { + private DbAccess _dbAccess; + + public DbTournamentDAO(DbAccess dbAccess) { + _dbAccess = dbAccess; + } + + @Override + public void addTournament(String tournamentId, String className, String parameters, Date start) { + try { + Connection conn = _dbAccess.getDataSource().getConnection(); + try { + PreparedStatement statement = conn.prepareStatement("insert into tournament (tournament_id, class, parameters, start) values (?, ?, ?, ?)"); + try { + statement.setString(1, tournamentId); + statement.setString(2, className); + statement.setString(3, parameters); + statement.setLong(4, start.getTime()); + statement.execute(); + } finally { + statement.close(); + } + } finally { + conn.close(); + } + } catch (SQLException exp) { + throw new RuntimeException(exp); + } + } + + @Override + public TournamentInfo getTournamentById(String tournamentId) { + try { + Connection connection = _dbAccess.getDataSource().getConnection(); + try { + PreparedStatement statement = connection.prepareStatement("select class, parameters, start from tournament where tournament_id=?"); + try { + statement.setString(1, tournamentId); + ResultSet rs = statement.executeQuery(); + try { + if (rs.next()) + return new TournamentInfo(tournamentId, rs.getString(1), rs.getString(2), new Date(rs.getLong(3))); + else + return null; + } finally { + rs.close(); + } + } finally { + statement.close(); + } + } finally { + connection.close(); + } + } catch (SQLException exp) { + throw new RuntimeException(exp); + } + } + + @Override + public List getUnfinishedTournaments() { + try { + Connection connection = _dbAccess.getDataSource().getConnection(); + try { + PreparedStatement statement = connection.prepareStatement("select tournament_id, class, parameters, start from tournament where finished=false"); + try { + ResultSet rs = statement.executeQuery(); + try { + List result = new ArrayList(); + while (rs.next()) + result.add(new TournamentInfo(rs.getString(1), rs.getString(2), rs.getString(3), new Date(rs.getLong(4)))); + return result; + } finally { + rs.close(); + } + } finally { + statement.close(); + } + } finally { + connection.close(); + } + } catch (SQLException exp) { + throw new RuntimeException(exp); + } + } + + @Override + public void markTournamentFinished(String tournamentId) { + try { + Connection conn = _dbAccess.getDataSource().getConnection(); + try { + PreparedStatement statement = conn.prepareStatement("update tournament set finished=true where tournament_id=?"); + try { + statement.setString(1, tournamentId); + statement.executeUpdate(); + } finally { + statement.close(); + } + } finally { + conn.close(); + } + } catch (SQLException exp) { + throw new RuntimeException(exp); + } + } +} diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/hall/HallServer.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/hall/HallServer.java index c5584d3a2..200d96129 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/hall/HallServer.java +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/hall/HallServer.java @@ -63,7 +63,7 @@ public class HallServer extends AbstractServer { _runningTournaments.addAll(tournamentService.getLiveTournaments()); _tournamentQueues.put("fotr_queue", new SingleEliminationRecurringQueue(0, _formatLibrary.getFormat("fotr_block"), - new CollectionType("default", "All cards"), "fotrQueue-", "Fellowship Block", 4, + new CollectionType("default", "All cards"), "fotrQueue-", "Fellowship Block", 2, tournamentService)); } @@ -246,7 +246,7 @@ public class HallServer extends AbstractServer { _hallDataAccessLock.readLock().lock(); try { _lastVisitedPlayers.put(player, System.currentTimeMillis()); - visitor.playerIsWaiting(isPlayerWaiting(player.getName())); + visitor.playerIsWaiting(isPlayerBusy(player.getName())); // First waiting for (Map.Entry tableInformation : _awaitingTables.entrySet()) { @@ -415,13 +415,6 @@ public class HallServer extends AbstractServer { createGameFromAwaitingTable(tableId, awaitingTable); } - private boolean isPlayerWaiting(String playerId) { - for (AwaitingTable awaitingTable : _awaitingTables.values()) - if (awaitingTable.hasPlayer(playerId)) - return true; - return false; - } - private String getPlayingPlayerGameId(String playerId) { for (Map.Entry runningTable : _runningTables.entrySet()) { String gameId = runningTable.getValue().getGameId(); diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/tournament/SingleEliminationRecurringQueue.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/tournament/SingleEliminationRecurringQueue.java index e9450e768..c7cd3227d 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/tournament/SingleEliminationRecurringQueue.java +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/tournament/SingleEliminationRecurringQueue.java @@ -62,7 +62,7 @@ public class SingleEliminationRecurringQueue implements TournamentQueue { for (Map.Entry playerDeck : _playerDecks.entrySet()) _tournamentService.addPlayer(tournamentId, playerDeck.getKey(), playerDeck.getValue()); - Tournament tournament = _tournamentService.addTournament(_cost, tournamentId, SingleEliminationTournament.class.getName(), parameters, new Date()); + Tournament tournament = _tournamentService.addTournament(tournamentId, SingleEliminationTournament.class.getName(), parameters, new Date()); tournamentQueueCallback.createTournament(tournament); diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/tournament/TournamentDAO.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/tournament/TournamentDAO.java index 47b22e375..b345f97e5 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/tournament/TournamentDAO.java +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/tournament/TournamentDAO.java @@ -4,7 +4,7 @@ import java.util.Date; import java.util.List; public interface TournamentDAO { - public void addTournament(int cost, String tournamentId, String className, String type, Date start); + public void addTournament(String tournamentId, String className, String parameters, Date start); public void markTournamentFinished(String tournamentId); diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/tournament/TournamentInfo.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/tournament/TournamentInfo.java index 42c383141..45a3c9b46 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/tournament/TournamentInfo.java +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/tournament/TournamentInfo.java @@ -3,37 +3,31 @@ package com.gempukku.lotro.tournament; import java.util.Date; public class TournamentInfo { - private int cost; - private String tournamentId; - private String tournamentClass; - private String parameters; - private Date start; + private String _tournamentId; + private String _tournamentClass; + private String _parameters; + private Date _start; - public TournamentInfo(int cost, String tournamentId, String tournamentClass, String parameters, Date start) { - this.cost = cost; - this.tournamentId = tournamentId; - this.tournamentClass = tournamentClass; - this.parameters = parameters; - this.start = start; - } - - public int getCost() { - return cost; + public TournamentInfo(String tournamentId, String tournamentClass, String parameters, Date start) { + this._tournamentId = tournamentId; + this._tournamentClass = tournamentClass; + this._parameters = parameters; + this._start = start; } public String getTournamentId() { - return tournamentId; + return _tournamentId; } public String getTournamentClass() { - return tournamentClass; + return _tournamentClass; } public String getParameters() { - return parameters; + return _parameters; } public Date getStart() { - return start; + return _start; } } diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/tournament/TournamentService.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/tournament/TournamentService.java index b5f8ffb82..42a5a8db6 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/tournament/TournamentService.java +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/tournament/TournamentService.java @@ -54,9 +54,9 @@ public class TournamentService { return _tournamentMatchDao.getMatches(tournamentId, round); } - public Tournament addTournament(int cost, String tournamentId, String tournamentClass, String parameters, Date start) { - _tournamentDao.addTournament(cost, tournamentId, tournamentClass, parameters, start); - return createTournamentAndStoreInCache(tournamentId, new TournamentInfo(cost, tournamentId, tournamentClass, parameters, start)); + public Tournament addTournament(String tournamentId, String tournamentClass, String parameters, Date start) { + _tournamentDao.addTournament(tournamentId, tournamentClass, parameters, start); + return createTournamentAndStoreInCache(tournamentId, new TournamentInfo(tournamentId, tournamentClass, parameters, start)); } public void markTournamentFinished(String tournamentId) { diff --git a/gemp-lotr/gemp-lotr-web-server/src/main/java/com/gempukku/lotro/server/provider/DaoProvider.java b/gemp-lotr/gemp-lotr-web-server/src/main/java/com/gempukku/lotro/server/provider/DaoProvider.java index 8c39955c8..4964848ba 100644 --- a/gemp-lotr/gemp-lotr-web-server/src/main/java/com/gempukku/lotro/server/provider/DaoProvider.java +++ b/gemp-lotr/gemp-lotr-web-server/src/main/java/com/gempukku/lotro/server/provider/DaoProvider.java @@ -3,6 +3,7 @@ package com.gempukku.lotro.server.provider; import com.gempukku.lotro.collection.CollectionSerializer; import com.gempukku.lotro.db.*; import com.gempukku.lotro.game.LotroCardBlueprintLibrary; +import com.gempukku.lotro.tournament.TournamentDAO; import com.gempukku.lotro.tournament.TournamentMatchDAO; import com.gempukku.lotro.tournament.TournamentPlayerDAO; import com.sun.jersey.core.spi.component.ComponentContext; @@ -26,6 +27,7 @@ public class DaoProvider implements InjectableProvider { private Injectable _leagueMatchDAOInjectable; private Injectable _leagueParticipationDAOInjectable; + private Injectable _tournamentDAOInjectable; private Injectable _tournamentPlayerDAOInjectable; private Injectable _tournamentMatchDAOInjectable; @@ -59,6 +61,8 @@ public class DaoProvider implements InjectableProvider { return getLeagueParticipationDaoSafely(); else if (type.equals(MerchantDAO.class)) return getMerchantDaoSafely(); + else if (type.equals(TournamentDAO.class)) + return getTournamentDaoSafely(); else if (type.equals(TournamentPlayerDAO.class)) return getTournamentPlayerDaoSafely(); else if (type.equals(TournamentMatchDAO.class)) @@ -92,6 +96,19 @@ public class DaoProvider implements InjectableProvider { return _leagueMatchDAOInjectable; } + private synchronized Injectable getTournamentDaoSafely() { + if (_tournamentDAOInjectable == null) { + final DbTournamentDAO tournamentDAO = new DbTournamentDAO(_dbAccess); + _tournamentDAOInjectable = new Injectable() { + @Override + public TournamentDAO getValue() { + return tournamentDAO; + } + }; + } + return _tournamentDAOInjectable; + } + private synchronized Injectable getTournamentPlayerDaoSafely() { if (_tournamentPlayerDAOInjectable == null) { final DbTournamentPlayerDAO tournamentPlayerDAO = new DbTournamentPlayerDAO(_dbAccess); diff --git a/gemp-lotr/gemp-lotr-web/src/main/webapp/js/gemp-007/hallUi.js b/gemp-lotr/gemp-lotr-web/src/main/webapp/js/gemp-007/hallUi.js index dc8df6597..55630d28d 100644 --- a/gemp-lotr/gemp-lotr-web/src/main/webapp/js/gemp-007/hallUi.js +++ b/gemp-lotr/gemp-lotr-web/src/main/webapp/js/gemp-007/hallUi.js @@ -49,15 +49,15 @@ var GempLotrHallUI = Class.extend({ var editDeck = $(""); editDeck.button().click( - function () { - location.href = 'deckBuild.html'; - }); + function () { + location.href = 'deckBuild.html'; + }); var merchant = $(""); merchant.button().click( - function () { - location.href = 'merchant.html'; - }); + function () { + location.href = 'merchant.html'; + }); this.buttonsDiv.append(editDeck); this.buttonsDiv.append(" | "); @@ -74,39 +74,41 @@ var GempLotrHallUI = Class.extend({ this.createTableButton = $(""); $(this.createTableButton).button().click( - function () { - that.supportedFormatsSelect.hide(); - that.decksSelect.hide(); - that.createTableButton.hide(); - var format = that.supportedFormatsSelect.val(); - var deck = that.decksSelect.val(); - if (deck != null) - that.comm.createTable(format, deck, function (xml) { - that.processResponse(xml); - }); - }); + function () { + that.supportedFormatsSelect.hide(); + that.decksSelect.hide(); + that.createTableButton.hide(); + var format = that.supportedFormatsSelect.val(); + var deck = that.decksSelect.val(); + if (deck != null) + that.comm.createTable(format, deck, function (xml) { + that.processResponse(xml); + }); + }); this.createTableButton.hide(); this.decksSelect = $(""); this.decksSelect.hide(); - var showQueuesCheck = $(""); + var showQueuesCheck = $(""); this.buttonsDiv.append(this.supportedFormatsSelect); this.buttonsDiv.append(this.decksSelect); this.buttonsDiv.append(this.createTableButton); - this.buttonsDiv.append(showQueuesCheck); this.leaveTableButton = $(""); $(this.leaveTableButton).button().click( - function () { - that.leaveTableButton.hide(); - that.comm.leaveTable(); - }); + function () { + that.leaveTableButton.hide(); + that.comm.leaveTable(); + }); this.leaveTableButton.hide(); this.buttonsDiv.append(this.leaveTableButton); + this.buttonsDiv.append(" | "); + this.buttonsDiv.append(showQueuesCheck); + this.div.append(this.buttonsDiv); this.updateHall(); @@ -182,9 +184,9 @@ var GempLotrHallUI = Class.extend({ var tournamentQueue = tournamentQueues[i]; var id = tournamentQueue.getAttribute("id"); var tournamentName = tournamentQueue.getAttribute("tournament"); - var players = parseInt(table.getAttribute("players")); - var formatName = table.getAttribute("format"); - var joined = table.getAttribute("joined"); + var players = parseInt(tournamentQueue.getAttribute("players")); + var formatName = tournamentQueue.getAttribute("format"); + var joined = tournamentQueue.getAttribute("joined"); if (players > 0 || $("#showEmptyTableQueuesCheck").prop("checked")) this.appendTournamentQueue(tablesTable, id, formatName, tournamentName, players, joined); } @@ -257,15 +259,14 @@ var GempLotrHallUI = Class.extend({ row.append("" + formatName + ""); row.append("" + tournamentName + ""); row.append("" + "Accepting players" + ""); - row.append("" + players + ""); + row.append("" + "Players: " + players + ""); var actionsField = $(""); - if (players.length < 2) { - var that = this; + var that = this; - if (!joined) { - var but = $(""); - $(but).button().click( + if (joined != "true") { + var but = $(""); + $(but).button().click( function (event) { var deck = that.decksSelect.val(); if (deck != null) @@ -273,10 +274,10 @@ var GempLotrHallUI = Class.extend({ that.processResponse(xml); }); }); - actionsField.append(but); - } else { - var but = $(""); - $(but).button().click( + actionsField.append(but); + } else { + var but = $(""); + $(but).button().click( function (event) { var deck = that.decksSelect.val(); if (deck != null) @@ -284,8 +285,7 @@ var GempLotrHallUI = Class.extend({ that.processResponse(xml); }); }); - actionsField.append(but); - } + actionsField.append(but); } row.append(actionsField); @@ -319,13 +319,13 @@ var GempLotrHallUI = Class.extend({ if (!waiting) { var but = $(""); $(but).button().click( - function (event) { - var deck = that.decksSelect.val(); - if (deck != null) - that.comm.joinTable(id, deck, function (xml) { - that.processResponse(xml); - }); - }); + function (event) { + var deck = that.decksSelect.val(); + if (deck != null) + that.comm.joinTable(id, deck, function (xml) { + that.processResponse(xml); + }); + }); actionsField.append(but); } } @@ -333,13 +333,13 @@ var GempLotrHallUI = Class.extend({ if (status == "Playing" || status == "Preparation") { var but = $(""); $(but).button().click( - function (event) { - var participantId = getUrlParam("participantId"); - var participantIdAppend = ""; - if (participantId != null) - participantIdAppend = "&participantId=" + participantId; - location.href = "/gemp-lotr/game.html?gameId=" + gameId + participantIdAppend; - }); + function (event) { + var participantId = getUrlParam("participantId"); + var participantIdAppend = ""; + if (participantId != null) + participantIdAppend = "&participantId=" + participantId; + location.href = "/gemp-lotr/game.html?gameId=" + gameId + participantIdAppend; + }); actionsField.append(but); }