created PairingListEntryPoint to show Pairing list

This commit is contained in:
Raphael Müßeler committed 2017-12-07 13:37:24 +01:00
1 parent ab80ecf416
commit 82f9ba3af1
12 files changed
+224 -58

No files matched your search

@@ -0,0 +1,21 @@
package com.sap.sailing.domain.common.dto;
import java.io.Serializable;
import java.util.List;
public class PairingListDTO implements Serializable{
private static final long serialVersionUID = 102220422437194196L;
// TODO set Pair of competitors and boats
private List<List<List<CompetitorDTO>>> pairingList;
public PairingListDTO() { }
public PairingListDTO(List<List<List<CompetitorDTO>>> competitors) {
this.pairingList = competitors;
}
public List<List<List<CompetitorDTO>>> getPairingList() {
return pairingList;
}
}
@@ -43,24 +43,6 @@ h1 {
table {
border-collapse: separate; }
.leaderboardContent {
}
.leaderboardContent td, .leaderboardContent th {
/* vertical-align: bottom; */
line-height: 1.3;
/* padding-top: 2px; */
}
.leaderboardContent-toolbar {
}
.leaderboardLabel {
border-bottom: 2px solid #007dc0;
font-weight: bold;
margin: 5px;
}
.refreshAndSettings {
background: #f2f2f2;
@@ -35,6 +35,7 @@ import com.sap.sailing.domain.common.dto.BoatDTO;
import com.sap.sailing.domain.common.dto.CompetitorDTO;
import com.sap.sailing.domain.common.dto.FleetDTO;
import com.sap.sailing.domain.common.dto.IncrementalOrFullLeaderboardDTO;
import com.sap.sailing.domain.common.dto.PairingListDTO;
import com.sap.sailing.domain.common.dto.PairingListTemplateDTO;
import com.sap.sailing.domain.common.dto.PersonDTO;
import com.sap.sailing.domain.common.dto.RaceColumnDTO;
@@ -698,6 +699,9 @@ public interface SailingService extends RemoteService, FileStorageManagementGwtS
PairingListTemplateDTO calculatePairingList(StrippedLeaderboardDTO leaderboardDTO, int competitorsCount, int flightMultiplier) throws NotFoundException,IllegalArgumentException;
PairingListDTO getPairingListFromTemplate(PairingListTemplateDTO pairingListTemplateDTO, StrippedLeaderboardDTO leaderboardDTO)
throws NotFoundException;
void fillRaceLogsFromPairingListTemplate(PairingListTemplateDTO pairingListTemplateDTO, StrippedLeaderboardDTO leaderboardDTO)
throws NotFoundException, CompetitorRegistrationOnRaceLogDisabledException;
}
@@ -31,6 +31,7 @@ import com.sap.sailing.domain.common.dto.BoatDTO;
import com.sap.sailing.domain.common.dto.CompetitorDTO;
import com.sap.sailing.domain.common.dto.FleetDTO;
import com.sap.sailing.domain.common.dto.IncrementalOrFullLeaderboardDTO;
import com.sap.sailing.domain.common.dto.PairingListDTO;
import com.sap.sailing.domain.common.dto.PairingListTemplateDTO;
import com.sap.sailing.domain.common.dto.PersonDTO;
import com.sap.sailing.domain.common.dto.RaceColumnDTO;
@@ -876,6 +877,9 @@ public interface SailingServiceAsync extends ServerInfoRetriever, FileStorageMan
void calculatePairingList(StrippedLeaderboardDTO leaderboardDTO, int competitorCount, int flightMultiplier,
AsyncCallback<PairingListTemplateDTO> callback) throws NotFoundException,IllegalArgumentException ;
void getPairingListFromTemplate(PairingListTemplateDTO pairingListTemplateDTO, StrippedLeaderboardDTO leaderboardDTO,
AsyncCallback<PairingListDTO> callback);
void fillRaceLogsFromPairingListTemplate(PairingListTemplateDTO pairingListTemplateDTO, StrippedLeaderboardDTO leaderboardDTO,
AsyncCallback<Void> callback);
@@ -346,6 +346,7 @@ public interface StringMessages extends com.sap.sse.gwt.client.StringMessages,
String showWindSpeedSeries();
String showWindDirectionSeries();
String fleet();
String boat();
String boatClass();
String setDelayToLive();
String pleaseEnterNonEmptyVenue();
@@ -357,6 +357,7 @@ replicatingFromMaster=Replicating from master {0}:{2}, messaging port {3}:{1}, e
showWindSpeedSeries=Show wind speed data
showWindDirectionSeries=Show wind directions data
fleet=Fleet
boat=Boat
boatClass=Boat Class
setDelayToLive=Set delay to live
pleaseEnterNonEmptyVenue=Please enter a venue.
@@ -358,6 +358,7 @@ replicatingFromMaster=Repliziert von master {0}:{2}, Messaging Port {3}:{1}, Exc
showWindSpeedSeries=Daten für Windgeschwindigkeit zeigen
showWindDirectionSeries=Daten für Windrichtung zeigen
fleet=Flotte
boat=Boot
boatClass=Bootsklasse
setDelayToLive=Verzögerung zu ''Live'' setzen
pleaseEnterNonEmptyVenue=Bitte geben sie einen Veranstaltungsort ein.
@@ -0,0 +1,34 @@
package com.sap.sailing.gwt.ui.pairinglist;
import com.sap.sse.common.settings.generic.AbstractGenericSerializableSettings;
import com.sap.sse.common.settings.generic.IntegerSetting;
import com.sap.sse.common.settings.generic.StringSetting;
public class PairingListContextDefinition extends AbstractGenericSerializableSettings {
private static final long serialVersionUID = 6206953942932913058L;
private transient StringSetting leaderboardName;
private transient IntegerSetting flightMultiplier;
public PairingListContextDefinition() { }
public PairingListContextDefinition(String leaderboardName, int flightMultiplier) {
this.leaderboardName.setValue(leaderboardName);
this.flightMultiplier.setValue(flightMultiplier);
}
@Override
protected void addChildSettings() {
this.leaderboardName = new StringSetting("leaderboardName", this);
this.flightMultiplier = new IntegerSetting("flightMultiplier", this);
}
public String getLeaderboardName() {
return this.leaderboardName.getValue();
}
public int getFlightMultiplier() {
return this.flightMultiplier.getValue();
}
}
@@ -1,17 +1,32 @@
package com.sap.sailing.gwt.ui.pairinglist;
import java.util.List;
import com.google.gwt.dom.client.Style;
import com.google.gwt.dom.client.Style.TextAlign;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.DockLayoutPanel;
import com.google.gwt.user.client.ui.Grid;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.RootLayoutPanel;
import com.google.gwt.user.client.ui.ScrollPanel;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;
import com.sap.sailing.domain.common.dto.CompetitorDTO;
import com.sap.sailing.domain.common.dto.PairingListDTO;
import com.sap.sailing.domain.common.dto.PairingListTemplateDTO;
import com.sap.sailing.gwt.common.authentication.FixedSailingAuthentication;
import com.sap.sailing.gwt.common.authentication.SAPSailingHeaderWithAuthentication;
import com.sap.sailing.gwt.ui.client.AbstractSailingEntryPoint;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.shared.StrippedLeaderboardDTO;
import com.sap.sse.gwt.settings.SettingsToUrlSerializer;
public class PairingListEntryPoint extends AbstractSailingEntryPoint {
private PairingListContextDefinition pairingListContextDefinition;
@Override
protected void doOnModuleLoad() {
super.doOnModuleLoad();
@@ -23,17 +38,89 @@ public class PairingListEntryPoint extends AbstractSailingEntryPoint {
DockLayoutPanel mainPanel = new DockLayoutPanel(Unit.PX);
RootLayoutPanel.get().add(mainPanel);
SAPSailingHeaderWithAuthentication header = new SAPSailingHeaderWithAuthentication("PairingList");
SAPSailingHeaderWithAuthentication header = new SAPSailingHeaderWithAuthentication(getStringMessages().pairingLists());
new FixedSailingAuthentication(getUserService(), header.getAuthenticationMenuView());
mainPanel.addNorth(header, 75);
mainPanel.add(new ScrollPanel(createPairingListPanel()));
pairingListContextDefinition = new SettingsToUrlSerializer()
.deserializeFromCurrentLocation(new PairingListContextDefinition());
sailingService.getLeaderboard(pairingListContextDefinition.getLeaderboardName(), new AsyncCallback<StrippedLeaderboardDTO>() {
@Override
public void onFailure(Throwable caught) {
try {
throw caught;
} catch (Throwable e) {
e.printStackTrace();
}
}
@Override
public void onSuccess(StrippedLeaderboardDTO result) {
PairingListTemplateDTO pairingListTemplateDTO = new PairingListTemplateDTO(result.competitorsCount,
pairingListContextDefinition.getFlightMultiplier());
sailingService.getPairingListFromTemplate(pairingListTemplateDTO, result, new AsyncCallback<PairingListDTO>() {
@Override
public void onSuccess(PairingListDTO result) {
mainPanel.add(createPairingListPanel(result));
}
@Override
public void onFailure(Throwable caught) {
try {
throw caught;
} catch (Throwable e) {
e.printStackTrace();
}
}
});
}
});
}
private Widget createPairingListPanel() {
private Widget createPairingListPanel(PairingListDTO pairingListDTO) {
VerticalPanel pairingListPanel = new VerticalPanel();
pairingListPanel.ensureDebugId("PairingListPanel");
pairingListPanel.getElement().setPropertyString("overflow", "auto");
// TODO show pairing list
final int flightCount = pairingListDTO.getPairingList().size();
final int groupCount = pairingListDTO.getPairingList().get(0).size();
final int boatCount = pairingListDTO.getPairingList().get(0).get(0).size();
Grid pairingListGrid = new Grid(flightCount * groupCount + 1, boatCount + 1);
pairingListGrid.setCellPadding(15);
int groupCounter = 1;
int boatCounter = 1;
for (int i = 1; i <= boatCount; i++) {
pairingListGrid.setWidget(0, i, new Label(getStringMessages().boat() + " " + String.valueOf(i)));
pairingListGrid.getCellFormatter().getElement(0, i).getStyle().setTextAlign(TextAlign.CENTER);
}
for (List<List<CompetitorDTO>> flight : pairingListDTO.getPairingList()) {
for (List<CompetitorDTO> group : flight) {
pairingListGrid.setWidget(groupCounter, 0, new Label(getStringMessages().fleet() + " " + String.valueOf(groupCounter)));
boatCounter = 1;
for (CompetitorDTO competitorDTO : group) {
pairingListGrid.setWidget(groupCounter, boatCounter, new Label(competitorDTO.getSailID()));
pairingListGrid.getCellFormatter().getElement(groupCounter, boatCounter).getStyle()
.setFontWeight(Style.FontWeight.BOLD);
pairingListGrid.getCellFormatter().getElement(groupCounter, boatCounter).getStyle()
.setTextAlign(TextAlign.CENTER);
pairingListGrid.getCellFormatter().getElement(groupCounter, boatCounter).getStyle()
.setPadding(5, Unit.PX);
boatCounter++;
}
groupCounter++;
}
}
pairingListPanel.add(pairingListGrid);
return pairingListPanel;
}
@@ -199,6 +199,7 @@ import com.sap.sailing.domain.common.dto.FullLeaderboardDTO;
import com.sap.sailing.domain.common.dto.IncrementalLeaderboardDTO;
import com.sap.sailing.domain.common.dto.IncrementalOrFullLeaderboardDTO;
import com.sap.sailing.domain.common.dto.LeaderboardDTO;
import com.sap.sailing.domain.common.dto.PairingListDTO;
import com.sap.sailing.domain.common.dto.PairingListTemplateDTO;
import com.sap.sailing.domain.common.dto.PersonDTO;
import com.sap.sailing.domain.common.dto.RaceColumnDTO;
@@ -493,7 +494,6 @@ import com.sap.sse.gwt.shared.replication.ReplicaDTO;
import com.sap.sse.gwt.shared.replication.ReplicationMasterDTO;
import com.sap.sse.gwt.shared.replication.ReplicationStateDTO;
import com.sap.sse.i18n.ResourceBundleStringMessages;
import com.sap.sse.pairinglist.CompetitionFormat;
import com.sap.sse.pairinglist.PairingList;
import com.sap.sse.pairinglist.PairingListTemplate;
import com.sap.sse.replication.OperationWithResult;
@@ -6792,10 +6792,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
@Override
public PairingListTemplateDTO calculatePairingList(StrippedLeaderboardDTO leaderboardDTO, int competitorsCount,
int flightMultiplier) throws NotFoundException,IllegalArgumentException {
if(!(getLeaderboardByName(leaderboardDTO.getName()) instanceof LeaderboardThatHasRegattaLike)){
throw new IllegalArgumentException("This Leaderboard is not suiteable for a Pairinglist!");
}
int flightMultiplier) {
PairingListTemplate template = getService().createPairingListFromRegatta(leaderboardDTO, competitorsCount,
flightMultiplier);
int flightCount = leaderboardDTO.getRaceColumnsCount();
@@ -6804,41 +6801,41 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
competitorsCount, flightMultiplier, template.getPairingListTemplate(), template.getQuality());
}
@Override
public PairingListDTO getPairingListFromTemplate(PairingListTemplateDTO pairingListTemplateDTO,
StrippedLeaderboardDTO leaderboardDTO) throws NotFoundException {
Leaderboard leaderboard = getLeaderboardByName(leaderboardDTO.getName());
PairingListTemplate pairingListTemplate = getService().createPairingListFromRegatta(leaderboardDTO,
pairingListTemplateDTO.getCompetitorCount(), pairingListTemplateDTO.getFlightMultiplier());
PairingList<RaceColumn, Fleet, Competitor> pairingList =
getService().getPairingListFromTemplate(pairingListTemplate, leaderboard);
List<List<List<CompetitorDTO>>> result = new ArrayList<>();
for (RaceColumn raceColumn : leaderboard.getRaceColumns()) {
List<List<CompetitorDTO>> fleets = new ArrayList<>();
for (Fleet fleet : raceColumn.getFleets()) {
fleets.add(this.convertToCompetitorDTOs(pairingList.getCompetitors(raceColumn, fleet)));
}
result.add(fleets);
}
return new PairingListDTO(result);
}
// TODO remove StrippedLeaderboardDTO
@Override
public void fillRaceLogsFromPairingListTemplate(PairingListTemplateDTO pairingListTemplateDTO,
StrippedLeaderboardDTO leaderboardDTO) throws NotFoundException, CompetitorRegistrationOnRaceLogDisabledException {
PairingListTemplate template = getService().createPairingListFromRegatta(leaderboardDTO, pairingListTemplateDTO.getCompetitorCount(),
PairingListTemplate pairingListTemplate = getService().createPairingListFromRegatta(leaderboardDTO, pairingListTemplateDTO.getCompetitorCount(),
pairingListTemplateDTO.getFlightMultiplier());
Leaderboard leaderboard = getLeaderboardByName(leaderboardDTO.getName());
if(pairingListTemplateDTO.getFlightMultiplier()>1){
//FIXME type cast...
LeaderboardThatHasRegattaLike leaderboardThatHasRegattaLike = (LeaderboardThatHasRegattaLike) leaderboard;
leaderboardThatHasRegattaLike.getRegattaLike().setFleetsCanRunInParallelToTrue();
//TODO Warning to user
}
PairingList<RaceColumn, Fleet, Competitor> pairingList = template.createPairingList(new CompetitionFormat<RaceColumn, Fleet, Competitor>() {
@Override
public Iterable<RaceColumn> getFlights() {
return leaderboard.getRaceColumns();
}
@Override
public Iterable<Competitor> getCompetitors() {
return leaderboard.getAllCompetitors();
}
@Override
public Iterable<Fleet> getGroups(RaceColumn flight) {
// FIXME
return (Iterable<Fleet>) leaderboard.getRaceColumnByName(flight.getName()).getFleets();
}
@Override
public int getGroupsCount() {
return Util.size(Util.get(leaderboard.getRaceColumns(), 0).getFleets());
}
});
PairingList<RaceColumn, Fleet, Competitor> pairingList = getService().getPairingListFromTemplate(pairingListTemplate, leaderboard);
for (RaceColumn raceColumn : leaderboard.getRaceColumns()) {
for (Fleet fleet : raceColumn.getFleets()) {
Set<CompetitorDTO> competitors = new HashSet<CompetitorDTO>(this.convertToCompetitorDTOs(pairingList.getCompetitors(raceColumn, fleet)));
@@ -97,6 +97,7 @@ import com.sap.sse.common.search.KeywordQuery;
import com.sap.sse.common.search.Result;
import com.sap.sse.common.search.Searchable;
import com.sap.sse.filestorage.FileStorageManagementService;
import com.sap.sse.pairinglist.PairingList;
import com.sap.sse.pairinglist.PairingListTemplate;
import com.sap.sse.replication.impl.ReplicableWithObjectInputStream;
import com.sap.sse.shared.media.ImageDescriptor;
@@ -827,4 +828,6 @@ public interface RacingEventService extends TrackedRegattaRegistry, RegattaFetch
*/
PairingListTemplate createPairingListFromRegatta(AbstractLeaderboardDTO leaderboardDTO, int competitorsCount,
int flightMultiplier);
PairingList<RaceColumn, Fleet, Competitor> getPairingListFromTemplate(PairingListTemplate pairingListTemplate, Leaderboard leaderboard);
}
@@ -1,6 +1,6 @@
package com.sap.sailing.server.impl;
import java.io.BufferedReader;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
@@ -259,7 +259,9 @@ import com.sap.sse.common.search.ResultImpl;
import com.sap.sse.concurrent.LockUtil;
import com.sap.sse.concurrent.NamedReentrantReadWriteLock;
import com.sap.sse.filestorage.FileStorageManagementService;
import com.sap.sse.pairinglist.CompetitionFormat;
import com.sap.sse.pairinglist.PairingFrameProvider;
import com.sap.sse.pairinglist.PairingList;
import com.sap.sse.pairinglist.PairingListTemplate;
import com.sap.sse.pairinglist.impl.PairingListTemplateFactoryImpl;
import com.sap.sse.replication.OperationExecutionListener;
@@ -4179,5 +4181,34 @@ public class RacingEventServiceImpl implements RacingEventService, ClearStateTes
return null;
}
}
@Override
public PairingList<RaceColumn, Fleet, Competitor> getPairingListFromTemplate(PairingListTemplate pairingListTemplate,
Leaderboard leaderboard) {
PairingList<RaceColumn, Fleet, Competitor> pairingList = pairingListTemplate.createPairingList(new CompetitionFormat<RaceColumn, Fleet, Competitor>() {
@Override
public Iterable<RaceColumn> getFlights() {
return leaderboard.getRaceColumns();
}
@Override
public Iterable<Competitor> getCompetitors() {
return (Iterable<Competitor>) leaderboard.getAllCompetitors();
}
@Override
public Iterable<Fleet> getGroups(RaceColumn flight) {
// FIXME
return (Iterable<Fleet>) leaderboard.getRaceColumnByName(flight.getName()).getFleets();
}
@Override
public int getGroupsCount() {
return Util.size(Util.get(leaderboard.getRaceColumns(), 0).getFleets());
}
});
return pairingList;
}
}