Finished LeagueRequestHandler.
This commit is contained in:
@@ -0,0 +1,192 @@
|
||||
package com.gempukku.lotro.async.handler;
|
||||
|
||||
import com.gempukku.lotro.DateUtils;
|
||||
import com.gempukku.lotro.async.HttpProcessingException;
|
||||
import com.gempukku.lotro.async.ResponseWriter;
|
||||
import com.gempukku.lotro.competitive.PlayerStanding;
|
||||
import com.gempukku.lotro.db.vo.League;
|
||||
import com.gempukku.lotro.db.vo.LeagueMatchResult;
|
||||
import com.gempukku.lotro.game.Player;
|
||||
import com.gempukku.lotro.game.formats.LotroFormatLibrary;
|
||||
import com.gempukku.lotro.league.LeagueData;
|
||||
import com.gempukku.lotro.league.LeagueSerieData;
|
||||
import com.gempukku.lotro.league.LeagueService;
|
||||
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.jboss.netty.handler.codec.http.multipart.HttpPostRequestDecoder;
|
||||
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.text.DecimalFormat;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public class LeagueRequestHandler extends LotroServerRequestHandler implements UriRequestHandler {
|
||||
private LeagueService _leagueService;
|
||||
private LotroFormatLibrary _formatLibrary;
|
||||
|
||||
public LeagueRequestHandler(Map<Type, Object> context) {
|
||||
super(context);
|
||||
|
||||
_leagueService = extractObject(context, LeagueService.class);
|
||||
_formatLibrary = extractObject(context, LotroFormatLibrary.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleRequest(String uri, HttpRequest request, Map<Type, Object> context, ResponseWriter responseWriter, MessageEvent e) throws Exception {
|
||||
if (uri.equals("") && request.getMethod() == HttpMethod.GET) {
|
||||
getNonExpiredLeagues(request, responseWriter);
|
||||
} else if (uri.startsWith("/") && request.getMethod() == HttpMethod.GET) {
|
||||
getLeagueInformation(request, uri.substring(1), responseWriter);
|
||||
} else if (uri.startsWith("/") && request.getMethod() == HttpMethod.POST) {
|
||||
joinLeague(request, uri.substring(1), responseWriter, e);
|
||||
} else {
|
||||
responseWriter.writeError(404);
|
||||
}
|
||||
}
|
||||
|
||||
private void joinLeague(HttpRequest request, String leagueType, ResponseWriter responseWriter, MessageEvent e) throws Exception {
|
||||
HttpPostRequestDecoder postDecoder = new HttpPostRequestDecoder(request);
|
||||
String participantId = getFormParameterSafely(postDecoder, "participantId");
|
||||
|
||||
Player resourceOwner = getResourceOwnerSafely(request, participantId);
|
||||
|
||||
League league = _leagueService.getLeagueByType(leagueType);
|
||||
if (league == null)
|
||||
throw new HttpProcessingException(404);
|
||||
|
||||
if (!_leagueService.playerJoinsLeague(league, resourceOwner, e.getRemoteAddress().toString()))
|
||||
throw new HttpProcessingException(409);
|
||||
|
||||
responseWriter.writeResponse(null);
|
||||
}
|
||||
|
||||
private void getLeagueInformation(HttpRequest request, String leagueType, ResponseWriter responseWriter) throws Exception {
|
||||
QueryStringDecoder queryDecoder = new QueryStringDecoder(request.getUri());
|
||||
String participantId = getQueryParameterSafely(queryDecoder, "participantId");
|
||||
|
||||
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
|
||||
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
|
||||
|
||||
Player resourceOwner = getResourceOwnerSafely(request, participantId);
|
||||
|
||||
Document doc = documentBuilder.newDocument();
|
||||
|
||||
League league = getLeagueByType(leagueType);
|
||||
|
||||
if (league == null)
|
||||
throw new WebApplicationException(Response.Status.NOT_FOUND);
|
||||
|
||||
final LeagueData leagueData = league.getLeagueData();
|
||||
final List<LeagueSerieData> series = leagueData.getSeries();
|
||||
|
||||
int end = series.get(series.size() - 1).getEnd();
|
||||
|
||||
Element leagueElem = doc.createElement("league");
|
||||
boolean inLeague = _leagueService.isPlayerInLeague(league, resourceOwner);
|
||||
|
||||
leagueElem.setAttribute("member", String.valueOf(inLeague));
|
||||
leagueElem.setAttribute("joinable", String.valueOf(!inLeague && end >= DateUtils.getCurrentDate()));
|
||||
leagueElem.setAttribute("type", league.getType());
|
||||
leagueElem.setAttribute("name", league.getName());
|
||||
leagueElem.setAttribute("cost", String.valueOf(league.getCost()));
|
||||
leagueElem.setAttribute("start", String.valueOf(series.get(0).getStart()));
|
||||
leagueElem.setAttribute("end", String.valueOf(end));
|
||||
|
||||
for (LeagueSerieData serie : series) {
|
||||
Element serieElem = doc.createElement("serie");
|
||||
serieElem.setAttribute("type", serie.getName());
|
||||
serieElem.setAttribute("maxMatches", String.valueOf(serie.getMaxMatches()));
|
||||
serieElem.setAttribute("start", String.valueOf(serie.getStart()));
|
||||
serieElem.setAttribute("end", String.valueOf(serie.getEnd()));
|
||||
serieElem.setAttribute("formatType", serie.getFormat());
|
||||
serieElem.setAttribute("format", _formatLibrary.getFormat(serie.getFormat()).getName());
|
||||
serieElem.setAttribute("collection", serie.getCollectionType().getFullName());
|
||||
serieElem.setAttribute("limited", String.valueOf(serie.isLimited()));
|
||||
|
||||
Element matchesElem = doc.createElement("matches");
|
||||
Collection<LeagueMatchResult> playerMatches = _leagueService.getPlayerMatchesInSerie(league, serie, resourceOwner.getName());
|
||||
for (LeagueMatchResult playerMatch : playerMatches) {
|
||||
Element matchElem = doc.createElement("match");
|
||||
matchElem.setAttribute("winner", playerMatch.getWinner());
|
||||
matchElem.setAttribute("loser", playerMatch.getLoser());
|
||||
matchesElem.appendChild(matchElem);
|
||||
}
|
||||
serieElem.appendChild(matchesElem);
|
||||
|
||||
final List<PlayerStanding> standings = _leagueService.getLeagueSerieStandings(league, serie);
|
||||
for (PlayerStanding standing : standings) {
|
||||
Element standingElem = doc.createElement("standing");
|
||||
setStandingAttributes(standing, standingElem);
|
||||
serieElem.appendChild(standingElem);
|
||||
}
|
||||
|
||||
leagueElem.appendChild(serieElem);
|
||||
}
|
||||
|
||||
List<PlayerStanding> leagueStandings = _leagueService.getLeagueStandings(league);
|
||||
for (PlayerStanding standing : leagueStandings) {
|
||||
Element standingElem = doc.createElement("leagueStanding");
|
||||
setStandingAttributes(standing, standingElem);
|
||||
leagueElem.appendChild(standingElem);
|
||||
}
|
||||
|
||||
doc.appendChild(leagueElem);
|
||||
|
||||
responseWriter.writeResponse(doc);
|
||||
}
|
||||
|
||||
private void getNonExpiredLeagues(HttpRequest request, ResponseWriter responseWriter) throws Exception {
|
||||
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
|
||||
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
|
||||
|
||||
Document doc = documentBuilder.newDocument();
|
||||
Element leagues = doc.createElement("leagues");
|
||||
|
||||
for (League league : _leagueService.getActiveLeagues()) {
|
||||
final LeagueData leagueData = league.getLeagueData();
|
||||
final List<LeagueSerieData> series = leagueData.getSeries();
|
||||
|
||||
int end = series.get(series.size() - 1).getEnd();
|
||||
|
||||
Element leagueElem = doc.createElement("league");
|
||||
|
||||
leagueElem.setAttribute("type", league.getType());
|
||||
leagueElem.setAttribute("name", league.getName());
|
||||
leagueElem.setAttribute("start", String.valueOf(series.get(0).getStart()));
|
||||
leagueElem.setAttribute("end", String.valueOf(end));
|
||||
|
||||
leagues.appendChild(leagueElem);
|
||||
}
|
||||
|
||||
doc.appendChild(leagues);
|
||||
|
||||
responseWriter.writeResponse(doc);
|
||||
}
|
||||
|
||||
public League getLeagueByType(String type) {
|
||||
for (League league : _leagueService.getActiveLeagues()) {
|
||||
if (league.getType().equals(type))
|
||||
return league;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private void setStandingAttributes(PlayerStanding standing, Element standingElem) {
|
||||
standingElem.setAttribute("player", standing.getPlayerName());
|
||||
standingElem.setAttribute("standing", String.valueOf(standing.getStanding()));
|
||||
standingElem.setAttribute("points", String.valueOf(standing.getPoints()));
|
||||
standingElem.setAttribute("gamesPlayed", String.valueOf(standing.getGamesPlayed()));
|
||||
DecimalFormat format = new DecimalFormat("##0.00%");
|
||||
standingElem.setAttribute("opponentWin", format.format(standing.getOpponentWin()));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -20,6 +20,8 @@ public class RootUriRequestHandler implements UriRequestHandler {
|
||||
private ChatRequestHandler _chatRequestHandler;
|
||||
private CollectionRequestHandler _collectionRequestHandler;
|
||||
private DeliveryRequestHandler _deliveryRequestHandler;
|
||||
private GameRequestHandler _gameRequestHandler;
|
||||
private LeagueRequestHandler _leagueRequestHandler;
|
||||
|
||||
public RootUriRequestHandler(Map<Type, Object> context) {
|
||||
_hallRequestHandler = new HallRequestHandler(context);
|
||||
@@ -30,6 +32,8 @@ public class RootUriRequestHandler implements UriRequestHandler {
|
||||
_chatRequestHandler = new ChatRequestHandler(context);
|
||||
_collectionRequestHandler = new CollectionRequestHandler(context);
|
||||
_deliveryRequestHandler = new DeliveryRequestHandler(context);
|
||||
_gameRequestHandler = new GameRequestHandler(context);
|
||||
_leagueRequestHandler = new LeagueRequestHandler(context);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -52,6 +56,10 @@ public class RootUriRequestHandler implements UriRequestHandler {
|
||||
_collectionRequestHandler.handleRequest(uri.substring(_serverContextPath.length()+10), request, context, responseWriter, e);
|
||||
} else if (uri.startsWith(_serverContextPath + "delivery")) {
|
||||
_deliveryRequestHandler.handleRequest(uri.substring(_serverContextPath.length()+8), request, context, responseWriter, e);
|
||||
} else if (uri.startsWith(_serverContextPath + "game")) {
|
||||
_gameRequestHandler.handleRequest(uri.substring(_serverContextPath.length()+4), request, context, responseWriter, e);
|
||||
} else if (uri.startsWith(_serverContextPath + "league")) {
|
||||
_leagueRequestHandler.handleRequest(uri.substring(_serverContextPath.length()+6), request, context, responseWriter, e);
|
||||
} else if (uri.equals(_serverContextPath)) {
|
||||
_statusRequestHandler.handleRequest(uri.substring(_serverContextPath.length()), request, context, responseWriter, e);
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user