From 514c8c4ca8950de2912421403f1aadd9516a42e1 Mon Sep 17 00:00:00 2001 From: marcins78 Date: Wed, 9 Jan 2013 16:42:37 +0000 Subject: [PATCH] Added PlayerStatsRequestHandler. --- .../handler/PlayerStatsRequestHandler.java | 75 +++++++++++++++++++ .../async/handler/RootUriRequestHandler.java | 4 + 2 files changed, 79 insertions(+) create mode 100644 gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/PlayerStatsRequestHandler.java diff --git a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/PlayerStatsRequestHandler.java b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/PlayerStatsRequestHandler.java new file mode 100644 index 000000000..e8c30f6ce --- /dev/null +++ b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/PlayerStatsRequestHandler.java @@ -0,0 +1,75 @@ +package com.gempukku.lotro.async.handler; + +import com.gempukku.lotro.async.ResponseWriter; +import com.gempukku.lotro.db.PlayerStatistic; +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.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import java.lang.reflect.Type; +import java.text.DecimalFormat; +import java.util.List; +import java.util.Map; + +public class PlayerStatsRequestHandler extends LotroServerRequestHandler implements UriRequestHandler { + private GameHistoryService _gameHistoryService; + + public PlayerStatsRequestHandler(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"); + Player resourceOwner = getResourceOwnerSafely(request, participantId); + + List casualStatistics = _gameHistoryService.getCasualPlayerStatistics(resourceOwner); + List competitiveStatistics = _gameHistoryService.getCompetitivePlayerStatistics(resourceOwner); + + DecimalFormat percFormat = new DecimalFormat("#0.0%"); + + DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); + DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder(); + Document doc = documentBuilder.newDocument(); + Element stats = doc.createElement("playerStats"); + + Element casual = doc.createElement("casual"); + appendStatistics(casualStatistics, percFormat, doc, casual); + stats.appendChild(casual); + + Element competitive = doc.createElement("competitive"); + appendStatistics(competitiveStatistics, percFormat, doc, competitive); + stats.appendChild(competitive); + + doc.appendChild(stats); + + responseWriter.writeResponse(doc); + } else { + responseWriter.writeError(404); + } + } + + private void appendStatistics(List statistics, DecimalFormat percFormat, Document doc, Element type) { + for (PlayerStatistic casualStatistic : statistics) { + Element entry = doc.createElement("entry"); + entry.setAttribute("deckName", casualStatistic.getDeckName()); + entry.setAttribute("format", casualStatistic.getFormatName()); + entry.setAttribute("wins", String.valueOf(casualStatistic.getWins())); + entry.setAttribute("losses", String.valueOf(casualStatistic.getLosses())); + entry.setAttribute("perc", percFormat.format(1f * casualStatistic.getWins() / (casualStatistic.getLosses() + casualStatistic.getWins()))); + type.appendChild(entry); + } + } + +} 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 42564046d..3a6a6d4ba 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 @@ -27,6 +27,7 @@ public class RootUriRequestHandler implements UriRequestHandler { private ReplayRequestHandler _replayRequestHandler; private GameHistoryRequestHandler _gameHistoryRequestHandler; private ServerStatsRequestHandler _serverStatsRequestHandler; + private PlayerStatsRequestHandler _playerStatsRequestHandler; public RootUriRequestHandler(Map context) { _hallRequestHandler = new HallRequestHandler(context); @@ -44,6 +45,7 @@ public class RootUriRequestHandler implements UriRequestHandler { _replayRequestHandler = new ReplayRequestHandler(context); _gameHistoryRequestHandler = new GameHistoryRequestHandler(context); _serverStatsRequestHandler = new ServerStatsRequestHandler(context); + _playerStatsRequestHandler = new PlayerStatsRequestHandler(context); } @Override @@ -66,6 +68,8 @@ public class RootUriRequestHandler implements UriRequestHandler { _gameHistoryRequestHandler.handleRequest(uri.substring(_serverContextPath.length()+11), request, context, responseWriter, e); } else if (uri.startsWith(_serverContextPath+"stats")) { _serverStatsRequestHandler.handleRequest(uri.substring(_serverContextPath.length()+5), request, context, responseWriter, e); + } else if (uri.startsWith(_serverContextPath+"playerStats")) { + _playerStatsRequestHandler.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")) {