diff --git a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/common/test/Java8FunctionsPerformanceTest.java b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/common/test/Java8FunctionsPerformanceTest.java new file mode 100755 index 00000000000..e34574a0fdf --- /dev/null +++ b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/common/test/Java8FunctionsPerformanceTest.java @@ -0,0 +1,87 @@ +package com.sap.sailing.domain.common.test; + +import static org.junit.Assert.assertEquals; + +import java.util.ArrayList; +import java.util.List; +import java.util.logging.Logger; +import java.util.stream.IntStream; + +import org.junit.Before; +import org.junit.Test; +import org.omg.CORBA.LongHolder; + +/** + * Compare Java 8 stream and function performance to direct method call performance + * + * @author Axel Uhl (D043530) + * + */ +public class Java8FunctionsPerformanceTest { + private static final Logger logger = Logger.getLogger(Java8FunctionsPerformanceTest.class.getName()); + private List intList; + private final static int SIZE = 10000000; + + @Before + public void setUp() { + intList = new ArrayList(SIZE); + for (int i=0; i sum.value += i); + long end = System.currentTimeMillis(); + assertEquals(((long) SIZE)*((long) SIZE-1l)/2, sum.value); + logger.info("took "+(end-start)+"ms"); + } + + @Test + public void intArraySumWithForEach() { + long start = System.currentTimeMillis(); + final LongHolder sum = new LongHolder(0); + intList.forEach((i) -> sum.value += i); + long end = System.currentTimeMillis(); + assertEquals(((long) SIZE)*((long) SIZE-1l)/2, sum.value); + logger.info("took "+(end-start)+"ms"); + } + + @Test + public void intArraySumWithIntRangeStream() { + IntStream is = IntStream.range(0, SIZE); + long start = System.currentTimeMillis(); + final LongHolder sum = new LongHolder(0); + is.forEach(i -> sum.value += i); + long end = System.currentTimeMillis(); + assertEquals(((long) SIZE)*((long) SIZE-1l)/2, sum.value); + logger.info("took "+(end-start)+"ms"); + } + + @Test + public void intSum() { + long start = System.currentTimeMillis(); + long sum = 0; + for (int i=0; i regattaAndRaceIdentifiers, boolean isTracked) { + public void racesStoppedTracking(Iterable regattaAndRaceIdentifiers) { + // nothing needs to be done here; the race doesn't change its linkedness status only because it stopped tracking + } + + /** + * When a race is removed from the server, it will also have been unlinked. Represent the unlinking by clearing the + * tracked race link for any race column / fleet that points to it: + */ + @Override + public void racesRemoved(Iterable regattaAndRaceIdentifiers) { for (RegattaAndRaceIdentifier regattaAndRaceIdentifier : regattaAndRaceIdentifiers) { for (RaceColumnDTOAndFleetDTOWithNameBasedEquality raceColumnAndFleetName : raceColumnTable.getDataProvider().getList()) { - if (raceColumnAndFleetName.getA().getRaceColumnName().equals(regattaAndRaceIdentifier.getRaceName())) { - raceColumnAndFleetName.getA().setRaceIdentifier(raceColumnAndFleetName.getB(), - regattaAndRaceIdentifier); + if (Util.equalsWithNull(raceColumnAndFleetName.getA().getRaceIdentifier(raceColumnAndFleetName.getB()), regattaAndRaceIdentifier)) { + raceColumnAndFleetName.getA().setRaceIdentifier(raceColumnAndFleetName.getB(), null); } } raceColumnTable.getDataProvider().refresh(); 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 20bd6638151..5e9bc8d3c8c 100755 --- 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 @@ -312,7 +312,6 @@ TrackedRaceChangedListener, LeaderboardsDisplayer { @Override public boolean isEnabled() { return getSelectedLeaderboard() != null && !getSelectedLeaderboard().type.isRegattaLeaderboard(); - } })) { @Override diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/TrackedRaceChangedListener.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/TrackedRaceChangedListener.java index f17d8e2adf9..dbf9df32110 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/TrackedRaceChangedListener.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/TrackedRaceChangedListener.java @@ -3,5 +3,7 @@ package com.sap.sailing.gwt.ui.adminconsole; import com.sap.sailing.domain.common.RegattaAndRaceIdentifier; public interface TrackedRaceChangedListener { - void changeTrackingRace(Iterable regattaAndRaceIdentifiers, boolean isTracked); + void racesStoppedTracking(Iterable regattaAndRaceIdentifiers); + + void racesRemoved(Iterable regattaAndRaceIdentifiers); } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/TrackedRacesListComposite.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/TrackedRacesListComposite.java index 9725e4e675d..0005057ca1e 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/TrackedRacesListComposite.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/TrackedRacesListComposite.java @@ -72,7 +72,7 @@ public class TrackedRacesListComposite extends AbstractTrackedRacesListComposite public void onSuccess(Void result) { regattaRefresher.fillRegattas(); for (TrackedRaceChangedListener listener : raceIsTrackedRaceChangeListener) { - listener.changeTrackingRace(racesToStopTracking, false); + listener.racesStoppedTracking(racesToStopTracking); } } })); @@ -95,7 +95,7 @@ public class TrackedRacesListComposite extends AbstractTrackedRacesListComposite public void onSuccess(Void result) { regattaRefresher.fillRegattas(); for (TrackedRaceChangedListener listener : raceIsTrackedRaceChangeListener) { - listener.changeTrackingRace(regattaNamesAndRaceNames, false); + listener.racesRemoved(regattaNamesAndRaceNames); } } })); diff --git a/java/com.sap.sailing.selenium.test/src/com/sap/sailing/selenium/pages/adminconsole/leaderboard/LeaderboardDetailsPanelPO.java b/java/com.sap.sailing.selenium.test/src/com/sap/sailing/selenium/pages/adminconsole/leaderboard/LeaderboardDetailsPanelPO.java index 801efe1bc6c..fec90980d3d 100644 --- a/java/com.sap.sailing.selenium.test/src/com/sap/sailing/selenium/pages/adminconsole/leaderboard/LeaderboardDetailsPanelPO.java +++ b/java/com.sap.sailing.selenium.test/src/com/sap/sailing/selenium/pages/adminconsole/leaderboard/LeaderboardDetailsPanelPO.java @@ -9,16 +9,13 @@ import org.openqa.selenium.WebElement; import com.sap.sailing.selenium.core.BySeleniumId; import com.sap.sailing.selenium.core.FindBy; - import com.sap.sailing.selenium.pages.PageArea; - import com.sap.sailing.selenium.pages.adminconsole.ActionsHelper; - import com.sap.sailing.selenium.pages.adminconsole.tracking.TrackedRacesListPO.TrackedRaceDescriptor; - import com.sap.sailing.selenium.pages.gwt.CellTablePO; import com.sap.sailing.selenium.pages.gwt.DataEntryPO; import com.sap.sailing.selenium.pages.gwt.GenericCellTablePO; +import com.sap.sse.common.Util; public class LeaderboardDetailsPanelPO extends PageArea { public static class RaceDescriptor { @@ -124,22 +121,22 @@ public class LeaderboardDetailsPanelPO extends PageArea { public List getRaces() { List result = new ArrayList<>(); - CellTablePO racesTable = getRacesTable(); - for(DataEntryPO entry : racesTable.getEntries()) { - String name = entry.getColumnContent("Race"); - String fleet = entry.getColumnContent("Fleet"); - //String medalRace = entry.getColumnContent("Medal Race"); - //String linked = entry.getColumnContent("Is linked"); - //String factor = entry.getColumnContent("Factor"); - - result.add(new RaceDescriptor(name, fleet, false, false, 0.0)); + result.add(createRaceDescriptor(entry)); } - return result; } - + + private RaceDescriptor createRaceDescriptor(DataEntryPO entry) { + String name = entry.getColumnContent("Race"); + String fleet = entry.getColumnContent("Fleet"); + String medalRace = entry.getColumnContent("Medal Race"); + String linked = entry.getColumnContent("Is linked"); + String factorColumnContent = entry.getColumnContent("Factor"); + double factor = factorColumnContent.trim().isEmpty() ? 0.0 : Double.valueOf(factorColumnContent); + return new RaceDescriptor(name, fleet, Util.equalsWithNull("x", medalRace), Util.equalsWithNull("Yes", linked), factor); + } // public RaceEditDialog editRace(RaceDescriptor race) { @@ -183,20 +180,12 @@ public class LeaderboardDetailsPanelPO extends PageArea { private DataEntryPO findRace(RaceDescriptor race) { CellTablePO racesTable = getRacesTable(); - for(DataEntryPO entry : racesTable.getEntries()) { - String name = entry.getColumnContent("Race"); - String fleet = entry.getColumnContent("Fleet"); - //String medalRace = entry.getColumnContent("Medal Race"); - //String linked = entry.getColumnContent("Is linked"); - //String factor = entry.getColumnContent("Factor"); - - RaceDescriptor descriptor = new RaceDescriptor(name, fleet, false, false, 0.0); - - if(descriptor.equals(race)) + RaceDescriptor descriptor = createRaceDescriptor(entry); + if (descriptor.equals(race)) { return entry; + } } - return null; }