diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/base/PairingListRegattaAdapter.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/base/PairingListRegattaAdapter.java index c0f7c7bb504..7f351a09549 100644 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/base/PairingListRegattaAdapter.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/base/PairingListRegattaAdapter.java @@ -1,5 +1,5 @@ package com.sap.sailing.domain.base; import com.sap.sse.pairinglist.CompetitionFormat; -public interface PairingListRegattaAdapter extends CompetitionFormat { +public interface PairingListRegattaAdapter extends CompetitionFormat { } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/LeaderboardConfigPanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/LeaderboardConfigPanel.java index 18ca0b253be..67137adfeb1 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/LeaderboardConfigPanel.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/LeaderboardConfigPanel.java @@ -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() { + try { + sailingService.calculatePairingList(leaderboardDTO.getName(), + editedObject.getSelectedFlightNames(), editedObject.getCompetitorCount(), + editedObject.getFlightMultiplier(), new AsyncCallback() { - @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 } } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/PairingListCreationDialog.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/PairingListCreationDialog.java index 50b26a812d0..5ae7f1e4931 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/PairingListCreationDialog.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/PairingListCreationDialog.java @@ -30,9 +30,7 @@ public class PairingListCreationDialog extends DataEntryDialog() { + + @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) diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java index 4ec58816002..9817746661e 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java @@ -6825,7 +6825,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S @Override public PairingListDTO getPairingListFromTemplate(final String leaderboardName, final int flightMultiplier, - final Iterable selectedFlightNames,PairingListTemplateDTO templateDTO) + final Iterable selectedFlightNames, PairingListTemplateDTO templateDTO) throws NotFoundException { Leaderboard leaderboard = getLeaderboardByName(leaderboardName); List selectedRaces = new ArrayList(); @@ -6836,26 +6836,29 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } } } - PairingListTemplate pairingListTemplate = new PairingListTemplateImpl(templateDTO.getPairingListTemplate(), templateDTO.getCompetitorCount(), templateDTO.getFlightMultiplier()); - PairingList pairingList = - getService().getPairingListFromTemplate(pairingListTemplate, leaderboardName, selectedRaces); + PairingListTemplate pairingListTemplate = new PairingListTemplateImpl(templateDTO.getPairingListTemplate(), + templateDTO.getCompetitorCount(), templateDTO.getFlightMultiplier()); + PairingList pairingList = getService() + .getPairingListFromTemplate(pairingListTemplate, leaderboardName, selectedRaces); List>>> result = new ArrayList<>(); for (RaceColumn raceColumn : selectedRaces) { - //TODO change flights to fleets - List>> flights = new ArrayList<>(); - for (Fleet fleetElement : raceColumn.getFleets()) { - List> fleets=new ArrayList<>(); - for(Pair pair: pairingList.getCompetitors(raceColumn, fleetElement)){ - if(pair.getA()!=null){ - fleets.add(new Pair(baseDomainFactory.convertToCompetitorDTO(pair.getA()),new BoatDTO(pair.getB().getName(),pair.getB().getSailID()))); - }else{ - fleets.add(new Pair(new CompetitorDTOImpl(),new BoatDTO(pair.getB().getName(),pair.getB().getSailID()))); - } - } - flights.add(fleets); - } - result.add(flights); - } + // TODO change flights to fleets + List>> raceColumns = new ArrayList<>(); + for (Fleet fleetElement : raceColumn.getFleets()) { + List> fleets = new ArrayList<>(); + for (Pair pair : pairingList.getCompetitors(raceColumn, fleetElement)) { + if (pair.getA() != null) { + fleets.add(new Pair(baseDomainFactory.convertToCompetitorDTO(pair.getA()), + new BoatDTO(pair.getB().getName(), pair.getB().getSailID()))); + } else { + fleets.add(new Pair(new CompetitorDTOImpl(), + new BoatDTO(pair.getB().getName(), pair.getB().getSailID()))); + } + } + raceColumns.add(fleets); + } + result.add(raceColumns); + } return new PairingListDTO(result); } diff --git a/java/com.sap.sailing.server/src/com/sap/sailing/server/impl/RacingEventServiceImpl.java b/java/com.sap.sailing.server/src/com/sap/sailing/server/impl/RacingEventServiceImpl.java index 81e2b79be14..9535d5f9f49 100644 --- a/java/com.sap.sailing.server/src/com/sap/sailing/server/impl/RacingEventServiceImpl.java +++ b/java/com.sap.sailing.server/src/com/sap/sailing/server/impl/RacingEventServiceImpl.java @@ -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 competitors = Util.createList(leaderboard.getAllCompetitors()); Collections.shuffle(competitors); - //TODO (bug2822) get Boats of Regatta - ArrayList boats=new ArrayList<>(); - for(int slot=0;slot 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 pairingList = pairingListTemplate.createPairingList(new CompetitionFormat() { + PairingList pairingList = pairingListTemplate.createPairingList(new CompetitionFormat() { @Override public Iterable 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 getCompetitorAllocation() { + return boats; + } + }); return pairingList; } diff --git a/java/com.sap.sse.test/src/com/sap/see/pairinglist/test/PairingFrameProviderTest.java b/java/com.sap.sse.test/src/com/sap/see/pairinglist/test/PairingFrameProviderTest.java index 77e02abf5da..b2a3828b8b0 100644 --- a/java/com.sap.sse.test/src/com/sap/see/pairinglist/test/PairingFrameProviderTest.java +++ b/java/com.sap.sse.test/src/com/sap/see/pairinglist/test/PairingFrameProviderTest.java @@ -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; diff --git a/java/com.sap.sse.test/src/com/sap/see/pairinglist/test/PairingListTemplateFactoryTest.java b/java/com.sap.sse.test/src/com/sap/see/pairinglist/test/PairingListTemplateFactoryTest.java index 111436f33ff..70502be4670 100644 --- a/java/com.sap.sse.test/src/com/sap/see/pairinglist/test/PairingListTemplateFactoryTest.java +++ b/java/com.sap.sse.test/src/com/sap/see/pairinglist/test/PairingListTemplateFactoryTest.java @@ -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 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!"); diff --git a/java/com.sap.sse/src/com/sap/sse/pairinglist/CompetitionFormat.java b/java/com.sap.sse/src/com/sap/sse/pairinglist/CompetitionFormat.java index dcc5e6847b8..31cc2c3f09a 100644 --- a/java/com.sap.sse/src/com/sap/sse/pairinglist/CompetitionFormat.java +++ b/java/com.sap.sse/src/com/sap/sse/pairinglist/CompetitionFormat.java @@ -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 extends PairingFrameProvider { +public interface CompetitionFormat extends PairingFrameProvider { Iterable getFlights(); default int getFlightsCount() { @@ -19,4 +19,6 @@ public interface CompetitionFormat extends PairingFra default int getCompetitorsCount() { return Util.size(getCompetitors()); } + + Iterable getCompetitorAllocation(); } diff --git a/java/com.sap.sse/src/com/sap/sse/pairinglist/PairingList.java b/java/com.sap.sse/src/com/sap/sse/pairinglist/PairingList.java index e506d123b22..75038c35776 100644 --- a/java/com.sap.sse/src/com/sap/sse/pairinglist/PairingList.java +++ b/java/com.sap.sse/src/com/sap/sse/pairinglist/PairingList.java @@ -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 * CompetitonFormat. */ -public interface PairingList { +public interface PairingList { //TODO specify Javadoc for Boat-Competitor association /** * Returns the Competitor objects in a group of a specific flight * * @return Iterable with competitors */ - Iterable> getCompetitors(Flight flight, Group group); + Iterable> getCompetitors(Flight flight, Group group); } diff --git a/java/com.sap.sse/src/com/sap/sse/pairinglist/PairingListTemplate.java b/java/com.sap.sse/src/com/sap/sse/pairinglist/PairingListTemplate.java index 12e7f58bfea..8ee26e3d12e 100644 --- a/java/com.sap.sse/src/com/sap/sse/pairinglist/PairingListTemplate.java +++ b/java/com.sap.sse/src/com/sap/sse/pairinglist/PairingListTemplate.java @@ -16,8 +16,8 @@ import java.util.ArrayList; */ public interface PairingListTemplate { - PairingList createPairingList( - CompetitionFormat competitionFormat,ArrayList boats); + PairingList createPairingList( + CompetitionFormat competitionFormat); /** * The value corresponds to the quality of a pairing list template. The quality is calculated by the diff --git a/java/com.sap.sse/src/com/sap/sse/pairinglist/PairingListTemplateFactory.java b/java/com.sap.sse/src/com/sap/sse/pairinglist/PairingListTemplateFactory.java index 794b699324f..63bd1ab129c 100644 --- a/java/com.sap.sse/src/com/sap/sse/pairinglist/PairingListTemplateFactory.java +++ b/java/com.sap.sse/src/com/sap/sse/pairinglist/PairingListTemplateFactory.java @@ -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); } \ No newline at end of file diff --git a/java/com.sap.sse/src/com/sap/sse/pairinglist/impl/PairingListImpl.java b/java/com.sap.sse/src/com/sap/sse/pairinglist/impl/PairingListImpl.java index 18e616ea4bf..8a8227b63d1 100644 --- a/java/com.sap.sse/src/com/sap/sse/pairinglist/impl/PairingListImpl.java +++ b/java/com.sap.sse/src/com/sap/sse/pairinglist/impl/PairingListImpl.java @@ -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 implements PairingList { +public class PairingListImpl implements PairingList { private final PairingListTemplate pairingListTemplate; - private final CompetitionFormat competitionFormat; - private final List boats; + private final CompetitionFormat competitionFormat; private final List 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 competitionFormat,ArrayList boats) { + public PairingListImpl(PairingListTemplate template, CompetitionFormat 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> getCompetitors(Flight flight, Group group) { + public Iterable> 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 competitorIndicesInRace = new ArrayList<>(); - - for (Integer integer : competitorIndices[flightIndex*groupCount+groupIndex]) { + + for (Integer integer : competitorIndices[flightIndex * groupCount + groupIndex]) { competitorIndicesInRace.add(integer); } - - final List> result = new ArrayList<>(); - for(int slot=0;slot=0){ - result.add(new Pair(competitors.get(competitorIndicesInRace.get(slot)), boats.get(slot))); - }else{ - result.add(new Pair(null, boats.get(slot))); + + final List> result = new ArrayList<>(); + for (int slot = 0; slot < competitorIndicesInRace.size(); slot++) { + if (competitorIndicesInRace.get(slot) >= 0) { + result.add(new Pair(competitors.get(competitorIndicesInRace.get(slot)), + Util.get(competitionFormat.getCompetitorAllocation(), slot))); + } else { + result.add(new Pair(null, Util.get(competitionFormat.getCompetitorAllocation(), slot))); } } return result; diff --git a/java/com.sap.sse/src/com/sap/sse/pairinglist/impl/PairingListTemplateFactoryImpl.java b/java/com.sap.sse/src/com/sap/sse/pairinglist/impl/PairingListTemplateFactoryImpl.java index e4d841c2aee..53a0b5b567c 100644 --- a/java/com.sap.sse/src/com/sap/sse/pairinglist/impl/PairingListTemplateFactoryImpl.java +++ b/java/com.sap.sse/src/com/sap/sse/pairinglist/impl/PairingListTemplateFactoryImpl.java @@ -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> pairingListTemplates; - - public PairingListTemplateFactoryImpl() { - this.pairingListTemplates=new HashMap<>(); - } - - public PairingListTemplateFactoryImpl(Map> 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); } } diff --git a/java/com.sap.sse/src/com/sap/sse/pairinglist/impl/PairingListTemplateImpl.java b/java/com.sap.sse/src/com/sap/sse/pairinglist/impl/PairingListTemplateImpl.java index c75497edd6a..038eeeb8ffa 100644 --- a/java/com.sap.sse/src/com/sap/sse/pairinglist/impl/PairingListTemplateImpl.java +++ b/java/com.sap.sse/src/com/sap/sse/pairinglist/impl/PairingListTemplateImpl.java @@ -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 PairingList createPairingList( - CompetitionFormat competitionFormat,ArrayList boats) { - return new PairingListImpl<>(this, competitionFormat,boats); + public PairingList createPairingList( + CompetitionFormat competitionFormat) { + return new PairingListImpl<>(this, competitionFormat); } @Override