support master data serialization for overall leaderboards

This commit is contained in:
Axel Uhl committed 2013-08-12 17:40:08 +02:00
1 parent 4fd8ab2328
commit 8aa47bac1a
7 files changed
+120 -44

No files matched your search

@@ -3,6 +3,7 @@ package com.sap.sailing.domain.masterdataimport;
import java.util.Set;
import com.sap.sailing.domain.base.LeaderboardMasterData;
import com.sap.sailing.domain.leaderboard.ScoringScheme;
/**
* Holds leaderboard group object AND its leaderboards, etc
@@ -11,23 +12,32 @@ import com.sap.sailing.domain.base.LeaderboardMasterData;
*/
public class LeaderboardGroupMasterData {
private String name;
private String description;
private LeaderboardMasterData overallLeaderboardMasterData;
private Iterable<LeaderboardMasterData> leaderboards;
private boolean displayGroupsRevese;
private Set<EventMasterData> events;
private Set<RegattaMasterData> regattas;
private final String name;
private final String description;
private final boolean hasOverallLeaderboard;
private final ScoringScheme overallLeaderboardScoringScheme;
private final int[] overallLeaderboardDiscardingRule;
private final Iterable<LeaderboardMasterData> leaderboards;
private final boolean displayGroupsRevese;
private final Set<EventMasterData> events;
private final Set<RegattaMasterData> regattas;
public LeaderboardGroupMasterData(String name, String description,
boolean displayGroupsRevese, LeaderboardMasterData overallLeaderboardMasterData, Iterable<LeaderboardMasterData> leaderboards, Set<EventMasterData> events, Set<RegattaMasterData> regattas) {
this.name = name;
this.description = description;
this.displayGroupsRevese = displayGroupsRevese;
this.overallLeaderboardMasterData = overallLeaderboardMasterData;
this.leaderboards = leaderboards;
this.events = events;
this.regattas = regattas;
public LeaderboardGroupMasterData(String name, String description, boolean displayGroupsRevese,
boolean hasOverallLeaderboard,
ScoringScheme overallLeaderboardScoringScheme,
int[] overallLeaderboardDiscardingRule, Iterable<LeaderboardMasterData> leaderboards, Set<EventMasterData> events,
Set<RegattaMasterData> regattas) {
super();
this.name = name;
this.description = description;
this.hasOverallLeaderboard = hasOverallLeaderboard;
this.overallLeaderboardScoringScheme = overallLeaderboardScoringScheme;
this.overallLeaderboardDiscardingRule = overallLeaderboardDiscardingRule;
this.leaderboards = leaderboards;
this.displayGroupsRevese = displayGroupsRevese;
this.events = events;
this.regattas = regattas;
}
public String getName() {
@@ -38,8 +48,16 @@ public class LeaderboardGroupMasterData {
return description;
}
public LeaderboardMasterData getOverallLeaderboardMasterData() {
return overallLeaderboardMasterData;
public boolean hasOverallLeaderboard() {
return hasOverallLeaderboard;
}
public ScoringScheme getOverallLeaderboardScoringScheme() {
return overallLeaderboardScoringScheme;
}
public int[] getOverallLeaderboardDiscardingRule() {
return overallLeaderboardDiscardingRule;
}
public Iterable<LeaderboardMasterData> getLeaderboards() {
@@ -171,6 +171,47 @@ body ::-webkit-scrollbar-track {
color: #fff;
}
.gwt-TabBar {
background: #ccc;
padding-top: 6px;
}
.gwt-TabBar .gwt-TabBarFirst {
width: 5px; /* first tab distance from the left */
}
.gwt-TabBar .gwt-TabBarRest {
}
.gwt-TabBar .gwt-TabBarItem {
margin-left: 4px;
padding: 4px 8px 4px 8px;
cursor: pointer;
cursor: hand;
color: white;
font-weight: normal;
text-align: center;
background: #8E8E8E;
-moz-border-radius: 3px 3px 0px 0px;
border-radius: 3px 3px 0px 0px;
}
.gwt-TabBar .gwt-TabBarItem-selected {
cursor: default;
background: white;
color: #333;
font-weight: bold;
}
.gwt-TabBar .gwt-TabBarItem-disabled {
cursor: default;
color: #999999;
}
.gwt-TabPanel {
}
.titleLabelWrapper {
position: absolute;
width: 100%;
@@ -17,6 +17,7 @@ import com.sap.sailing.domain.base.Nationality;
import com.sap.sailing.domain.base.Person;
import com.sap.sailing.domain.base.Team;
import com.sap.sailing.domain.common.Color;
import com.sap.sailing.domain.leaderboard.ScoringScheme;
import com.sap.sailing.domain.masterdataimport.EventMasterData;
import com.sap.sailing.domain.masterdataimport.LeaderboardGroupMasterData;
import com.sap.sailing.domain.masterdataimport.RaceColumnMasterData;
@@ -41,6 +42,8 @@ public class LeaderboardGroupMasterDataJsonDeserializer implements JsonDeseriali
private final JsonDeserializer<RegattaMasterData> regattaDeserializer;
private final DomainFactory domainFactory;
public static JsonDeserializer<LeaderboardGroupMasterData> create(DomainFactory domainFactory) {
JsonDeserializer<BoatClass> boatClassDeserializer = new BoatClassJsonDeserializer(domainFactory);
JsonDeserializer<Nationality> nationalityDeserializer = new NationalityJsonDeserialzer();
@@ -58,15 +61,16 @@ public class LeaderboardGroupMasterDataJsonDeserializer implements JsonDeseriali
JsonDeserializer<RegattaMasterData> regattaDeserializer = new RegattaMasterDataJsonDeserializer(
fleetDeserializer, raceColumnDeserializer);
JsonDeserializer<LeaderboardGroupMasterData> leaderboardGroupMasterDataDeserializer = new LeaderboardGroupMasterDataJsonDeserializer(
leaderboardDeserializer, eventDeserializer, regattaDeserializer);
leaderboardDeserializer, eventDeserializer, regattaDeserializer, domainFactory);
return leaderboardGroupMasterDataDeserializer;
}
public LeaderboardGroupMasterDataJsonDeserializer(JsonDeserializer<LeaderboardMasterData> leaderboardDeserializer,
JsonDeserializer<EventMasterData> eventDeserializer, JsonDeserializer<RegattaMasterData> regattaDeserializer) {
JsonDeserializer<EventMasterData> eventDeserializer, JsonDeserializer<RegattaMasterData> regattaDeserializer, DomainFactory domainFactory) {
this.leaderboardDeserializer = leaderboardDeserializer;
this.eventDeserializer = eventDeserializer;
this.regattaDeserializer = regattaDeserializer;
this.domainFactory = domainFactory;
}
@Override
@@ -92,8 +96,10 @@ public class LeaderboardGroupMasterDataJsonDeserializer implements JsonDeseriali
String name = (String) object.get(LeaderboardGroupMasterDataJsonSerializer.FIELD_NAME);
String description = (String) object.get(LeaderboardGroupMasterDataJsonSerializer.FIELD_DESCRIPTION);
boolean displayGroupsReverse = (Boolean) object.get(LeaderboardGroupMasterDataJsonSerializer.FIELD_DISPLAY_GROUPS_REVERSE);
LeaderboardMasterData overallLeaderboardMasterData = leaderboardDeserializer.deserialize((JSONObject) object.get(LeaderboardGroupMasterDataJsonSerializer.FIELD_OVERALL_LEADERBOARD));
return new LeaderboardGroupMasterData(name, description, displayGroupsReverse, overallLeaderboardMasterData, leaderboards, events, regattas);
boolean hasOverallLeaderboard = (Boolean) object.get(LeaderboardGroupMasterDataJsonSerializer.FIELD_HAS_OVERALL_LEADERBOARD);
ScoringScheme overallLeaderboardScoringScheme = LeaderboardMasterDataJsonDeserializer.deserializeScoringScheme((JSONObject) object.get(LeaderboardGroupMasterDataJsonSerializer.FIELD_OVERALL_LEADERBOARD_SCORING_SCHEME), domainFactory);
int[] overallLeaderboardResultDiscardingThresholds = LeaderboardMasterDataJsonDeserializer.deserializeResultDesicardingRule((JSONObject) object.get(LeaderboardGroupMasterDataJsonSerializer.FIELD_OVERALL_LEADERBOARD_DISCARDING_THRESHOLDS));
return new LeaderboardGroupMasterData(name, description, displayGroupsReverse, hasOverallLeaderboard, overallLeaderboardScoringScheme, overallLeaderboardResultDiscardingThresholds, leaderboards, events, regattas);
}
}
@@ -71,23 +71,25 @@ public class LeaderboardMasterDataJsonDeserializer implements JsonDeserializer<L
Competitor deserializedCompetitor = competitorDeserializer.deserialize(competitorJson);
competitorsById.put(deserializedCompetitor.getId().toString(), deserializedCompetitor);
}
final LeaderboardMasterData result;
if (isRegattaLeaderBoard) {
String regattaName = (String) object.get(LeaderboardMasterDataJsonSerializer.FIELD_REGATTA_NAME);
return new RegattaLeaderboardMasterData(name, displayName, resultDiscardingRule, competitorsById,
result = new RegattaLeaderboardMasterData(name, displayName, resultDiscardingRule, competitorsById,
scoreCorrection, regattaName, carriedPoints, suppressedCompetitors, displayNamesByCompetitorId,
raceLogEvents);
} else {
ScoringScheme scoringScheme = deserializeScoringScheme((JSONObject) object
.get(LeaderboardMasterDataJsonSerializer.FIELD_SCORING_SCHEME));
.get(LeaderboardMasterDataJsonSerializer.FIELD_SCORING_SCHEME), domainFactory);
String courseAreaId = deserializeCourseAreaId((JSONObject) object
.get(LeaderboardMasterDataJsonSerializer.FIELD_COURSE_AREA));
List<RaceColumnMasterData> raceColumns = deserializeRaceColumns((JSONArray) object
.get(LeaderboardMasterDataJsonSerializer.FIELD_RACE_COLUMNS));
return new FlexibleLeaderboardMasterData(name, displayName, resultDiscardingRule, competitorsById,
result = new FlexibleLeaderboardMasterData(name, displayName, resultDiscardingRule, competitorsById,
scoreCorrection, scoringScheme, courseAreaId, raceColumns, carriedPoints, suppressedCompetitors,
displayNamesByCompetitorId, raceLogEvents);
}
return result;
}
private Map<String, Map<String, List<RaceLogEvent>>> deserializeRaceLogEvents(JSONArray jsonArray) {
@@ -230,12 +232,12 @@ public class LeaderboardMasterDataJsonDeserializer implements JsonDeserializer<L
}
private ScoringScheme deserializeScoringScheme(JSONObject jsonObject) {
public static ScoringScheme deserializeScoringScheme(JSONObject jsonObject, DomainFactory domainFactory) {
String type = (String) jsonObject.get(LeaderboardMasterDataJsonSerializer.FIELD_TYPE);
return domainFactory.createScoringScheme(ScoringSchemeType.valueOf(type));
}
private int[] deserializeResultDesicardingRule(JSONObject jsonObject) {
public static int[] deserializeResultDesicardingRule(JSONObject jsonObject) {
JSONArray indeces = (JSONArray) jsonObject.get(LeaderboardMasterDataJsonSerializer.FIELD_INDICES);
if (indeces == null) {
return null;
@@ -28,7 +28,9 @@ import com.sap.sailing.server.gateway.serialization.racelog.impl.RaceLogEventSer
public class LeaderboardGroupMasterDataJsonSerializer implements JsonSerializer<LeaderboardGroup> {
public static final String FIELD_LEADERBOARDS = "leaderboards";
public static final String FIELD_OVERALL_LEADERBOARD = "overallLeaderboard";
public static final String FIELD_HAS_OVERALL_LEADERBOARD = "overallLeaderboard";
public static final String FIELD_OVERALL_LEADERBOARD_SCORING_SCHEME = "overallLeaderboardScoringScheme";
public static final String FIELD_OVERALL_LEADERBOARD_DISCARDING_THRESHOLDS = "overallLeaderboardScoringScheme";
public static final String FIELD_DESCRIPTION = "description";
public static final String FIELD_NAME = "name";
public static final String FIELD_DISPLAY_GROUPS_REVERSE = "displayGroupsReverse";
@@ -67,8 +69,15 @@ public class LeaderboardGroupMasterDataJsonSerializer implements JsonSerializer<
JSONObject jsonLeaderboardGroup = new JSONObject();
jsonLeaderboardGroup.put(FIELD_NAME, leaderboardGroup.getName());
jsonLeaderboardGroup.put(FIELD_DESCRIPTION, leaderboardGroup.getDescription());
jsonLeaderboardGroup.put(FIELD_OVERALL_LEADERBOARD,
leadboardSerializer.serialize(leaderboardGroup.getOverallLeaderboard()));
jsonLeaderboardGroup.put(FIELD_HAS_OVERALL_LEADERBOARD, leaderboardGroup.getOverallLeaderboard() != null);
if (leaderboardGroup.getOverallLeaderboard() != null) {
jsonLeaderboardGroup.put(FIELD_OVERALL_LEADERBOARD_DISCARDING_THRESHOLDS,
LeaderboardMasterDataJsonSerializer.createJsonForResultDiscardingRule(leaderboardGroup
.getOverallLeaderboard().getResultDiscardingRule()));
jsonLeaderboardGroup.put(FIELD_OVERALL_LEADERBOARD_SCORING_SCHEME,
LeaderboardMasterDataJsonSerializer.createJsonForScoringScheme(leaderboardGroup
.getOverallLeaderboard().getScoringScheme()));
}
jsonLeaderboardGroup.put(FIELD_LEADERBOARDS, createJsonArrayForLeaderboards(leaderboardGroup.getLeaderboards()));
jsonLeaderboardGroup.put(FIELD_DISPLAY_GROUPS_REVERSE, leaderboardGroup.isDisplayGroupsInReverseOrder());
@@ -38,6 +38,7 @@ public class LeaderboardMasterDataJsonSerializer implements JsonSerializer<Leade
public static final String FIELD_SCORING_SCHEME = "scoringScheme";
public static final String FIELD_TYPE = "type";
public static final String FIELD_REGATTA_LEADERBOARD = "regattaLeaderboard";
public static final String FIELD_META_LEADERBOARD = "metaLeaderboard";
public static final String FIELD_RESULT_DISCARDING_RULE = "resultDiscardingRule";
public static final String FIELD_INDICES = "indices";
public static final String FIELD_COURSE_AREA = "courseArea";
@@ -96,7 +97,7 @@ public class LeaderboardMasterDataJsonSerializer implements JsonSerializer<Leade
jsonLeaderboard.put(FIELD_SCORING_SCHEME, createJsonForScoringScheme(leaderboard.getScoringScheme()));
jsonLeaderboard.put(FIELD_COURSE_AREA, createJsonForCourseArea(flexibleLeaderboard.getDefaultCourseArea()));
jsonLeaderboard.put(FIELD_RACE_COLUMNS, createJsonArrayForRaceColumns(leaderboard.getRaceColumns()));
} else {
} else if (leaderboard instanceof RegattaLeaderboard) {
RegattaLeaderboard regattaLeaderboard = (RegattaLeaderboard) leaderboard;
jsonLeaderboard.put(FIELD_REGATTA_NAME, regattaLeaderboard.getRegatta().getName());
CourseArea courseArea = regattaLeaderboard.getRegatta().getDefaultCourseArea();
@@ -106,9 +107,7 @@ public class LeaderboardMasterDataJsonSerializer implements JsonSerializer<Leade
regattas.add(regattaLeaderboard.getRegatta());
isRegattaLeaderboard = true;
}
jsonLeaderboard.put(FIELD_REGATTA_LEADERBOARD, isRegattaLeaderboard);
return jsonLeaderboard;
}
@@ -198,7 +197,7 @@ public class LeaderboardMasterDataJsonSerializer implements JsonSerializer<Leade
return null;
}
private JSONObject createJsonForResultDiscardingRule(ResultDiscardingRule resultDiscardingRule) {
public static JSONObject createJsonForResultDiscardingRule(ResultDiscardingRule resultDiscardingRule) {
JSONObject result = new JSONObject();
if (resultDiscardingRule instanceof ThresholdBasedResultDiscardingRule) {
ThresholdBasedResultDiscardingRule rule = (ThresholdBasedResultDiscardingRule) resultDiscardingRule;
@@ -212,7 +211,7 @@ public class LeaderboardMasterDataJsonSerializer implements JsonSerializer<Leade
return result;
}
private JSONObject createJsonForScoringScheme(ScoringScheme scoringScheme) {
public static JSONObject createJsonForScoringScheme(ScoringScheme scoringScheme) {
JSONObject result = new JSONObject();
result.put(FIELD_TYPE, scoringScheme.getType().name());
return result;
@@ -34,6 +34,7 @@ import com.sap.sailing.domain.leaderboard.LeaderboardGroup;
import com.sap.sailing.domain.leaderboard.RegattaLeaderboard;
import com.sap.sailing.domain.leaderboard.SettableScoreCorrection;
import com.sap.sailing.domain.leaderboard.impl.ThresholdBasedResultDiscardingRuleImpl;
import com.sap.sailing.domain.leaderboard.meta.LeaderboardGroupMetaLeaderboard;
import com.sap.sailing.domain.masterdataimport.EventMasterData;
import com.sap.sailing.domain.masterdataimport.FlexibleLeaderboardMasterData;
import com.sap.sailing.domain.masterdataimport.LeaderboardGroupMasterData;
@@ -129,13 +130,7 @@ public class ImportMasterDataOperation extends
}
int[] overallLeaderboardDiscardThresholds = null;
ScoringSchemeType overallLeaderboardScoringSchemeType = null;
LeaderboardMasterData overallLeaderboard = masterData.getOverallLeaderboardMasterData();
if (overallLeaderboard != null && overallLeaderboard instanceof FlexibleLeaderboardMasterData) {
FlexibleLeaderboardMasterData flex = (FlexibleLeaderboardMasterData) overallLeaderboard;
overallLeaderboardDiscardThresholds = overallLeaderboard.getResultDiscardingRule()
.getDiscardIndexResultsStartingWithHowManyRaces();
overallLeaderboardScoringSchemeType = flex.getScoringScheme().getType();
}
final LeaderboardGroup leaderboardGroup;
LeaderboardGroup existingLeaderboardGroup = toState.getLeaderboardGroupByName(masterData.getName());
if (existingLeaderboardGroup != null && override) {
logger.info(String.format("Leaderboard Group with name %1$s already existed and will be overridden.",
@@ -144,14 +139,20 @@ public class ImportMasterDataOperation extends
existingLeaderboardGroup = null;
}
if (existingLeaderboardGroup == null) {
toState.addLeaderboardGroup(masterData.getName(), masterData.getDescription(),
leaderboardGroup = toState.addLeaderboardGroup(masterData.getName(), masterData.getDescription(),
masterData.isDisplayGroupsRevese(), leaderboardNames, overallLeaderboardDiscardThresholds,
overallLeaderboardScoringSchemeType);
creationCount.addOneLeaderboardGroup(masterData.getName());
} else {
leaderboardGroup = existingLeaderboardGroup;
logger.info(String.format("Leaderboard Group with name %1$s already exists and hasn't been overridden.",
masterData.getName()));
}
if (masterData.hasOverallLeaderboard() && (override || existingLeaderboardGroup == null)) {
LeaderboardGroupMetaLeaderboard overallLeaderboard = new LeaderboardGroupMetaLeaderboard(leaderboardGroup, masterData.getOverallLeaderboardScoringScheme(),
new ThresholdBasedResultDiscardingRuleImpl(masterData.getOverallLeaderboardDiscardingRule()));
leaderboardGroup.setOverallLeaderboard(overallLeaderboard);
}
}
private void addRaceLogEvents(Leaderboard leaderboard, Map<String, Map<String, List<RaceLogEvent>>> raceLogEvents) {