diff --git a/java/com.sap.sailing.domain.swisstimingadapter.persistence/src/com/sap/sailing/domain/swisstimingadapter/persistence/SwissTimingAdapterPersistence.java b/java/com.sap.sailing.domain.swisstimingadapter.persistence/src/com/sap/sailing/domain/swisstimingadapter/persistence/SwissTimingAdapterPersistence.java
index 3e2c932e26a..7b50a0feb1c 100644
--- a/java/com.sap.sailing.domain.swisstimingadapter.persistence/src/com/sap/sailing/domain/swisstimingadapter/persistence/SwissTimingAdapterPersistence.java
+++ b/java/com.sap.sailing.domain.swisstimingadapter.persistence/src/com/sap/sailing/domain/swisstimingadapter/persistence/SwissTimingAdapterPersistence.java
@@ -38,8 +38,6 @@ public interface SwissTimingAdapterPersistence extends RaceSpecificMessageLoader
void storeSwissTimingConfiguration(SwissTimingConfiguration swissTimingConfiguration);
- void storeRawSailMasterMessage(SailMasterMessage message);
-
void storeSailMasterMessage(SailMasterMessage message);
void storeRace(Race race);
diff --git a/java/com.sap.sailing.domain.swisstimingadapter.persistence/src/com/sap/sailing/domain/swisstimingadapter/persistence/impl/CollectionNames.java b/java/com.sap.sailing.domain.swisstimingadapter.persistence/src/com/sap/sailing/domain/swisstimingadapter/persistence/impl/CollectionNames.java
index 3643e8dd54c..23f5b6fb07f 100755
--- a/java/com.sap.sailing.domain.swisstimingadapter.persistence/src/com/sap/sailing/domain/swisstimingadapter/persistence/impl/CollectionNames.java
+++ b/java/com.sap.sailing.domain.swisstimingadapter.persistence/src/com/sap/sailing/domain/swisstimingadapter/persistence/impl/CollectionNames.java
@@ -1,6 +1,6 @@
package com.sap.sailing.domain.swisstimingadapter.persistence.impl;
public enum CollectionNames {
- SWISSTIMING_CONFIGURATIONS, LAST_MESSAGE_COUNT, RAW_MESSAGES,
+ SWISSTIMING_CONFIGURATIONS, LAST_MESSAGE_COUNT,
RACES_MASTERDATA, RACES_MESSAGES, COMMAND_MESSAGES
}
diff --git a/java/com.sap.sailing.domain.swisstimingadapter.persistence/src/com/sap/sailing/domain/swisstimingadapter/persistence/impl/SwissTimingAdapterPersistenceImpl.java b/java/com.sap.sailing.domain.swisstimingadapter.persistence/src/com/sap/sailing/domain/swisstimingadapter/persistence/impl/SwissTimingAdapterPersistenceImpl.java
index 1e0abc56295..ca93940d540 100755
--- a/java/com.sap.sailing.domain.swisstimingadapter.persistence/src/com/sap/sailing/domain/swisstimingadapter/persistence/impl/SwissTimingAdapterPersistenceImpl.java
+++ b/java/com.sap.sailing.domain.swisstimingadapter.persistence/src/com/sap/sailing/domain/swisstimingadapter/persistence/impl/SwissTimingAdapterPersistenceImpl.java
@@ -40,9 +40,6 @@ public class SwissTimingAdapterPersistenceImpl implements SwissTimingAdapterPers
}
private void init() {
- DBCollection rawMessages = database.getCollection(CollectionNames.RAW_MESSAGES.name());
- rawMessages.ensureIndex(new BasicDBObject().append(FieldNames.MESSAGE_SEQUENCE_NUMBER.name(), 1));
-
// ensure the required indexes for the collection of race specific messages
DBCollection racesMessageCollection = database.getCollection(CollectionNames.RACES_MESSAGES.name());
@@ -184,13 +181,6 @@ public class SwissTimingAdapterPersistenceImpl implements SwissTimingAdapterPers
stConfigCollection.insert(result);
}
- @Override
- public void storeRawSailMasterMessage(SailMasterMessage message) {
- DBCollection rawMessageCollection = database.getCollection(CollectionNames.RAW_MESSAGES.name());
- rawMessageCollection.insert(new BasicDBObject().append(FieldNames.MESSAGE_SEQUENCE_NUMBER.name(), message.getSequenceNumber()).
- append(FieldNames.MESSAGE_CONTENT.name(), message.getMessage()));
- }
-
@Override
public void storeSailMasterMessage(SailMasterMessage message) {
// Attention: this method is very time critical as we will receive thousands of messages in a short time
@@ -264,13 +254,8 @@ public class SwissTimingAdapterPersistenceImpl implements SwissTimingAdapterPers
@Override
public void dropAllMessageData() {
-
- DBCollection rawMessageCollection = database.getCollection(CollectionNames.RAW_MESSAGES.name());
- rawMessageCollection.drop();
-
DBCollection racesMessageCollection = database.getCollection(CollectionNames.RACES_MESSAGES.name());
racesMessageCollection.drop();
-
DBCollection cmdMessageCollection = database.getCollection(CollectionNames.COMMAND_MESSAGES.name());
cmdMessageCollection.drop();
}
diff --git a/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/SwissTimingFactory.java b/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/SwissTimingFactory.java
index fc6ac98eff6..7be0153817b 100755
--- a/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/SwissTimingFactory.java
+++ b/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/SwissTimingFactory.java
@@ -34,10 +34,14 @@ public interface SwissTimingFactory {
* {@link SailMasterConnector#trackRace} and {@link SailMasterConnector#stopTrackingRace} operations.
* {@link MessageType#isRaceSpecific() Race-specific messages} for other races are ignored and not forwarded to any
* listener.
- * @param canSendRequests TODO
+ *
+ * @param canSendRequests
+ * tells whether the hostname/port combination is able to receive and process SailMaster request messages;
+ * if false, only events are sent by the host to which the connector connects.
*/
- SailMasterConnector getOrCreateSailMasterConnector(String hostname, int port, RaceSpecificMessageLoader messageLoader, boolean canSendRequests) throws InterruptedException;
-
+ SailMasterConnector getOrCreateSailMasterConnector(String hostname, int port,
+ RaceSpecificMessageLoader messageLoader, boolean canSendRequests) throws InterruptedException;
+
SailMasterTransceiver createSailMasterTransceiver();
SwissTimingConfiguration createSwissTimingConfiguration(String name, String hostname, int port, boolean canSendRequests);
diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/LeaderboardConfigPanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/LeaderboardConfigPanel.java
index 07812bf65c5..ec77561ed15 100644
--- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/LeaderboardConfigPanel.java
+++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/LeaderboardConfigPanel.java
@@ -151,7 +151,15 @@ public class LeaderboardConfigPanel extends FormPanel implements EventDisplayer,
removeSelectedLeaderboard();
}
});
-
+ Button stressTestButton = new Button(stringConstants.stressTest());
+ verticalPanel.add(stressTestButton);
+ stressTestButton.addClickHandler(new ClickHandler() {
+ @Override
+ public void onClick(ClickEvent event) {
+ performStressTestForSelectedLeaderboard();
+ }
+ });
+
// ------------ specific to selected leaderboard ----------------
Label lblRaceNamesIn = new Label(stringConstants.columnNamesInSelectedLeaderboard());
grid.setWidget(2, 0, lblRaceNamesIn);
@@ -245,6 +253,25 @@ public class LeaderboardConfigPanel extends FormPanel implements EventDisplayer,
leaderboardRaceColumnSelectionChanged();
}
+ private void performStressTestForSelectedLeaderboard() {
+ final int selectedIndex = leaderboardsListBox.getSelectedIndex();
+ if (selectedIndex >= 0) {
+ final String leaderboardName = leaderboardsListBox.getItemText(selectedIndex);
+ sailingService.stressTestLeaderboardByName(leaderboardName, 100, new AsyncCallback() {
+ @Override
+ public void onFailure(Throwable caught) {
+ errorReporter.reportError("Error during leaderboard stress test for " + leaderboardName + ": "
+ + caught.getMessage());
+ }
+
+ @Override
+ public void onSuccess(Void result) {
+ errorReporter.reportError("Stress test for " + leaderboardName + " finished successfully ");
+ }
+ });
+ }
+ }
+
private void unlinkSelectedRaceColumnFromTrackedRace() {
final String selectedRaceColumnName = getSelectedRaceColumnName();
final String selectedLeaderboardName = getSelectedLeaderboardName();
@@ -719,10 +746,10 @@ public class LeaderboardConfigPanel extends FormPanel implements EventDisplayer,
selectedRace.getA().name, selectedRace.getC().name, new AsyncCallback() {
@Override
public void onFailure(Throwable t) {
- errorReporter.reportError("Error trying to link tracked race "+selectedRace.getC().name+
- " of event "+selectedRace.getA().name+" to race column named "+
- getSelectedRaceColumnName()+" of leaderboard "+getSelectedLeaderboardName()+": "+
- t.getMessage());
+ errorReporter.reportError("Error trying to link tracked race " + selectedRace.getC().name
+ + " of event " + selectedRace.getA().name + " to race column named "
+ + getSelectedRaceColumnName() + " of leaderboard " + getSelectedLeaderboardName()
+ + ": " + t.getMessage());
raceTree.clearSelection();
}
@@ -732,20 +759,20 @@ public class LeaderboardConfigPanel extends FormPanel implements EventDisplayer,
}
});
}
-
- private void changeIsMedalRace(final boolean isMedalRace){
- sailingService.updateIsMedalRace(getSelectedLeaderboardName(), getSelectedRaceColumnName(), isMedalRace, new AsyncCallback() {
- @Override
- public void onFailure(Throwable caught) {
- errorReporter.reportError("Error trying to change isMedalRace of "+getSelectedRaceColumnName()+": "+caught.getMessage());
- }
+ private void changeIsMedalRace(final boolean isMedalRace) {
+ sailingService.updateIsMedalRace(getSelectedLeaderboardName(), getSelectedRaceColumnName(), isMedalRace,
+ new AsyncCallback() {
+ @Override
+ public void onFailure(Throwable caught) {
+ errorReporter.reportError("Error trying to change isMedalRace of "
+ + getSelectedRaceColumnName() + ": " + caught.getMessage());
+ }
- @Override
- public void onSuccess(Void result) {
- // TODO Punkte in spalte updaten.
- selectedLeaderboard.setIsMedalRace(getSelectedRaceColumnName(), isMedalRace);
- }
- });
+ @Override
+ public void onSuccess(Void result) {
+ selectedLeaderboard.setIsMedalRace(getSelectedRaceColumnName(), isMedalRace);
+ }
+ });
}
}
\ No newline at end of file
diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingService.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingService.java
index d99f0d89c77..132587bbd3f 100644
--- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingService.java
+++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingService.java
@@ -114,4 +114,6 @@ public interface SailingService extends RemoteService {
void trackWithSwissTiming(SwissTimingRaceRecordDAO rr, String hostname, int port, boolean canSendRequests,
boolean trackWind, boolean correctWindByDeclination) throws Exception;
+
+ void stressTestLeaderboardByName(String leaderboardName, int times) throws Exception;
}
diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingServiceAsync.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingServiceAsync.java
index eb485eea242..38bbd86e202 100644
--- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingServiceAsync.java
+++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingServiceAsync.java
@@ -173,4 +173,11 @@ public interface SailingServiceAsync {
void trackWithSwissTiming(SwissTimingRaceRecordDAO rr, String hostname, int port, boolean canSendRequests,
boolean trackWind, boolean correctWindByDeclination, AsyncCallback asyncCallback);
+
+ /**
+ * Requests the computation of the {@link LeaderboardDAO} for leaderboardName times times.
+ * The date used for the {@link #getLeaderboardByName(String, Date, Collection, AsyncCallback)} call is iterated
+ * in 10ms time steps, going backwards from "now." For all races, all details are requested.
+ */
+ void stressTestLeaderboardByName(String leaderboardName, int times, AsyncCallback callback);
}
diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringConstants.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringConstants.java
index 2655a5c3230..9b09aa9af2f 100644
--- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringConstants.java
+++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringConstants.java
@@ -112,4 +112,5 @@ public interface StringConstants extends Constants {
String raceStartTimeColumn();
String showOnlySelected();
String tailLength();
+ String stressTest();
}
\ No newline at end of file
diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringConstants.properties b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringConstants.properties
index 22f8ab90ff3..7c4e7c771eb 100644
--- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringConstants.properties
+++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringConstants.properties
@@ -107,3 +107,4 @@ port=Port
raceStartTimeColumn=Race Started
showOnlySelected=Show only selected
tailLength=Tail length (s)
+stressTest=Stress Test
\ No newline at end of file
diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringConstants_de.properties b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringConstants_de.properties
index 4a929a9b3ed..188887c9630 100644
--- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringConstants_de.properties
+++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringConstants_de.properties
@@ -106,4 +106,5 @@ columnMoveDown=Runter
port=Port
raceStartTimeColumn=Rennstart
showOnlySelected=Nur ausgewählte anzeigen
-tailLengt=Schweiflänge (s)
+tailLength=Schweiflänge (s)
+stressTest=Stresstest
\ No newline at end of file
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 b8fc6273247..4bef639b2e2 100644
--- 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
@@ -137,6 +137,7 @@ public class SailingServiceImpl extends RemoteServiceServlet implements SailingS
return result;
}
+ @Override
public LeaderboardDAO getLeaderboardByName(String leaderboardName, Date date,
Collection namesOfRacesForWhichToLoadLegDetails) throws Exception {
long startOfRequestHandling = System.currentTimeMillis();
@@ -182,6 +183,24 @@ public class SailingServiceImpl extends RemoteServiceServlet implements SailingS
return result;
}
+ @Override
+ public void stressTestLeaderboardByName(String leaderboardName, int times) throws Exception {
+ Leaderboard leaderboard = getService().getLeaderboardByName(leaderboardName);
+ if (leaderboard != null) {
+ List raceColumnNames = new ArrayList();
+ for (RaceInLeaderboard column : leaderboard.getRaceColumns()) {
+ raceColumnNames.add(column.getName());
+ }
+ int i=0;
+ for (Date date = new Date(); i();
for (Leg leg : trackedRace.getRace().getCourse().getLegs()) {
TrackedLegOfCompetitor trackedLeg = trackedRace.getTrackedLeg(competitor, leg);