mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-11-13 06:02:10 +00:00
Merge branch 'bug3484_ui' into bug3484
Conflicts: java/com.sap.sse/src/com/sap/sse/pairinglist/impl/PairingListTemplateFactoryImpl.java java/com.sap.sse/src/com/sap/sse/pairinglist/impl/PairingListTemplateImpl.java
This commit is contained in:
commit
9f54fb71c2
24 files changed
+423
-17
No files matched your search
@@ -28,3 +28,5 @@ Export-Package: com.sap.sailing.domain.common,
|
||||
Require-Bundle: com.sap.sse.common,
|
||||
com.sap.sse.security.common,
|
||||
com.sap.sse.datamining.annotations;bundle-version="1.0.0"
|
||||
Import-Package: com.sap.sse.pairinglist,
|
||||
com.sap.sse.pairinglist.impl
|
||||
+61
@@ -0,0 +1,61 @@
|
||||
package com.sap.sailing.domain.common.dto;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
public class PairingListTemplateDTO implements Serializable {
|
||||
private static final long serialVersionUID = 7155851765154315798L;
|
||||
private int[][] pairingListTemplate;
|
||||
private double quality;
|
||||
private int flightCount = 0;
|
||||
private int groupCount = 0;
|
||||
private int competitorCount = 0;
|
||||
private int flightMultiplier = 0;
|
||||
|
||||
public PairingListTemplateDTO() { }
|
||||
|
||||
public PairingListTemplateDTO(int competitorCount, int flightMultiplier) {
|
||||
this(0, 0, competitorCount, flightMultiplier, null, 0.0);
|
||||
}
|
||||
|
||||
public PairingListTemplateDTO(int competitorCount, int flightMultiplier, int[][] pairingListTemplate, double quality) {
|
||||
this(0, 0, competitorCount, flightMultiplier, pairingListTemplate, quality);
|
||||
}
|
||||
|
||||
public PairingListTemplateDTO(int competitorCount, int[][] pairingListTemplate, double quality) {
|
||||
this(0, 0, competitorCount, 0, pairingListTemplate, quality);
|
||||
}
|
||||
|
||||
public PairingListTemplateDTO(int flightCount, int groupCount, int competitorCount, int flightMultiplier, int[][] pairingListTemplate, double quality) {
|
||||
this.flightCount = flightCount;
|
||||
this.groupCount = groupCount;
|
||||
this.competitorCount = competitorCount;
|
||||
this.flightMultiplier = flightMultiplier;
|
||||
this.quality = quality;
|
||||
this.pairingListTemplate = pairingListTemplate;
|
||||
}
|
||||
|
||||
public int[][] getPairingListTemplate() {
|
||||
return this.pairingListTemplate;
|
||||
}
|
||||
|
||||
public double getQuality() {
|
||||
return this.quality;
|
||||
}
|
||||
|
||||
public int getFlightCount() {
|
||||
return this.flightCount;
|
||||
}
|
||||
|
||||
public int getGroupCount() {
|
||||
return this.groupCount;
|
||||
}
|
||||
|
||||
public int getCompetitorCount() {
|
||||
return this.competitorCount;
|
||||
}
|
||||
|
||||
public int getFlightMultiplier() {
|
||||
return flightMultiplier;
|
||||
}
|
||||
|
||||
}
|
||||
+1
@@ -6,6 +6,7 @@ package com.sap.sailing.domain.common.security;
|
||||
public enum Permission implements com.sap.sse.security.shared.Permission {
|
||||
// AdminConsole permissions
|
||||
MANAGE_EVENTS,
|
||||
MANAGE_PAIRING_LISTS,
|
||||
MANAGE_REGATTAS,
|
||||
MANAGE_TRACKED_RACES,
|
||||
SHOW_TRACKED_RACES,
|
||||
|
||||
+33
@@ -0,0 +1,33 @@
|
||||
package com.sap.sailing.gwt.ui.adminconsole;
|
||||
|
||||
import com.google.gwt.user.client.ui.VerticalPanel;
|
||||
import com.google.gwt.user.client.ui.Widget;
|
||||
import com.sap.sailing.domain.common.RegattaIdentifier;
|
||||
import com.sap.sailing.gwt.ui.client.DataEntryDialogWithBootstrap;
|
||||
import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
|
||||
public abstract class AbstractPairingListCreationDialog<T> extends DataEntryDialogWithBootstrap<T> {
|
||||
|
||||
protected StringMessages stringMessages;
|
||||
|
||||
public AbstractPairingListCreationDialog(RegattaIdentifier regattaIdentifier, String title, StringMessages stringMessages,
|
||||
Validator<T> validator, DialogCallback<T> callback) {
|
||||
|
||||
super(title, null, stringMessages.ok(), stringMessages.cancel(), validator, callback);
|
||||
this.stringMessages = stringMessages;
|
||||
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Widget getAdditionalWidget() {
|
||||
final VerticalPanel panel = new VerticalPanel();
|
||||
|
||||
return panel;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected T getResult() {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
package com.sap.sailing.gwt.ui.adminconsole;
|
||||
|
||||
import com.sap.sailing.domain.common.dto.PairingListTemplateDTO;
|
||||
import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
import com.sap.sse.gwt.client.dialog.DataEntryDialog.Validator;
|
||||
|
||||
public class AbstractPairingListParameterValidator implements Validator<PairingListTemplateDTO> {
|
||||
protected final StringMessages stringMessages;
|
||||
|
||||
public AbstractPairingListParameterValidator(StringMessages stringMessages) {
|
||||
this.stringMessages = stringMessages;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getErrorMessage(PairingListTemplateDTO valueToValidate) {
|
||||
// TODO validate RegattaTDO
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
+7
-3
@@ -54,6 +54,7 @@ public class AdminConsoleEntryPoint extends AbstractSailingEntryPoint implements
|
||||
private Set<RegattasDisplayer> regattasDisplayers;
|
||||
private Set<LeaderboardsDisplayer> leaderboardsDisplayers;
|
||||
private Set<LeaderboardGroupsDisplayer> leaderboardGroupsDisplayers;
|
||||
private Set<PairingListDisplayer> pairingListDisplayers;
|
||||
|
||||
private final MediaServiceAsync mediaService = GWT.create(MediaService.class);
|
||||
|
||||
@@ -91,7 +92,8 @@ public class AdminConsoleEntryPoint extends AbstractSailingEntryPoint implements
|
||||
regattasDisplayers = new HashSet<>();
|
||||
leaderboardsDisplayers = new HashSet<>();
|
||||
leaderboardGroupsDisplayers = new HashSet<>();
|
||||
|
||||
pairingListDisplayers = new HashSet<>();
|
||||
|
||||
final EventManagementPanel eventManagementPanel = new EventManagementPanel(sailingService, this, this, getStringMessages(), panel);
|
||||
eventManagementPanel.ensureDebugId("EventManagement");
|
||||
panel.addToVerticalTabPanel(new DefaultRefreshableAdminConsolePanel<EventManagementPanel>(eventManagementPanel) {
|
||||
@@ -102,6 +104,8 @@ public class AdminConsoleEntryPoint extends AbstractSailingEntryPoint implements
|
||||
}
|
||||
}, getStringMessages().events(), Permission.MANAGE_EVENTS);
|
||||
leaderboardGroupsDisplayers.add(eventManagementPanel);
|
||||
|
||||
/* REGATTAS */
|
||||
|
||||
RegattaManagementPanel regattaManagementPanel = new RegattaManagementPanel(
|
||||
sailingService, this, getStringMessages(), this, eventManagementPanel);
|
||||
@@ -148,7 +152,7 @@ public class AdminConsoleEntryPoint extends AbstractSailingEntryPoint implements
|
||||
regattasDisplayers.add(leaderboardGroupConfigPanel);
|
||||
leaderboardGroupsDisplayers.add(leaderboardGroupConfigPanel);
|
||||
leaderboardsDisplayers.add(leaderboardGroupConfigPanel);
|
||||
|
||||
|
||||
/* RACES */
|
||||
|
||||
final HorizontalTabLayoutPanel racesTabPanel = panel.addVerticalTab(getStringMessages().trackedRaces(), "RacesPanel");
|
||||
@@ -210,7 +214,7 @@ public class AdminConsoleEntryPoint extends AbstractSailingEntryPoint implements
|
||||
panel.addToTabPanel(connectorsTabPanel, new DefaultRefreshableAdminConsolePanel<TracTracEventManagementPanel>(tractracEventManagementPanel),
|
||||
getStringMessages().tracTracEvents(), Permission.MANAGE_TRACKED_RACES);
|
||||
regattasDisplayers.add(tractracEventManagementPanel);
|
||||
|
||||
|
||||
SwissTimingReplayConnectorPanel swissTimingReplayConnectorPanel = new SwissTimingReplayConnectorPanel(
|
||||
sailingService, this, this, getStringMessages());
|
||||
panel.addToTabPanel(connectorsTabPanel, new DefaultRefreshableAdminConsolePanel<SwissTimingReplayConnectorPanel>(swissTimingReplayConnectorPanel),
|
||||
|
||||
+83
@@ -0,0 +1,83 @@
|
||||
package com.sap.sailing.gwt.ui.adminconsole;
|
||||
|
||||
import com.google.gwt.user.client.ui.CaptionPanel;
|
||||
import com.google.gwt.user.client.ui.Grid;
|
||||
import com.google.gwt.user.client.ui.HorizontalPanel;
|
||||
import com.google.gwt.user.client.ui.Label;
|
||||
import com.google.gwt.user.client.ui.Widget;
|
||||
import com.sap.sailing.domain.common.RegattaIdentifier;
|
||||
import com.sap.sailing.domain.common.dto.PairingListTemplateDTO;
|
||||
import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
|
||||
public class PairingListCreationDialog extends AbstractPairingListCreationDialog<PairingListTemplateDTO> {
|
||||
|
||||
private final PairingListTemplateDTO template;
|
||||
|
||||
protected static class PairingListParameterValidator extends AbstractPairingListParameterValidator {
|
||||
public PairingListParameterValidator(StringMessages stringMessages) {
|
||||
super(stringMessages);
|
||||
}
|
||||
}
|
||||
|
||||
public PairingListCreationDialog(RegattaIdentifier regattaIdentifier, final StringMessages stringMessages,
|
||||
PairingListTemplateDTO template, DialogCallback<PairingListTemplateDTO> callback) {
|
||||
// TODO stringMessages
|
||||
super(regattaIdentifier, stringMessages.pairingLists(), stringMessages, new PairingListParameterValidator(stringMessages),
|
||||
callback);
|
||||
|
||||
this.template = template;
|
||||
|
||||
this.ensureDebugId("PairingListCreationDialog");
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Widget getAdditionalWidget() {
|
||||
HorizontalPanel panel = new HorizontalPanel();
|
||||
|
||||
/* DATA PANEL */
|
||||
|
||||
CaptionPanel dataPanel = new CaptionPanel();
|
||||
dataPanel.setCaptionText("Pairing List Data");
|
||||
|
||||
Grid formGrid = new Grid(4, 2);
|
||||
dataPanel.add(formGrid);
|
||||
|
||||
formGrid.setWidget(0, 0, new Label("Number of Flights:"));
|
||||
formGrid.setWidget(0, 1, new Label(String.valueOf(this.template.getFlightCount())));
|
||||
formGrid.setWidget(1, 0, new Label("Number of Groups:"));
|
||||
formGrid.setWidget(1, 1, new Label(String.valueOf(this.template.getGroupCount())));
|
||||
formGrid.setWidget(2, 0, new Label("Number of competitors:"));
|
||||
formGrid.setWidget(2, 1, new Label(String.valueOf(this.template.getCompetitorCount())));
|
||||
formGrid.setWidget(3, 0, new Label("Quality:"));
|
||||
formGrid.setWidget(3, 1, new Label(String.valueOf(this.template.getQuality())));
|
||||
|
||||
panel.add(dataPanel);
|
||||
|
||||
/* PAIRING LIST TEMPLATE PANEL */
|
||||
|
||||
CaptionPanel pairingListTemplatePanel = new CaptionPanel();
|
||||
pairingListTemplatePanel.setCaptionText("Pairing List Template");
|
||||
|
||||
Grid pairingListGrid = new Grid(this.template.getPairingListTemplate().length,
|
||||
this.template.getPairingListTemplate()[0].length);
|
||||
pairingListTemplatePanel.add(pairingListGrid);
|
||||
|
||||
for (int groupIndex = 0; groupIndex < this.template.getPairingListTemplate().length; groupIndex++) {
|
||||
|
||||
for (int boatIndex = 0; boatIndex < this.template.getPairingListTemplate()[0].length; boatIndex++) {
|
||||
pairingListGrid.setWidget(groupIndex, boatIndex,
|
||||
new Label(String.valueOf(this.template.getPairingListTemplate()[groupIndex][boatIndex])));
|
||||
|
||||
pairingListGrid.getCellFormatter().setWidth(groupIndex, boatIndex, "50px");
|
||||
}
|
||||
}
|
||||
|
||||
panel.add(pairingListTemplatePanel);
|
||||
|
||||
|
||||
return panel;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
+62
@@ -0,0 +1,62 @@
|
||||
package com.sap.sailing.gwt.ui.adminconsole;
|
||||
|
||||
import com.google.gwt.event.logical.shared.ValueChangeEvent;
|
||||
import com.google.gwt.event.logical.shared.ValueChangeHandler;
|
||||
import com.google.gwt.user.client.ui.CheckBox;
|
||||
import com.google.gwt.user.client.ui.Grid;
|
||||
import com.google.gwt.user.client.ui.Label;
|
||||
import com.google.gwt.user.client.ui.VerticalPanel;
|
||||
import com.google.gwt.user.client.ui.Widget;
|
||||
import com.sap.sailing.domain.common.RegattaIdentifier;
|
||||
import com.sap.sailing.domain.common.dto.PairingListTemplateDTO;
|
||||
import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
import com.sap.sse.gwt.client.controls.IntegerBox;
|
||||
|
||||
public class PairingListCreationSetupDialog extends PairingListCreationDialog {
|
||||
|
||||
private final IntegerBox competitorCountTextBox;
|
||||
private final IntegerBox flightMultiplierTextBox;
|
||||
|
||||
private final CheckBox flightMultiplierCheckBox;
|
||||
|
||||
public PairingListCreationSetupDialog(RegattaIdentifier regattaIdentifier, StringMessages stringMessages,
|
||||
DialogCallback<PairingListTemplateDTO> callback) {
|
||||
super(regattaIdentifier, stringMessages, null, callback); // TODO initial value
|
||||
this.competitorCountTextBox = createIntegerBox(0, 2);
|
||||
this.flightMultiplierTextBox = createIntegerBox(0, 2);
|
||||
this.flightMultiplierTextBox.setEnabled(false);
|
||||
this.flightMultiplierCheckBox = createCheckbox("Flight Multiplier");
|
||||
|
||||
this.flightMultiplierCheckBox.addValueChangeHandler(new ValueChangeHandler<Boolean>() {
|
||||
|
||||
@Override
|
||||
public void onValueChange(ValueChangeEvent<Boolean> event) {
|
||||
flightMultiplierTextBox.setEnabled(event.getValue());
|
||||
}
|
||||
});
|
||||
|
||||
this.flightMultiplierCheckBox.ensureDebugId("CompetitorCountTextBox");
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Widget getAdditionalWidget() {
|
||||
final VerticalPanel panel = new VerticalPanel();
|
||||
|
||||
Grid formGrid = new Grid(3, 2);
|
||||
panel.add(formGrid);
|
||||
|
||||
formGrid.setWidget(0, 0, new Label("Please set the competitors count:"));
|
||||
formGrid.setWidget(0, 1, this.competitorCountTextBox);
|
||||
formGrid.setWidget(1, 1, this.flightMultiplierCheckBox);
|
||||
formGrid.setWidget(2, 0, new Label("Flight Multiplier:"));
|
||||
formGrid.setWidget(2, 1, this.flightMultiplierTextBox);
|
||||
|
||||
return panel;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected PairingListTemplateDTO getResult() {
|
||||
return new PairingListTemplateDTO(this.competitorCountTextBox.getValue(), this.flightMultiplierTextBox.getValue());
|
||||
}
|
||||
}
|
||||
+6
@@ -0,0 +1,6 @@
|
||||
package com.sap.sailing.gwt.ui.adminconsole;
|
||||
|
||||
public interface PairingListDisplayer {
|
||||
|
||||
void fillPairingList();
|
||||
}
|
||||
+3
-1
@@ -11,6 +11,7 @@ import com.sap.sse.gwt.client.IconResources;
|
||||
public class RegattaConfigImagesBarCell extends ImagesBarCell {
|
||||
static final String ACTION_REMOVE = "ACTION_REMOVE";
|
||||
public static final String ACTION_EDIT = "ACTION_EDIT";
|
||||
public static final String ACTION_CREATE_PAIRINGLIST = "ACTION_CREATE_PAIRINGLIST";
|
||||
private final StringMessages stringMessages;
|
||||
private static AdminConsoleResources resources = GWT.create(AdminConsoleResources.class);
|
||||
|
||||
@@ -27,6 +28,7 @@ public class RegattaConfigImagesBarCell extends ImagesBarCell {
|
||||
@Override
|
||||
protected Iterable<ImageSpec> getImageSpecs() {
|
||||
return Arrays.asList(new ImageSpec(ACTION_EDIT, stringMessages.actionEdit(), makeImagePrototype(resources.editIcon())),
|
||||
new ImageSpec(ACTION_REMOVE, stringMessages.actionRemove(), makeImagePrototype(IconResources.INSTANCE.removeIcon())));
|
||||
new ImageSpec(ACTION_REMOVE, stringMessages.actionRemove(), makeImagePrototype(IconResources.INSTANCE.removeIcon())),
|
||||
new ImageSpec(ACTION_CREATE_PAIRINGLIST, stringMessages.pairingLists(), makeImagePrototype(resources.openCoachDashboard())));
|
||||
}
|
||||
}
|
||||
+52
@@ -26,6 +26,7 @@ import com.google.gwt.view.client.ListDataProvider;
|
||||
import com.google.gwt.view.client.SelectionChangeEvent;
|
||||
import com.sap.sailing.domain.common.RegattaIdentifier;
|
||||
import com.sap.sailing.domain.common.RegattaName;
|
||||
import com.sap.sailing.domain.common.dto.PairingListTemplateDTO;
|
||||
import com.sap.sailing.gwt.ui.client.RegattaRefresher;
|
||||
import com.sap.sailing.gwt.ui.client.RegattasDisplayer;
|
||||
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
|
||||
@@ -227,6 +228,8 @@ public class RegattaListComposite extends Composite implements RegattasDisplayer
|
||||
if (Window.confirm(stringMessages.doYouReallyWantToRemoveRegatta(regatta.getName()))) {
|
||||
removeRegatta(regatta);
|
||||
}
|
||||
} else if (RegattaConfigImagesBarCell.ACTION_CREATE_PAIRINGLIST.equals(value)) {
|
||||
createPairingListTemplate(regatta);
|
||||
}
|
||||
}
|
||||
});
|
||||
@@ -271,6 +274,55 @@ public class RegattaListComposite extends Composite implements RegattasDisplayer
|
||||
}
|
||||
}));
|
||||
}
|
||||
|
||||
private void createPairingListTemplate(final RegattaDTO regatta) {
|
||||
final RegattaIdentifier regattaIdentifier = new RegattaName(regatta.getName());
|
||||
PairingListCreationSetupDialog dialog = new PairingListCreationSetupDialog(regattaIdentifier, this.stringMessages,
|
||||
new DialogCallback<PairingListTemplateDTO>() {
|
||||
|
||||
@Override
|
||||
public void ok(PairingListTemplateDTO editedObject) {
|
||||
sailingService.calculatePairingList(regattaIdentifier, editedObject.getCompetitorCount(), editedObject.getFlightMultiplier(),
|
||||
new AsyncCallback<PairingListTemplateDTO>() {
|
||||
|
||||
@Override
|
||||
public void onFailure(Throwable caught) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSuccess(PairingListTemplateDTO result) {
|
||||
openPairingListCreationDialog(regattaIdentifier, result);
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void cancel() {
|
||||
|
||||
}
|
||||
});
|
||||
dialog.show();
|
||||
}
|
||||
|
||||
private void openPairingListCreationDialog(RegattaIdentifier regattaIdentifier, PairingListTemplateDTO template) {
|
||||
PairingListCreationDialog dialog = new PairingListCreationDialog(regattaIdentifier, stringMessages, template,
|
||||
new DialogCallback<PairingListTemplateDTO>() {
|
||||
|
||||
@Override
|
||||
public void ok(PairingListTemplateDTO editedObject) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void cancel() {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
});
|
||||
dialog.show();
|
||||
}
|
||||
|
||||
private void openEditRegattaDialog(RegattaDTO regatta, Collection<RegattaDTO> existingRegattas,
|
||||
List<EventDTO> existingEvents) {
|
||||
|
||||
+1
@@ -105,6 +105,7 @@ public class RegattaManagementPanel extends SimplePanel implements RegattasDispl
|
||||
|
||||
regattaManagementControlsPanel.add(removeRegattaButton);
|
||||
regattasContentPanel.add(regattaManagementControlsPanel);
|
||||
|
||||
regattaListComposite = new RegattaListComposite(sailingService, regattaRefresher, errorReporter, stringMessages);
|
||||
regattaListComposite.ensureDebugId("RegattaListComposite");
|
||||
refreshableRegattaMultiSelectionModel = regattaListComposite.getRefreshableMultiSelectionModel();
|
||||
|
||||
+5
@@ -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.PairingListTemplateDTO;
|
||||
import com.sap.sailing.domain.common.dto.PersonDTO;
|
||||
import com.sap.sailing.domain.common.dto.RaceColumnDTO;
|
||||
import com.sap.sailing.domain.common.dto.RaceColumnInSeriesDTO;
|
||||
@@ -682,4 +683,8 @@ public interface SailingService extends RemoteService, FileStorageManagementGwtS
|
||||
* an option for charts, if it actually recorded for the race.
|
||||
*/
|
||||
List<DetailType> determineDetailTypes(String leaderboardGroupName, RegattaAndRaceIdentifier identifier);
|
||||
|
||||
PairingListTemplateDTO calculatePairingList(RegattaIdentifier regattaIdentifier, int competitorsCount, int flightMultiplier);
|
||||
|
||||
|
||||
}
|
||||
+4
@@ -30,6 +30,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.PairingListTemplateDTO;
|
||||
import com.sap.sailing.domain.common.dto.PersonDTO;
|
||||
import com.sap.sailing.domain.common.dto.RaceColumnDTO;
|
||||
import com.sap.sailing.domain.common.dto.RaceColumnInSeriesDTO;
|
||||
@@ -846,4 +847,7 @@ public interface SailingServiceAsync extends ServerInfoRetriever, FileStorageMan
|
||||
*/
|
||||
void determineDetailTypes(String leaderboardGroupName, RegattaAndRaceIdentifier identifier,
|
||||
AsyncCallback<List<DetailType>> callback);
|
||||
|
||||
void calculatePairingList(RegattaIdentifier regattaIdentifier, int competitorCount, int flightMultiplier,
|
||||
AsyncCallback<PairingListTemplateDTO> callback);
|
||||
}
|
||||
+1
@@ -231,6 +231,7 @@ public interface StringMessages extends com.sap.sse.gwt.client.StringMessages,
|
||||
String noSelection();
|
||||
String raceIsKnownToStartUpwind();
|
||||
String events();
|
||||
String pairingLists();
|
||||
String settingsForComponent(String localizedComponentName);
|
||||
String noEventsFound();
|
||||
String noEventSelected();
|
||||
|
||||
+1
@@ -232,6 +232,7 @@ hoverOverAPoint=Hover over a point for details
|
||||
noSelection=No selection
|
||||
raceIsKnownToStartUpwind=Race starts with upwind leg
|
||||
events=Events
|
||||
pairingLists=Pairing Lists
|
||||
settingsForComponent=Settings for {0}
|
||||
noEventsFound=No events were found
|
||||
noEventSelected=No event selected
|
||||
|
||||
+1
@@ -234,6 +234,7 @@ hoverOverAPoint=Für Details Maus über dem Graph positionieren
|
||||
noSelection=Keine Selektion
|
||||
raceIsKnownToStartUpwind=Rennen beginnt mit Kreuz
|
||||
events=Veranstaltungen
|
||||
pairingLists=Gegner Paarungslisten
|
||||
settingsForComponent=Einstellungen für {0}
|
||||
noEventsFound=Es wurden keine Rennen gefunden
|
||||
noEventSelected=Kein Rennen ausgewählt
|
||||
|
||||
+12
@@ -195,6 +195,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.PairingListTemplateDTO;
|
||||
import com.sap.sailing.domain.common.dto.PersonDTO;
|
||||
import com.sap.sailing.domain.common.dto.RaceColumnDTO;
|
||||
import com.sap.sailing.domain.common.dto.RaceColumnDTOFactory;
|
||||
@@ -486,6 +487,7 @@ 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.PairingListTemplate;
|
||||
import com.sap.sse.replication.OperationWithResult;
|
||||
import com.sap.sse.replication.Replicable;
|
||||
import com.sap.sse.replication.ReplicationFactory;
|
||||
@@ -6647,4 +6649,14 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
|
||||
}
|
||||
return availableDetailsTypes;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PairingListTemplateDTO calculatePairingList(RegattaIdentifier regattaIdentifier, int competitorsCount, int flightMultiplier) {
|
||||
PairingListTemplate template = getService().createPairingListFromRegatta(regattaIdentifier, competitorsCount, flightMultiplier);
|
||||
Regatta regatta = getService().getRegatta(regattaIdentifier);
|
||||
int flightCount = Util.size(regatta.getRaceColumns());
|
||||
int groupCount = (int) (template.getPairingListTemplate().length / flightCount / flightCount);
|
||||
return new PairingListTemplateDTO(flightCount, groupCount,
|
||||
competitorsCount, flightMultiplier, template.getPairingListTemplate(), template.getQuality());
|
||||
}
|
||||
}
|
||||
@@ -95,6 +95,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.PairingListTemplate;
|
||||
import com.sap.sse.replication.impl.ReplicableWithObjectInputStream;
|
||||
import com.sap.sse.shared.media.ImageDescriptor;
|
||||
import com.sap.sse.shared.media.VideoDescriptor;
|
||||
@@ -779,4 +780,7 @@ public interface RacingEventService extends TrackedRegattaRegistry, RegattaFetch
|
||||
* anniversary races only.
|
||||
*/
|
||||
AnniversaryRaceDeterminator getAnniversaryRaceDeterminator();
|
||||
|
||||
PairingListTemplate createPairingListFromRegatta(RegattaIdentifier regattaIdentifier, int competitorsCount,
|
||||
int flightMultiplier);
|
||||
}
|
||||
+42
@@ -254,6 +254,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.PairingFrameProvider;
|
||||
import com.sap.sse.pairinglist.PairingListTemplate;
|
||||
import com.sap.sse.pairinglist.impl.PairingListTemplateFactoryImpl;
|
||||
import com.sap.sse.replication.OperationExecutionListener;
|
||||
import com.sap.sse.replication.OperationWithResult;
|
||||
import com.sap.sse.replication.ReplicationMasterDescriptor;
|
||||
@@ -477,6 +480,8 @@ public class RacingEventServiceImpl implements RacingEventService, ClearStateTes
|
||||
*/
|
||||
private final RaceChangeObserverForAnniversaryDetection raceChangeObserverForAnniversaryDetection;
|
||||
|
||||
private final PairingListTemplateFactoryImpl pairingListTemplateFactory = new PairingListTemplateFactoryImpl();
|
||||
|
||||
/**
|
||||
* Providing the constructor parameters for a new {@link RacingEventServiceImpl} instance is a bit tricky
|
||||
* in some cases because containment and initialization order of some types is fairly tightly coupled.
|
||||
@@ -4092,4 +4097,41 @@ public class RacingEventServiceImpl implements RacingEventService, ClearStateTes
|
||||
public AnniversaryRaceDeterminator getAnniversaryRaceDeterminator() {
|
||||
return anniversaryRaceDeterminator;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PairingListTemplate createPairingListFromRegatta(RegattaIdentifier regattaIdentifier, int competitorsCount,
|
||||
int flightMultiplier) {
|
||||
|
||||
Regatta regatta = getRegatta(regattaIdentifier);
|
||||
|
||||
if (regatta != null) {
|
||||
// TODO flightMultiplier (not implemented yet)
|
||||
PairingListTemplate template = pairingListTemplateFactory
|
||||
.getOrCreatePairingListTemplate(new PairingFrameProvider() {
|
||||
|
||||
@Override
|
||||
public int getGroupsCount() {
|
||||
for (Series series : regatta.getSeries()) {
|
||||
if (Util.size(series.getFleets()) > 1) {
|
||||
return Util.size(series.getFleets());
|
||||
}
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getFlightsCount() {
|
||||
return Util.size(regatta.getRaceColumns());
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getCompetitorsCount() {
|
||||
return competitorsCount;
|
||||
}
|
||||
});
|
||||
return template;
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -11,6 +11,7 @@ Export-Package: com.sap.sse,
|
||||
com.sap.sse.i18n.impl,
|
||||
com.sap.sse.osgi,
|
||||
com.sap.sse.pairinglist,
|
||||
com.sap.sse.pairinglist.impl,
|
||||
com.sap.sse.qrcode,
|
||||
com.sap.sse.util,
|
||||
com.sap.sse.util.graph,
|
||||
|
||||
@@ -4,5 +4,8 @@ public interface PairingFrameProvider {
|
||||
int getFlightsCount();
|
||||
int getGroupsCount();
|
||||
int getCompetitorsCount();
|
||||
//+hashcode
|
||||
|
||||
default int getHashCode() {
|
||||
return 916439 ^ this.getFlightsCount() ^ this.getGroupsCount() ^ this.getCompetitorsCount();
|
||||
}
|
||||
}
|
||||
+15
-10
@@ -2,35 +2,40 @@ package com.sap.sse.pairinglist.impl;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import com.sap.sse.pairinglist.AbstractPairingFrameProvider;
|
||||
import com.sap.sse.pairinglist.PairingFrameProvider;
|
||||
import com.sap.sse.pairinglist.PairingListTemplate;
|
||||
import com.sap.sse.pairinglist.PairingListTemplateFactory;
|
||||
|
||||
public class PairingListTemplateFactoryImpl implements PairingListTemplateFactory {
|
||||
private final Map<PairingFrameProvider,Map<Integer,PairingListTemplate>> pairingListTemplates;
|
||||
|
||||
private final Map<Integer, Map<Integer,PairingListTemplate>> pairingListTemplates;
|
||||
|
||||
public PairingListTemplateFactoryImpl() {
|
||||
this.pairingListTemplates=new HashMap<>();
|
||||
}
|
||||
// public PairingListTemplateFactoryImpl(Map<PairingFrameProvider, PairingListTemplate> existingPairingListTemplates) {
|
||||
// this.pairingListTemplates = existingPairingListTemplates;
|
||||
// }
|
||||
|
||||
|
||||
public PairingListTemplateFactoryImpl(Map<Integer, Map<Integer,PairingListTemplate>> existingPairingListTemplates) {
|
||||
this.pairingListTemplates = existingPairingListTemplates;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PairingListTemplate getOrCreatePairingListTemplate(PairingFrameProvider pairingFrameProvider,int flightMultiplier) {
|
||||
PairingListTemplate result;
|
||||
try{
|
||||
result = pairingListTemplates.get(pairingFrameProvider).get(flightMultiplier);
|
||||
result = pairingListTemplates.get(pairingFrameProvider.getHashCode()).get(flightMultiplier);
|
||||
}catch(NullPointerException e){
|
||||
result=null;
|
||||
}
|
||||
|
||||
if (result == null) {
|
||||
result = generatePairingList(pairingFrameProvider,flightMultiplier);
|
||||
if(pairingListTemplates.get(pairingFrameProvider)==null){
|
||||
pairingListTemplates.put(pairingFrameProvider, new HashMap<>());
|
||||
pairingListTemplates.get(pairingFrameProvider).put(flightMultiplier, result);
|
||||
if(pairingListTemplates.get(pairingFrameProvider.getHashCode())==null){
|
||||
pairingListTemplates.put(pairingFrameProvider.getHashCode(), new HashMap<>());
|
||||
pairingListTemplates.get(pairingFrameProvider.getHashCode()).put(flightMultiplier, result);
|
||||
}else{
|
||||
pairingListTemplates.get(pairingFrameProvider).put(flightMultiplier, result);
|
||||
pairingListTemplates.get(pairingFrameProvider.getHashCode()).put(flightMultiplier, result);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
|
||||
@@ -225,7 +225,7 @@ public class PairingListTemplateImpl implements PairingListTemplate {
|
||||
int[] seeds=new int[count];
|
||||
Arrays.fill(seeds, 0);
|
||||
for(int x=0;x<seeds.length;x++){
|
||||
int random=this.getRandomIntegerBetween(0, competitors - 1);
|
||||
int random=this.getRandomIntegerBetweenZeroAndMax(competitors - 1);
|
||||
seeds[x] = random;
|
||||
}
|
||||
return seeds;
|
||||
@@ -622,7 +622,7 @@ public class PairingListTemplateImpl implements PairingListTemplate {
|
||||
* @param max
|
||||
* @return a random number
|
||||
*/
|
||||
private int getRandomIntegerBetween(int min, int max) {
|
||||
private int getRandomIntegerBetweenZeroAndMax(int max) {
|
||||
return random.nextInt(max +1);
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user