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:
D070264 committed 2017-11-27 13:54:37 +01:00
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
@@ -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;
}
}
@@ -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,
@@ -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;
}
}
@@ -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;
}
}
@@ -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),
@@ -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;
}
}
@@ -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());
}
}
@@ -0,0 +1,6 @@
package com.sap.sailing.gwt.ui.adminconsole;
public interface PairingListDisplayer {
void fillPairingList();
}
@@ -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())));
}
}
@@ -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) {
@@ -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();
@@ -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);
}
@@ -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);
}
@@ -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();
@@ -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
@@ -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
@@ -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);
}
@@ -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;
}
}
}
+1
View File
@@ -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();
}
}
@@ -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);
}