mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-11-13 14:12:11 +00:00
bug3484 removed template factory cache and fixed race log bug
This commit is contained in:
1 parent
3bc2526639
commit
db131c69a8
14 files changed
+221
-195
No files matched your search
+1
-1
@@ -1,5 +1,5 @@
|
||||
package com.sap.sailing.domain.base;
|
||||
import com.sap.sse.pairinglist.CompetitionFormat;
|
||||
|
||||
public interface PairingListRegattaAdapter extends CompetitionFormat<RaceColumn, Fleet, Competitor> {
|
||||
public interface PairingListRegattaAdapter extends CompetitionFormat<RaceColumn, Fleet, Competitor, Boat> {
|
||||
}
|
||||
+18
-17
@@ -1027,25 +1027,26 @@ TrackedRaceChangedListener, LeaderboardsDisplayer {
|
||||
public void ok(PairingListTemplateDTO editedObject) {
|
||||
BusyDialog busyDialog = new BusyDialog();
|
||||
busyDialog.show();
|
||||
try{
|
||||
sailingService.calculatePairingList(leaderboardDTO.getName(), editedObject.getSelectedFlightNames(), editedObject.getCompetitorCount(), editedObject.getFlightMultiplier(),
|
||||
new AsyncCallback<PairingListTemplateDTO>() {
|
||||
try {
|
||||
sailingService.calculatePairingList(leaderboardDTO.getName(),
|
||||
editedObject.getSelectedFlightNames(), editedObject.getCompetitorCount(),
|
||||
editedObject.getFlightMultiplier(), new AsyncCallback<PairingListTemplateDTO>() {
|
||||
|
||||
@Override
|
||||
public void onFailure(Throwable caught) {
|
||||
busyDialog.hide();
|
||||
System.out.println(caught);
|
||||
}
|
||||
@Override
|
||||
public void onFailure(Throwable caught) {
|
||||
busyDialog.hide();
|
||||
System.out.println(caught);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSuccess(PairingListTemplateDTO result) {
|
||||
busyDialog.hide();
|
||||
openPairingListCreationDialog(leaderboardDTO, result);
|
||||
}
|
||||
|
||||
});
|
||||
}catch(Exception exception){
|
||||
//TODO show error somehow
|
||||
@Override
|
||||
public void onSuccess(PairingListTemplateDTO result) {
|
||||
busyDialog.hide();
|
||||
openPairingListCreationDialog(leaderboardDTO, result);
|
||||
}
|
||||
|
||||
});
|
||||
} catch (Exception exception) {
|
||||
// TODO show error somehow
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+37
-3
@@ -30,9 +30,7 @@ public class PairingListCreationDialog extends DataEntryDialog<PairingListTempla
|
||||
private final StrippedLeaderboardDTO leaderboardDTO;
|
||||
private final StringMessages stringMessages;
|
||||
|
||||
private final Button applyToRacelogButton;
|
||||
private final Button cSVExportButton;
|
||||
private final Button printViewButton;
|
||||
private final Button applyToRacelogButton, cSVExportButton, printViewButton, refreshButton;
|
||||
|
||||
public PairingListCreationDialog(StrippedLeaderboardDTO leaderboardDTO, final StringMessages stringMessages,
|
||||
PairingListTemplateDTO template, SailingServiceAsync sailingService) {
|
||||
@@ -46,6 +44,7 @@ public class PairingListCreationDialog extends DataEntryDialog<PairingListTempla
|
||||
applyToRacelogButton = new Button(stringMessages.applyToRacelog());
|
||||
cSVExportButton = new Button(stringMessages.csvExport());
|
||||
printViewButton = new Button(stringMessages.printView());
|
||||
refreshButton = new Button(stringMessages.refresh());
|
||||
|
||||
if (template.getCompetitorCount() != leaderboardDTO.competitorsCount) {
|
||||
this.disableApplyToRacelogs();
|
||||
@@ -130,9 +129,12 @@ public class PairingListCreationDialog extends DataEntryDialog<PairingListTempla
|
||||
cSVExportButton.ensureDebugId("CSVExportButton");
|
||||
printViewButton.getElement().getStyle().setMargin(3, Unit.PX);
|
||||
printViewButton.ensureDebugId("printViewButton");
|
||||
refreshButton.getElement().getStyle().setMargin(3, Unit.PX);
|
||||
refreshButton.ensureDebugId("printViewButton");
|
||||
getRightButtonPannel().add(applyToRacelogButton);
|
||||
getRightButtonPannel().add(cSVExportButton);
|
||||
getRightButtonPannel().add(printViewButton);
|
||||
getRightButtonPannel().add(refreshButton);
|
||||
getRightButtonPannel().add(new HTML(stringMessages.printHint()));
|
||||
if (!applyToRacelogButton.isEnabled()) {
|
||||
Label label = new Label(stringMessages.blockedApplyButton());
|
||||
@@ -168,6 +170,38 @@ public class PairingListCreationDialog extends DataEntryDialog<PairingListTempla
|
||||
Window.open(link, "", "");
|
||||
}
|
||||
});
|
||||
refreshButton.addClickHandler(new ClickHandler() {
|
||||
|
||||
@Override
|
||||
public void onClick(ClickEvent event) {
|
||||
getDialogBox().hide();
|
||||
BusyDialog busyDialog = new BusyDialog();
|
||||
busyDialog.show();
|
||||
try {
|
||||
sailingService.calculatePairingList(leaderboardDTO.getName(),
|
||||
template.getSelectedFlightNames(), template.getCompetitorCount(),
|
||||
template.getFlightMultiplier(), new AsyncCallback<PairingListTemplateDTO>() {
|
||||
|
||||
@Override
|
||||
public void onFailure(Throwable caught) {
|
||||
busyDialog.hide();
|
||||
System.out.println(caught);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSuccess(PairingListTemplateDTO result) {
|
||||
busyDialog.hide();
|
||||
PairingListCreationDialog dialog = new PairingListCreationDialog(leaderboardDTO,
|
||||
stringMessages, result, sailingService);
|
||||
dialog.show();
|
||||
}
|
||||
|
||||
});
|
||||
} catch (Exception exception) {
|
||||
// TODO show error somehow
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
//TODO set Anchor link to Button (see link with settings under configure url)
|
||||
|
||||
+22
-19
@@ -6825,7 +6825,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
|
||||
|
||||
@Override
|
||||
public PairingListDTO getPairingListFromTemplate(final String leaderboardName, final int flightMultiplier,
|
||||
final Iterable<String> selectedFlightNames,PairingListTemplateDTO templateDTO)
|
||||
final Iterable<String> selectedFlightNames, PairingListTemplateDTO templateDTO)
|
||||
throws NotFoundException {
|
||||
Leaderboard leaderboard = getLeaderboardByName(leaderboardName);
|
||||
List<RaceColumn> selectedRaces = new ArrayList<RaceColumn>();
|
||||
@@ -6836,26 +6836,29 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
|
||||
}
|
||||
}
|
||||
}
|
||||
PairingListTemplate pairingListTemplate = new PairingListTemplateImpl(templateDTO.getPairingListTemplate(), templateDTO.getCompetitorCount(), templateDTO.getFlightMultiplier());
|
||||
PairingList<RaceColumn, Fleet, Competitor,Boat> pairingList =
|
||||
getService().getPairingListFromTemplate(pairingListTemplate, leaderboardName, selectedRaces);
|
||||
PairingListTemplate pairingListTemplate = new PairingListTemplateImpl(templateDTO.getPairingListTemplate(),
|
||||
templateDTO.getCompetitorCount(), templateDTO.getFlightMultiplier());
|
||||
PairingList<RaceColumn, Fleet, Competitor, Boat> pairingList = getService()
|
||||
.getPairingListFromTemplate(pairingListTemplate, leaderboardName, selectedRaces);
|
||||
List<List<List<Pair<CompetitorDTO, BoatDTO>>>> result = new ArrayList<>();
|
||||
for (RaceColumn raceColumn : selectedRaces) {
|
||||
//TODO change flights to fleets
|
||||
List<List<Pair<CompetitorDTO, BoatDTO>>> flights = new ArrayList<>();
|
||||
for (Fleet fleetElement : raceColumn.getFleets()) {
|
||||
List<Pair<CompetitorDTO, BoatDTO>> fleets=new ArrayList<>();
|
||||
for(Pair<Competitor,Boat> pair: pairingList.getCompetitors(raceColumn, fleetElement)){
|
||||
if(pair.getA()!=null){
|
||||
fleets.add(new Pair<CompetitorDTO,BoatDTO>(baseDomainFactory.convertToCompetitorDTO(pair.getA()),new BoatDTO(pair.getB().getName(),pair.getB().getSailID())));
|
||||
}else{
|
||||
fleets.add(new Pair<CompetitorDTO,BoatDTO>(new CompetitorDTOImpl(),new BoatDTO(pair.getB().getName(),pair.getB().getSailID())));
|
||||
}
|
||||
}
|
||||
flights.add(fleets);
|
||||
}
|
||||
result.add(flights);
|
||||
}
|
||||
// TODO change flights to fleets
|
||||
List<List<Pair<CompetitorDTO, BoatDTO>>> raceColumns = new ArrayList<>();
|
||||
for (Fleet fleetElement : raceColumn.getFleets()) {
|
||||
List<Pair<CompetitorDTO, BoatDTO>> fleets = new ArrayList<>();
|
||||
for (Pair<Competitor, Boat> pair : pairingList.getCompetitors(raceColumn, fleetElement)) {
|
||||
if (pair.getA() != null) {
|
||||
fleets.add(new Pair<CompetitorDTO, BoatDTO>(baseDomainFactory.convertToCompetitorDTO(pair.getA()),
|
||||
new BoatDTO(pair.getB().getName(), pair.getB().getSailID())));
|
||||
} else {
|
||||
fleets.add(new Pair<CompetitorDTO, BoatDTO>(new CompetitorDTOImpl(),
|
||||
new BoatDTO(pair.getB().getName(), pair.getB().getSailID())));
|
||||
}
|
||||
}
|
||||
raceColumns.add(fleets);
|
||||
}
|
||||
result.add(raceColumns);
|
||||
}
|
||||
return new PairingListDTO(result);
|
||||
}
|
||||
|
||||
|
||||
+17
-8
@@ -120,6 +120,7 @@ import com.sap.sailing.domain.common.dto.EventType;
|
||||
import com.sap.sailing.domain.common.dto.FleetDTO;
|
||||
import com.sap.sailing.domain.common.dto.RegattaCreationParametersDTO;
|
||||
import com.sap.sailing.domain.common.dto.SeriesCreationParametersDTO;
|
||||
import com.sap.sailing.domain.common.impl.ColorMapImpl;
|
||||
import com.sap.sailing.domain.common.impl.DataImportProgressImpl;
|
||||
import com.sap.sailing.domain.common.media.MediaTrack;
|
||||
import com.sap.sailing.domain.common.racelog.RaceLogRaceStatus;
|
||||
@@ -265,6 +266,7 @@ 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.PairingListTemplateFactory;
|
||||
import com.sap.sse.pairinglist.impl.PairingListTemplateFactoryImpl;
|
||||
import com.sap.sse.replication.OperationExecutionListener;
|
||||
import com.sap.sse.replication.OperationWithResult;
|
||||
@@ -489,7 +491,7 @@ public class RacingEventServiceImpl implements RacingEventService, ClearStateTes
|
||||
*/
|
||||
private final RaceChangeObserverForAnniversaryDetection raceChangeObserverForAnniversaryDetection;
|
||||
|
||||
private final PairingListTemplateFactoryImpl pairingListTemplateFactory = new PairingListTemplateFactoryImpl();
|
||||
private final PairingListTemplateFactory pairingListTemplateFactory = PairingListTemplateFactory.INSTANCE;
|
||||
|
||||
/**
|
||||
* Providing the constructor parameters for a new {@link RacingEventServiceImpl} instance is a bit tricky
|
||||
@@ -4163,7 +4165,7 @@ public class RacingEventServiceImpl implements RacingEventService, ClearStateTes
|
||||
|
||||
if (leaderboard != null) {
|
||||
PairingListTemplate template = pairingListTemplateFactory
|
||||
.getOrCreatePairingListTemplate(new PairingFrameProvider() {
|
||||
.createPairingListTemplate(new PairingFrameProvider() {
|
||||
|
||||
@Override
|
||||
public int getGroupsCount() {
|
||||
@@ -4195,12 +4197,14 @@ public class RacingEventServiceImpl implements RacingEventService, ClearStateTes
|
||||
|
||||
List<Competitor> competitors = Util.createList(leaderboard.getAllCompetitors());
|
||||
Collections.shuffle(competitors);
|
||||
//TODO (bug2822) get Boats of Regatta
|
||||
ArrayList<Boat> boats=new ArrayList<>();
|
||||
for(int slot=0;slot<pairingListTemplate.getPairingListTemplate()[0].length;slot++){
|
||||
boats.add(new BoatImpl("Boat "+(slot+1), new BoatClassImpl("49er", true), "DE"+slot));
|
||||
//TODO (bug2822) get Boats of Regatta/Leaderboard
|
||||
|
||||
List<Boat> boats = new ArrayList<>();
|
||||
|
||||
for (int slot = 0; slot < pairingListTemplate.getPairingListTemplate()[0].length; slot++) {
|
||||
boats.add(new BoatImpl("Boat " + (slot + 1), new BoatClassImpl("49er", true), "DE" + slot));
|
||||
}
|
||||
PairingList<RaceColumn, Fleet, Competitor,Boat> pairingList = pairingListTemplate.createPairingList(new CompetitionFormat<RaceColumn, Fleet, Competitor>() {
|
||||
PairingList<RaceColumn, Fleet, Competitor,Boat> pairingList = pairingListTemplate.createPairingList(new CompetitionFormat<RaceColumn, Fleet, Competitor, Boat>() {
|
||||
|
||||
@Override
|
||||
public Iterable<RaceColumn> getFlights() {
|
||||
@@ -4222,7 +4226,12 @@ public class RacingEventServiceImpl implements RacingEventService, ClearStateTes
|
||||
public int getGroupsCount() {
|
||||
return Util.size(Util.get(leaderboard.getRaceColumns(), 0).getFleets());
|
||||
}
|
||||
},boats);
|
||||
|
||||
@Override
|
||||
public Iterable<Boat> getCompetitorAllocation() {
|
||||
return boats;
|
||||
}
|
||||
});
|
||||
return pairingList;
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -9,7 +9,7 @@ import com.sap.sse.pairinglist.AbstractPairingFrameProvider;
|
||||
public class PairingFrameProviderTest extends AbstractPairingFrameProvider {
|
||||
|
||||
private int flights, groups, competitors;
|
||||
|
||||
|
||||
public PairingFrameProviderTest(int flights, int groups, int competitors) {
|
||||
this.flights = flights;
|
||||
this.groups = groups;
|
||||
|
||||
+59
-63
@@ -1,7 +1,7 @@
|
||||
package com.sap.see.pairinglist.test;
|
||||
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
import static org.junit.Assert.assertArrayEquals;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
import static org.junit.Assert.assertArrayEquals;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.stream.IntStream;
|
||||
@@ -17,7 +17,7 @@ import junit.framework.Assert;
|
||||
public class PairingListTemplateFactoryTest {
|
||||
|
||||
public PairingListTemplateFactoryImpl factoryImpl;
|
||||
|
||||
|
||||
@Before
|
||||
public void testSetup() {
|
||||
factoryImpl = new PairingListTemplateFactoryImpl();
|
||||
@@ -30,7 +30,7 @@ public class PairingListTemplateFactoryTest {
|
||||
final int competitors = 18;
|
||||
|
||||
int[][] plTemplate = factoryImpl
|
||||
.getOrCreatePairingListTemplate(new PairingFrameProviderTest(flights, groups, competitors),0)
|
||||
.createPairingListTemplate(new PairingFrameProviderTest(flights, groups, competitors))
|
||||
.getPairingListTemplate();
|
||||
|
||||
Assert.assertNotNull(plTemplate);
|
||||
@@ -41,45 +41,39 @@ public class PairingListTemplateFactoryTest {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
int[][] plTemplate2 = factoryImpl
|
||||
.getOrCreatePairingListTemplate(new PairingFrameProviderTest(flights, groups, competitors + 1),0)
|
||||
.createPairingListTemplate(new PairingFrameProviderTest(flights, groups, competitors + 1))
|
||||
.getPairingListTemplate();
|
||||
|
||||
|
||||
int dummyCount = 0;
|
||||
|
||||
Assert.assertNotNull(plTemplate2);
|
||||
for (int[] group : plTemplate2) {
|
||||
for (int competitorNumber : group) {
|
||||
|
||||
|
||||
if (competitorNumber == -1) {
|
||||
dummyCount++;
|
||||
}
|
||||
|
||||
|
||||
if (competitorNumber < -1 && competitorNumber < competitors) {
|
||||
Assert.fail("Values of Pairing List Template must not be smaller -1, when there are dummies!");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (dummyCount != (groups - 1) * flights) {
|
||||
Assert.fail("There are not as much dummies as there should be!");
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Checks if the Factory returns the same PairingListTemplate if one exists
|
||||
*/
|
||||
|
||||
@Test
|
||||
public void testGetOrCreate() {
|
||||
final int flights = 15;
|
||||
final int groups = 3;
|
||||
final int competitors = 18;
|
||||
|
||||
PairingFrameProviderTest frameProviderTest1 = new PairingFrameProviderTest(flights, groups, competitors);
|
||||
PairingFrameProviderTest frameProviderTest2 = new PairingFrameProviderTest(flights, groups, competitors);
|
||||
PairingListTemplate list1 = factoryImpl.getOrCreatePairingListTemplate(frameProviderTest1,0);
|
||||
PairingListTemplate list2 = factoryImpl.getOrCreatePairingListTemplate(frameProviderTest2,0);
|
||||
Assert.assertSame(list1,list2);
|
||||
public void testCreatePairingListTemplate() {
|
||||
PairingListTemplateFactoryImpl factoryImpl = new PairingListTemplateFactoryImpl();
|
||||
PairingListTemplate template1 = factoryImpl.createPairingListTemplate(new PairingFrameProviderTest(15, 3, 18));
|
||||
PairingListTemplate template2 = factoryImpl.createPairingListTemplate(new PairingFrameProviderTest(15, 3, 18));
|
||||
|
||||
Assert.assertFalse(Arrays.equals(template1.getPairingListTemplate(), template2.getPairingListTemplate()));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -88,85 +82,87 @@ public class PairingListTemplateFactoryTest {
|
||||
@Test
|
||||
public void testGeneration() {
|
||||
PairingListTemplateFactoryImpl factoryImpl = new PairingListTemplateFactoryImpl();
|
||||
PairingListTemplate example1 = factoryImpl.getOrCreatePairingListTemplate(new PairingFrameProviderTest(15, 3, 18),0);
|
||||
PairingListTemplate example6 = factoryImpl.getOrCreatePairingListTemplate(new PairingFrameProviderTest(15, 3, 14),0);
|
||||
PairingListTemplate example2 = factoryImpl.getOrCreatePairingListTemplate(new PairingFrameProviderTest(100, 6, 18),0);
|
||||
PairingListTemplate example3 = factoryImpl.getOrCreatePairingListTemplate(new PairingFrameProviderTest(10, 3, 30),0);
|
||||
PairingListTemplate example4 = factoryImpl.getOrCreatePairingListTemplate(new PairingFrameProviderTest(15, 3, 18), 3);
|
||||
PairingListTemplate example5 = factoryImpl.getOrCreatePairingListTemplate(new PairingFrameProviderTest(15, 3, 18), 3);
|
||||
PairingListTemplate example1 = factoryImpl.createPairingListTemplate(new PairingFrameProviderTest(15, 3, 18));
|
||||
PairingListTemplate example6 = factoryImpl.createPairingListTemplate(new PairingFrameProviderTest(15, 3, 14));
|
||||
PairingListTemplate example2 = factoryImpl.createPairingListTemplate(new PairingFrameProviderTest(100, 6, 18));
|
||||
PairingListTemplate example3 = factoryImpl.createPairingListTemplate(new PairingFrameProviderTest(10, 3, 30));
|
||||
PairingListTemplate example4 = factoryImpl
|
||||
.createPairingListTemplate(new PairingFrameProviderTest(15, 3, 18), 3);
|
||||
PairingListTemplate example5 = factoryImpl
|
||||
.createPairingListTemplate(new PairingFrameProviderTest(15, 3, 18), 3);
|
||||
assertNotNull(example1);
|
||||
assertNotNull(example2);
|
||||
assertNotNull(example3);
|
||||
assertNotNull(example4);
|
||||
assertNotNull(example5);
|
||||
assertNotNull(example6);
|
||||
assertArrayEquals(example4.getPairingListTemplate(), example5.getPairingListTemplate());
|
||||
System.out.println(Arrays.deepToString(example1.getPairingListTemplate()));
|
||||
System.out.println(example2.getQuality());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testMultiplyFlights() {
|
||||
final int flightCount = 14;
|
||||
final int groupCount = 3;
|
||||
final int competitorCount = 18;
|
||||
final int competitorCount = 18;
|
||||
final int multiplier = 2;
|
||||
|
||||
|
||||
PairingListTemplateFactoryImpl factoryImpl = new PairingListTemplateFactoryImpl();
|
||||
PairingListTemplate example = factoryImpl.getOrCreatePairingListTemplate(new PairingFrameProviderTest(flightCount, groupCount, competitorCount), multiplier);
|
||||
|
||||
for (int groupIndex = 0; groupIndex < flightCount * groupCount; groupIndex = groupIndex + (groupCount * (multiplier))) {
|
||||
assertArrayEquals(example.getPairingListTemplate()[groupIndex], example.getPairingListTemplate()[groupIndex + groupCount]);
|
||||
PairingListTemplate example = factoryImpl.createPairingListTemplate(
|
||||
new PairingFrameProviderTest(flightCount, groupCount, competitorCount), multiplier);
|
||||
|
||||
for (int groupIndex = 0; groupIndex < flightCount * groupCount; groupIndex = groupIndex
|
||||
+ (groupCount * (multiplier))) {
|
||||
assertArrayEquals(example.getPairingListTemplate()[groupIndex],
|
||||
example.getPairingListTemplate()[groupIndex + groupCount]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Test
|
||||
public void qualityCheck(){
|
||||
PairingListTemplate template = factoryImpl.getOrCreatePairingListTemplate(new PairingFrameProviderTest(15, 3, 18),0);
|
||||
public void qualityCheck() {
|
||||
PairingListTemplate template = factoryImpl.createPairingListTemplate(new PairingFrameProviderTest(15, 3, 18));
|
||||
System.out.println(Arrays.deepToString(template.getPairingListTemplate()));
|
||||
System.out.println(template.getQuality());
|
||||
if(template.getQuality()>=0.7) {
|
||||
if (template.getQuality() >= 0.7) {
|
||||
Assert.fail("Quality of Pairinglist is worse than usual!");
|
||||
}
|
||||
|
||||
PairingListTemplate template2 = factoryImpl.getOrCreatePairingListTemplate(new PairingFrameProviderTest(10, 3, 30),0);
|
||||
|
||||
PairingListTemplate template2 = factoryImpl.createPairingListTemplate(new PairingFrameProviderTest(10, 3, 30));
|
||||
System.out.println(Arrays.deepToString(template2.getPairingListTemplate()));
|
||||
System.out.println(template2.getQuality());
|
||||
if(template2.getQuality()>=1.2) {
|
||||
if (template2.getQuality() >= 1.2) {
|
||||
Assert.fail("Quality of Pairinglist is worse than usual!");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Checks if the competitors of all single flights are divided up correctly (e.g. multiple competitors, absenced competitors)
|
||||
* flights, groups and competitors can be variable.
|
||||
* Checks if the competitors of all single flights are divided up correctly (e.g. multiple competitors, absenced
|
||||
* competitors) flights, groups and competitors can be variable.
|
||||
*/
|
||||
@Test
|
||||
public void checkFlights() {
|
||||
final int flights = 15;
|
||||
final int groups = 3;
|
||||
final int competitors = 18;
|
||||
|
||||
|
||||
ArrayList<Integer> availableCompetitors = new ArrayList<>();
|
||||
|
||||
int[][] copy = factoryImpl.getOrCreatePairingListTemplate(new PairingFrameProviderTest(flights, groups, competitors),0).getPairingListTemplate();
|
||||
|
||||
for(int i = 0; i < flights; i++) {
|
||||
|
||||
|
||||
int[][] copy = factoryImpl.createPairingListTemplate(new PairingFrameProviderTest(flights, groups, competitors))
|
||||
.getPairingListTemplate();
|
||||
|
||||
for (int i = 0; i < flights; i++) {
|
||||
|
||||
IntStream.range(0, competitors - 1).forEach(competitor -> {
|
||||
availableCompetitors.add(competitor);
|
||||
});
|
||||
|
||||
for(int j = 0; j < groups; j++) {
|
||||
for(int k = 0; k < competitors/groups; k++) {
|
||||
if(availableCompetitors.contains(copy[i*groups+j][k])) {
|
||||
availableCompetitors.remove(new Integer(copy[i*groups+j][k]));
|
||||
|
||||
for (int j = 0; j < groups; j++) {
|
||||
for (int k = 0; k < competitors / groups; k++) {
|
||||
if (availableCompetitors.contains(copy[i * groups + j][k])) {
|
||||
availableCompetitors.remove(new Integer(copy[i * groups + j][k]));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(availableCompetitors.isEmpty()) {
|
||||
|
||||
if (availableCompetitors.isEmpty()) {
|
||||
continue;
|
||||
} else {
|
||||
Assert.fail("The competitors are not divided up correctly!");
|
||||
|
||||
@@ -5,7 +5,7 @@ import com.sap.sse.common.Util;
|
||||
* If a Class implements this Interface, it is possible to generate a ParingList out of this Class.
|
||||
* The class needs some specific methods to get the attributes of the needed ParingList.
|
||||
*/
|
||||
public interface CompetitionFormat<Flight, Group, Competitor> extends PairingFrameProvider {
|
||||
public interface CompetitionFormat<Flight, Group, Competitor, CompetitorAllocation> extends PairingFrameProvider {
|
||||
Iterable<Flight> getFlights();
|
||||
|
||||
default int getFlightsCount() {
|
||||
@@ -19,4 +19,6 @@ public interface CompetitionFormat<Flight, Group, Competitor> extends PairingFra
|
||||
default int getCompetitorsCount() {
|
||||
return Util.size(getCompetitors());
|
||||
}
|
||||
|
||||
Iterable<CompetitorAllocation> getCompetitorAllocation();
|
||||
}
|
||||
@@ -8,12 +8,12 @@ import com.sap.sse.common.Util.Pair;
|
||||
* which contains specific Competitor objects for a specific flight. Because of this it has to depend on a
|
||||
* <code>CompetitonFormat</code>.
|
||||
*/
|
||||
public interface PairingList<Flight, Group, Competitor,Boat> {
|
||||
public interface PairingList<Flight, Group, Competitor, CompetitorAllocation> {
|
||||
//TODO specify Javadoc for Boat-Competitor association
|
||||
/**
|
||||
* Returns the Competitor objects in a group of a specific flight
|
||||
*
|
||||
* @return <code>Iterable</code> with competitors
|
||||
*/
|
||||
Iterable<Pair<Competitor,Boat>> getCompetitors(Flight flight, Group group);
|
||||
Iterable<Pair<Competitor, CompetitorAllocation>> getCompetitors(Flight flight, Group group);
|
||||
}
|
||||
@@ -16,8 +16,8 @@ import java.util.ArrayList;
|
||||
*/
|
||||
|
||||
public interface PairingListTemplate {
|
||||
<Flight, Group, Competitor,Boat> PairingList<Flight, Group, Competitor,Boat> createPairingList(
|
||||
CompetitionFormat<Flight, Group, Competitor> competitionFormat,ArrayList<Boat> boats);
|
||||
<Flight, Group, Competitor, CompetitorAllocation> PairingList<Flight, Group, Competitor, CompetitorAllocation> createPairingList(
|
||||
CompetitionFormat<Flight, Group, Competitor, CompetitorAllocation> competitionFormat);
|
||||
|
||||
/**
|
||||
* The value corresponds to the quality of a pairing list template. The quality is calculated by the
|
||||
|
||||
@@ -6,12 +6,10 @@ public interface PairingListTemplateFactory {
|
||||
static PairingListTemplateFactory INSTANCE = new PairingListTemplateFactoryImpl();
|
||||
|
||||
/**
|
||||
* Returns new pairing list template if there is no existing pairing list template with
|
||||
* the same parameters.
|
||||
* Returns a new {@link PairingListTemplate}
|
||||
*
|
||||
* @param pairingFrameProvider
|
||||
* @return PairingListTemplate Object
|
||||
* @return PairingListTemplate correlates with the new {@link PairingListTemplate}
|
||||
*/
|
||||
PairingListTemplate getOrCreatePairingListTemplate(PairingFrameProvider pairingFrameProvider,int flightMultiplier);
|
||||
|
||||
PairingListTemplate createPairingListTemplate(PairingFrameProvider pairingFrameProvider, int flightCount);
|
||||
}
|
||||
@@ -9,41 +9,40 @@ import com.sap.sse.pairinglist.CompetitionFormat;
|
||||
import com.sap.sse.pairinglist.PairingList;
|
||||
import com.sap.sse.pairinglist.PairingListTemplate;
|
||||
|
||||
public class PairingListImpl<Flight, Group, Competitor,Boat> implements PairingList<Flight, Group, Competitor,Boat> {
|
||||
public class PairingListImpl<Flight, Group, Competitor,CompetitorAllocation> implements PairingList<Flight, Group, Competitor, CompetitorAllocation> {
|
||||
private final PairingListTemplate pairingListTemplate;
|
||||
private final CompetitionFormat<Flight, Group, Competitor> competitionFormat;
|
||||
private final List<Boat> boats;
|
||||
private final CompetitionFormat<Flight, Group, Competitor, CompetitorAllocation> competitionFormat;
|
||||
private final List<Competitor> competitors;
|
||||
|
||||
/**
|
||||
* @param pList: pairing list with specific information of flights, groups and competitors
|
||||
* @param standardDev: describes quality of our pList (the lower the standardDev, the better the pairing list)
|
||||
*/
|
||||
public PairingListImpl(PairingListTemplate template, CompetitionFormat<Flight, Group, Competitor> competitionFormat,ArrayList<Boat> boats) {
|
||||
public PairingListImpl(PairingListTemplate template, CompetitionFormat<Flight, Group, Competitor, CompetitorAllocation> competitionFormat) {
|
||||
this.pairingListTemplate = template;
|
||||
this.competitionFormat = competitionFormat;
|
||||
this.boats=boats;
|
||||
this.competitors=Util.asList(competitionFormat.getCompetitors());
|
||||
this.competitors = Util.asList(competitionFormat.getCompetitors());
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public Iterable<Pair<Competitor,Boat>> getCompetitors(Flight flight, Group group) {
|
||||
public Iterable<Pair<Competitor, CompetitorAllocation>> getCompetitors(Flight flight, Group group) {
|
||||
final int[][] competitorIndices = pairingListTemplate.getPairingListTemplate();
|
||||
final int flightIndex = Util.indexOf(competitionFormat.getFlights(), flight);
|
||||
final int groupIndex = Util.indexOf(competitionFormat.getGroups(flight), group);
|
||||
final int groupCount =Util.size(competitionFormat.getGroups(flight));
|
||||
final int groupCount = Util.size(competitionFormat.getGroups(flight));
|
||||
final ArrayList<Integer> competitorIndicesInRace = new ArrayList<>();
|
||||
|
||||
for (Integer integer : competitorIndices[flightIndex*groupCount+groupIndex]) {
|
||||
|
||||
for (Integer integer : competitorIndices[flightIndex * groupCount + groupIndex]) {
|
||||
competitorIndicesInRace.add(integer);
|
||||
}
|
||||
|
||||
final List<Pair<Competitor,Boat>> result = new ArrayList<>();
|
||||
for(int slot=0;slot<competitorIndicesInRace.size();slot++){
|
||||
if(competitorIndicesInRace.get(slot)>=0){
|
||||
result.add(new Pair<Competitor, Boat>(competitors.get(competitorIndicesInRace.get(slot)), boats.get(slot)));
|
||||
}else{
|
||||
result.add(new Pair<Competitor, Boat>(null, boats.get(slot)));
|
||||
|
||||
final List<Pair<Competitor, CompetitorAllocation>> result = new ArrayList<>();
|
||||
for (int slot = 0; slot < competitorIndicesInRace.size(); slot++) {
|
||||
if (competitorIndicesInRace.get(slot) >= 0) {
|
||||
result.add(new Pair<Competitor, CompetitorAllocation>(competitors.get(competitorIndicesInRace.get(slot)),
|
||||
Util.get(competitionFormat.getCompetitorAllocation(), slot)));
|
||||
} else {
|
||||
result.add(new Pair<Competitor, CompetitorAllocation>(null, Util.get(competitionFormat.getCompetitorAllocation(), slot)));
|
||||
}
|
||||
}
|
||||
return result;
|
||||
|
||||
+10
-45
@@ -1,59 +1,24 @@
|
||||
package com.sap.sse.pairinglist.impl;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
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<Integer, Map<Integer,PairingListTemplate>> pairingListTemplates;
|
||||
|
||||
public PairingListTemplateFactoryImpl() {
|
||||
this.pairingListTemplates=new HashMap<>();
|
||||
}
|
||||
|
||||
public PairingListTemplateFactoryImpl(Map<Integer, Map<Integer,PairingListTemplate>> existingPairingListTemplates) {
|
||||
this.pairingListTemplates = existingPairingListTemplates;
|
||||
}
|
||||
public PairingListTemplateFactoryImpl() { }
|
||||
|
||||
|
||||
@Override
|
||||
public PairingListTemplate getOrCreatePairingListTemplate(PairingFrameProvider pairingFrameProvider,int flightMultiplier) {
|
||||
PairingListTemplate result;
|
||||
try{
|
||||
result = pairingListTemplates.get(pairingFrameProvider.getHashCode()).get(flightMultiplier);
|
||||
}catch(NullPointerException e){
|
||||
result=null;
|
||||
}
|
||||
|
||||
if (result == null) {
|
||||
result = generatePairingList(pairingFrameProvider,flightMultiplier);
|
||||
if(pairingListTemplates.get(pairingFrameProvider.getHashCode())==null){
|
||||
pairingListTemplates.put(pairingFrameProvider.getHashCode(), new HashMap<>());
|
||||
pairingListTemplates.get(pairingFrameProvider.getHashCode()).put(flightMultiplier, result);
|
||||
}else{
|
||||
pairingListTemplates.get(pairingFrameProvider.getHashCode()).put(flightMultiplier, result);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
/**
|
||||
* Creates a new ParingListTemplate which depends on the parameters of the given pairingFrameProvider.
|
||||
* @param pairingFrameProvider
|
||||
* @return new PariningListTemplate object
|
||||
*/
|
||||
protected PairingListTemplate generatePairingList(PairingFrameProvider pairingFrameProvider, int iterations,
|
||||
int flightMultiplier) {
|
||||
return new PairingListTemplateImpl(pairingFrameProvider, iterations, flightMultiplier);
|
||||
}
|
||||
|
||||
protected PairingListTemplate generatePairingList(PairingFrameProvider pairingFrameProvider, int flightMultiplier) {
|
||||
return this.generatePairingList(pairingFrameProvider, 100000, flightMultiplier);
|
||||
public PairingListTemplate createPairingListTemplate(PairingFrameProvider pairingFrameProvider, int flightMultiplier) {
|
||||
return new PairingListTemplateImpl(pairingFrameProvider, flightMultiplier);
|
||||
}
|
||||
|
||||
protected PairingListTemplate generatePairingList(PairingFrameProvider pairingFrameProvider) {
|
||||
return this.generatePairingList(pairingFrameProvider, 100000, 0);
|
||||
public PairingListTemplate createPairingListTemplate(PairingFrameProvider pairingFrameProvider, int iterations, int flightMultiplier) {
|
||||
return new PairingListTemplateImpl(pairingFrameProvider, iterations, flightMultiplier);
|
||||
}
|
||||
|
||||
public PairingListTemplate createPairingListTemplate(PairingFrameProvider pairingFrameProvider) {
|
||||
return new PairingListTemplateImpl(pairingFrameProvider);
|
||||
}
|
||||
}
|
||||
@@ -66,13 +66,32 @@ public class PairingListTemplateImpl implements PairingListTemplate {
|
||||
+ "be greater than 1; count of competitors has to be greater than count of groups");
|
||||
}
|
||||
}
|
||||
//Used to convert a TemplateDTO to PairingListTemplate
|
||||
public PairingListTemplateImpl(int[][] template,int competitorsCount,int flightMultiplier) {
|
||||
this.pairingListTemplate=template;
|
||||
this.standardDev=this.calcStandardDev(incrementAssociations(template, new int[competitorsCount][competitorsCount]));
|
||||
this.iterations=100000;
|
||||
this.flightMultiplier=flightMultiplier;
|
||||
this.dummies=0;
|
||||
// Used to convert a TemplateDTO to PairingListTemplate
|
||||
public PairingListTemplateImpl(int[][] template, int competitorsCount, int flightMultiplier) {
|
||||
this.pairingListTemplate = template;
|
||||
int groupCount = (int) (competitorsCount / this.pairingListTemplate[0].length + 1);
|
||||
this.dummies = groupCount - (competitorsCount % groupCount);
|
||||
|
||||
int dummyIndex = 0;
|
||||
|
||||
for (int[] group : this.pairingListTemplate) {
|
||||
for (int competitorNumber = 0; competitorNumber < group.length; competitorNumber++) {
|
||||
if (group[competitorNumber] < 0) {
|
||||
group[competitorNumber] = competitorsCount + dummyIndex;
|
||||
dummyIndex++;
|
||||
if (dummyIndex >= dummies) {
|
||||
dummyIndex = 0;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
this.standardDev = this.calcStandardDev(incrementAssociations(this.pairingListTemplate,
|
||||
new int[competitorsCount + this.dummies][competitorsCount + this.dummies]));
|
||||
this.resetDummies(this.pairingListTemplate, competitorsCount + this.dummies);
|
||||
this.iterations = 100000;
|
||||
this.flightMultiplier = flightMultiplier;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -81,9 +100,9 @@ public class PairingListTemplateImpl implements PairingListTemplate {
|
||||
}
|
||||
|
||||
@Override
|
||||
public <Flight, Group, Competitor,Boat> PairingList<Flight, Group, Competitor,Boat> createPairingList(
|
||||
CompetitionFormat<Flight, Group, Competitor> competitionFormat,ArrayList<Boat> boats) {
|
||||
return new PairingListImpl<>(this, competitionFormat,boats);
|
||||
public <Flight, Group, Competitor, CompetitorAllocation> PairingList<Flight, Group, Competitor, CompetitorAllocation> createPairingList(
|
||||
CompetitionFormat<Flight, Group, Competitor, CompetitorAllocation> competitionFormat) {
|
||||
return new PairingListImpl<>(this, competitionFormat);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in new issue
Block a user