first tiny successful test for storing / loading regatta

This commit is contained in:
Axel Uhl committed 2012-05-22 11:28:27 +02:00
1 parent abf1166429
commit 81fd84e08e
18 files changed
+327 -140

No files matched your search

@@ -51,7 +51,6 @@ import com.sap.sailing.domain.leaderboard.RaceColumn;
import com.sap.sailing.domain.leaderboard.SettableScoreCorrection;
import com.sap.sailing.domain.leaderboard.ThresholdBasedResultDiscardingRule;
import com.sap.sailing.domain.leaderboard.impl.LeaderboardGroupImpl;
import com.sap.sailing.domain.leaderboard.impl.RaceColumnImpl;
import com.sap.sailing.domain.leaderboard.impl.ResultDiscardingRuleImpl;
import com.sap.sailing.domain.leaderboard.impl.ScoreCorrectionImpl;
import com.sap.sailing.domain.persistence.DomainObjectFactory;
@@ -452,41 +451,43 @@ public class DomainObjectFactoryImpl implements DomainObjectFactory {
private Series loadSeries(DBObject dbSeries) {
String name = (String) dbSeries.get(FieldNames.SERIES_NAME.name());
boolean isFleetsOrdered = (Boolean) dbSeries.get(FieldNames.SERIES_IS_FLEETS_ORDERED.name());
boolean isMedal = (Boolean) dbSeries.get(FieldNames.SERIES_IS_MEDAL.name());
final BasicDBList dbFleets = (BasicDBList) dbSeries.get(FieldNames.SERIES_FLEETS.name());
Map<String, Fleet> fleetsByName = loadFleets(dbFleets);
BasicDBList dbRaceColumns = (BasicDBList) dbSeries.get(FieldNames.SERIES_RACE_COLUMNS.name());
Iterable<? extends RaceColumn> raceColumns = loadRaceColumns(dbRaceColumns, fleetsByName);
Series result = new SeriesImpl(name, isFleetsOrdered, fleetsByName.values(), raceColumns);
return result;
Iterable<String> raceColumnNames = loadRaceColumnNames(dbRaceColumns, fleetsByName);
Series series = new SeriesImpl(name, isFleetsOrdered, isMedal, fleetsByName.values(), raceColumnNames);
loadRaceColumnRaceLinks(dbRaceColumns, series);
return series;
}
/**
* @param fleetsByName used to ensure the {@link RaceColumn#getFleets()} points to the same {@link Fleet} objects also
* used in the {@link Series#getFleets()} collection.
*/
private Iterable<? extends RaceColumn> loadRaceColumns(BasicDBList dbRaceColumns, Map<String, Fleet> fleetsByName) {
List<RaceColumn> result = new ArrayList<RaceColumn>();
private Iterable<String> loadRaceColumnNames(BasicDBList dbRaceColumns, Map<String, Fleet> fleetsByName) {
List<String> result = new ArrayList<String>();
for (Object o : dbRaceColumns) {
DBObject dbRaceColumn = (DBObject) o;
result.add(loadRaceColumn(dbRaceColumn, fleetsByName));
result.add((String) dbRaceColumn.get(FieldNames.LEADERBOARD_COLUMN_NAME.name()));
}
return result;
}
private RaceColumn loadRaceColumn(DBObject dbRaceColumn, Map<String, Fleet> fleetsByName) {
String name = (String) dbRaceColumn.get(FieldNames.LEADERBOARD_COLUMN_NAME.name());
boolean medalRace = (Boolean) dbRaceColumn.get(FieldNames.LEADERBOARD_IS_MEDAL_RACE_COLUMN.name());
RaceColumn raceColumn = new RaceColumnImpl(name, medalRace, fleetsByName.values());
Map<String, RaceIdentifier> raceIdentifiersPerFleetName = loadRaceIdentifiers(dbRaceColumn);
for (Map.Entry<String, RaceIdentifier> e : raceIdentifiersPerFleetName.entrySet()) {
// null key for "default" fleet is not acceptable here
if (e.getKey() == null) {
logger.warning("Ignoring null fleet name while loading RaceColumn "+name);
} else {
raceColumn.setRaceIdentifier(fleetsByName.get(e.getKey()), e.getValue());
private void loadRaceColumnRaceLinks(BasicDBList dbRaceColumns, Series series) {
for (Object o : dbRaceColumns) {
DBObject dbRaceColumn = (DBObject) o;
String name = (String) dbRaceColumn.get(FieldNames.LEADERBOARD_COLUMN_NAME.name());
Map<String, RaceIdentifier> raceIdentifiersPerFleetName = loadRaceIdentifiers(dbRaceColumn);
for (Map.Entry<String, RaceIdentifier> e : raceIdentifiersPerFleetName.entrySet()) {
// null key for "default" fleet is not acceptable here
if (e.getKey() == null) {
logger.warning("Ignoring null fleet name while loading RaceColumn " + name);
} else {
series.getRaceColumnByName(name).setRaceIdentifier(series.getFleetByName(e.getKey()), e.getValue());
}
}
}
return raceColumn;
}
private Map<String, Fleet> loadFleets(BasicDBList dbFleets) {
@@ -15,6 +15,7 @@ public enum FieldNames {
REGATTA_BASE_NAME,
REGATTA_SERIES,
SERIES_NAME,
SERIES_IS_MEDAL,
SERIES_IS_FLEETS_ORDERED,
SERIES_FLEETS,
SERIES_RACE_COLUMNS,
@@ -317,6 +317,7 @@ public class MongoObjectFactoryImpl implements MongoObjectFactory {
DBObject dbSeries = new BasicDBObject();
dbSeries.put(FieldNames.SERIES_NAME.name(), s.getName());
dbSeries.put(FieldNames.SERIES_IS_FLEETS_ORDERED.name(), s.isFleetsOrdered());
dbSeries.put(FieldNames.SERIES_IS_MEDAL.name(), s.isMedal());
BasicDBList dbFleets = new BasicDBList();
for (Fleet fleet : s.getFleets()) {
dbFleets.add(storeFleet(fleet));
@@ -26,10 +26,22 @@ public interface Series extends Named {
*/
Iterable<? extends RaceColumn> getRaceColumns();
RaceColumn getRaceColumnByName(String columnName);
/**
* Tells whether the fleets returned by {@link #getFleets()} have a relevant ordering. This is the case particularly
* for final series with fleets such as "Gold" and "Silver" but usually not for qualification series with fleets such
* as "Yellow" and "Blue" which don't have an ordering, particularly for ranking considerations.
*/
boolean isFleetsOrdered();
/**
* Tells whether this is the "last" / "medal" race series, usually having only one race. This may have implications
* on the scoring scheme (usually, medal races scores are doubled and cannot be discarded).
*/
boolean isMedal();
void setIsMedal(boolean isMedal);
Fleet getFleetByName(String fleetName);
}
@@ -0,0 +1,92 @@
package com.sap.sailing.domain.base.impl;
import java.util.HashMap;
import java.util.Map;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.base.Fleet;
import com.sap.sailing.domain.common.RaceIdentifier;
import com.sap.sailing.domain.common.impl.Util;
import com.sap.sailing.domain.common.impl.Util.Pair;
import com.sap.sailing.domain.leaderboard.RaceColumn;
import com.sap.sailing.domain.tracking.TrackedRace;
public abstract class AbstractRaceColumn implements RaceColumn {
private static final long serialVersionUID = -7801617988982540470L;
private final Map<Fleet, TrackedRace> trackedRaces;
private String name;
private final Map<Fleet, RaceIdentifier> raceIdentifiers;
public AbstractRaceColumn(String name) {
this.name = name;
this.trackedRaces = new HashMap<Fleet, TrackedRace>();
this.raceIdentifiers = new HashMap<Fleet, RaceIdentifier>();
}
@Override
public TrackedRace getTrackedRace(Fleet fleet) {
return trackedRaces.get(fleet);
}
@Override
public void setTrackedRace(Fleet fleet, TrackedRace trackedRace) {
this.trackedRaces.put(fleet, trackedRace);
this.setRaceIdentifier(fleet, trackedRace == null ? null : trackedRace.getRaceIdentifier());
}
@Override
public String getName() {
return name;
}
@Override
public void setName(String newName) {
this.name = newName;
}
@Override
public Pair<Competitor, RaceColumn> getKey(Competitor competitor) {
return new Pair<Competitor, RaceColumn>(competitor, this);
}
@Override
public RaceIdentifier getRaceIdentifier(Fleet fleet) {
return raceIdentifiers.get(fleet);
}
@Override
public void setRaceIdentifier(Fleet fleet, RaceIdentifier raceIdentifier) {
this.raceIdentifiers.put(fleet, raceIdentifier);
}
@Override
public void releaseTrackedRace(Fleet fleet) {
trackedRaces.remove(fleet);
}
@Override
public Fleet getFleetByName(String fleetName) {
for (Fleet fleet : getFleets()) {
if (fleet.getName().equals(fleetName)) {
return fleet;
}
}
return null;
}
@Override
public boolean hasTrackedRaces() {
return !trackedRaces.isEmpty();
}
@Override
public TrackedRace getTrackedRace(Competitor competitor) {
for (TrackedRace trackedRace : trackedRaces.values()) {
if (Util.contains(trackedRace.getRace().getCompetitors(), competitor)) {
return trackedRace;
}
}
return null;
}
}
@@ -0,0 +1,30 @@
package com.sap.sailing.domain.base.impl;
import com.sap.sailing.domain.base.Fleet;
import com.sap.sailing.domain.base.Series;
/**
* Obtains flees and medal information from the {@link Series} to which it is connected at construction time.
*
* @author Axel Uhl (D043530)
*
*/
public class RaceColumnInSeries extends AbstractRaceColumn {
private static final long serialVersionUID = -2199678838624406645L;
private final Series series;
public RaceColumnInSeries(String name, Series series) {
super(name);
this.series = series;
}
@Override
public Iterable<? extends Fleet> getFleets() {
return series.getFleets();
}
@Override
public boolean isMedalRace() {
return series.isMedal();
}
}
@@ -16,7 +16,6 @@ import com.sap.sailing.domain.base.Series;
import com.sap.sailing.domain.common.RegattaIdentifier;
import com.sap.sailing.domain.common.RegattaName;
import com.sap.sailing.domain.common.impl.NamedImpl;
import com.sap.sailing.domain.leaderboard.RaceColumn;
public class RegattaImpl extends NamedImpl implements Regatta {
private static final long serialVersionUID = 6509564189552478869L;
@@ -30,7 +29,7 @@ public class RegattaImpl extends NamedImpl implements Regatta {
*/
public RegattaImpl(String baseName, BoatClass boatClass) {
this(baseName, boatClass, Collections.singletonList(new SeriesImpl("Default", /* isFleetsOrdered */true,
Collections.singletonList(new FleetImpl("Default")), new ArrayList<RaceColumn>())));
/* isMedal */ false, Collections.singletonList(new FleetImpl("Default")), /* race column names */ new ArrayList<String>())));
}
public RegattaImpl(String baseName, BoatClass boatClass, Iterable<? extends Series> series) {
@@ -1,5 +1,10 @@
package com.sap.sailing.domain.base.impl;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.sap.sailing.domain.base.Fleet;
import com.sap.sailing.domain.base.Series;
import com.sap.sailing.domain.common.impl.NamedImpl;
@@ -8,14 +13,24 @@ import com.sap.sailing.domain.leaderboard.RaceColumn;
public class SeriesImpl extends NamedImpl implements Series {
private static final long serialVersionUID = -1640404303144907381L;
private final boolean isFleetsOrdered;
private final Iterable<? extends Fleet> fleets;
private final Iterable<? extends RaceColumn> raceColumns;
private final Map<String, Fleet> fleetsByName;
private final Iterable<RaceColumnInSeries> raceColumns;
private boolean isMedal;
public SeriesImpl(String name, boolean isFleetsOrdered, Iterable<? extends Fleet> fleets, Iterable<? extends RaceColumn> raceColumns) {
public SeriesImpl(String name, boolean isFleetsOrdered, boolean isMedal, Iterable<? extends Fleet> fleets, Iterable<String> raceColumnNames) {
super(name);
this.isFleetsOrdered = isFleetsOrdered;
this.fleets = fleets;
this.raceColumns = raceColumns;
this.fleetsByName = new HashMap<String, Fleet>();
for (Fleet fleet : fleets) {
this.fleetsByName.put(fleet.getName(), fleet);
}
List<RaceColumnInSeries> myRaceColumns = new ArrayList<RaceColumnInSeries>();
for (String raceColumnName : raceColumnNames) {
RaceColumnInSeries raceColumn = new RaceColumnInSeries(raceColumnName, this);
myRaceColumns.add(raceColumn);
}
this.raceColumns = myRaceColumns;
this.isMedal = isMedal;
}
public boolean isFleetsOrdered() {
@@ -23,7 +38,12 @@ public class SeriesImpl extends NamedImpl implements Series {
}
public Iterable<? extends Fleet> getFleets() {
return fleets;
return fleetsByName.values();
}
@Override
public Fleet getFleetByName(String fleetName) {
return fleetsByName.get(fleetName);
}
@Override
@@ -31,4 +51,23 @@ public class SeriesImpl extends NamedImpl implements Series {
return raceColumns;
}
@Override
public RaceColumn getRaceColumnByName(String columnName) {
for (RaceColumn raceColumn : raceColumns) {
if (raceColumn.getName().equals(columnName)) {
return raceColumn;
}
}
return null;
}
@Override
public boolean isMedal() {
return isMedal;
}
@Override
public void setIsMedal(boolean isMedal) {
this.isMedal = isMedal;
}
}
@@ -62,4 +62,6 @@ public interface FlexibleLeaderboard extends Leaderboard {
void removeRaceColumn(String columnName);
void updateIsMedalRace(String raceName, boolean isMedalRace);
}
@@ -0,0 +1,5 @@
package com.sap.sailing.domain.leaderboard;
public interface FlexibleRaceColumn extends RaceColumn {
void setIsMedalRace(boolean isMedalRace);
}
@@ -200,8 +200,6 @@ public interface Leaderboard extends Named {
*/
boolean considerForDiscarding(RaceColumn raceInLeaderboard, TimePoint timePoint);
void updateIsMedalRace(String raceName, boolean isMedalRace);
public void setResultDiscardingRule(ThresholdBasedResultDiscardingRule discardingRule);
Competitor getCompetitorByIdAsString(String idAsString);
@@ -27,7 +27,7 @@ public interface RaceColumn extends Named {
/**
* @return the fleets for each of which this column has a single race and therefore optionally a {@link TrackedRace}
*/
Iterable<Fleet> getFleets();
Iterable<? extends Fleet> getFleets();
Fleet getFleetByName(String fleetName);
@@ -85,8 +85,6 @@ public interface RaceColumn extends Named {
*/
boolean isMedalRace();
void setIsMedalRace(boolean isMedalRace);
void setName(String newName);
/**
@@ -330,18 +330,6 @@ public abstract class AbstractLeaderboardImpl implements Leaderboard {
displayNames.put(competitor, displayName);
}
@Override
public void updateIsMedalRace(String raceName, boolean isMedalRace) {
RaceColumn race = null;
for (RaceColumn r : getRaceColumns()) {
if (r.getName().equals(raceName))
race = r;
}
if (race != null) {
race.setIsMedalRace(isMedalRace);
}
}
@Override
public void setResultDiscardingRule(ThresholdBasedResultDiscardingRule discardingRule) {
this.resultDiscardingRule = discardingRule;
@@ -9,6 +9,7 @@ import java.util.logging.Logger;
import com.sap.sailing.domain.base.Fleet;
import com.sap.sailing.domain.base.impl.FleetImpl;
import com.sap.sailing.domain.leaderboard.FlexibleLeaderboard;
import com.sap.sailing.domain.leaderboard.FlexibleRaceColumn;
import com.sap.sailing.domain.leaderboard.RaceColumn;
import com.sap.sailing.domain.leaderboard.SettableScoreCorrection;
import com.sap.sailing.domain.leaderboard.ThresholdBasedResultDiscardingRule;
@@ -26,17 +27,17 @@ public class FlexibleLeaderboardImpl extends AbstractLeaderboardImpl implements
protected static final Fleet defaultFleet = new FleetImpl("Default");
private static final long serialVersionUID = -5708971849158747846L;
private final List<RaceColumn> races;
private final List<FlexibleRaceColumn> races;
public FlexibleLeaderboardImpl(String name, SettableScoreCorrection scoreCorrection,
ThresholdBasedResultDiscardingRule resultDiscardingRule) {
super(name, scoreCorrection, resultDiscardingRule);
this.races = new ArrayList<RaceColumn>();
this.races = new ArrayList<FlexibleRaceColumn>();
}
@Override
public RaceColumn addRaceColumn(String name, boolean medalRace, Fleet... fleets) {
RaceColumn column = getRaceColumnByName(name);
FlexibleRaceColumn column = getRaceColumnByName(name);
if (column != null) {
final String msg = "Trying to create race column with duplicate name "+name+" in leaderboard +"+getName();
logger.severe(msg);
@@ -47,6 +48,11 @@ public class FlexibleLeaderboardImpl extends AbstractLeaderboardImpl implements
return column;
}
@Override
public FlexibleRaceColumn getRaceColumnByName(String columnName) {
return (FlexibleRaceColumn) super.getRaceColumnByName(columnName);
}
@Override
public Fleet getFleet(String fleetName) {
Fleet result;
@@ -70,7 +76,7 @@ public class FlexibleLeaderboardImpl extends AbstractLeaderboardImpl implements
@Override
public RaceColumn addRace(TrackedRace race, String columnName, boolean medalRace, Fleet fleet) {
RaceColumn column = getRaceColumnByName(columnName);
FlexibleRaceColumn column = getRaceColumnByName(columnName);
if (column == null) {
column = createRaceColumn(columnName, medalRace);
races.add(column);
@@ -95,8 +101,8 @@ public class FlexibleLeaderboardImpl extends AbstractLeaderboardImpl implements
@Override
public void moveRaceColumnUp(String name) {
RaceColumn race = null;
for (RaceColumn r : races) {
FlexibleRaceColumn race = null;
for (FlexibleRaceColumn r : races) {
if (r.getName().equals(name)) {
race = r;
}
@@ -115,8 +121,8 @@ public class FlexibleLeaderboardImpl extends AbstractLeaderboardImpl implements
@Override
public void moveRaceColumnDown(String name) {
RaceColumn race = null;
for (RaceColumn r : races) {
FlexibleRaceColumn race = null;
for (FlexibleRaceColumn r : races) {
if (r.getName().equals(name)) {
race = r;
}
@@ -136,4 +142,16 @@ public class FlexibleLeaderboardImpl extends AbstractLeaderboardImpl implements
}
}
@Override
public void updateIsMedalRace(String raceName, boolean isMedalRace) {
FlexibleRaceColumn race = null;
for (FlexibleRaceColumn r : races) {
if (r.getName().equals(raceName))
race = r;
}
if (race != null) {
race.setIsMedalRace(isMedalRace);
}
}
}
@@ -1,17 +1,10 @@
package com.sap.sailing.domain.leaderboard.impl;
import java.util.HashMap;
import java.util.Map;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.base.Fleet;
import com.sap.sailing.domain.common.RaceIdentifier;
import com.sap.sailing.domain.common.impl.Util;
import com.sap.sailing.domain.common.impl.Util.Pair;
import com.sap.sailing.domain.leaderboard.RaceColumn;
import com.sap.sailing.domain.tracking.TrackedRace;
import com.sap.sailing.domain.base.impl.AbstractRaceColumn;
import com.sap.sailing.domain.leaderboard.FlexibleRaceColumn;
public class RaceColumnImpl implements RaceColumn {
public class RaceColumnImpl extends AbstractRaceColumn implements FlexibleRaceColumn {
private static final long serialVersionUID = -7801617988982540470L;
/**
@@ -19,17 +12,12 @@ public class RaceColumnImpl implements RaceColumn {
* {@link #trackedRaces} and {@link #raceIdentifiers}.
*/
private final Iterable<Fleet> fleets;
private final Map<Fleet, TrackedRace> trackedRaces;
private boolean medalRace;
private String name;
private final Map<Fleet, RaceIdentifier> raceIdentifiers;
public RaceColumnImpl(String name, boolean medalRace, Iterable<Fleet> fleets) {
this.name = name;
super(name);
this.medalRace = medalRace;
this.fleets = fleets;
this.trackedRaces = new HashMap<Fleet, TrackedRace>();
this.raceIdentifiers = new HashMap<Fleet, RaceIdentifier>();
}
@Override
@@ -37,79 +25,14 @@ public class RaceColumnImpl implements RaceColumn {
return medalRace;
}
@Override
public TrackedRace getTrackedRace(Fleet fleet) {
return trackedRaces.get(fleet);
}
@Override
public void setTrackedRace(Fleet fleet, TrackedRace trackedRace) {
this.trackedRaces.put(fleet, trackedRace);
this.setRaceIdentifier(fleet, trackedRace == null ? null : trackedRace.getRaceIdentifier());
}
@Override
public String getName() {
return name;
}
@Override
public void setName(String newName) {
this.name = newName;
}
@Override
public Pair<Competitor, RaceColumn> getKey(Competitor competitor) {
return new Pair<Competitor, RaceColumn>(competitor, this);
}
@Override
public void setIsMedalRace(boolean isMedalRace) {
this.medalRace = isMedalRace;
}
@Override
public RaceIdentifier getRaceIdentifier(Fleet fleet) {
return raceIdentifiers.get(fleet);
}
@Override
public void setRaceIdentifier(Fleet fleet, RaceIdentifier raceIdentifier) {
this.raceIdentifiers.put(fleet, raceIdentifier);
}
@Override
public void releaseTrackedRace(Fleet fleet) {
trackedRaces.remove(fleet);
}
@Override
public Iterable<Fleet> getFleets() {
return fleets;
}
@Override
public Fleet getFleetByName(String fleetName) {
for (Fleet fleet : getFleets()) {
if (fleet.getName().equals(fleetName)) {
return fleet;
}
}
return null;
}
@Override
public boolean hasTrackedRaces() {
return !trackedRaces.isEmpty();
}
@Override
public TrackedRace getTrackedRace(Competitor competitor) {
for (TrackedRace trackedRace : trackedRaces.values()) {
if (Util.contains(trackedRace.getRace().getCompetitors(), competitor)) {
return trackedRace;
}
}
return null;
}
}
@@ -10,14 +10,18 @@ import com.mongodb.DB;
import com.mongodb.Mongo;
import com.mongodb.MongoException;
import com.sap.sailing.mongodb.MongoDBConfiguration;
import com.sap.sailing.mongodb.MongoDBService;
public abstract class AbstractMongoDBTest {
protected Mongo mongo;
protected DB db;
private final MongoDBConfiguration dbConfiguration;
private MongoDBService service;
public AbstractMongoDBTest() {
dbConfiguration = MongoDBConfiguration.getDefaultTestConfiguration();
service = MongoDBService.INSTANCE;
service.setConfiguration(getDBConfiguration());
}
protected MongoDBConfiguration getDBConfiguration() {
@@ -36,4 +40,8 @@ public abstract class AbstractMongoDBTest {
db = mongo.getDB(getDBConfiguration().getDatabaseName());
assertNotNull(db);
}
protected MongoDBService getMongoService() {
return service;
}
}
@@ -3,19 +3,29 @@ package com.sap.sailing.mongodb.test;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import java.util.ArrayList;
import java.util.List;
import org.junit.Test;
import com.sap.sailing.domain.base.BoatClass;
import com.sap.sailing.domain.base.CourseArea;
import com.sap.sailing.domain.base.DomainFactory;
import com.sap.sailing.domain.base.Event;
import com.sap.sailing.domain.base.Fleet;
import com.sap.sailing.domain.base.Regatta;
import com.sap.sailing.domain.base.Series;
import com.sap.sailing.domain.base.Venue;
import com.sap.sailing.domain.base.impl.CourseAreaImpl;
import com.sap.sailing.domain.base.impl.EventImpl;
import com.sap.sailing.domain.base.impl.FleetImpl;
import com.sap.sailing.domain.base.impl.RegattaImpl;
import com.sap.sailing.domain.base.impl.SeriesImpl;
import com.sap.sailing.domain.base.impl.VenueImpl;
import com.sap.sailing.domain.common.impl.Util;
import com.sap.sailing.domain.persistence.DomainObjectFactory;
import com.sap.sailing.domain.persistence.MongoFactory;
import com.sap.sailing.domain.persistence.MongoObjectFactory;
import com.sap.sailing.mongodb.MongoDBService;
public class TestStoringAndLoadingEventsAndRegattas extends AbstractMongoDBTest {
@Test
@@ -28,13 +38,11 @@ public class TestStoringAndLoadingEventsAndRegattas extends AbstractMongoDBTest
CourseArea courseArea = new CourseAreaImpl(courseAreaName);
venue.addCourseArea(courseArea);
}
MongoDBService service = MongoDBService.INSTANCE;
service.setConfiguration(getDBConfiguration());
MongoObjectFactory mof = MongoFactory.INSTANCE.getMongoObjectFactory(service);
MongoObjectFactory mof = MongoFactory.INSTANCE.getMongoObjectFactory(getMongoService());
Event event = new EventImpl(eventName, venue);
mof.storeEvent(event);
DomainObjectFactory dof = MongoFactory.INSTANCE.getDomainObjectFactory(service);
DomainObjectFactory dof = MongoFactory.INSTANCE.getDomainObjectFactory(getMongoService());
Event loadedEvent = dof.loadEvent(eventName);
assertNotNull(loadedEvent);
assertEquals(eventName, loadedEvent.getName());
@@ -47,4 +55,67 @@ public class TestStoringAndLoadingEventsAndRegattas extends AbstractMongoDBTest
assertEquals(courseAreaNames[i++], loadedCourseArea.getName());
}
}
@Test
public void testLoadStoreSimpleRegatta() {
final int numberOfQualifyingRaces = 5;
final int numberOfFinalRaces = 7;
final String regattaBaseName = "Kieler Woche";
BoatClass boatClass = DomainFactory.INSTANCE.getOrCreateBoatClass("29erXX", /* typicallyStartsUpwind */ true);
Regatta regatta = createRegatta(numberOfQualifyingRaces, numberOfFinalRaces, regattaBaseName, boatClass);
MongoObjectFactory mof = MongoFactory.INSTANCE.getMongoObjectFactory(getMongoService());
mof.storeRegatta(regatta);
DomainObjectFactory dof = MongoFactory.INSTANCE.getDomainObjectFactory(getMongoService());
Regatta loadedRegatta = dof.loadRegatta(regatta.getName());
assertEquals(regattaBaseName, loadedRegatta.getBaseName());
}
@Test
public void testLoadStoreRegattaWithFleetsEnsuringIdenticalFleetsInSeriesAndRaceColumns() {
}
private Regatta createRegatta(final int numberOfQualifyingRaces, final int numberOfFinalRaces,
final String regattaBaseName, BoatClass boatClass) {
List<Series> series = new ArrayList<Series>();
// -------- qualifying series ------------
List<Fleet> qualifyingFleets = new ArrayList<Fleet>();
qualifyingFleets.add(new FleetImpl("Yellow"));
qualifyingFleets.add(new FleetImpl("Blue"));
List<String> qualifyingRaceColumnNames = new ArrayList<String>();
for (int i=1; i<=numberOfQualifyingRaces; i++) {
qualifyingRaceColumnNames.add("Q"+i);
}
Series qualifyingSeries = new SeriesImpl("Qualifying", /* isFleetsOrdered */false, /* isMedal */false,
qualifyingFleets, qualifyingRaceColumnNames);
series.add(qualifyingSeries);
// -------- final series ------------
List<Fleet> finalFleets = new ArrayList<Fleet>();
finalFleets.add(new FleetImpl("Gold"));
finalFleets.add(new FleetImpl("Silver"));
List<String> finalRaceColumnNames = new ArrayList<String>();
for (int i=1; i<=numberOfFinalRaces; i++) {
finalRaceColumnNames.add("F"+i);
}
Series finalSeries = new SeriesImpl("Final", /* isFleetsOrdered */ true, /* isMedal */ false, finalFleets, finalRaceColumnNames);
series.add(finalSeries);
// ------------ medal --------------
List<Fleet> medalFleets = new ArrayList<Fleet>();
medalFleets.add(new FleetImpl("Medal"));
List<String> medalRaceColumnNames = new ArrayList<String>();
for (int i=1; i<=numberOfFinalRaces; i++) {
medalRaceColumnNames.add("M");
}
Series medalSeries = new SeriesImpl("Medal", /* isFleetsOrdered */ true, /* isMedal */ true, medalFleets, medalRaceColumnNames);
series.add(medalSeries);
Regatta regatta = new RegattaImpl(regattaBaseName, boatClass, series);
return regatta;
}
}
@@ -1,5 +1,6 @@
package com.sap.sailing.server.operationaltransformation;
import com.sap.sailing.domain.leaderboard.FlexibleLeaderboard;
import com.sap.sailing.domain.leaderboard.Leaderboard;
import com.sap.sailing.server.RacingEventService;
import com.sap.sailing.server.RacingEventServiceOperation;
@@ -28,8 +29,8 @@ public class UpdateIsMedalRace extends AbstractLeaderboardColumnOperation<Void>
@Override
public Void internalApplyTo(RacingEventService toState) {
Leaderboard leaderboard = toState.getLeaderboardByName(getLeaderboardName());
if (leaderboard != null) {
leaderboard.updateIsMedalRace(getColumnName(), isMedalRace);
if (leaderboard != null && leaderboard instanceof FlexibleLeaderboard) {
((FlexibleLeaderboard) leaderboard).updateIsMedalRace(getColumnName(), isMedalRace);
toState.updateStoredLeaderboard(leaderboard);
} else {
throw new IllegalArgumentException("Leaderboard named " + getLeaderboardName() + " not found");