Merged master

This commit is contained in:
Simon Pamies committed 2014-07-21 12:56:04 +02:00
commit 723c281f58
21 files changed
+374 -234

No files matched your search

@@ -35,35 +35,32 @@ public interface FlexibleLeaderboard extends Leaderboard, Renamable {
void moveRaceColumnDown(String name);
/**
* Adds a new {@link RaceColumn} that has no {@link TrackedRace} associated yet to this leaderboard.
* Adds a new {@link RaceColumn} that has no {@link TrackedRace} associated yet to this leaderboard. The default
* fleet will be used.
*
* @param name
* the name for the new race column such that none of the columns in {@link #getRaceColumns()}
* has that name yet; otherwise, an message will be logged, no race column will be added and
* the existing column will be returned for robustness reasons
* the name for the new race column such that none of the columns in {@link #getRaceColumns()} has that
* name yet; otherwise, an message will be logged, no race column will be added and the existing column
* will be returned for robustness reasons
* @param medalRace
* tells if the column to add represents a medal race which has double score and cannot be discarded
* @param fleets
* the fleets to add to the {@link RaceColumn} created. If no fleets are specified, a single default
* fleet will be assigned to the race column created.
* @return the race column in the leaderboard used to represent the tracked <code>race</code>
*/
RaceColumn addRaceColumn(String name, boolean medalRace, Fleet... fleets);
RaceColumn addRaceColumn(String name, boolean medalRace);
/**
* Adds a tracked race to this leaderboard. If a {@link RaceColumn} with name <code>columnName</code> already exists
* in this leaderboard, <code>race</code> is {@link RaceColumn#setTrackedRace(Fleet, TrackedRace) set as its tracked
* race} and <code>medalRace</code> is ignored. Otherwise, a new {@link RaceColumn} column, with <code>race</code>
* as its tracked race, is created and added to this leaderboard.
* as its tracked race, is created and added to this leaderboard. The default fleet will be used.
*
* @param medalRace
* tells if the column to add represents a medal race which has double score and cannot be discarded;
* ignored if the column named <code>columnName</code> already exists
* @param fleet
* the fleet to link the race to when the {@link RaceColumn} is created.
*
* @return the race column in the leaderboard used to represent the tracked <code>race</code>
*/
RaceColumn addRace(TrackedRace race, String columnName, boolean medalRace, Fleet fleet);
RaceColumn addRace(TrackedRace race, String columnName, boolean medalRace);
void removeRaceColumn(String columnName);
@@ -0,0 +1,21 @@
package com.sap.sailing.domain.leaderboard.impl;
import com.sap.sailing.domain.base.IsManagedBySharedDomainFactory;
import com.sap.sailing.domain.base.SharedDomainFactory;
import com.sap.sailing.domain.base.impl.FleetImpl;
import com.sap.sailing.domain.common.LeaderboardNameConstants;
public class DefaultFleetImpl extends FleetImpl implements IsManagedBySharedDomainFactory {
private static final long serialVersionUID = 6233489616955255401L;
public DefaultFleetImpl() {
super(LeaderboardNameConstants.DEFAULT_FLEET_NAME);
}
@Override
public IsManagedBySharedDomainFactory resolve(SharedDomainFactory domainFactory) {
return FlexibleLeaderboardImpl.defaultFleet;
}
}
@@ -13,8 +13,6 @@ import com.sap.sailing.domain.base.CourseArea;
import com.sap.sailing.domain.base.Fleet;
import com.sap.sailing.domain.base.RaceColumn;
import com.sap.sailing.domain.base.RaceColumnListener;
import com.sap.sailing.domain.base.impl.FleetImpl;
import com.sap.sailing.domain.common.LeaderboardNameConstants;
import com.sap.sailing.domain.leaderboard.FlexibleLeaderboard;
import com.sap.sailing.domain.leaderboard.FlexibleRaceColumn;
import com.sap.sailing.domain.leaderboard.ScoringScheme;
@@ -39,7 +37,7 @@ import com.sap.sailing.domain.tracking.TrackedRace;
public class FlexibleLeaderboardImpl extends AbstractLeaderboardImpl implements FlexibleLeaderboard {
private static Logger logger = Logger.getLogger(FlexibleLeaderboardImpl.class.getName());
protected static final Fleet defaultFleet = new FleetImpl(LeaderboardNameConstants.DEFAULT_FLEET_NAME);
protected static final DefaultFleetImpl defaultFleet = new DefaultFleetImpl();
private static final long serialVersionUID = -5708971849158747846L;
private final List<FlexibleRaceColumn> races;
private final ScoringScheme scoringScheme;
@@ -96,24 +94,25 @@ public class FlexibleLeaderboardImpl extends AbstractLeaderboardImpl implements
}
@Override
public RaceColumn addRace(TrackedRace race, String columnName, boolean medalRace, Fleet fleet) {
FlexibleRaceColumn column = addRaceColumn(columnName, medalRace, /* logAlreadyExistingColumn */ false, fleet);
column.setTrackedRace(fleet, race); // triggers listeners because this object was registered above as race column listener on the column
public RaceColumn addRace(TrackedRace race, String columnName, boolean medalRace) {
FlexibleRaceColumn column = addRaceColumn(columnName, medalRace, /* logAlreadyExistingColumn */false);
column.setTrackedRace(defaultFleet, race); // triggers listeners because this object was registered above as
// race column listener on the column
return column;
}
@Override
public FlexibleRaceColumn addRaceColumn(String name, boolean medalRace, Fleet... fleets) {
return addRaceColumn(name, medalRace, /* logAlreadyExistingColumn */ true, fleets);
public FlexibleRaceColumn addRaceColumn(String name, boolean medalRace) {
return addRaceColumn(name, medalRace, /* logAlreadyExistingColumn */true);
}
private FlexibleRaceColumn addRaceColumn(String name, boolean medalRace, boolean logAlreadyExistingColumn, Fleet... fleets) {
private FlexibleRaceColumn addRaceColumn(String name, boolean medalRace, boolean logAlreadyExistingColumn) {
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);
} else {
column = createRaceColumn(name, medalRace, fleets);
column = createRaceColumn(name, medalRace);
column.addRaceColumnListener(this);
races.add(column);
column.setRaceLogInformation(
@@ -159,17 +158,15 @@ public class FlexibleLeaderboardImpl extends AbstractLeaderboardImpl implements
return Collections.unmodifiableCollection(new ArrayList<RaceColumn>(races));
}
protected RaceColumnImpl createRaceColumn(String column, boolean medalRace, Fleet... fleets) {
return new RaceColumnImpl(
column,
medalRace,
turnNullOrEmptyFleetsIntoDefaultFleet(fleets));
protected RaceColumnImpl createRaceColumn(String column, boolean medalRace) {
return new RaceColumnImpl(column, medalRace);
}
protected Iterable<Fleet> turnNullOrEmptyFleetsIntoDefaultFleet(Fleet... fleets) {
Iterable<Fleet> theFleets;
if (fleets == null || fleets.length == 0) {
theFleets = Collections.singleton(defaultFleet);
Fleet defaultfleetCasted = defaultFleet;
theFleets = Collections.singleton(defaultfleetCasted);
} else {
theFleets = Arrays.asList(fleets);
}
@@ -1,8 +1,6 @@
package com.sap.sailing.domain.leaderboard.impl;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import com.sap.sailing.domain.base.Fleet;
import com.sap.sailing.domain.base.impl.AbstractRaceColumn;
@@ -12,23 +10,12 @@ public class RaceColumnImpl extends AbstractRaceColumn implements FlexibleRaceCo
private static final long serialVersionUID = -7801617988982540470L;
private String name;
/**
* All fleets for which this column can contain a race. This is the maximum set of keys possible for
* {@link #trackedRaces} and {@link #raceIdentifiers}.
*/
private final Iterable<Fleet> fleets;
private boolean medalRace;
public RaceColumnImpl(String name, boolean medalRace, Iterable<Fleet> fleets) {
public RaceColumnImpl(String name, boolean medalRace) {
super();
this.name = name;
this.medalRace = medalRace;
List<Fleet> myFleets = new ArrayList<Fleet>();
for (Fleet fleet : fleets) {
myFleets.add(fleet);
}
Collections.sort(myFleets);
this.fleets = myFleets;
}
@Override
@@ -53,8 +40,8 @@ public class RaceColumnImpl extends AbstractRaceColumn implements FlexibleRaceCo
}
@Override
public Iterable<Fleet> getFleets() {
return fleets;
public Iterable<? extends Fleet> getFleets() {
return Collections.singleton(FlexibleLeaderboardImpl.defaultFleet);
}
}