mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-02 18:33:54 +00:00
Merge remote-tracking branch 'server/master'
This commit is contained in:
commit
5c463139bb
2 files changed
+72
-53
No files matched your search
@@ -61,12 +61,12 @@
|
||||
</servlet-mapping>
|
||||
|
||||
<servlet>
|
||||
<servlet-name>RaceRankingAsRssFeedServlet</servlet-name>
|
||||
<servlet-class>com.sap.sailing.server.gateway.impl.RaceRankingAsRssFeedServlet</servlet-class>
|
||||
<servlet-name>LiveRaceRankingAsRssFeedServlet</servlet-name>
|
||||
<servlet-class>com.sap.sailing.server.gateway.impl.LiveRaceRankingAsRssFeedServlet</servlet-class>
|
||||
</servlet>
|
||||
<servlet-mapping>
|
||||
<servlet-name>RaceRankingAsRssFeedServlet</servlet-name>
|
||||
<url-pattern>/rss/raceranking</url-pattern>
|
||||
<servlet-name>LiveRaceRankingAsRssFeedServlet</servlet-name>
|
||||
<url-pattern>/rss/liveRaceRanking</url-pattern>
|
||||
</servlet-mapping>
|
||||
|
||||
<servlet id="jsp">
|
||||
|
||||
+68
-49
@@ -26,64 +26,88 @@ import com.sun.syndication.feed.synd.SyndFeed;
|
||||
import com.sun.syndication.feed.synd.SyndFeedImpl;
|
||||
import com.sun.syndication.io.SyndFeedOutput;
|
||||
|
||||
public class RaceRankingAsRssFeedServlet extends SailingServerHttpServlet {
|
||||
public class LiveRaceRankingAsRssFeedServlet extends SailingServerHttpServlet {
|
||||
private static final long serialVersionUID = -508373964426868319L;
|
||||
private static final String PARAM_NAME_LEADERBOARDNAME = "leaderboardName";
|
||||
private static final String PARAM_NAME_RACENAME = "raceName";
|
||||
private static final String PARAM_MAX_COMPETITORS = "max";
|
||||
private String charEncoding = "UTF-8";
|
||||
|
||||
private int maxCompetitorsToShow = 1000;
|
||||
|
||||
@Override
|
||||
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
|
||||
// to allow access to the json document directly from a client side javascript
|
||||
// to allow access to the rss feed directly from a client side javascript
|
||||
resp.setHeader("Access-Control-Allow-Origin", "*");
|
||||
resp.setContentType("application/rss+xml");
|
||||
resp.setCharacterEncoding(charEncoding);
|
||||
|
||||
TimePoint timePoint = MillisecondsTimePoint.now();
|
||||
String leaderboardName = req.getParameter(PARAM_NAME_LEADERBOARDNAME);
|
||||
String raceName = req.getParameter(PARAM_NAME_RACENAME);
|
||||
String maxCompetitorsParam = req.getParameter(PARAM_MAX_COMPETITORS);
|
||||
if(maxCompetitorsParam != null) {
|
||||
try {
|
||||
maxCompetitorsToShow = Integer.parseInt(maxCompetitorsParam);
|
||||
} catch (NumberFormatException e) {
|
||||
}
|
||||
}
|
||||
|
||||
if (leaderboardName == null) {
|
||||
resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Need to specify a leaderboard name using the "+
|
||||
PARAM_NAME_LEADERBOARDNAME+" parameter");
|
||||
} else if (raceName == null) {
|
||||
resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Need to specify a race column name using the "+
|
||||
PARAM_NAME_RACENAME+" parameter");
|
||||
} else {
|
||||
Leaderboard leaderboard = getService().getLeaderboardByName(leaderboardName);
|
||||
if (leaderboard == null) {
|
||||
resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Leaderboard "+leaderboardName+" not found");
|
||||
} else {
|
||||
try {
|
||||
RaceColumn raceColumnToShow = null;
|
||||
|
||||
RaceColumn raceColumnToShow = null;
|
||||
TrackedRace liveTrackedRace = null;
|
||||
|
||||
// find a live race in the leaderboard
|
||||
Iterable<RaceColumn> races = leaderboard.getRaceColumns();
|
||||
for (RaceColumn raceInLeaderboard : races) {
|
||||
for (Fleet fleet : raceInLeaderboard.getFleets()) {
|
||||
TrackedRace trackedRace = raceInLeaderboard.getTrackedRace(fleet);
|
||||
if (trackedRace != null && raceInLeaderboard.getName().equals(raceName)) {
|
||||
raceColumnToShow = raceInLeaderboard;
|
||||
break;
|
||||
TrackedRace trackedRaceOfFleet = raceInLeaderboard.getTrackedRace(fleet);
|
||||
if(trackedRaceOfFleet != null && isLive(trackedRaceOfFleet)) {
|
||||
raceColumnToShow = raceInLeaderboard;
|
||||
liveTrackedRace = trackedRaceOfFleet;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(raceColumnToShow != null) {
|
||||
List<Competitor> competitorsFromBestToWorst = leaderboard.getCompetitorsFromBestToWorst(raceColumnToShow, MillisecondsTimePoint.now());
|
||||
String eventName = "STG meets 'Berlin Match Race'";
|
||||
String title = eventName + ": " + leaderboardName;
|
||||
SyndFeed feed = new SyndFeedImpl();
|
||||
String title = leaderboard.getName();
|
||||
feed.setTitle(title);
|
||||
feed.setFeedType("rss_2.0");
|
||||
feed.setLink("http://www.sapsaling.com");
|
||||
feed.setDescription("SAP Sailing Analytics");
|
||||
feed.setPublishedDate(new Date());
|
||||
feed.setEncoding(charEncoding);
|
||||
|
||||
List<SyndEntry> entries = new ArrayList<SyndEntry>();
|
||||
SyndContent description = new SyndContentImpl();
|
||||
SyndEntry entry = new SyndEntryImpl();
|
||||
entry.setLink("http://www.sapsailing.com");
|
||||
description.setType("text/plain");
|
||||
|
||||
if(raceColumnToShow != null && liveTrackedRace != null) {
|
||||
String entryTitle = "Live ranking of race '" + raceColumnToShow.getName() + "'";
|
||||
entry.setTitle(entryTitle);
|
||||
|
||||
|
||||
SyndFeed feed = new SyndFeedImpl();
|
||||
feed.setTitle(title);
|
||||
feed.setFeedType("rss_2.0");
|
||||
feed.setLink("http://www.sapsaling.com");
|
||||
feed.setDescription("SAP Sailing Analytics");
|
||||
feed.setPublishedDate(new Date());
|
||||
feed.setEncoding(charEncoding);
|
||||
|
||||
List<Competitor> competitorsFromBestToWorst = leaderboard.getCompetitorsFromBestToWorst(raceColumnToShow, timePoint);
|
||||
int currentCompetitorCounter = 0;
|
||||
String feedText = "";
|
||||
|
||||
for (Competitor competitor : competitorsFromBestToWorst) {
|
||||
if(currentCompetitorCounter == maxCompetitorsToShow) {
|
||||
break;
|
||||
}
|
||||
currentCompetitorCounter++;
|
||||
String sailID = competitor.getBoat().getSailID();
|
||||
feedText += currentCompetitorCounter + ". " + sailID + "\n";
|
||||
|
||||
// String competitorName = competitor.getName();
|
||||
// final String displayName = leaderboard.getDisplayName(competitor);
|
||||
// String id = competitor.getId().toString();
|
||||
@@ -92,7 +116,6 @@ public class RaceRankingAsRssFeedServlet extends SailingServerHttpServlet {
|
||||
// String countryCode = nationality != null ? nationality.getCountryCode().getTwoLetterISOCode(): null;
|
||||
// String totalRank = "" +competitorsFromBestToWorst.indexOf(competitor) + 1;
|
||||
// String totalPoints = "" + leaderboard.getTotalPoints(competitor, timePoint);
|
||||
//
|
||||
// String raceColumnName = raceColumnToShow.getName();
|
||||
// final Fleet fleetOfCompetitor = raceColumnToShow.getFleetOfCompetitor(competitor);
|
||||
// String fleet = fleetOfCompetitor==null?"":fleetOfCompetitor.getName();
|
||||
@@ -103,37 +126,33 @@ public class RaceRankingAsRssFeedServlet extends SailingServerHttpServlet {
|
||||
// String isDiscarded = String.valueOf(leaderboard.isDiscarded(competitor, raceColumnToShow, timePoint));
|
||||
// String isCorrected = String.valueOf(leaderboard.getScoreCorrection().isScoreCorrected(competitor, raceColumnToShow));
|
||||
|
||||
final TrackedRace trackedRace = raceColumnToShow.getTrackedRace(competitor);
|
||||
|
||||
boolean isLive = trackedRace != null && trackedRace.getEndOfRace() == null && (trackedRace.getStartOfTracking() != null ? new Date().after(trackedRace.getStartOfTracking().asDate()) : false);
|
||||
if(isLive) {
|
||||
String raceRank = "" + trackedRace.getRank(competitor, timePoint);
|
||||
feedText += raceRank + ". " + sailID + "\n";
|
||||
}
|
||||
}
|
||||
|
||||
List<SyndEntry> entries = new ArrayList<SyndEntry>();
|
||||
SyndContent description = new SyndContentImpl();
|
||||
|
||||
SyndEntry entry = new SyndEntryImpl();
|
||||
entry.setTitle("Live Race ranking of race " + raceName);
|
||||
entry.setLink("http://obmr2012.sapsailing.com");
|
||||
description.setType("text/plain");
|
||||
description.setValue(feedText);
|
||||
entry.setDescription(description);
|
||||
entries.add(entry);
|
||||
feed.setEntries(entries);
|
||||
|
||||
PrintWriter writer = resp.getWriter();
|
||||
SyndFeedOutput feedOutput = new SyndFeedOutput();
|
||||
feedOutput.output(feed, writer);
|
||||
} else {
|
||||
resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "No live race at the moment");
|
||||
String entryTitle = "No live race right now";
|
||||
entry.setTitle(entryTitle);
|
||||
description.setValue("");
|
||||
}
|
||||
|
||||
entry.setDescription(description);
|
||||
entries.add(entry);
|
||||
feed.setEntries(entries);
|
||||
|
||||
PrintWriter writer = resp.getWriter();
|
||||
SyndFeedOutput feedOutput = new SyndFeedOutput();
|
||||
feedOutput.output(feed, writer);
|
||||
} catch (Exception e) {
|
||||
resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return <code>true</code> if the startOfTracking is after the current date and there's no end of the race
|
||||
*/
|
||||
private boolean isLive(TrackedRace trackedRace) {
|
||||
return trackedRace.getEndOfRace() == null && (trackedRace.getStartOfTracking() != null ? new Date().after(trackedRace.getStartOfTracking().asDate()) : false);
|
||||
}
|
||||
|
||||
}
|
||||
Reference in new issue
Block a user