From 48ce5e2e0506d7f799e15f034ba1036bf40ea010 Mon Sep 17 00:00:00 2001 From: fmittag Date: Wed, 6 Feb 2013 14:45:04 +0100 Subject: [PATCH] created overall leaderboard and added totalPoints column to both leaderboards --- .../WEB-INF/jsp/leaderboard.jsp | 44 +++--- .../WEB-INF/jsp/overallLeaderboard.jsp | 128 ++++++++++++++++++ .../WEB-INF/web.xml | 12 +- .../css/tablesorter.css | 4 +- .../gateway/ess40/ESS40JspForwardServlet.java | 54 ++++++++ .../gateway/SimpleJspForwardServlet.java | 41 ------ .../server/impl/RacingEventServiceImpl.java | 1 + 7 files changed, 220 insertions(+), 64 deletions(-) create mode 100644 java/com.sap.sailing.server.gateway.ess40/WEB-INF/jsp/overallLeaderboard.jsp create mode 100644 java/com.sap.sailing.server.gateway.ess40/src/com/sap/sailing/server/gateway/ess40/ESS40JspForwardServlet.java delete mode 100644 java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/SimpleJspForwardServlet.java diff --git a/java/com.sap.sailing.server.gateway.ess40/WEB-INF/jsp/leaderboard.jsp b/java/com.sap.sailing.server.gateway.ess40/WEB-INF/jsp/leaderboard.jsp index 51757a40133..b9664285122 100644 --- a/java/com.sap.sailing.server.gateway.ess40/WEB-INF/jsp/leaderboard.jsp +++ b/java/com.sap.sailing.server.gateway.ess40/WEB-INF/jsp/leaderboard.jsp @@ -32,36 +32,50 @@ List competitorsFromBestToWorst = leaderboard.getCompetitorsFromBestToWorst(timePoint); Map> rankedCompetitorsPerColumn = new HashMap>(); Iterable raceColumns = leaderboard.getRaceColumns(); - + + NumberFormat scoreFormat = NumberFormat.getNumberInstance(); + int digitPresicion = 1; + scoreFormat.setMinimumFractionDigits(digitPresicion); + scoreFormat.setMaximumFractionDigits(digitPresicion); + String imgFlagPath = "/gwt/images/flags/"; %>

Leaderboard: <%= leaderboard.getName() %>

- + <% for (RaceColumn raceColumn : raceColumns) { %> <% } %> + - <% for (Competitor competitor : competitorsFromBestToWorst) { - int totalRank = competitorsFromBestToWorst.indexOf(competitor) + 1; - Nationality nationality = competitor.getTeam().getNationality(); + <% + for (Competitor competitor : competitorsFromBestToWorst) { + int totalRank = competitorsFromBestToWorst.indexOf(competitor) + 1; + Nationality nationality = competitor.getTeam().getNationality(); + Double totalPoints = leaderboard.getTotalPoints(competitor, timePoint); + if(leaderboard.hasCarriedPoints(competitor)) { + Double carriedPoints = leaderboard.getCarriedPoints(competitor); + if(carriedPoints != null) { + totalPoints = totalPoints != null ? totalPoints += carriedPoints : carriedPoints; + } + } %> - + <% for (RaceColumn raceColumn : raceColumns) { List rankedCompetitorsForColumn = rankedCompetitorsPerColumn.get(raceColumn); if (rankedCompetitorsForColumn == null) { rankedCompetitorsForColumn = leaderboard.getCompetitorsFromBestToWorst(raceColumn, timePoint); rankedCompetitorsPerColumn.put(raceColumn, rankedCompetitorsForColumn); } - Double netPoints = leaderboard.getNetPoints(competitor, raceColumn, timePoint); - Double totalPoints = leaderboard.getTotalPoints(competitor, raceColumn, timePoint); + Double netRacePoints = leaderboard.getNetPoints(competitor, raceColumn, timePoint); + Double totalRacePoints = leaderboard.getTotalPoints(competitor, raceColumn, timePoint); MaxPointsReason maxPointsReason = leaderboard.getMaxPointsReason(competitor, raceColumn, timePoint); int rank = rankedCompetitorsForColumn.indexOf(competitor)+1; TrackedRace trackedRace = raceColumn.getTrackedRace(competitor); @@ -71,24 +85,19 @@ boolean isDiscarded = leaderboard.isDiscarded(competitor, raceColumn, timePoint); boolean isCorrected = leaderboard.getScoreCorrection().isScoreCorrected(competitor, raceColumn); - NumberFormat scoreFormat = NumberFormat.getNumberInstance(); - int digitPresicion = 1; - scoreFormat.setMinimumFractionDigits(digitPresicion); - scoreFormat.setMaximumFractionDigits(digitPresicion); - String racePointsStyleClasses = ""; String racePoints = " "; if (maxPointsReason == null || maxPointsReason == MaxPointsReason.NONE) { if (!isDiscarded) { racePointsStyleClasses = "leaderboard-points-TotalPoints-NotDiscarded"; - if(totalPoints != null) { - racePoints = scoreFormat.format(totalPoints); + if(totalRacePoints != null) { + racePoints = scoreFormat.format(totalRacePoints); } } else { racePointsStyleClasses = "leaderboard-points-TotalPoints-Discarded"; - if(netPoints != null) { - racePoints = scoreFormat.format(netPoints); + if(netRacePoints != null) { + racePoints = scoreFormat.format(netRacePoints); } } } else { @@ -102,6 +111,7 @@ %> <% } %> + <% } %> diff --git a/java/com.sap.sailing.server.gateway.ess40/WEB-INF/jsp/overallLeaderboard.jsp b/java/com.sap.sailing.server.gateway.ess40/WEB-INF/jsp/overallLeaderboard.jsp new file mode 100644 index 00000000000..94f8f78167e --- /dev/null +++ b/java/com.sap.sailing.server.gateway.ess40/WEB-INF/jsp/overallLeaderboard.jsp @@ -0,0 +1,128 @@ + +<%@ page import="java.util.*" %> +<%@ page import="java.text.*" %> +<%@ page import="com.sap.sailing.domain.leaderboard.*" %> +<%@ page import="com.sap.sailing.domain.leaderboard.meta.*" %> +<%@ page import="com.sap.sailing.domain.base.*" %> +<%@ page import="com.sap.sailing.domain.base.impl.*" %> +<%@ page import="com.sap.sailing.domain.common.*" %> +<%@ page import="com.sap.sailing.domain.tracking.*" %> +<%@ page pageEncoding="UTF-8" %> + + + + SAP Sailing Analytics Leaderboard + + + + + + + + +<% + TimePoint timePoint = MillisecondsTimePoint.now(); + LeaderboardGroupMetaLeaderboard leaderboard = (LeaderboardGroupMetaLeaderboard) request.getAttribute("leaderboard"); + Boolean showDetails = (Boolean) request.getAttribute("showDetails"); + + // competitors are ordered according to total rank + List competitorsFromBestToWorst = leaderboard.getCompetitorsFromBestToWorst(timePoint); + Map> rankedCompetitorsPerColumn = new HashMap>(); + Iterable raceColumns = leaderboard.getRaceColumns(); + + NumberFormat scoreFormat = NumberFormat.getNumberInstance(); + int digitPresicion = 1; + scoreFormat.setMinimumFractionDigits(digitPresicion); + scoreFormat.setMaximumFractionDigits(digitPresicion); + + String imgFlagPath = "/gwt/images/flags/"; +%> +

Overall Leaderboard: <%= leaderboard.getName() %>

+
RankRank Team<%= raceColumn.getName() %>Points
<%= totalRank %>" />  <%= competitor.getName() %>" />  <%= competitor.getName() %><%= racePoints %><%= totalPoints %>
+ + + + + <% for (RaceColumn raceColumn : raceColumns) { %> + + <% } %> + + + + + <% + for (Competitor competitor : competitorsFromBestToWorst) { + int totalRank = competitorsFromBestToWorst.indexOf(competitor) + 1; + Nationality nationality = competitor.getTeam().getNationality(); + Double totalPoints = leaderboard.getTotalPoints(competitor, timePoint); + if(leaderboard.hasCarriedPoints(competitor)) { + Double carriedPoints = leaderboard.getCarriedPoints(competitor); + if(carriedPoints != null) { + totalPoints = totalPoints != null ? totalPoints += carriedPoints : carriedPoints; + } + } + %> + + + + <% for (RaceColumn raceColumn : raceColumns) { + List rankedCompetitorsForColumn = rankedCompetitorsPerColumn.get(raceColumn); + if (rankedCompetitorsForColumn == null) { + rankedCompetitorsForColumn = leaderboard.getCompetitorsFromBestToWorst(raceColumn, timePoint); + rankedCompetitorsPerColumn.put(raceColumn, rankedCompetitorsForColumn); + } + Double netRacePoints = leaderboard.getNetPoints(competitor, raceColumn, timePoint); + Double totalRacePoints = leaderboard.getTotalPoints(competitor, raceColumn, timePoint); + MaxPointsReason maxPointsReason = leaderboard.getMaxPointsReason(competitor, raceColumn, timePoint); + int rank = rankedCompetitorsForColumn.indexOf(competitor)+1; + TrackedRace trackedRace = raceColumn.getTrackedRace(competitor); + if (trackedRace != null) { + int raceRank = trackedRace.getRank(competitor, timePoint); + } + boolean isDiscarded = leaderboard.isDiscarded(competitor, raceColumn, timePoint); + boolean isCorrected = leaderboard.getScoreCorrection().isScoreCorrected(competitor, raceColumn); + + String racePointsStyleClasses = ""; + + String racePoints = " "; + if (maxPointsReason == null || maxPointsReason == MaxPointsReason.NONE) { + if (!isDiscarded) { + racePointsStyleClasses = "leaderboard-points-TotalPoints-NotDiscarded"; + if(totalRacePoints != null) { + racePoints = scoreFormat.format(totalRacePoints); + } + } else { + racePointsStyleClasses = "leaderboard-points-TotalPoints-Discarded"; + if(netRacePoints != null) { + racePoints = scoreFormat.format(netRacePoints); + } + } + } else { + if (!isDiscarded) { + racePointsStyleClasses = "leaderboard-points-MaxPoints-NotDiscarded"; + } else { + racePointsStyleClasses = "leaderboard-points-MaxPoints-Discarded"; + } + racePoints = maxPointsReason.name(); + } + %> + + <% } %> + + + <% } %> + +
RankTeam<% + String raceColumnName = raceColumn.getName(); + String prefixToCut = "Extreme 40 "; + if(raceColumnName.startsWith(prefixToCut)) { + raceColumnName = raceColumnName.substring(prefixToCut.length(), raceColumnName.length()); + } + %><%= raceColumnName %>Points
<%= totalRank %>" />  <%= competitor.getName() %><%= racePoints %><%= totalPoints %>
+ + diff --git a/java/com.sap.sailing.server.gateway.ess40/WEB-INF/web.xml b/java/com.sap.sailing.server.gateway.ess40/WEB-INF/web.xml index eeec159fff0..b190c414302 100644 --- a/java/com.sap.sailing.server.gateway.ess40/WEB-INF/web.xml +++ b/java/com.sap.sailing.server.gateway.ess40/WEB-INF/web.xml @@ -6,7 +6,7 @@ http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"> - jspServet + jspServlet org.apache.jasper.servlet.JspServlet logVerbosityLevel @@ -23,13 +23,17 @@ 0 + + jspServlet + *.jsp + - SimpleJspForwardServlet - com.sap.sailing.server.gateway.SimpleJspForwardServlet + ESS40JspForwardServlet + com.sap.sailing.server.gateway.ess40.ESS40JspForwardServlet - SimpleJspForwardServlet + ESS40JspForwardServlet /html/* diff --git a/java/com.sap.sailing.server.gateway.ess40/css/tablesorter.css b/java/com.sap.sailing.server.gateway.ess40/css/tablesorter.css index d1daef8cf0d..15589f6c4a0 100644 --- a/java/com.sap.sailing.server.gateway.ess40/css/tablesorter.css +++ b/java/com.sap.sailing.server.gateway.ess40/css/tablesorter.css @@ -4,7 +4,6 @@ table.tablesorter { background-color: #CDCDCD; margin:10px 0pt 15px; font-size: 8pt; - width: 100%; text-align: left; } @@ -23,6 +22,7 @@ table.tablesorter thead tr .header { background-position: center right; cursor: pointer; padding-left: 10px; + padding-right: 20px; } table.tablesorter tbody td { @@ -38,7 +38,7 @@ table.tablesorter tbody td { } table.tablesorter tbody tr:last-child td { - height: 30px; + height: 29px; } table.tablesorter tbody tr.odd td { diff --git a/java/com.sap.sailing.server.gateway.ess40/src/com/sap/sailing/server/gateway/ess40/ESS40JspForwardServlet.java b/java/com.sap.sailing.server.gateway.ess40/src/com/sap/sailing/server/gateway/ess40/ESS40JspForwardServlet.java new file mode 100644 index 00000000000..f5d3fe2fd5b --- /dev/null +++ b/java/com.sap.sailing.server.gateway.ess40/src/com/sap/sailing/server/gateway/ess40/ESS40JspForwardServlet.java @@ -0,0 +1,54 @@ +package com.sap.sailing.server.gateway.ess40; + +import java.io.IOException; + +import javax.servlet.RequestDispatcher; +import javax.servlet.ServletContext; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import com.sap.sailing.domain.leaderboard.Leaderboard; +import com.sap.sailing.domain.leaderboard.meta.LeaderboardGroupMetaLeaderboard; +import com.sap.sailing.server.RacingEventService; +import com.sap.sailing.server.gateway.SailingServerHttpServlet; + +public class ESS40JspForwardServlet extends SailingServerHttpServlet { + private static final long serialVersionUID = -1017961881555515288L; + + private static final String PARAM_NAME_LEADERBOARDNAME = "leaderboardName"; + + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + RacingEventService racingEventService = getService(); + String pathInfo = request.getPathInfo(); + String jspPath = "/WEB-INF/jsp"; + String leaderboardNameParam = request.getParameter(PARAM_NAME_LEADERBOARDNAME); + + if (leaderboardNameParam == null) { + response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "You need to specify a leaderboard name using the "+ + PARAM_NAME_LEADERBOARDNAME+" parameter"); + return; + } + + Leaderboard leaderboard = getService().getLeaderboardByName(leaderboardNameParam); + + if(pathInfo.equals("/leaderboard") && racingEventService != null && leaderboard != null) { + String jspFile = null; + if(leaderboard instanceof LeaderboardGroupMetaLeaderboard) { + jspFile = "overallLeaderboard.jsp"; + } else { + jspFile = "leaderboard.jsp"; + } + request.setAttribute("leaderboard", leaderboard); + request.setAttribute("racingEventService", racingEventService); + + ServletContext sc = getServletContext(); + RequestDispatcher requestDispatcher = sc.getRequestDispatcher(jspPath + "/" + jspFile); + requestDispatcher.forward(request, response); + } else { + response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Error during rendering of the leaderboard"); + } + } + +} diff --git a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/SimpleJspForwardServlet.java b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/SimpleJspForwardServlet.java deleted file mode 100644 index 743f2cb7df8..00000000000 --- a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/SimpleJspForwardServlet.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.sap.sailing.server.gateway; - -import java.io.IOException; - -import javax.servlet.RequestDispatcher; -import javax.servlet.ServletContext; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import com.sap.sailing.domain.leaderboard.Leaderboard; -import com.sap.sailing.server.RacingEventService; - -public class SimpleJspForwardServlet extends SailingServerHttpServlet { - private static final long serialVersionUID = -1017961881555515288L; - - private static final String PARAM_NAME_LEADERBOARDNAME = "leaderboardName"; - - @Override - protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - RacingEventService racingEventService = getService(); - if(racingEventService != null) { - String query = request.getPathInfo(); - String jspPath = "/WEB-INF/jsp"; - String jspFile = "error.jsp"; - if(query.equals("/leaderboard")) { - String leaderboardName = request.getParameter(PARAM_NAME_LEADERBOARDNAME); - if (leaderboardName != null) { - Leaderboard leaderboard = getService().getLeaderboardByName(leaderboardName); - request.setAttribute("leaderboard", leaderboard); - jspFile = "leaderboard.jsp"; - } - } - request.setAttribute("racingEventService", racingEventService); - ServletContext sc = getServletContext(); - RequestDispatcher requestDispatcher = sc.getRequestDispatcher(jspPath + "/" + jspFile); - requestDispatcher.forward(request, response); - } - } - -} diff --git a/java/com.sap.sailing.server/src/com/sap/sailing/server/impl/RacingEventServiceImpl.java b/java/com.sap.sailing.server/src/com/sap/sailing/server/impl/RacingEventServiceImpl.java index cdd3e5f290b..94d389b231d 100755 --- a/java/com.sap.sailing.server/src/com/sap/sailing/server/impl/RacingEventServiceImpl.java +++ b/java/com.sap.sailing.server/src/com/sap/sailing/server/impl/RacingEventServiceImpl.java @@ -271,6 +271,7 @@ public class RacingEventServiceImpl implements RacingEventService, RegattaListen private void loadStoredEvents() { for (Event event : domainObjectFactory.loadAllEvents()) { synchronized (eventsById) { + if(event.getId() != null) eventsById.put(event.getId(), event); } }