renamed a few classes around official result importing; added ScoreCorrections interfaces and b+m-based impls

This commit is contained in:
Axel Uhl committed 2012-06-12 14:45:50 +02:00
1 parent 72faf2e17d
commit dd0e4b7a69
14 files changed
+249 -59

No files matched your search

@@ -0,0 +1,51 @@
package com.sap.sailing.domain.common;
import java.util.Set;
public interface RegattaScoreCorrections {
ScoreCorrectionProvider getProvider();
String getRegattaName();
/**
* Lists the races in the order they are listed in the regatta, from first to last
*/
Iterable<ScoreCorrectionsForRace> getScoreCorrectionsForRaces();
public interface ScoreCorrectionsForRace {
String getRaceNameOrNumber();
Set<String> getSailIDs();
ScoreCorrectionForCompetitorInRace getScoreCorrectionForCompetitor(String sailID);
}
public interface ScoreCorrectionForCompetitorInRace {
/**
* Must not return <code>null</code>
*/
String getSailID();
/**
* @return an optional competitor name; may be <code>null</code> if not known
*/
String getCompetitorName();
/**
* The points the competitor scored in the race
*/
Double getPoints();
/**
* {@link MaxPointsReason#NONE} if no reason for disqualification or score correction is given, otherwise the reason
* for disqualification / score correction
*/
MaxPointsReason getMaxPointsReason();
/**
* @return <code>null</code> if it's not known whether the race was discarded or not; otherwise an authoritative
* statement about discarding
*/
Boolean isDiscarded();
}
}
@@ -27,5 +27,5 @@ public interface ScoreCorrectionProvider extends Named {
public Map<String, Set<Pair<String, TimePoint>>> getHasResultsForBoatClassFromDateByEventName() throws IOException,
SAXException, ParserConfigurationException;
public ScoreCorrections getScoreCorrections(String eventName, String boatClassName, TimePoint millisecondsTimePoint);
public RegattaScoreCorrections getScoreCorrections(String eventName, String boatClassName, TimePoint millisecondsTimePoint) throws IOException, SAXException, ParserConfigurationException;
}
@@ -1,5 +0,0 @@
package com.sap.sailing.domain.common;
public interface ScoreCorrections {
}
@@ -32,7 +32,7 @@ import com.sap.sailing.gwt.ui.shared.RaceMapDataDTO;
import com.sap.sailing.gwt.ui.shared.RaceTimesInfoDTO;
import com.sap.sailing.gwt.ui.shared.RegattaDTO;
import com.sap.sailing.gwt.ui.shared.ReplicationStateDTO;
import com.sap.sailing.gwt.ui.shared.ScoreCorrectionDTO;
import com.sap.sailing.gwt.ui.shared.RegattaScoreCorrectionDTO;
import com.sap.sailing.gwt.ui.shared.ScoreCorrectionProviderDTO;
import com.sap.sailing.gwt.ui.shared.StrippedLeaderboardDTO;
import com.sap.sailing.gwt.ui.shared.SwissTimingConfigurationDTO;
@@ -229,6 +229,6 @@ public interface SailingService extends RemoteService {
Iterable<ScoreCorrectionProviderDTO> getScoreCorrectionProviderDTOs() throws Exception;
ScoreCorrectionDTO getScoreCorrections(String scoreCorrectionProviderName, String eventName, String boatClassName,
Date timePointWhenResultPublished);
RegattaScoreCorrectionDTO getScoreCorrections(String scoreCorrectionProviderName, String eventName, String boatClassName,
Date timePointWhenResultPublished) throws Exception;
}
@@ -31,7 +31,7 @@ import com.sap.sailing.gwt.ui.shared.RaceDTO;
import com.sap.sailing.gwt.ui.shared.RaceMapDataDTO;
import com.sap.sailing.gwt.ui.shared.RaceTimesInfoDTO;
import com.sap.sailing.gwt.ui.shared.ReplicationStateDTO;
import com.sap.sailing.gwt.ui.shared.ScoreCorrectionDTO;
import com.sap.sailing.gwt.ui.shared.RegattaScoreCorrectionDTO;
import com.sap.sailing.gwt.ui.shared.ScoreCorrectionProviderDTO;
import com.sap.sailing.gwt.ui.shared.StrippedLeaderboardDTO;
import com.sap.sailing.gwt.ui.shared.SwissTimingConfigurationDTO;
@@ -391,5 +391,5 @@ public interface SailingServiceAsync {
void getScoreCorrectionProviderDTOs(AsyncCallback<Iterable<ScoreCorrectionProviderDTO>> callback);
void getScoreCorrections(String scoreCorrectionProviderName, String eventName, String boatClassName,
Date timePointWhenResultPublished, AsyncCallback<ScoreCorrectionDTO> asyncCallback);
Date timePointWhenResultPublished, AsyncCallback<RegattaScoreCorrectionDTO> asyncCallback);
}
@@ -1,28 +1,20 @@
package com.sap.sailing.gwt.ui.leaderboardedit;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Widget;
import com.sap.sailing.gwt.ui.client.DataEntryDialog;
import com.sap.sailing.gwt.ui.client.ErrorReporter;
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.shared.LeaderboardDTO;
import com.sap.sailing.gwt.ui.shared.ScoreCorrectionDTO;
import com.sap.sailing.gwt.ui.shared.RegattaScoreCorrectionDTO;
public class MatchAndApplyScoreCorrectionsDialog extends DataEntryDialog<ScoreCorrectionsApplicationInstructions> {
public MatchAndApplyScoreCorrectionsDialog(String title, String message, String okButtonName,
String cancelButtonName,
com.sap.sailing.gwt.ui.client.DataEntryDialog.Validator<ScoreCorrectionsApplicationInstructions> validator,
AsyncCallback<ScoreCorrectionsApplicationInstructions> callback) {
super(title, message, okButtonName, cancelButtonName, validator, callback);
// TODO Auto-generated constructor stub
}
public MatchAndApplyScoreCorrectionsDialog(LeaderboardDTO leaderboard, StringMessages stringMessages,
SailingServiceAsync sailingService, ErrorReporter errorReporter, ScoreCorrectionDTO result) {
SailingServiceAsync sailingService, ErrorReporter errorReporter, RegattaScoreCorrectionDTO result) {
super(stringMessages.assignRaceNumbersToRaceColumns(), stringMessages.assignRaceNumbersToRaceColumns(),
stringMessages.ok(), stringMessages.cancel(), new Validator(), new Callback());
// TODO Auto-generated constructor stub
}
@Override
@@ -31,6 +23,12 @@ public class MatchAndApplyScoreCorrectionsDialog extends DataEntryDialog<ScoreCo
return null;
}
@Override
protected Widget getAdditionalWidget() {
// TODO Auto-generated method stub
return super.getAdditionalWidget();
}
private static class Validator implements DataEntryDialog.Validator<ScoreCorrectionsApplicationInstructions> {
@Override
public String getErrorMessage(ScoreCorrectionsApplicationInstructions valueToValidate) {
@@ -9,17 +9,14 @@ import com.google.gwt.user.client.ui.ListBox;
import com.google.gwt.user.client.ui.Widget;
import com.sap.sailing.domain.common.impl.Util.Pair;
import com.sap.sailing.domain.common.impl.Util.Triple;
import com.sap.sailing.gwt.ui.actions.GetLeaderboardByNameAction;
import com.sap.sailing.gwt.ui.client.DataEntryDialog;
import com.sap.sailing.gwt.ui.client.ErrorReporter;
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.shared.LeaderboardDTO;
import com.sap.sailing.gwt.ui.shared.ScoreCorrectionDTO;
import com.sap.sailing.gwt.ui.shared.RegattaScoreCorrectionDTO;
public class ResultSelectionAndApplyDialog extends DataEntryDialog<Triple<String, String, Pair<String, Date>>> {
private final StringMessages stringMessages;
private final ErrorReporter errorReporter;
private final LinkedHashMap<String, Triple<String, String, Pair<String, Date>>> values;
private ListBox listBox;
@@ -31,8 +28,6 @@ public class ResultSelectionAndApplyDialog extends DataEntryDialog<Triple<String
super(stringMessages.selectResultListToImportFrom(), stringMessages.selectResultListToImportFrom(),
stringMessages.ok(), stringMessages.cancel(), new Validator(),
new Callback(sailingService, leaderboard, errorReporter, stringMessages));
this.stringMessages = stringMessages;
this.errorReporter = errorReporter;
this.values = new LinkedHashMap<String, Triple<String, String, Pair<String, Date>>>();
for (Triple<String, String, Pair<String, Date>> v : values) {
this.values.put("" + v.getA() + ": " + v.getB() + " - " + v.getC().getA() + " "
@@ -74,7 +69,7 @@ public class ResultSelectionAndApplyDialog extends DataEntryDialog<Triple<String
final String boatClassName = result.getC().getA();
final Date timePointWhenResultPublished = result.getC().getB();
sailingService.getScoreCorrections(scoreCorrectionProviderName, eventName, boatClassName, timePointWhenResultPublished,
new AsyncCallback<ScoreCorrectionDTO>() {
new AsyncCallback<RegattaScoreCorrectionDTO>() {
@Override
public void onFailure(Throwable caught) {
errorReporter.reportError(stringMessages.errorObtainingScoreCorrections(scoreCorrectionProviderName,
@@ -82,7 +77,7 @@ public class ResultSelectionAndApplyDialog extends DataEntryDialog<Triple<String
}
@Override
public void onSuccess(ScoreCorrectionDTO result) {
public void onSuccess(RegattaScoreCorrectionDTO result) {
new MatchAndApplyScoreCorrectionsDialog(leaderboard, stringMessages, sailingService, errorReporter, result).show();
}
});
@@ -76,7 +76,7 @@ import com.sap.sailing.domain.common.RegattaIdentifier;
import com.sap.sailing.domain.common.RegattaName;
import com.sap.sailing.domain.common.RegattaNameAndRaceName;
import com.sap.sailing.domain.common.ScoreCorrectionProvider;
import com.sap.sailing.domain.common.ScoreCorrections;
import com.sap.sailing.domain.common.RegattaScoreCorrections;
import com.sap.sailing.domain.common.Speed;
import com.sap.sailing.domain.common.Tack;
import com.sap.sailing.domain.common.TimePoint;
@@ -148,7 +148,7 @@ import com.sap.sailing.gwt.ui.shared.RegattaDTO;
import com.sap.sailing.gwt.ui.shared.ReplicaDTO;
import com.sap.sailing.gwt.ui.shared.ReplicationMasterDTO;
import com.sap.sailing.gwt.ui.shared.ReplicationStateDTO;
import com.sap.sailing.gwt.ui.shared.ScoreCorrectionDTO;
import com.sap.sailing.gwt.ui.shared.RegattaScoreCorrectionDTO;
import com.sap.sailing.gwt.ui.shared.ScoreCorrectionProviderDTO;
import com.sap.sailing.gwt.ui.shared.SeriesDTO;
import com.sap.sailing.gwt.ui.shared.SpeedWithBearingDTO;
@@ -2051,9 +2051,9 @@ public class SailingServiceImpl extends RemoteServiceServlet implements SailingS
}
@Override
public ScoreCorrectionDTO getScoreCorrections(String scoreCorrectionProviderName, String eventName,
String boatClassName, Date timePointWhenResultPublished) {
ScoreCorrectionDTO result = null;
public RegattaScoreCorrectionDTO getScoreCorrections(String scoreCorrectionProviderName, String eventName,
String boatClassName, Date timePointWhenResultPublished) throws Exception {
RegattaScoreCorrectionDTO result = null;
for (ScoreCorrectionProvider scp : getScoreCorrectionProviders2()) {
if (scp.getName().equals(scoreCorrectionProviderName)) {
result = createScoreCorrection(scp.getScoreCorrections(eventName, boatClassName,
@@ -2063,8 +2063,8 @@ public class SailingServiceImpl extends RemoteServiceServlet implements SailingS
return result;
}
private ScoreCorrectionDTO createScoreCorrection(ScoreCorrections scoreCorrections) {
private RegattaScoreCorrectionDTO createScoreCorrection(RegattaScoreCorrections scoreCorrections) {
// TODO Auto-generated method stub
return new ScoreCorrectionDTO();
return new RegattaScoreCorrectionDTO();
}
}
@@ -4,7 +4,7 @@ import java.util.Map;
import com.google.gwt.user.client.rpc.IsSerializable;
public class ScoreCorrectionDTO implements IsSerializable {
public class RegattaScoreCorrectionDTO implements IsSerializable {
public class ScoreCorrectionEntryDTO implements IsSerializable {
public ScoreCorrectionEntryDTO() {}
@@ -13,9 +13,9 @@ public class ScoreCorrectionDTO implements IsSerializable {
private String providerName;
private Map<Integer, Map<CompetitorDTO, ScoreCorrectionEntryDTO>> scoreCorrectionsByRaceNumber;
public ScoreCorrectionDTO() {}
public RegattaScoreCorrectionDTO() {}
public ScoreCorrectionDTO(String providerName,
public RegattaScoreCorrectionDTO(String providerName,
Map<Integer, Map<CompetitorDTO, ScoreCorrectionEntryDTO>> scoreCorrectionsByRaceNumber) {
super();
this.providerName = providerName;
@@ -22,4 +22,6 @@ public interface RaceSummary {
* Retrieves the {@link BoatResultInRace} data that <code>boat</code> achieved in the race summarized by this object
*/
BoatResultInRace getBoatResults(Boat boat);
Boat getBoat(String sailingNumber);
}
@@ -1,5 +1,6 @@
package com.sap.sailing.kiworesultimport.impl;
import java.util.HashMap;
import java.util.Map;
import com.sap.sailing.kiworesultimport.Boat;
@@ -9,6 +10,7 @@ import com.sap.sailing.kiworesultimport.RaceSummary;
public class RaceSummaryImpl implements RaceSummary {
private final String boatClassName;
private final Map<Boat, BoatResultInRace> boatResults;
private final Map<String, Boat> sailingNumberToBoat;
private final Iterable<String> fleetNames;
private final int raceNumber;
@@ -18,6 +20,10 @@ public class RaceSummaryImpl implements RaceSummary {
this.boatResults = boatResults;
this.raceNumber = raceNumber;
this.fleetNames = fleetNames;
this.sailingNumberToBoat = new HashMap<String, Boat>();
for (Boat boat : boatResults.keySet()) {
sailingNumberToBoat.put(boat.getSailingNumber(), boat);
}
}
@Override
@@ -39,6 +45,11 @@ public class RaceSummaryImpl implements RaceSummary {
public BoatResultInRace getBoatResults(Boat boat) {
return boatResults.get(boat);
}
@Override
public Boat getBoat(String sailingNumber) {
return sailingNumberToBoat.get(sailingNumber);
}
@Override
public Iterable<String> getFleetNames() {
@@ -0,0 +1,130 @@
package com.sap.sailing.kiworesultimport.impl;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import com.sap.sailing.domain.common.MaxPointsReason;
import com.sap.sailing.domain.common.RegattaScoreCorrections;
import com.sap.sailing.domain.common.ScoreCorrectionProvider;
import com.sap.sailing.kiworesultimport.Boat;
import com.sap.sailing.kiworesultimport.BoatResultInRace;
import com.sap.sailing.kiworesultimport.Crewmember;
import com.sap.sailing.kiworesultimport.RaceSummary;
import com.sap.sailing.kiworesultimport.RegattaSummary;
public class RegattaSummaryAsScoreCorrections implements RegattaScoreCorrections {
private final RegattaSummary regattaSummary;
private final ScoreCorrectionProvider provider;
public RegattaSummaryAsScoreCorrections(RegattaSummary regattaSummary, ScoreCorrectionProvider provider) {
super();
this.regattaSummary = regattaSummary;
this.provider = provider;
}
@Override
public String getRegattaName() {
return regattaSummary.getEventName()+" ("+regattaSummary.getBoatClassName()+")";
}
@Override
public ScoreCorrectionProvider getProvider() {
return provider;
}
@Override
public Iterable<ScoreCorrectionsForRace> getScoreCorrectionsForRaces() {
List<ScoreCorrectionsForRace> result = new ArrayList<ScoreCorrectionsForRace>();
for (RaceSummary raceSummary : regattaSummary.getRaces()) {
result.add(new ZipFileScoreCorrectionsForRace(raceSummary));
}
return result;
}
private class ZipFileScoreCorrectionsForRace implements ScoreCorrectionsForRace {
private final RaceSummary raceSummary;
public ZipFileScoreCorrectionsForRace(RaceSummary raceSummary) {
this.raceSummary = raceSummary;
}
@Override
public String getRaceNameOrNumber() {
return ""+raceSummary.getRaceNumber();
}
@Override
public Set<String> getSailIDs() {
Set<String> result = new HashSet<String>();
for (Boat boat : raceSummary.getBoats()) {
result.add(boat.getSailingNumber());
}
return result;
}
@Override
public ScoreCorrectionForCompetitorInRace getScoreCorrectionForCompetitor(String sailID) {
ScoreCorrectionForCompetitorInRace result = null;
final Boat boat = raceSummary.getBoat(sailID);
if (boat != null) {
String boatName = getNameForBoat(boat);
result = new ZipFileScoreCorrectionForCompetitorInRace(raceSummary.getBoatResults(boat), sailID, boatName);
}
return result;
}
private String getNameForBoat(Boat boat) {
String result = boat.getName(); // often empty
if (result == null || result.trim().length() == 0) {
StringBuilder sb = new StringBuilder();
sb.append(boat.getCrew().getSkipper().getName());
for (Crewmember crewmember : boat.getCrew().getCrewmembers()) {
sb.append(" + ");
sb.append(crewmember.getName());
}
result = sb.toString();
}
return result;
}
}
private class ZipFileScoreCorrectionForCompetitorInRace implements ScoreCorrectionForCompetitorInRace {
private final BoatResultInRace boatResults;
private final String sailID;
private final String boatName;
public ZipFileScoreCorrectionForCompetitorInRace(BoatResultInRace boatResults, String sailID, String boatName) {
this.boatResults = boatResults;
this.sailID = sailID;
this.boatName = boatName;
}
@Override
public String getSailID() {
return sailID;
}
@Override
public String getCompetitorName() {
return boatName;
}
@Override
public Double getPoints() {
return boatResults.getPoints();
}
@Override
public MaxPointsReason getMaxPointsReason() {
return boatResults.getMaxPointsReason();
}
@Override
public Boolean isDiscarded() {
return boatResults.isDiscarded();
}
}
}
@@ -3,8 +3,10 @@ package com.sap.sailing.kiworesultimport.impl;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -12,8 +14,8 @@ import javax.xml.parsers.ParserConfigurationException;
import org.xml.sax.SAXException;
import com.sap.sailing.domain.common.RegattaScoreCorrections;
import com.sap.sailing.domain.common.ScoreCorrectionProvider;
import com.sap.sailing.domain.common.ScoreCorrections;
import com.sap.sailing.domain.common.TimePoint;
import com.sap.sailing.domain.common.impl.Util.Pair;
import com.sap.sailing.kiworesultimport.ParserFactory;
@@ -48,7 +50,7 @@ public class ScoreCorrectionProviderImpl implements ScoreCorrectionProvider {
@Override
public Map<String, Set<Pair<String, TimePoint>>> getHasResultsForBoatClassFromDateByEventName()
throws IOException, SAXException, ParserConfigurationException {
Map<String, Set<Pair<String, TimePoint>>> result = new HashMap<String, Set<Pair<String,TimePoint>>>();
Map<String, Set<Pair<String, TimePoint>>> result = new HashMap<String, Set<Pair<String, TimePoint>>>();
ZipFileParser zipFileParser = ParserFactory.INSTANCE.createZipFileParser();
for (File file : scanDir.listFiles()) {
String eventName = null;
@@ -68,10 +70,30 @@ public class ScoreCorrectionProviderImpl implements ScoreCorrectionProvider {
return result;
}
private Iterable<RegattaSummary> getAllRegattaSummaries() throws IOException, SAXException, ParserConfigurationException {
List<RegattaSummary> result = new ArrayList<RegattaSummary>();
ZipFileParser zipFileParser = ParserFactory.INSTANCE.createZipFileParser();
for (File file : scanDir.listFiles()) {
if (file.getName().toLowerCase().endsWith(".zip")) {
ZipFile zipFile = zipFileParser.parse(new FileInputStream(file));
for (RegattaSummary regattaSummary : zipFile.getRegattaSummaries()) {
result.add(regattaSummary);
}
}
}
return result;
}
@Override
public ScoreCorrections getScoreCorrections(String eventName, String boatClassName, TimePoint millisecondsTimePoint) {
// TODO cache previous ZipFile results by event name and boatClassName and TimePoint to be able to deliver now
return new ZipFileAsScoreCorrections(/* TODO */ null);
public RegattaScoreCorrections getScoreCorrections(String eventName, String boatClassName,
TimePoint timePointPublished) throws IOException, SAXException, ParserConfigurationException {
for (RegattaSummary regattaSummary : getAllRegattaSummaries()) {
if (regattaSummary.getEventName().equals(eventName) && regattaSummary.getBoatClassName().equals(boatClassName) &&
regattaSummary.getTimePointPublished().equals(timePointPublished)) {
return new RegattaSummaryAsScoreCorrections(regattaSummary, this);
}
}
return null;
}
}
@@ -1,14 +0,0 @@
package com.sap.sailing.kiworesultimport.impl;
import com.sap.sailing.domain.common.ScoreCorrections;
import com.sap.sailing.kiworesultimport.ZipFile;
public class ZipFileAsScoreCorrections implements ScoreCorrections {
private final ZipFile zipFile;
public ZipFileAsScoreCorrections(ZipFile zipFile) {
super();
this.zipFile = zipFile;
}
}