From a5efeac059d5b5ea05d5a8083f569d4d4b533866 Mon Sep 17 00:00:00 2001 From: marcins78 Date: Wed, 9 Jan 2013 16:36:36 +0000 Subject: [PATCH] Added GameHistoryRequestHandler. --- .../handler/GameHistoryRequestHandler.java | 88 +++++++++++++++++++ .../async/handler/RootUriRequestHandler.java | 4 + .../gempukku/lotro/server/ServerResource.java | 2 +- 3 files changed, 93 insertions(+), 1 deletion(-) create mode 100644 gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/GameHistoryRequestHandler.java diff --git a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/GameHistoryRequestHandler.java b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/GameHistoryRequestHandler.java new file mode 100644 index 000000000..a99b9a94d --- /dev/null +++ b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/GameHistoryRequestHandler.java @@ -0,0 +1,88 @@ +package com.gempukku.lotro.async.handler; + +import com.gempukku.lotro.async.ResponseWriter; +import com.gempukku.lotro.db.vo.GameHistoryEntry; +import com.gempukku.lotro.game.GameHistoryService; +import com.gempukku.lotro.game.Player; +import org.jboss.netty.channel.MessageEvent; +import org.jboss.netty.handler.codec.http.HttpMethod; +import org.jboss.netty.handler.codec.http.HttpRequest; +import org.jboss.netty.handler.codec.http.QueryStringDecoder; +import org.w3c.dom.Document; +import org.w3c.dom.Element; + +import javax.ws.rs.WebApplicationException; +import javax.ws.rs.core.Response; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import java.lang.reflect.Type; +import java.util.List; +import java.util.Map; + +public class GameHistoryRequestHandler extends LotroServerRequestHandler implements UriRequestHandler { + private GameHistoryService _gameHistoryService; + + public GameHistoryRequestHandler(Map context) { + super(context); + + _gameHistoryService = extractObject(context, GameHistoryService.class); + } + + @Override + public void handleRequest(String uri, HttpRequest request, Map context, ResponseWriter responseWriter, MessageEvent e) throws Exception { + if (uri.equals("") && request.getMethod() == HttpMethod.GET) { + QueryStringDecoder queryDecoder = new QueryStringDecoder(request.getUri()); + String participantId = getQueryParameterSafely(queryDecoder, "participantId"); + int start = Integer.parseInt(getQueryParameterSafely(queryDecoder, "start")); + int count = Integer.parseInt(getQueryParameterSafely(queryDecoder, "count")); + + if (start < 0 || count < 1 || count > 100) + throw new WebApplicationException(Response.Status.BAD_REQUEST); + + Player resourceOwner = getResourceOwnerSafely(request, participantId); + + final List playerGameHistory = _gameHistoryService.getGameHistoryForPlayer(resourceOwner, start, count); + int recordCount = _gameHistoryService.getGameHistoryForPlayerCount(resourceOwner); + + DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); + DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder(); + Document doc = documentBuilder.newDocument(); + Element gameHistory = doc.createElement("gameHistory"); + gameHistory.setAttribute("count", String.valueOf(recordCount)); + gameHistory.setAttribute("playerId", resourceOwner.getName()); + + for (GameHistoryEntry gameHistoryEntry : playerGameHistory) { + Element historyEntry = doc.createElement("historyEntry"); + historyEntry.setAttribute("winner", gameHistoryEntry.getWinner()); + historyEntry.setAttribute("loser", gameHistoryEntry.getLoser()); + + historyEntry.setAttribute("winReason", gameHistoryEntry.getWinReason()); + historyEntry.setAttribute("loseReason", gameHistoryEntry.getLoseReason()); + + historyEntry.setAttribute("formatName", gameHistoryEntry.getFormatName()); + String tournament = gameHistoryEntry.getTournament(); + if (tournament != null) + historyEntry.setAttribute("tournament", tournament); + + if (gameHistoryEntry.getWinner().equals(resourceOwner.getName()) && gameHistoryEntry.getWinnerRecording() != null) { + historyEntry.setAttribute("gameRecordingId", gameHistoryEntry.getWinnerRecording()); + historyEntry.setAttribute("deckName", gameHistoryEntry.getWinnerDeckName()); + } else if (gameHistoryEntry.getLoser().equals(resourceOwner.getName()) && gameHistoryEntry.getLoserRecording() != null) { + historyEntry.setAttribute("gameRecordingId", gameHistoryEntry.getLoserRecording()); + historyEntry.setAttribute("deckName", gameHistoryEntry.getLoserDeckName()); + } + + historyEntry.setAttribute("startTime", String.valueOf(gameHistoryEntry.getStartTime().getTime())); + historyEntry.setAttribute("endTime", String.valueOf(gameHistoryEntry.getEndTime().getTime())); + + gameHistory.appendChild(historyEntry); + } + + doc.appendChild(gameHistory); + + responseWriter.writeResponse(doc); + } else { + responseWriter.writeError(404); + } + } +} diff --git a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/RootUriRequestHandler.java b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/RootUriRequestHandler.java index d445c6046..ff8af7246 100644 --- a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/RootUriRequestHandler.java +++ b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/RootUriRequestHandler.java @@ -25,6 +25,7 @@ public class RootUriRequestHandler implements UriRequestHandler { private MerchantRequestHandler _merchantRequestHandler; private RegisterRequestHandler _registerRequestHandler; private ReplayRequestHandler _replayRequestHandler; + private GameHistoryRequestHandler _gameHistoryRequestHandler; public RootUriRequestHandler(Map context) { _hallRequestHandler = new HallRequestHandler(context); @@ -40,6 +41,7 @@ public class RootUriRequestHandler implements UriRequestHandler { _merchantRequestHandler = new MerchantRequestHandler(context); _registerRequestHandler = new RegisterRequestHandler(context); _replayRequestHandler = new ReplayRequestHandler(context); + _gameHistoryRequestHandler = new GameHistoryRequestHandler(context); } @Override @@ -58,6 +60,8 @@ public class RootUriRequestHandler implements UriRequestHandler { _registerRequestHandler.handleRequest(uri.substring(_serverContextPath.length()+8), request, context, responseWriter, e); } else if (uri.startsWith(_serverContextPath+"replay")) { _replayRequestHandler.handleRequest(uri.substring(_serverContextPath.length()+6), request, context, responseWriter, e); + } else if (uri.startsWith(_serverContextPath+"gameHistory")) { + _gameHistoryRequestHandler.handleRequest(uri.substring(_serverContextPath.length()+11), request, context, responseWriter, e); } else if (uri.startsWith(_serverContextPath+"admin")) { _adminRequestHandler.handleRequest(uri.substring(_serverContextPath.length()+5), request, context, responseWriter, e); } else if (uri.startsWith(_serverContextPath + "chat")) { diff --git a/gemp-lotr/gemp-lotr-web-server/src/main/java/com/gempukku/lotro/server/ServerResource.java b/gemp-lotr/gemp-lotr-web-server/src/main/java/com/gempukku/lotro/server/ServerResource.java index c606f9276..15c3217c3 100644 --- a/gemp-lotr/gemp-lotr-web-server/src/main/java/com/gempukku/lotro/server/ServerResource.java +++ b/gemp-lotr/gemp-lotr-web-server/src/main/java/com/gempukku/lotro/server/ServerResource.java @@ -254,7 +254,7 @@ public class ServerResource extends AbstractResource { @Path("/playerStats") @GET @Produces(MediaType.APPLICATION_XML) - public Document getServerStats( + public Document getPlayerStats( @QueryParam("participantId") String participantId, @Context HttpServletRequest request) throws ParserConfigurationException { Player resourceOwner = getResourceOwnerSafely(request, participantId);