some cleanup of the CompetitorDTO/BoatDTO creation methods

This commit is contained in:
Frank Mittag
2017-11-08 14:38:50 +01:00
parent 5beb17a2b4
commit 9489a2dc72
8 changed files with 75 additions and 65 deletions
@@ -61,7 +61,7 @@ public final class StartAnalysisDTOFactory extends AbstractStartAnalysisCreation
}
if (competitor != null) {
Boat boatOfCompetitor = trackedRace.getBoatOfCompetitor(competitor);
startAnalysisDTO.competitor = dashboardDispatchContext.getRacingEventService().getBaseDomainFactory().getCompetitorStore().convertToCompetitorDTO(competitor, boatOfCompetitor);
startAnalysisDTO.competitor = dashboardDispatchContext.getRacingEventService().getBaseDomainFactory().getCompetitorStore().convertToCompetitorWithBoatDTO(competitor, boatOfCompetitor);
logger.log(Level.INFO, "Created startanalysis for competitor"+competitor);
}
startAnalysisDTO.startAnalysisCompetitorDTOs = competitors;
@@ -195,7 +195,7 @@ public final class StartAnalysisDTOFactory extends AbstractStartAnalysisCreation
StartAnalysisCompetitorDTO startAnalysisCompetitorDTOsForRace = new StartAnalysisCompetitorDTO();
Boat boatOfCompetitor = trackedRace.getBoatOfCompetitor(competitor);
startAnalysisCompetitorDTOsForRace.competitorDTO = dashboardDispatchContext.getRacingEventService().getBaseDomainFactory().getCompetitorStore()
.convertToCompetitorDTO(competitor, boatOfCompetitor);
.convertToCompetitorWithBoatDTO(competitor, boatOfCompetitor);
startAnalysisCompetitorDTOsForRace.rankingTableEntryDTO = createRankTableEntry(trackedRace, rank, competitor);
return startAnalysisCompetitorDTOsForRace;
}
@@ -132,7 +132,8 @@ public interface DomainObjectFactory {
Collection<CompetitorWithBoat> loadAllLegacyCompetitorsWithBoat();
/**
* Loads all competitors and resolves them via the domain factory.
* Loads all competitors (with and without embedded boats) and resolves them via the domain factory.
* Returns a collection of {@link Competitor} or {@link CompetitorWithBoat} objects.
*/
Collection<Competitor> loadAllCompetitors();
@@ -86,11 +86,11 @@ public interface CompetitorStore extends CompetitorFactory, BoatFactory {
void addCompetitors(Iterable<Competitor> competitors);
CompetitorWithoutBoatDTO convertToCompetitorWithoutBoatDTO(Competitor c);
CompetitorWithoutBoatDTO convertToCompetitorDTO(Competitor competitor);
<T extends Competitor> CompetitorDTO convertToCompetitorDTO(T competitor);
CompetitorDTO convertToCompetitorWithBoatDTO(Competitor c, Boat b);
CompetitorDTO convertToCompetitorDTO(Competitor c, Boat b);
CompetitorDTO convertToCompetitorWithOptionalBoatDTO(Competitor c);
Map<CompetitorDTO, BoatDTO> convertToCompetitorAndBoatDTOs(Map<Competitor, Boat> competitorsAndBoats);
@@ -297,7 +297,7 @@ public class TransientCompetitorStoreImpl implements CompetitorStore, Serializab
}
@Override
public CompetitorWithoutBoatDTO convertToCompetitorWithoutBoatDTO(Competitor c) {
public CompetitorWithoutBoatDTO convertToCompetitorDTO(Competitor c) {
LockUtil.lockForRead(lock);
boolean needToUnlockReadLock = true;
try {
@@ -330,30 +330,6 @@ public class TransientCompetitorStoreImpl implements CompetitorStore, Serializab
}
}
@Override
public CompetitorDTO convertToCompetitorDTO(Competitor competitor, Boat boat) {
CompetitorWithoutBoatDTO c = convertToCompetitorWithoutBoatDTO(competitor);
BoatDTO boatDTO = null;
if (boat != null) {
boatDTO = convertToBoatDTO(boat);
}
CompetitorDTO competitorDTO = new CompetitorDTOImpl(c, boatDTO);
return competitorDTO;
}
@Override
public Map<CompetitorDTO, BoatDTO> convertToCompetitorAndBoatDTOs(Map<Competitor, Boat> competitorsAndBoats) {
Map<CompetitorDTO, BoatDTO> result = new HashMap<>();
for (Entry<Competitor, Boat> entry: competitorsAndBoats.entrySet()) {
CompetitorWithoutBoatDTO c = convertToCompetitorWithoutBoatDTO(entry.getKey());
BoatDTO boatDTO = convertToBoatDTO(entry.getValue());
CompetitorDTO competitorDTO = new CompetitorDTOImpl(c, null);
result.put(competitorDTO, boatDTO);
}
return result;
}
@Override
public void allowCompetitorResetToDefaults(Competitor competitor) {
LockUtil.lockForWrite(lock);
@@ -445,15 +421,6 @@ public class TransientCompetitorStoreImpl implements CompetitorStore, Serializab
return (CompetitorWithBoat) competitor;
}
@Override
public <T extends Competitor> CompetitorDTO convertToCompetitorDTO(T competitor) {
if (competitor instanceof CompetitorWithBoat) {
return convertToCompetitorDTO(competitor, ((CompetitorWithBoat) competitor).getBoat());
} else {
return convertToCompetitorDTO(competitor, null);
}
}
/** Boat stuff starts here */
@Override
@@ -492,7 +459,6 @@ public class TransientCompetitorStoreImpl implements CompetitorStore, Serializab
@Override
public Boat getOrCreateBoat(Serializable id, String name, BoatClass boatClass, String sailId, Color color) {
// create compound boat ID here?
Boat result = getExistingBoatById(id); // avoid synchronization for successful read access
if (result == null) {
LockUtil.lockForWrite(lock);
@@ -689,4 +655,37 @@ public class TransientCompetitorStoreImpl implements CompetitorStore, Serializab
LockUtil.unlockAfterWrite(lock);
}
}
@Override
public CompetitorDTO convertToCompetitorWithBoatDTO(Competitor competitor, Boat boat) {
CompetitorWithoutBoatDTO c = convertToCompetitorDTO(competitor);
BoatDTO boatDTO = null;
if (boat != null) {
boatDTO = convertToBoatDTO(boat);
}
CompetitorDTO competitorDTO = new CompetitorDTOImpl(c, boatDTO);
return competitorDTO;
}
@Override
public CompetitorDTO convertToCompetitorWithOptionalBoatDTO(Competitor competitor) {
if (competitor instanceof CompetitorWithBoat) {
return convertToCompetitorWithBoatDTO(competitor, ((CompetitorWithBoat) competitor).getBoat());
} else {
return convertToCompetitorWithBoatDTO(competitor, null);
}
}
@Override
public Map<CompetitorDTO, BoatDTO> convertToCompetitorAndBoatDTOs(Map<Competitor, Boat> competitorsAndBoats) {
Map<CompetitorDTO, BoatDTO> result = new HashMap<>();
for (Entry<Competitor, Boat> entry: competitorsAndBoats.entrySet()) {
CompetitorDTO competitorDTO = convertToCompetitorWithOptionalBoatDTO(entry.getKey());
BoatDTO boatDTO = convertToBoatDTO(entry.getValue());
result.put(competitorDTO, boatDTO);
}
return result;
}
}
@@ -11,6 +11,7 @@ import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
import com.sap.sailing.domain.common.ScoringSchemeType;
import com.sap.sailing.domain.common.dto.BoatDTO;
import com.sap.sailing.domain.common.dto.CompetitorDTO;
import com.sap.sailing.domain.common.dto.CompetitorWithoutBoatDTO;
import com.sap.sailing.domain.common.dto.FleetDTO;
import com.sap.sailing.domain.common.dto.PlacemarkDTO;
import com.sap.sailing.domain.common.dto.RaceDTO;
@@ -58,9 +59,11 @@ public interface DomainFactory extends SharedDomainFactory {
ScoringScheme createScoringScheme(ScoringSchemeType scoringSchemeType);
<T extends Competitor> CompetitorDTO convertToCompetitorDTO(T c);
CompetitorWithoutBoatDTO convertToCompetitorDTO(Competitor competitor);
CompetitorDTO convertToCompetitorDTO(Competitor c, Boat b);
CompetitorDTO convertToCompetitorWithOptionalBoatDTO(Competitor competitor);
CompetitorDTO convertToCompetitorDTO(Competitor competitor, Boat boat);
Map<CompetitorDTO, BoatDTO> convertToCompetitorAndBoatDTOs(Map<Competitor, Boat> competitorsAndBoats);
@@ -28,6 +28,7 @@ import com.sap.sailing.domain.common.ScoringSchemeType;
import com.sap.sailing.domain.common.WindSourceType;
import com.sap.sailing.domain.common.dto.BoatDTO;
import com.sap.sailing.domain.common.dto.CompetitorDTO;
import com.sap.sailing.domain.common.dto.CompetitorWithoutBoatDTO;
import com.sap.sailing.domain.common.dto.FleetDTO;
import com.sap.sailing.domain.common.dto.PlacemarkDTO;
import com.sap.sailing.domain.common.dto.PlacemarkOrderDTO;
@@ -147,11 +148,16 @@ public class DomainFactoryImpl extends SharedDomainFactoryImpl implements Domain
@Override
public CompetitorDTO convertToCompetitorDTO(Competitor competitor, Boat boat) {
return competitorAndBoatStore.convertToCompetitorDTO(competitor, boat);
return competitorAndBoatStore.convertToCompetitorWithBoatDTO(competitor, boat);
}
@Override
public <T extends Competitor> CompetitorDTO convertToCompetitorDTO(T competitor) {
public CompetitorDTO convertToCompetitorWithOptionalBoatDTO(Competitor competitor) {
return competitorAndBoatStore.convertToCompetitorWithOptionalBoatDTO(competitor);
}
@Override
public CompetitorWithoutBoatDTO convertToCompetitorDTO(Competitor competitor) {
return competitorAndBoatStore.convertToCompetitorDTO(competitor);
}
@@ -371,12 +377,11 @@ public class DomainFactoryImpl extends SharedDomainFactoryImpl implements Domain
return result;
}
/** TODO bug2822: Check usage of this method */
@Override
public List<CompetitorDTO> getCompetitorDTOList(Iterable<Competitor> competitors) {
List<CompetitorDTO> result = new ArrayList<CompetitorDTO>();
for (Competitor competitor : competitors) {
result.add(convertToCompetitorDTO(competitor, null));
result.add(convertToCompetitorWithOptionalBoatDTO(competitor));
}
return result;
}
@@ -366,7 +366,7 @@ public abstract class AbstractLeaderboardWithCache implements Leaderboard {
}
for (Competitor suppressedCompetitor : this.getSuppressedCompetitors()) {
result.setSuppressed(baseDomainFactory.convertToCompetitorDTO(suppressedCompetitor), true);
result.setSuppressed(baseDomainFactory.convertToCompetitorWithOptionalBoatDTO(suppressedCompetitor), true);
}
// Now create the race columns and, as a future task, set their competitorsFromBestToWorst, then wait for all these
// futures to finish:
@@ -453,7 +453,7 @@ public abstract class AbstractLeaderboardWithCache implements Leaderboard {
}
}
for (final Competitor competitor : this.getCompetitorsFromBestToWorst(timePoint)) {
CompetitorDTO competitorDTO = baseDomainFactory.convertToCompetitorDTO(competitor);
CompetitorDTO competitorDTO = baseDomainFactory.convertToCompetitorWithOptionalBoatDTO(competitor);
LeaderboardRowDTO row = new LeaderboardRowDTO();
row.competitor = competitorDTO;
row.fieldsByRaceColumnName = new HashMap<String, LeaderboardEntryDTO>();
@@ -800,7 +800,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
}
// Un-comment the following lines if you need to update the file used by LeaderboardDTODiffingTest, set a breakpoint
// and toggle the storeLeaderboardForTesting flag if you found a good version. See also bug 1417.
boolean storeLeaderboardForTesting = false;
boolean storeLeaderboardForTesting = true;
if (storeLeaderboardForTesting) {
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(new File("C:/Projekte/sailing/dev/git/java/com.sap.sailing.domain.test/resources/IncrementalLeaderboardDTO.ser")));
oos.writeObject(leaderboardDTO);
@@ -1097,7 +1097,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
private List<CompetitorDTO> convertToCompetitorDTOs(Iterable<? extends Competitor> iterable) {
List<CompetitorDTO> result = new ArrayList<CompetitorDTO>();
for (Competitor c : iterable) {
CompetitorDTO competitorDTO = baseDomainFactory.convertToCompetitorDTO(c);
CompetitorDTO competitorDTO = baseDomainFactory.convertToCompetitorWithOptionalBoatDTO(c);
result.add(competitorDTO);
}
return result;
@@ -1806,9 +1806,10 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
Map<CompetitorDTO, List<GPSFixDTOWithSpeedWindTackAndLegType>> result = new HashMap<CompetitorDTO, List<GPSFixDTOWithSpeedWindTackAndLegType>>();
TrackedRace trackedRace = getExistingTrackedRace(raceIdentifier);
if (trackedRace != null) {
for (Competitor competitor : trackedRace.getRace().getCompetitors()) {
for (Entry<Competitor, Boat> competitorAndBoat : trackedRace.getRace().getCompetitorsAndTheirBoats().entrySet()) {
Competitor competitor = competitorAndBoat.getKey();
if (fromPerCompetitorIdAsString.containsKey(competitor.getId().toString())) {
CompetitorDTO competitorDTO = baseDomainFactory.convertToCompetitorDTO(competitor);
CompetitorDTO competitorDTO = baseDomainFactory.convertToCompetitorDTO(competitor, competitorAndBoat.getValue());
List<GPSFixDTOWithSpeedWindTackAndLegType> fixesForCompetitor = new ArrayList<GPSFixDTOWithSpeedWindTackAndLegType>();
result.put(competitorDTO, fixesForCompetitor);
GPSFixTrack<Competitor, GPSFixMoving> track = trackedRace.getTrack(competitor);
@@ -2252,7 +2253,8 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
TrackedLegOfCompetitor trackedLeg = trackedRace.getTrackedLeg(competitor, actualTimePoint);
if (trackedLeg != null) {
int legNumberOneBased = race.getCourse().getLegs().indexOf(trackedLeg.getLeg()) + 1;
QuickRankDTO quickRankDTO = new QuickRankDTO(baseDomainFactory.convertToCompetitorDTO(competitor),
Boat boatOfCompetitor = trackedRace.getBoatOfCompetitor(competitor);
QuickRankDTO quickRankDTO = new QuickRankDTO(baseDomainFactory.convertToCompetitorDTO(competitor, boatOfCompetitor),
oneBasedRank, legNumberOneBased);
result.add(quickRankDTO);
}
@@ -3133,7 +3135,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
List<CompetitorDTO> competitorDTOs = new ArrayList<>();
List<Double> pointSums = new ArrayList<>();
for (Entry<Competitor, Double> e2 : e.getValue().entrySet()) {
competitorDTOs.add(baseDomainFactory.convertToCompetitorDTO(e2.getKey()));
competitorDTOs.add(baseDomainFactory.convertToCompetitorWithOptionalBoatDTO(e2.getKey()));
pointSums.add(e2.getValue());
}
result.add(new Triple<String, List<CompetitorDTO>, List<Double>>(e.getKey().getName(), competitorDTOs, pointSums));
@@ -3149,7 +3151,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
List<CompetitorDTO> competitorDTOs = new ArrayList<CompetitorDTO>();
for (Competitor competitor : e.getValue()) {
values.add(new Double(rank));
competitorDTOs.add(baseDomainFactory.convertToCompetitorDTO(competitor));
competitorDTOs.add(baseDomainFactory.convertToCompetitorWithOptionalBoatDTO(competitor));
rank++;
}
result.add(new Triple<String, List<CompetitorDTO>, List<Double>>(e.getKey().getName(), competitorDTOs, values));
@@ -3202,8 +3204,9 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
TrackedRace trackedRace = getExistingTrackedRace(raceIdentifier);
if (trackedRace != null) {
MeterDistance maxDistance = new MeterDistance(meters);
for (Competitor competitor : trackedRace.getRace().getCompetitors()) {
CompetitorDTO competitorDTO = baseDomainFactory.convertToCompetitorDTO(competitor);
for (Entry<Competitor, Boat> competitorAndBoat : trackedRace.getRace().getCompetitorsAndTheirBoats().entrySet()) {
Competitor competitor = competitorAndBoat.getKey();
CompetitorDTO competitorDTO = baseDomainFactory.convertToCompetitorDTO(competitor, competitorAndBoat.getValue());
if (from.containsKey(competitorDTO)) {
// get Track of competitor
GPSFixTrack<Competitor, GPSFixMoving> gpsFixTrack = trackedRace.getTrack(competitor);
@@ -3259,8 +3262,9 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
final TrackedRace trackedRace = getExistingTrackedRace(raceIdentifier);
if (trackedRace != null) {
Map<CompetitorDTO, Future<List<ManeuverDTO>>> futures = new HashMap<CompetitorDTO, Future<List<ManeuverDTO>>>();
for (final Competitor competitor : trackedRace.getRace().getCompetitors()) {
CompetitorDTO competitorDTO = baseDomainFactory.convertToCompetitorDTO(competitor);
for (Entry<Competitor, Boat> competitorAndBoat : trackedRace.getRace().getCompetitorsAndTheirBoats().entrySet()) {
Competitor competitor = competitorAndBoat.getKey();
CompetitorDTO competitorDTO = baseDomainFactory.convertToCompetitorDTO(competitor, competitorAndBoat.getValue());
if (from.containsKey(competitorDTO)) {
final TimePoint timePointFrom = new MillisecondsTimePoint(from.get(competitorDTO));
final TimePoint timePointTo = new MillisecondsTimePoint(to.get(competitorDTO));
@@ -4851,11 +4855,8 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
if (raceColumn != null && fleet != null) {
result = new ArrayList<>();
for (Competitor competitor: leaderboard.getCompetitors(raceColumn, fleet)) {
CompetitorDTO competitorDTO = baseDomainFactory.convertToCompetitorDTO(competitor);
Boat boatOfCompetitor = competitorAndBoats.get(competitor);
if (boatOfCompetitor != null) {
competitorDTO.setBoat(baseDomainFactory.convertToBoatDTO(boatOfCompetitor));
}
CompetitorDTO competitorDTO = baseDomainFactory.convertToCompetitorDTO(competitor, boatOfCompetitor);
result.add(competitorDTO);
}
}
@@ -4943,7 +4944,8 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
@Override
public CompetitorDTO addOrUpdateCompetitorWithBoat(CompetitorDTO competitor) throws URISyntaxException {
return getBaseDomainFactory().convertToCompetitorDTO(addOrUpdateCompetitorWithBoatInternal(competitor));
CompetitorWithBoat competitorWithBoat = addOrUpdateCompetitorWithBoatInternal(competitor);
return getBaseDomainFactory().convertToCompetitorWithOptionalBoatDTO(competitorWithBoat);
}
@Override