Improving the list of leagues to allow for further planning.

This commit is contained in:
marcins78@gmail.com
2012-04-19 14:31:47 +00:00
parent a71bb4bcdd
commit 1714007569
3 changed files with 199 additions and 113 deletions

View File

@@ -48,15 +48,13 @@ public class LeagueResource extends AbstractResource {
}
@GET
public Document getLeagueInformation(
public Document getNonExpiresLeagues(
@QueryParam("participantId") String participantId,
@Context HttpServletRequest request,
@Context HttpServletResponse response) throws ParserConfigurationException {
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
Player resourceOwner = getResourceOwnerSafely(request, participantId);
Document doc = documentBuilder.newDocument();
Element leagues = doc.createElement("leagues");
@@ -67,43 +65,12 @@ public class LeagueResource extends AbstractResource {
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("format", _formatLibrary.getFormat(serie.getFormat()).getName());
serieElem.setAttribute("collection", serie.getCollectionType().getFullName());
serieElem.setAttribute("limited", String.valueOf(serie.isLimited()));
final List<LeagueStanding> standings = _leagueService.getLeagueSerieStandings(league, serie);
for (LeagueStanding standing : standings) {
Element standingElem = doc.createElement("standing");
setStandingAttributes(standing, standingElem);
serieElem.appendChild(standingElem);
}
leagueElem.appendChild(serieElem);
}
List<LeagueStanding> leagueStandings = _leagueService.getLeagueStandings(league);
for (LeagueStanding standing : leagueStandings) {
Element standingElem = doc.createElement("leagueStanding");
setStandingAttributes(standing, standingElem);
leagueElem.appendChild(standingElem);
}
leagues.appendChild(leagueElem);
}
@@ -112,6 +79,81 @@ public class LeagueResource extends AbstractResource {
return doc;
}
@Path("/{leagueType}")
@GET
public Document getLeagueInformation(
@PathParam("leagueType") String leagueType,
@QueryParam("participantId") String participantId,
@Context HttpServletRequest request,
@Context HttpServletResponse response) throws ParserConfigurationException {
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
Player resourceOwner = getResourceOwnerSafely(request, participantId);
Document doc = documentBuilder.newDocument();
League league = getLeagueByType(leagueType);
if (league == null)
sendError(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("format", _formatLibrary.getFormat(serie.getFormat()).getName());
serieElem.setAttribute("collection", serie.getCollectionType().getFullName());
serieElem.setAttribute("limited", String.valueOf(serie.isLimited()));
final List<LeagueStanding> standings = _leagueService.getLeagueSerieStandings(league, serie);
for (LeagueStanding standing : standings) {
Element standingElem = doc.createElement("standing");
setStandingAttributes(standing, standingElem);
serieElem.appendChild(standingElem);
}
leagueElem.appendChild(serieElem);
}
List<LeagueStanding> leagueStandings = _leagueService.getLeagueStandings(league);
for (LeagueStanding standing : leagueStandings) {
Element standingElem = doc.createElement("leagueStanding");
setStandingAttributes(standing, standingElem);
leagueElem.appendChild(standingElem);
}
doc.appendChild(leagueElem);
return doc;
}
public League getLeagueByType(String type) {
for (League league : _leagueService.getActiveLeagues()) {
if (league.getType().equals(type))
return league;
}
return null;
}
private void setStandingAttributes(LeagueStanding standing, Element standingElem) {
standingElem.setAttribute("player", standing.getPlayerName());
standingElem.setAttribute("standing", String.valueOf(standing.getStanding()));

View File

@@ -81,6 +81,19 @@ var GempLotrCommunication = Class.extend({
});
},
getLeague: function(type, callback, errorMap) {
$.ajax({
type: "GET",
url: this.url + "/league/" + type,
cache: false,
data: {
participanId: getUrlParam("participantId") },
success: this.deliveryCheck(callback),
error: this.errorCheck(errorMap),
dataType: "xml"
});
},
joinLeague: function(code, callback, errorMap) {
$.ajax({
type: "POST",

View File

@@ -31,6 +31,103 @@ var LeagueResultsUI = Class.extend({
return date.substring(0, 4) + "-" + date.substring(4, 6) + "-" + date.substring(6, 8);
},
loadedLeague: function(xml) {
var that = this;
log(xml);
var root = xml.documentElement;
if (root.tagName == 'league') {
var league = root;
var leagueName = league.getAttribute("name");
var leagueType = league.getAttribute("type");
var cost = parseInt(league.getAttribute("cost"));
var start = league.getAttribute("start");
var end = league.getAttribute("end");
var member = league.getAttribute("member");
var joinable = league.getAttribute("joinable");
var leagueText = leagueName;
$("#leagueExtraInfo").append("<div class='leagueName'>" + leagueText + "</div>");
var costStr = formatPrice(cost);
$("#leagueExtraInfo").append("<div class='leagueCost'><b>Cost:</b> " + costStr + "</div>");
if (member == "true")
$("#leagueExtraInfo").append("<div class='leagueMembership'>You are already a member of this league.</div>");
else if (joinable == "true") {
var joinBut = $("<button>Join league</button>").button();
var joinFunc = (function(leagueCode, costString) {
return function() {
that.displayBuyAction("Do you want to join the league by paying " + costString + "?",
function() {
that.communication.joinLeague(leagueCode, function() {
that.loadResults();
}, {
"409": function() {
alert("You don't have enough funds to join this league.");
}
});
});
};
})(leagueType, costStr);
joinBut.click(joinFunc);
var joinDiv = $("<div class='leagueMembership'>You're not a member of this league. </div>");
joinDiv.append(joinBut);
$("#leagueExtraInfo").append(joinDiv);
}
var tabDiv = $("<div width='100%'></div>");
var tabNavigation = $("<ul></ul>");
tabDiv.append(tabNavigation);
// Overall tab
var tabContent = $("<div id='league" + i + "overall'></div>");
var standings = league.getElementsByTagName("leagueStanding");
if (standings.length > 0)
tabContent.append(this.createStandingsTable(standings));
tabDiv.append(tabContent);
tabNavigation.append("<li><a href='#league" + i + "overall'>Overall results</a></li>");
var series = league.getElementsByTagName("serie");
for (var j = 0; j < series.length; j++) {
var tabContent = $("<div id='league" + i + "serie" + j + "'></div>");
var serie = series[j];
var serieName = serie.getAttribute("type");
var serieStart = serie.getAttribute("start");
var serieEnd = serie.getAttribute("end");
var maxMatches = serie.getAttribute("maxMatches");
var format = serie.getAttribute("format");
var collection = serie.getAttribute("collection");
var limited = serie.getAttribute("limited");
var serieText = serieName + " - " + this.getDateString(serieStart) + " to " + this.getDateString(serieEnd);
$("#leagueExtraInfo").append("<div class='serieName'>" + serieText + "</div>");
$("#leagueExtraInfo").append("<div><b>Format:</b> " + ((limited == "true") ? "Limited" : "Constructed") + " " + format + "</div>");
$("#leagueExtraInfo").append("<div><b>Collection:</b> " + collection + "</div>");
tabContent.append("<div>Maximum ranked matches in serie: " + maxMatches + "</div>");
var standings = serie.getElementsByTagName("standing");
if (standings.length > 0)
tabContent.append(this.createStandingsTable(standings));
tabDiv.append(tabContent);
tabNavigation.append("<li><a href='#league" + i + "serie" + j + "'>Serie " + (j + 1) + "</a></li>");
}
tabDiv.tabs();
$("#leagueExtraInfo").append(tabDiv);
}
},
loadedLeagueResults: function(xml) {
var that = this;
log(xml);
@@ -43,94 +140,28 @@ var LeagueResultsUI = Class.extend({
var league = leagues[i];
var leagueName = league.getAttribute("name");
var leagueType = league.getAttribute("type");
var cost = parseInt(league.getAttribute("cost"));
var start = league.getAttribute("start");
var end = league.getAttribute("end");
var member = league.getAttribute("member");
var joinable = league.getAttribute("joinable");
var leagueText = leagueName;
$("#leagueResults").append("<div class='leagueName'>" + leagueText + "</div>");
var costStr = formatPrice(cost);
$("#leagueResults").append("<div class='leagueCost'><b>Cost:</b> " + costStr + "</div>");
$("#leagueResults").append("<div class='leagueName'>" + leagueName + "</div>");
var duration = this.getDateString(start) + " to " + this.getDateString(end);
$("#leagueResults").append("<div class='leagueDuration'><b>Duration (GMT+0):</b> " + duration + "</div>");
if (member == "true")
$("#leagueResults").append("<div class='leagueMembership'>You are already a member of this league.</div>");
else if (joinable == "true") {
var joinBut = $("<button>Join league</button>").button();
var joinFunc = (function(leagueCode, costString) {
return function() {
that.displayBuyAction("Do you want to join the league by paying " + costString + "?",
function() {
that.communication.joinLeague(leagueCode, function() {
that.loadResults();
}, {
"409": function() {
alert("You don't have enough funds to join this league.");
}
var detailsBut = $("<button>See details</button>").button();
detailsBut.click(
(function(type) {
return function() {
that.communication.getLeague(type,
function(xml) {
that.loadedLeague(xml);
});
});
};
})(leagueType, costStr);
joinBut.click(joinFunc);
var joinDiv = $("<div class='leagueMembership'>You're not a member of this league. </div>");
joinDiv.append(joinBut);
$("#leagueResults").append(joinDiv);
}
var tabDiv = $("<div width='100%'></div>");
var tabNavigation = $("<ul></ul>");
tabDiv.append(tabNavigation);
// Overall tab
var tabContent = $("<div id='league" + i + "overall'></div>");
var standings = league.getElementsByTagName("leagueStanding");
if (standings.length > 0)
tabContent.append(this.createStandingsTable(standings));
tabDiv.append(tabContent);
tabNavigation.append("<li><a href='#league" + i + "overall'>Overall results</a></li>");
var series = league.getElementsByTagName("serie");
for (var j = 0; j < series.length; j++) {
var tabContent = $("<div id='league" + i + "serie" + j + "'></div>");
var serie = series[j];
var serieName = serie.getAttribute("type");
var serieStart = serie.getAttribute("start");
var serieEnd = serie.getAttribute("end");
var maxMatches = serie.getAttribute("maxMatches");
var format = serie.getAttribute("format");
var collection = serie.getAttribute("collection");
var limited = serie.getAttribute("limited");
var serieText = serieName + " - " + this.getDateString(serieStart) + " to " + this.getDateString(serieEnd);
$("#leagueResults").append("<div class='serieName'>" + serieText + "</div>");
$("#leagueResults").append("<div><b>Format:</b> " + ((limited == "true") ? "Limited" : "Constructed") + " " + format + "</div>");
$("#leagueResults").append("<div><b>Collection:</b> " + collection + "</div>");
tabContent.append("<div>Maximum ranked matches in serie: " + maxMatches + "</div>");
var standings = serie.getElementsByTagName("standing");
if (standings.length > 0)
tabContent.append(this.createStandingsTable(standings));
tabDiv.append(tabContent);
tabNavigation.append("<li><a href='#league" + i + "serie" + j + "'>Serie " + (j + 1) + "</a></li>");
}
tabDiv.tabs();
$("#leagueResults").append(tabDiv);
};
})(leagueType));
$("#leagueResults").append(detailsBut);
}
$("#leagueResults").append("<div id='leagueExtraInfo'></div>");
}
},