diff --git a/java/com.sap.sailing.domain.racelogtrackingadapter.test/META-INF/MANIFEST.MF b/java/com.sap.sailing.domain.racelogtrackingadapter.test/META-INF/MANIFEST.MF index e2482860974..a5099d27d3b 100644 --- a/java/com.sap.sailing.domain.racelogtrackingadapter.test/META-INF/MANIFEST.MF +++ b/java/com.sap.sailing.domain.racelogtrackingadapter.test/META-INF/MANIFEST.MF @@ -17,5 +17,4 @@ Import-Package: com.sap.sailing.domain.persistence.impl, com.sap.sailing.domain.persistence.racelog.tracking.impl, com.sap.sailing.domain.tractracadapter, com.sap.sailing.server.impl, - javax.servlet.http;version="2.5.0", - org.junit;version="4.11.0" + javax.servlet.http;version="2.5.0" diff --git a/java/com.sap.sailing.domain.racelogtrackingadapter/META-INF/MANIFEST.MF b/java/com.sap.sailing.domain.racelogtrackingadapter/META-INF/MANIFEST.MF index 9d8846d6099..20b72c69d0a 100644 --- a/java/com.sap.sailing.domain.racelogtrackingadapter/META-INF/MANIFEST.MF +++ b/java/com.sap.sailing.domain.racelogtrackingadapter/META-INF/MANIFEST.MF @@ -9,10 +9,10 @@ Bundle-ActivationPolicy: lazy Require-Bundle: com.sap.sailing.domain, com.sap.sailing.domain.common, com.sap.sailing.domain.shared.android, - com.sap.sailing.server.gateway.serialization;bundle-version="1.0.0", - com.sap.sailing.domain.persistence;bundle-version="1.0.0", - com.sap.sailing.server.gateway;bundle-version="1.0.0", - com.sap.sailing.server;bundle-version="1.0.0", + com.sap.sailing.server.gateway.serialization, + com.sap.sailing.domain.persistence, + com.sap.sailing.server.gateway, + com.sap.sailing.server, com.googlecode.java-diff-utils;bundle-version="1.3.0", com.mongodb.driver, com.sap.sse.common, diff --git a/java/com.sap.sailing.domain.swisstimingadapter/META-INF/MANIFEST.MF b/java/com.sap.sailing.domain.swisstimingadapter/META-INF/MANIFEST.MF index 81cae909a50..1098f1d683c 100755 --- a/java/com.sap.sailing.domain.swisstimingadapter/META-INF/MANIFEST.MF +++ b/java/com.sap.sailing.domain.swisstimingadapter/META-INF/MANIFEST.MF @@ -4,7 +4,7 @@ Bundle-Name: Swisstimingadapter Bundle-SymbolicName: com.sap.sailing.domain.swisstimingadapter Bundle-Version: 1.0.0.qualifier Bundle-Vendor: SAP -Bundle-RequiredExecutionEnvironment: JavaSE-1.7 +Bundle-RequiredExecutionEnvironment: JavaSE-1.8 Bundle-ActivationPolicy: lazy Require-Bundle: com.sap.sailing.domain, com.sap.sailing.udpconnector, @@ -17,5 +17,5 @@ Require-Bundle: com.sap.sailing.domain, Export-Package: com.sap.sailing.domain.swisstimingadapter, com.sap.sailing.domain.swisstimingadapter.impl;x-friends:="com.sap.sailing.server.test" Import-Package: com.sap.sailing.xrr.schema, - org.osgi.framework;version="1.7.0" + org.osgi.framework Bundle-Activator: com.sap.sailing.domain.swisstimingadapter.impl.Activator diff --git a/java/com.sap.sailing.domain.test/META-INF/MANIFEST.MF b/java/com.sap.sailing.domain.test/META-INF/MANIFEST.MF index cb42c4a5c81..ed6bb411bdc 100644 --- a/java/com.sap.sailing.domain.test/META-INF/MANIFEST.MF +++ b/java/com.sap.sailing.domain.test/META-INF/MANIFEST.MF @@ -21,5 +21,3 @@ Require-Bundle: com.sap.sailing.domain, com.sap.sse.replication Export-Package: com.sap.sailing.domain.test, com.sap.sailing.domain.test.mock -Import-Package: org.eclipse.jdt.internal.core, - org.junit diff --git a/java/com.sap.sailing.gwt.ui/SailingGWT Remote Profiling (Run-Mode only).launch b/java/com.sap.sailing.gwt.ui/SailingGWT Remote Profiling (Run-Mode only).launch index 0825d38b2c3..d61bedc6b8b 100755 --- a/java/com.sap.sailing.gwt.ui/SailingGWT Remote Profiling (Run-Mode only).launch +++ b/java/com.sap.sailing.gwt.ui/SailingGWT Remote Profiling (Run-Mode only).launch @@ -1,55 +1,55 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/AbstractRegattaWithSeriesAndFleetsDialog.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/AbstractRegattaWithSeriesAndFleetsDialog.java index b7299e28175..3923d0e5ed7 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/AbstractRegattaWithSeriesAndFleetsDialog.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/AbstractRegattaWithSeriesAndFleetsDialog.java @@ -13,16 +13,16 @@ import com.google.gwt.user.client.ui.VerticalPanel; import com.google.gwt.user.client.ui.Widget; import com.sap.sailing.domain.common.ScoringSchemeType; import com.sap.sailing.domain.common.dto.BoatClassDTO; +import com.sap.sailing.gwt.ui.client.DataEntryDialogWithBootstrap; import com.sap.sailing.gwt.ui.client.StringMessages; -import com.sap.sailing.gwt.ui.client.shared.controls.listedit.ListEditorComposite; import com.sap.sailing.gwt.ui.leaderboard.ScoringSchemeTypeFormatter; import com.sap.sailing.gwt.ui.shared.CourseAreaDTO; import com.sap.sailing.gwt.ui.shared.EventDTO; import com.sap.sailing.gwt.ui.shared.RegattaDTO; import com.sap.sailing.gwt.ui.shared.SeriesDTO; -import com.sap.sse.gwt.client.dialog.DataEntryDialog; +import com.sap.sse.gwt.client.controls.listedit.ListEditorComposite; -public abstract class AbstractRegattaWithSeriesAndFleetsDialog extends DataEntryDialog { +public abstract class AbstractRegattaWithSeriesAndFleetsDialog extends DataEntryDialogWithBootstrap { protected StringMessages stringMessages; protected RegattaDTO regatta; diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/DefaultRegattaCreateDialog.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/DefaultRegattaCreateDialog.java index 4e2776bb981..61e52e5f67e 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/DefaultRegattaCreateDialog.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/DefaultRegattaCreateDialog.java @@ -6,7 +6,7 @@ import java.util.List; import com.google.gwt.core.client.GWT; import com.google.gwt.user.client.ui.TabPanel; import com.google.gwt.user.client.ui.VerticalPanel; -import com.sap.sailing.gwt.ui.client.ErrorReporter; +import com.sap.sse.gwt.client.ErrorReporter; import com.sap.sailing.gwt.ui.client.SailingServiceAsync; import com.sap.sailing.gwt.ui.client.StringMessages; import com.sap.sailing.gwt.ui.shared.EventAndRegattaDTO; @@ -14,58 +14,49 @@ import com.sap.sailing.gwt.ui.shared.EventDTO; import com.sap.sailing.gwt.ui.shared.RegattaDTO; import com.sap.sailing.gwt.ui.shared.SeriesDTO; -public class DefaultRegattaCreateDialog extends - AbstractRegattaWithSeriesAndFleetsDialog { +public class DefaultRegattaCreateDialog extends AbstractRegattaWithSeriesAndFleetsDialog { - private static AdminConsoleResources resources = GWT - .create(AdminConsoleResources.class); + private static AdminConsoleResources resources = GWT.create(AdminConsoleResources.class); - private final Iterable defaultRegattas; - public DefaultRegattaCreateDialog( - List existingEvents, - Iterable selectedRegattas, - SailingServiceAsync sailingService, - ErrorReporter errorReporter, - StringMessages stringConstants, - com.sap.sse.gwt.client.dialog.DataEntryDialog.DialogCallback callback) { - super(new RegattaDTO(), existingEvents, - "Create default settings for all regattas...", stringConstants - .ok(), stringConstants, - null /* RegattaParameterValidator */, callback); - this.defaultRegattas = selectedRegattas; - if (existingEvents !=null && !existingEvents.isEmpty()) { - sailingEventsListBox.addItem((existingEvents.get(0)).getName()); - } else { - sailingEventsListBox.addItem("No overall event selected..."); - } - sailingEventsListBox.setSelectedIndex(1); - sailingEventsListBox.setEnabled(false); - setCourseAreaSelection(); - } + private final Iterable defaultRegattas; - protected void setSeriesEditor() { - List series = new ArrayList(); - for (RegattaDTO regattaDTO : defaultRegattas) { - series.addAll(regattaDTO.series); - } - seriesEditor = new SeriesWithFleetsDefaultListEditor(series, - stringMessages, resources.removeIcon(), /* enableFleetRemoval */ - false); - } + public DefaultRegattaCreateDialog(List existingEvents, Iterable selectedRegattas, + SailingServiceAsync sailingService, ErrorReporter errorReporter, StringMessages stringConstants, + com.sap.sse.gwt.client.dialog.DataEntryDialog.DialogCallback callback) { + super(new RegattaDTO(), existingEvents, "Create default settings for all regattas...", stringConstants.ok(), + stringConstants, null /* RegattaParameterValidator */, callback); + this.defaultRegattas = selectedRegattas; + if (existingEvents != null && !existingEvents.isEmpty()) { + sailingEventsListBox.addItem((existingEvents.get(0)).getName()); + } else { + sailingEventsListBox.addItem("No overall event selected..."); + } + sailingEventsListBox.setSelectedIndex(1); + sailingEventsListBox.setEnabled(false); + setCourseAreaSelection(); + } - protected void setupAdditionalWidgetsOnPanel(final VerticalPanel panel) { - TabPanel tabPanel = new TabPanel(); - tabPanel.setWidth("100%"); - tabPanel.add(seriesEditor, stringMessages.series()); - tabPanel.selectTab(0); - panel.add(tabPanel); - } + protected void setSeriesEditor() { + List series = new ArrayList(); + for (RegattaDTO regattaDTO : defaultRegattas) { + series.addAll(regattaDTO.series); + } + seriesEditor = new SeriesWithFleetsDefaultListEditor(series, stringMessages, resources.removeIcon(), /* enableFleetRemoval */ + false); + } - @Override - protected EventAndRegattaDTO getResult() { - EventAndRegattaDTO eventAndRegatta = new EventAndRegattaDTO( - super.getSelectedEvent(), super.getRegattaDTO()); - return eventAndRegatta; - } + protected void setupAdditionalWidgetsOnPanel(final VerticalPanel panel) { + TabPanel tabPanel = new TabPanel(); + tabPanel.setWidth("100%"); + tabPanel.add(seriesEditor, stringMessages.series()); + tabPanel.selectTab(0); + panel.add(tabPanel); + } + + @Override + protected EventAndRegattaDTO getResult() { + EventAndRegattaDTO eventAndRegatta = new EventAndRegattaDTO(super.getSelectedEvent(), super.getRegattaDTO()); + return eventAndRegatta; + } } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/EventCreateDialog.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/EventCreateDialog.java index 5b8d87bba19..fe79a48ff9b 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/EventCreateDialog.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/EventCreateDialog.java @@ -11,8 +11,8 @@ import com.sap.sailing.gwt.ui.shared.LeaderboardGroupDTO; public class EventCreateDialog extends EventDialog { - public EventCreateDialog(Collection existingEvents, List availableLeaderboardGroups, StringMessages stringConstants, DialogCallback callback) { - super(new EventParameterValidator(stringConstants, existingEvents), stringConstants, + public EventCreateDialog(Collection existingEvents, List availableLeaderboardGroups, StringMessages stringMessages, DialogCallback callback) { + super(new EventParameterValidator(stringMessages, existingEvents), stringMessages, availableLeaderboardGroups, /* leaderboardGroups */ Collections.emptyList(), callback); nameEntryField = createTextBox(null); nameEntryField.setVisibleLength(50); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/FleetListEditableEditorComposite.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/FleetListEditableEditorComposite.java index 2e62c534e74..19d53749a93 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/FleetListEditableEditorComposite.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/FleetListEditableEditorComposite.java @@ -16,24 +16,29 @@ import com.sap.sailing.domain.common.Color; import com.sap.sailing.domain.common.FleetColors; import com.sap.sailing.domain.common.dto.FleetDTO; import com.sap.sailing.gwt.ui.client.StringMessages; -import com.sap.sailing.gwt.ui.client.shared.controls.listedit.ExpandedListEditorUi; +import com.sap.sse.gwt.client.controls.listedit.ExpandedListEditorUi; public class FleetListEditableEditorComposite extends FleetListEditorComposite { - public FleetListEditableEditorComposite(List initialValues, - StringMessages stringMessages, ImageResource removeImage) { - super(initialValues, stringMessages, removeImage); - } - - protected ExpandedListEditorUi getExpandedUI(StringMessages stringMessages, ImageResource editImage){ - return new ExpandedEditableUi(stringMessages, editImage); + public FleetListEditableEditorComposite(List initialValues, StringMessages stringMessages, + ImageResource removeImage) { + super(initialValues, stringMessages, removeImage); } - private static class ExpandedEditableUi extends ExpandedListEditorUi { + protected ExpandedListEditorUi getExpandedUI(StringMessages stringMessages, ImageResource editImage) { + return new ExpandedEditableUi(stringMessages, editImage); + } + + private static class ExpandedEditableUi extends ExpandedListEditorUi { public ExpandedEditableUi(StringMessages stringMessages, ImageResource editImage) { super(stringMessages, editImage, false); } + + @Override + protected StringMessages getStringMessages() { + return (StringMessages) super.getStringMessages(); + } @Override protected Widget createAddWidget() { @@ -44,43 +49,43 @@ public class FleetListEditableEditorComposite extends FleetListEditorComposite { protected Widget createValueWidget(int rowIndex, final FleetDTO fleet) { HorizontalPanel hPanel = new HorizontalPanel(); hPanel.setSpacing(4); - Label fleetLabel = new Label(stringMessages.fleet() + " "); + Label fleetLabel = new Label(getStringMessages().fleet() + " "); fleetLabel.getElement().getStyle().setFontWeight(FontWeight.BOLD); hPanel.add(fleetLabel); final TextBox nameBox = createNameBox(fleet.getName()); - nameBox.addChangeHandler(new ChangeHandler(){ - @Override - public void onChange(ChangeEvent event) { - fleet.setName(nameBox.getText()); - } + nameBox.addChangeHandler(new ChangeHandler() { + @Override + public void onChange(ChangeEvent event) { + fleet.setName(nameBox.getText()); + } }); nameBox.ensureDebugId("NameTextBox"); hPanel.add(nameBox); - + final IntegerBox orderNoBox = createOrderNoBox(fleet.getOrderNo()); orderNoBox.ensureDebugId("OrderNoIntegerBox"); orderNoBox.addChangeHandler(new ChangeHandler() { - @Override - public void onChange(ChangeEvent event) { - fleet.setOrderNo(orderNoBox.getValue()); - } - }); - + @Override + public void onChange(ChangeEvent event) { + fleet.setOrderNo(orderNoBox.getValue()); + } + }); + final ListBox colorListBox = createColorListBox(nameBox, orderNoBox, fleet.getColor()); colorListBox.ensureDebugId("ColorListBox"); colorListBox.addChangeHandler(new ChangeHandler() { - @Override - public void onChange(ChangeEvent event) { - fleet.setColor(getSelectedColor(colorListBox)); - } - }); - hPanel.add(new Label(stringMessages.color() + " ")); + @Override + public void onChange(ChangeEvent event) { + fleet.setColor(getSelectedColor(colorListBox)); + } + }); + hPanel.add(new Label(getStringMessages().color() + " ")); hPanel.add(colorListBox); - hPanel.add(new Label(stringMessages.rank() + " " )); + hPanel.add(new Label(getStringMessages().rank() + " ")); hPanel.add(orderNoBox); return hPanel; } - + private IntegerBox createOrderNoBox(final int orderNo) { IntegerBox orderNoBox = new IntegerBox(); orderNoBox.setVisibleLength(3); @@ -113,14 +118,14 @@ public class FleetListEditableEditorComposite extends FleetListEditorComposite { } } }); - colorListBox.addItem(stringMessages.noColor()); + colorListBox.addItem(getStringMessages().noColor()); int index = 0; int i = 0; for (FleetColors value : FleetColors.values()) { - i++; + i++; colorListBox.addItem(value.name()); - if(value.getColor().equals(color)){ - index = i; + if (value.getColor().equals(color)) { + index = i; } } colorListBox.setSelectedIndex(index); @@ -145,7 +150,7 @@ public class FleetListEditableEditorComposite extends FleetListEditorComposite { private String getColorText(FleetColors color) { if (color == null) { - return stringMessages.noColor(); + return getStringMessages().noColor(); } return color.name().charAt(0) + color.name().toLowerCase().substring(1); } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/FleetListEditorComposite.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/FleetListEditorComposite.java index 7ec35c7b6d9..1c9ace4cd1a 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/FleetListEditorComposite.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/FleetListEditorComposite.java @@ -23,11 +23,10 @@ import com.sap.sse.gwt.client.controls.listedit.ListEditorComposite; public class FleetListEditorComposite extends ListEditorComposite { public FleetListEditorComposite(Iterable initialValues, StringMessages stringMessages, ImageResource removeImage) { - super(initialValues); - setActiveUi(getExpandedUI(stringMessages, removeImage)); + super(initialValues, getExpandedUI(stringMessages, removeImage)); } - protected ExpandedListEditorUi getExpandedUI(StringMessages stringMessages, ImageResource removeImage){ + private static ExpandedListEditorUi getExpandedUI(StringMessages stringMessages, ImageResource removeImage){ return new ExpandedUi(stringMessages, removeImage); } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RegattaImportDialog.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RegattaImportDialog.java index 90ff6951283..30b093196d8 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RegattaImportDialog.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RegattaImportDialog.java @@ -12,11 +12,11 @@ import com.google.gwt.user.client.ui.TextBox; import com.google.gwt.user.client.ui.VerticalPanel; import com.google.gwt.user.client.ui.Widget; import com.sap.sailing.gwt.ui.client.StringMessages; -import com.sap.sailing.gwt.ui.client.shared.controls.listedit.StringListInlineEditorComposite; import com.sap.sailing.gwt.ui.shared.BetterDateTimeBox; import com.sap.sailing.gwt.ui.shared.CourseAreaDTO; import com.sap.sailing.gwt.ui.shared.EventDTO; import com.sap.sailing.gwt.ui.shared.VenueDTO; +import com.sap.sse.gwt.client.controls.listedit.StringListInlineEditorComposite; import com.sap.sse.gwt.client.dialog.DataEntryDialog; diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RegattaListComposite.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RegattaListComposite.java index 3816439d245..6b50cec972f 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RegattaListComposite.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RegattaListComposite.java @@ -284,7 +284,7 @@ public class RegattaListComposite extends Composite implements RegattasDisplayer final RegattaIdentifier regattaName = new RegattaName(editedRegatta.getName()); sailingService.updateRegatta(regattaName, editedRegatta.startDate, editedRegatta.endDate, editedRegatta.defaultCourseAreaUuid, - editedRegatta.useStartTimeInference, new MarkedAsyncCallback(new AsyncCallback() { + editedRegatta.configuration, editedRegatta.useStartTimeInference, new MarkedAsyncCallback(new AsyncCallback() { @Override public void onFailure(Throwable caught) { errorReporter.reportError("Error trying to update regatta " + editedRegatta.getName() + ": " diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RegattaWithSeriesAndFleetsCreateDialog.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RegattaWithSeriesAndFleetsCreateDialog.java index 565a0a18c70..9582f007e48 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RegattaWithSeriesAndFleetsCreateDialog.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RegattaWithSeriesAndFleetsCreateDialog.java @@ -14,7 +14,6 @@ import com.sap.sailing.gwt.ui.client.StringMessages; import com.sap.sailing.gwt.ui.shared.EventDTO; import com.sap.sailing.gwt.ui.shared.RegattaDTO; import com.sap.sailing.gwt.ui.shared.SeriesDTO; -import com.sap.sse.gwt.client.controls.listedit.ListEditorComposite; public class RegattaWithSeriesAndFleetsCreateDialog extends RegattaWithSeriesAndFleetsDialog { diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RegattaWithSeriesAndFleetsDialog.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RegattaWithSeriesAndFleetsDialog.java index eef9714af21..f7cfc660ae4 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RegattaWithSeriesAndFleetsDialog.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RegattaWithSeriesAndFleetsDialog.java @@ -7,7 +7,6 @@ import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.TextBox; import com.google.gwt.user.client.ui.VerticalPanel; import com.sap.sailing.domain.common.dto.BoatClassDTO; -import com.sap.sailing.gwt.ui.client.DataEntryDialogWithBootstrap; import com.sap.sailing.gwt.ui.client.StringMessages; import com.sap.sailing.gwt.ui.shared.BetterDateTimeBox; import com.sap.sailing.gwt.ui.shared.EventDTO; @@ -38,11 +37,7 @@ public abstract class RegattaWithSeriesAndFleetsDialog extends AbstractRegattaWi if (regatta.boatClass != null) { boatClassEntryField.setText(regatta.boatClass.getName()); } - setSeriesEditor(); - formGrid.setWidget(6, 0, new Label(stringMessages.courseArea() + ":")); - formGrid.setWidget(6, 1, courseAreaListBox); - formGrid.setWidget(7, 0, new Label(stringMessages.useStartTimeInference() + ":")); - formGrid.setWidget(7, 1, useStartTimeInferenceCheckBox); + setSeriesEditor(); } @Override diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RegattaWithSeriesAndFleetsEditDialog.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RegattaWithSeriesAndFleetsEditDialog.java index c3c873d2f58..4080e139b6a 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RegattaWithSeriesAndFleetsEditDialog.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RegattaWithSeriesAndFleetsEditDialog.java @@ -18,7 +18,6 @@ import com.sap.sailing.gwt.ui.shared.DeviceConfigurationDTO; import com.sap.sailing.gwt.ui.shared.DeviceConfigurationDTO.RegattaConfigurationDTO; import com.sap.sailing.gwt.ui.shared.EventDTO; import com.sap.sailing.gwt.ui.shared.RegattaDTO; -import com.sap.sse.gwt.client.controls.listedit.ListEditorComposite; public class RegattaWithSeriesAndFleetsEditDialog extends RegattaWithSeriesAndFleetsDialog { diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/SeriesWithFleetsDefaultCreateDialog.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/SeriesWithFleetsDefaultCreateDialog.java index e17b23becc9..6bdf889c430 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/SeriesWithFleetsDefaultCreateDialog.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/SeriesWithFleetsDefaultCreateDialog.java @@ -2,7 +2,6 @@ package com.sap.sailing.gwt.ui.adminconsole; import java.util.Arrays; import java.util.Collections; -import java.util.List; import com.google.gwt.event.logical.shared.ValueChangeEvent; import com.google.gwt.event.logical.shared.ValueChangeHandler; @@ -22,9 +21,7 @@ public class SeriesWithFleetsDefaultCreateDialog extends StringMessages stringMessages, com.sap.sse.gwt.client.dialog.DataEntryDialog.DialogCallback callback) { super(Collections. emptyList(), stringMessages, callback); - nameEntryField.setText(defaultSeries.getName());// Otherwise an - // errorMessage will pop - // up + nameEntryField.setText(defaultSeries.getName());// Otherwise an errorMessage will pop up isMedalSeriesCheckbox.setValue(defaultSeries .isFirstColumnIsNonDiscardableCarryForward()); startsWithZeroScoreCheckbox.setValue(defaultSeries @@ -52,13 +49,12 @@ public class SeriesWithFleetsDefaultCreateDialog extends protected void initializeFleetListComposite(StringMessages stringMessages) { fleetListComposite = new FleetListEditableEditorComposite(Arrays.asList(new FleetDTO(LeaderboardNameConstants.DEFAULT_FLEET_NAME, 0, null)), stringMessages, resources.removeIcon()); fleetListComposite.ensureDebugId("FleetListEditableEditorComposite"); - fleetListComposite.addValueChangeHandler(new ValueChangeHandler>() { - + fleetListComposite.addValueChangeHandler(new ValueChangeHandler>() { @Override - public void onValueChange(ValueChangeEvent> event) { + public void onValueChange(ValueChangeEvent> event) { validate(); } }); - } + } } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/SeriesWithFleetsDefaultListEditor.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/SeriesWithFleetsDefaultListEditor.java index dfb516b1e85..1cc03c4c5fe 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/SeriesWithFleetsDefaultListEditor.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/SeriesWithFleetsDefaultListEditor.java @@ -15,8 +15,8 @@ import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.Widget; import com.sap.sailing.domain.common.dto.FleetDTO; import com.sap.sailing.gwt.ui.client.StringMessages; -import com.sap.sailing.gwt.ui.client.shared.controls.listedit.ListEditorUiStrategy; import com.sap.sailing.gwt.ui.shared.SeriesDTO; +import com.sap.sse.gwt.client.controls.listedit.ListEditorUiStrategy; import com.sap.sse.gwt.client.dialog.DataEntryDialog.DialogCallback; public class SeriesWithFleetsDefaultListEditor extends @@ -92,7 +92,7 @@ public class SeriesWithFleetsDefaultListEditor extends } final List oldSeries = seriesNames.remove(temp); SeriesWithFleetsDefaultCreateDialog dialog = new SeriesWithFleetsDefaultCreateDialog( - seriesDTO, stringMessages, + seriesDTO, getStringMessages(), new DialogCallback() { @Override public void cancel() { @@ -138,7 +138,7 @@ public class SeriesWithFleetsDefaultListEditor extends protected Widget createValueWidget(int rowIndex, SeriesDTO seriesDTO) { HorizontalPanel hPanel = new HorizontalPanel(); hPanel.setSpacing(5); - Label seriesLabel = new Label(stringMessages.series() + " '" + Label seriesLabel = new Label(getStringMessages().series() + " '" + seriesDTO.getName() + "' :"); seriesLabel.setWordWrap(false); seriesLabel.getElement().getStyle().setFontWeight(FontWeight.BOLD); @@ -154,10 +154,10 @@ public class SeriesWithFleetsDefaultListEditor extends if (seriesDTO.getFleets() != null && seriesDTO.getFleets().size() > 0) { if (seriesDTO.getFleets().size() == 1) { - fleetText = "1 " + stringMessages.fleet(); + fleetText = "1 " + getStringMessages().fleet(); } else { fleetText = seriesDTO.getFleets().size() + " " - + stringMessages.fleets(); + + getStringMessages().fleets(); } fleetText += ": " + seriesDTO.getFleets().toString(); } else { diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/SeriesWithFleetsListEditor.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/SeriesWithFleetsListEditor.java index 5369e4f46da..d50d77c0ad7 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/SeriesWithFleetsListEditor.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/SeriesWithFleetsListEditor.java @@ -11,28 +11,28 @@ import com.google.gwt.user.client.ui.HorizontalPanel; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.Widget; import com.sap.sailing.gwt.ui.client.StringMessages; -import com.sap.sailing.gwt.ui.client.shared.controls.listedit.ListEditorUiStrategy; import com.sap.sailing.gwt.ui.shared.SeriesDTO; import com.sap.sse.gwt.client.controls.listedit.ExpandedListEditorUi; import com.sap.sse.gwt.client.controls.listedit.ListEditorComposite; +import com.sap.sse.gwt.client.controls.listedit.ListEditorUiStrategy; import com.sap.sse.gwt.client.dialog.DataEntryDialog.DialogCallback; public class SeriesWithFleetsListEditor extends ListEditorComposite { - - public SeriesWithFleetsListEditor(Iterable initialValues, StringMessages stringMessages, ImageResource removeImage, boolean enableFleetRemoval) { - super(initialValues); - setActiveUi(createExpandedUi(stringMessages, removeImage, enableFleetRemoval)); + + public SeriesWithFleetsListEditor(Iterable initialValues, StringMessages stringMessages, + ImageResource removeImage, boolean enableFleetRemoval) { + super(initialValues, createExpandedUi(stringMessages, removeImage, enableFleetRemoval)); } - - protected ListEditorUiStrategy createExpandedUi(StringMessages stringMessages, ImageResource removeImage, boolean enableFleetRemoval){ - return new ExpandedUi(stringMessages, removeImage, enableFleetRemoval); - } - + + private static ListEditorUiStrategy createExpandedUi(StringMessages stringMessages, + ImageResource removeImage, boolean enableFleetRemoval) { + return new ExpandedUi(stringMessages, removeImage, enableFleetRemoval); + } + protected static class ExpandedUi extends ExpandedListEditorUi { public ExpandedUi(StringMessages stringMessages, ImageResource removeImage, boolean canRemoveItems) { super(stringMessages, removeImage, canRemoveItems); } - @Override protected StringMessages getStringMessages() { @@ -42,26 +42,27 @@ public class SeriesWithFleetsListEditor extends ListEditorComposite { @Override protected Widget createAddWidget() { Button addSeriesButton = new Button(getStringMessages().addSeries()); - addSeriesButton.ensureDebugId("AddSeriesButton"); - addSeriesButton.addClickHandler(new ClickHandler() { - @Override - public void onClick(ClickEvent event) { - SeriesWithFleetsCreateDialog dialog = new SeriesWithFleetsCreateDialog(Collections - .unmodifiableCollection(context.getValue()), getStringMessages(), new DialogCallback() { - @Override - public void cancel() { - } + addSeriesButton.ensureDebugId("AddSeriesButton"); + addSeriesButton.addClickHandler(new ClickHandler() { + @Override + public void onClick(ClickEvent event) { + SeriesWithFleetsCreateDialog dialog = new SeriesWithFleetsCreateDialog(Collections + .unmodifiableCollection(context.getValue()), getStringMessages(), + new DialogCallback() { + @Override + public void cancel() { + } - @Override - public void ok(SeriesDTO newSeries) { - addValue(newSeries); - } - }); - dialog.ensureDebugId("SeriesCreateDialog"); - dialog.show(); - } - }); - return addSeriesButton; + @Override + public void ok(SeriesDTO newSeries) { + addValue(newSeries); + } + }); + dialog.ensureDebugId("SeriesCreateDialog"); + dialog.show(); + } + }); + return addSeriesButton; } @Override @@ -72,11 +73,9 @@ public class SeriesWithFleetsListEditor extends ListEditorComposite { seriesLabel.setWordWrap(false); seriesLabel.getElement().getStyle().setFontWeight(FontWeight.BOLD); hPanel.add(seriesLabel); - String fleetText = seriesDTO.getFleets().size() + " "; - if (seriesDTO.getFleets() != null && seriesDTO.getFleets().size() > 0) { - if(seriesDTO.getFleets().size() == 1) { + if (seriesDTO.getFleets().size() == 1) { fleetText = "1 " + getStringMessages().fleet(); } else { fleetText = seriesDTO.getFleets().size() + " " + getStringMessages().fleets(); @@ -86,7 +85,6 @@ public class SeriesWithFleetsListEditor extends ListEditorComposite { fleetText = "No fleets defined."; } hPanel.add(new Label(fleetText)); - return hPanel; } } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/StructureImportListComposite.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/StructureImportListComposite.java index 1e901a89e2f..16e414d8a60 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/StructureImportListComposite.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/StructureImportListComposite.java @@ -1,17 +1,12 @@ package com.sap.sailing.gwt.ui.adminconsole; -import java.util.ArrayList; import java.util.Comparator; -import java.util.List; import com.google.gwt.user.cellview.client.CellTable; import com.google.gwt.user.cellview.client.ColumnSortEvent.ListHandler; import com.google.gwt.user.cellview.client.TextColumn; import com.google.gwt.view.client.ListDataProvider; -import com.google.gwt.view.client.SelectionChangeEvent; -import com.sap.sailing.domain.common.RegattaIdentifier; import com.sap.sailing.domain.common.impl.NaturalComparator; -import com.sap.sailing.gwt.ui.client.ErrorReporter; import com.sap.sailing.gwt.ui.client.RegattaRefresher; import com.sap.sailing.gwt.ui.client.RegattaSelectionProvider; import com.sap.sailing.gwt.ui.client.RegattasDisplayer; @@ -19,6 +14,7 @@ import com.sap.sailing.gwt.ui.client.SailingServiceAsync; import com.sap.sailing.gwt.ui.client.StringMessages; import com.sap.sailing.gwt.ui.client.shared.controls.SelectionCheckboxColumn; import com.sap.sailing.gwt.ui.shared.RegattaDTO; +import com.sap.sse.gwt.client.ErrorReporter; public class StructureImportListComposite extends RegattaListComposite implements RegattasDisplayer { @@ -28,19 +24,6 @@ public class StructureImportListComposite extends RegattaListComposite implement final RegattaSelectionProvider regattaSelectionProvider, RegattaRefresher regattaRefresher, final ErrorReporter errorReporter, final StringMessages stringMessages) { super(sailingService,regattaSelectionProvider,regattaRefresher,errorReporter,stringMessages); - regattaSelectionModel = this.selectionCheckboxColumn.getSelectionModel(); - regattaTable.setSelectionModel(regattaSelectionModel, this.selectionCheckboxColumn.getSelectionManager()); - regattaSelectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() { - @Override - public void onSelectionChange(SelectionChangeEvent event) { - List selectedRegattas = getSelectedRegattas(); - List selectedRaceIdentifiers = new ArrayList(); - for (RegattaDTO selectedRegatta : selectedRegattas) { - selectedRaceIdentifiers.add(selectedRegatta.getRegattaIdentifier()); - } - StructureImportListComposite.this.regattaSelectionProvider.setSelection(selectedRaceIdentifiers); - } - }); } // create Regatta Table in StructureImportManagementPanel diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/StructureImportManagementPanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/StructureImportManagementPanel.java index 264c8631d6d..0aa9b7807ab 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/StructureImportManagementPanel.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/StructureImportManagementPanel.java @@ -1,6 +1,7 @@ package com.sap.sailing.gwt.ui.adminconsole; import java.util.ArrayList; +import java.util.Collections; import java.util.HashSet; import java.util.LinkedHashMap; import java.util.List; @@ -22,7 +23,6 @@ import com.google.gwt.user.client.ui.ListBox; import com.google.gwt.user.client.ui.Panel; import com.google.gwt.user.client.ui.TextBox; import com.google.gwt.user.client.ui.VerticalPanel; -import com.sap.sailing.gwt.ui.client.ErrorReporter; import com.sap.sailing.gwt.ui.client.RegattaRefresher; import com.sap.sailing.gwt.ui.client.RegattaSelectionModel; import com.sap.sailing.gwt.ui.client.SailingServiceAsync; @@ -30,371 +30,345 @@ import com.sap.sailing.gwt.ui.client.StringMessages; import com.sap.sailing.gwt.ui.shared.CourseAreaDTO; import com.sap.sailing.gwt.ui.shared.EventAndRegattaDTO; import com.sap.sailing.gwt.ui.shared.EventDTO; +import com.sap.sailing.gwt.ui.shared.LeaderboardGroupDTO; import com.sap.sailing.gwt.ui.shared.RegattaDTO; import com.sap.sailing.gwt.ui.shared.SeriesDTO; +import com.sap.sse.gwt.client.ErrorReporter; import com.sap.sse.gwt.client.dialog.DataEntryDialog.DialogCallback; public class StructureImportManagementPanel extends FlowPanel { - private final SailingServiceAsync sailingService; - private final ErrorReporter errorReporter; - private final StringMessages stringMessages; - private final RegattaRefresher regattaRefresher; - private final EventManagementPanel eventManagementPanel; - private final StructureImportListComposite regattaListComposite; - private Panel progressPanel; - private TextBox jsonURLTextBox; - private TextBox eventIDTextBox; + private final SailingServiceAsync sailingService; + private final ErrorReporter errorReporter; + private final StringMessages stringMessages; + private final RegattaRefresher regattaRefresher; + private final EventManagementPanel eventManagementPanel; + private final StructureImportListComposite regattaListComposite; + private Panel progressPanel; + private TextBox jsonURLTextBox; + private TextBox eventIDTextBox; - private Button listRegattasButton; - private Button importDetailsButton; - private VerticalPanel editSeriesPanel; - private List existingEvents; - private ListBox sailingEventsListBox; + private Button listRegattasButton; + private Button importDetailsButton; + private VerticalPanel editSeriesPanel; + private List existingEvents; + private ListBox sailingEventsListBox; - public StructureImportManagementPanel(SailingServiceAsync sailingService, - ErrorReporter errorReporter, StringMessages stringMessages, - RegattaRefresher regattaRefresher, - EventManagementPanel eventManagementPanel) { - this.eventManagementPanel = eventManagementPanel; - this.sailingService = sailingService; - this.errorReporter = errorReporter; - this.stringMessages = stringMessages; - this.regattaRefresher = regattaRefresher; - this.regattaListComposite = new StructureImportListComposite( - this.sailingService, new RegattaSelectionModel(true), - this.regattaRefresher, this.errorReporter, this.stringMessages); - regattaListComposite.ensureDebugId("RegattaListComposite"); - createUI(); - } + public StructureImportManagementPanel(SailingServiceAsync sailingService, ErrorReporter errorReporter, + StringMessages stringMessages, RegattaRefresher regattaRefresher, EventManagementPanel eventManagementPanel) { + this.eventManagementPanel = eventManagementPanel; + this.sailingService = sailingService; + this.errorReporter = errorReporter; + this.stringMessages = stringMessages; + this.regattaRefresher = regattaRefresher; + this.regattaListComposite = new StructureImportListComposite(this.sailingService, new RegattaSelectionModel( + true), this.regattaRefresher, this.errorReporter, this.stringMessages); + regattaListComposite.ensureDebugId("RegattaListComposite"); + createUI(); + } - private void createUI() { - progressPanel = new FlowPanel(); - Grid URLgrid = new Grid(2, 2); - Label eventIDLabel = new Label(stringMessages.event() + ":"); - Label jsonURLLabel = new Label(stringMessages.jsonUrl() + ":"); - eventIDTextBox = new TextBox(); - eventIDTextBox.addChangeHandler(new ChangeHandler() { - @Override - public void onChange(ChangeEvent event) { - jsonURLTextBox - .setText("http://manage2sail.com/api/public/links/event/" - + eventIDTextBox.getValue() - + "?accesstoken=bDAv8CwsTM94ujZ&mediaType=json"); - } - }); - eventIDTextBox.ensureDebugId("eventIDTextBox"); - eventIDTextBox.setVisibleLength(50); - jsonURLTextBox = new TextBox(); - jsonURLTextBox.ensureDebugId("JsonURLTextBox"); - jsonURLTextBox.setVisibleLength(100); - jsonURLTextBox - .getElement() - .setPropertyString( - "placeholder", - "http://manage2sail.com/api/public/links/event/d30883d3-2876-4d7e-af49-891af6cbae1b?accesstoken=bDAv8CwsTM94ujZ&mediaType=json"); - listRegattasButton = new Button(this.stringMessages.listRegattas()); - importDetailsButton = new Button(this.stringMessages.importRegatta()); - importDetailsButton.setEnabled(false); - importDetailsButton.addClickHandler(new ClickHandler() { - @Override - public void onClick(ClickEvent event) { - if (getSelectedEvent() != null) { - List selectedRegattas = regattaListComposite - .getSelectedRegattas(); - if (!selectedRegattas.isEmpty()) { - createRegattas(selectedRegattas, getSelectedEvent()); - } else { - errorReporter - .reportError("Please select at least one regatta"); - } - } else { - errorReporter.reportError("Please select an event"); - } - } - }); - listRegattasButton.addClickHandler(new ClickHandler() { - @Override - public void onClick(ClickEvent event) { - addUrl(); - } - }); - VerticalPanel vp = new VerticalPanel(); + private void createUI() { + progressPanel = new FlowPanel(); + Grid URLgrid = new Grid(2, 2); + Label eventIDLabel = new Label(stringMessages.event() + ":"); + Label jsonURLLabel = new Label(stringMessages.jsonUrl() + ":"); + eventIDTextBox = new TextBox(); + eventIDTextBox.addChangeHandler(new ChangeHandler() { + @Override + public void onChange(ChangeEvent event) { + jsonURLTextBox.setText("http://manage2sail.com/api/public/links/event/" + eventIDTextBox.getValue() + + "?accesstoken=bDAv8CwsTM94ujZ&mediaType=json"); + } + }); + eventIDTextBox.ensureDebugId("eventIDTextBox"); + eventIDTextBox.setVisibleLength(50); + jsonURLTextBox = new TextBox(); + jsonURLTextBox.ensureDebugId("JsonURLTextBox"); + jsonURLTextBox.setVisibleLength(100); + jsonURLTextBox + .getElement() + .setPropertyString( + "placeholder", + "http://manage2sail.com/api/public/links/event/d30883d3-2876-4d7e-af49-891af6cbae1b?accesstoken=bDAv8CwsTM94ujZ&mediaType=json"); + listRegattasButton = new Button(this.stringMessages.listRegattas()); + importDetailsButton = new Button(this.stringMessages.importRegatta()); + importDetailsButton.setEnabled(false); + importDetailsButton.addClickHandler(new ClickHandler() { + @Override + public void onClick(ClickEvent event) { + if (getSelectedEvent() != null) { + List selectedRegattas = regattaListComposite.getSelectedRegattas(); + if (!selectedRegattas.isEmpty()) { + createRegattas(selectedRegattas, getSelectedEvent()); + } else { + errorReporter.reportError("Please select at least one regatta"); + } + } else { + errorReporter.reportError("Please select an event"); + } + } + }); + listRegattasButton.addClickHandler(new ClickHandler() { + @Override + public void onClick(ClickEvent event) { + addUrl(); + } + }); + VerticalPanel vp = new VerticalPanel(); - HorizontalPanel buttonPanel = new HorizontalPanel(); - URLgrid.setWidget(0, 0, eventIDLabel); - URLgrid.setWidget(0, 1, eventIDTextBox); - URLgrid.setWidget(1, 0, jsonURLLabel); - URLgrid.setWidget(1, 1, jsonURLTextBox); - vp.add(URLgrid); - vp.add(buttonPanel); - buttonPanel.add(listRegattasButton); - buttonPanel.add(importDetailsButton); - Grid grid = new Grid(1, 1); - vp.add(grid); + HorizontalPanel buttonPanel = new HorizontalPanel(); + URLgrid.setWidget(0, 0, eventIDLabel); + URLgrid.setWidget(0, 1, eventIDTextBox); + URLgrid.setWidget(1, 0, jsonURLLabel); + URLgrid.setWidget(1, 1, jsonURLTextBox); + vp.add(URLgrid); + vp.add(buttonPanel); + buttonPanel.add(listRegattasButton); + buttonPanel.add(importDetailsButton); + Grid grid = new Grid(1, 1); + vp.add(grid); - grid.setWidget(0, 0, regattaListComposite); - grid.getRowFormatter().setVerticalAlign(0, - HasVerticalAlignment.ALIGN_TOP); - grid.getColumnFormatter().getElement(0/** 1 */ - ).getStyle().setPaddingTop(2.0, Unit.EM); + grid.setWidget(0, 0, regattaListComposite); + grid.getRowFormatter().setVerticalAlign(0, HasVerticalAlignment.ALIGN_TOP); + grid.getColumnFormatter().getElement(0/** 1 */ + ).getStyle().setPaddingTop(2.0, Unit.EM); - editSeriesPanel = new VerticalPanel(); + editSeriesPanel = new VerticalPanel(); - add(progressPanel); - add(vp); - add(editSeriesPanel); - } + add(progressPanel); + add(vp); + add(editSeriesPanel); + } - private void createEventDetails() { - Grid grid = new Grid(1, 2); - sailingEventsListBox = new ListBox(false); - sailingEventsListBox.ensureDebugId("EventListBox"); - grid.setWidget(0, 0, sailingEventsListBox); - Button newEventBtn = new Button("Create New Event"); - newEventBtn.addClickHandler(new ClickHandler() { - @Override - public void onClick(ClickEvent event) { - openEventCreateDialog(); - } - }); - grid.setWidget(0, 1, newEventBtn); - editSeriesPanel.add(grid); - sailingService.getEvents(new AsyncCallback>() { - @Override - public void onFailure(Throwable caught) { - errorReporter.reportError("Error trying to get events"); - } + private void createEventDetails() { + Grid grid = new Grid(1, 2); + sailingEventsListBox = new ListBox(false); + sailingEventsListBox.ensureDebugId("EventListBox"); + grid.setWidget(0, 0, sailingEventsListBox); + Button newEventBtn = new Button("Create New Event"); + newEventBtn.addClickHandler(new ClickHandler() { + @Override + public void onClick(ClickEvent event) { + openEventCreateDialog(); + } + }); + grid.setWidget(0, 1, newEventBtn); + editSeriesPanel.add(grid); + sailingService.getEvents(new AsyncCallback>() { + @Override + public void onFailure(Throwable caught) { + errorReporter.reportError("Error trying to get events"); + } - @Override - public void onSuccess(List events) { - existingEvents = events; - sailingEventsListBox.addItem(stringMessages - .selectSailingEvent()); - for (EventDTO event : existingEvents) { - sailingEventsListBox.addItem(event.getName()); - } - } - }); + @Override + public void onSuccess(List events) { + existingEvents = events; + sailingEventsListBox.addItem(stringMessages.selectSailingEvent()); + for (EventDTO event : existingEvents) { + sailingEventsListBox.addItem(event.getName()); + } + } + }); - } + } - private void openEventCreateDialog() { - EventCreateDialog dialog = new EventCreateDialog(existingEvents, - stringMessages, new DialogCallback() { - @Override - public void cancel() { - } + private void openEventCreateDialog() { + EventCreateDialog dialog = new EventCreateDialog(existingEvents, Collections.emptyList(), stringMessages, + new DialogCallback() { + @Override + public void cancel() { + } - @Override - public void ok(final EventDTO newEvent) { - createEvent(newEvent); - } - }); - dialog.show(); - } + @Override + public void ok(final EventDTO newEvent) { + createEvent(newEvent); + } + }); + dialog.show(); + } - private void createEvent(final EventDTO newEvent) { - List courseAreaNames = new ArrayList(); - for (CourseAreaDTO courseAreaDTO : newEvent.venue.getCourseAreas()) { - courseAreaNames.add(courseAreaDTO.getName()); - } - sailingService.createEvent(newEvent.getName(), - newEvent.getDescription(), newEvent.startDate, - newEvent.endDate, newEvent.venue.getName(), newEvent.isPublic, - courseAreaNames, newEvent.getImageURLs(), - newEvent.getVideoURLs(), newEvent.getSponsorImageURLs(), - newEvent.getLogoImageURL(), newEvent.getOfficialWebsiteURL(), - new AsyncCallback() { - @Override - public void onFailure(Throwable t) { - errorReporter - .reportError("Error trying to create new event " - + newEvent.getName() - + ": " - + t.getMessage()); - } + private void createEvent(final EventDTO newEvent) { + List courseAreaNames = new ArrayList(); + for (CourseAreaDTO courseAreaDTO : newEvent.venue.getCourseAreas()) { + courseAreaNames.add(courseAreaDTO.getName()); + } + sailingService.createEvent(newEvent.getName(), newEvent.getDescription(), newEvent.startDate, newEvent.endDate, + newEvent.venue.getName(), newEvent.isPublic, courseAreaNames, newEvent.getImageURLs(), + newEvent.getVideoURLs(), newEvent.getSponsorImageURLs(), newEvent.getLogoImageURL(), + newEvent.getOfficialWebsiteURL(), new AsyncCallback() { + @Override + public void onFailure(Throwable t) { + errorReporter.reportError("Error trying to create new event " + newEvent.getName() + ": " + + t.getMessage()); + } - @Override - public void onSuccess(EventDTO newEvent) { - existingEvents.add(newEvent); - sailingEventsListBox.addItem(newEvent.getName()); - sailingEventsListBox - .setSelectedIndex(sailingEventsListBox - .getItemCount() - 1); - } - }); - } + @Override + public void onSuccess(EventDTO newEvent) { + existingEvents.add(newEvent); + sailingEventsListBox.addItem(newEvent.getName()); + sailingEventsListBox.setSelectedIndex(sailingEventsListBox.getItemCount() - 1); + } + }); + } - private void addUrl() { - String valueToValidate = ""; - if (eventIDTextBox.getValue() == null - || eventIDTextBox.getValue().length() == 0) { - valueToValidate = jsonURLTextBox.getValue(); - } else { - valueToValidate = "http://manage2sail.com/api/public/links/event/" - + eventIDTextBox.getValue() - + "?accesstoken=bDAv8CwsTM94ujZ&mediaType=json"; - } + private void addUrl() { + String valueToValidate = ""; + if (eventIDTextBox.getValue() == null || eventIDTextBox.getValue().length() == 0) { + valueToValidate = jsonURLTextBox.getValue(); + } else { + valueToValidate = "http://manage2sail.com/api/public/links/event/" + eventIDTextBox.getValue() + + "?accesstoken=bDAv8CwsTM94ujZ&mediaType=json"; + } - if (valueToValidate == null || valueToValidate.length() == 0) { - errorReporter.reportError(stringMessages.pleaseEnterNonEmptyUrl()); - } + if (valueToValidate == null || valueToValidate.length() == 0) { + errorReporter.reportError(stringMessages.pleaseEnterNonEmptyUrl()); + } - else { - sailingService.getRegattas(valueToValidate, - new AsyncCallback>() { - @Override - public void onFailure(Throwable caught) { - errorReporter - .reportError("Error trying to load regattas"); - } + else { + sailingService.getRegattas(valueToValidate, new AsyncCallback>() { + @Override + public void onFailure(Throwable caught) { + errorReporter.reportError("Error trying to load regattas"); + } - @Override - public void onSuccess(Iterable regattas) { - editSeriesPanel.clear(); - fillRegattas(regattas); - importDetailsButton.setEnabled(true); - LinkedHashMap, Set> structure = getRegattaStructure(regattas); - createEventDetails(); - showRegattaStructure(structure); - } - }); - } - } + @Override + public void onSuccess(Iterable regattas) { + editSeriesPanel.clear(); + fillRegattas(regattas); + importDetailsButton.setEnabled(true); + LinkedHashMap, Set> structure = getRegattaStructure(regattas); + createEventDetails(); + showRegattaStructure(structure); + } + }); + } + } - private LinkedHashMap, Set> getRegattaStructure( - Iterable regattas) { - final LinkedHashMap, Set> structure = new LinkedHashMap, Set>(); + private LinkedHashMap, Set> getRegattaStructure(Iterable regattas) { + final LinkedHashMap, Set> structure = new LinkedHashMap, Set>(); - Set> staticStructures = new HashSet>(); - Set OPENINGMEDAL = new HashSet(); - OPENINGMEDAL.add("Opening Series"); - OPENINGMEDAL.add("Medal"); - staticStructures.add(OPENINGMEDAL); - Set QUALIFICATIONFINALSMEDAL = new HashSet(); - QUALIFICATIONFINALSMEDAL.add("Qualification"); - QUALIFICATIONFINALSMEDAL.add("Finals"); - QUALIFICATIONFINALSMEDAL.add("Medal"); - staticStructures.add(QUALIFICATIONFINALSMEDAL); - Set QUALIFICATIONFINALS = new HashSet(); - QUALIFICATIONFINALS.add("Qualification"); - QUALIFICATIONFINALS.add("Finals"); - staticStructures.add(QUALIFICATIONFINALS); - Set ONESERIES = new HashSet(); - ONESERIES.add("Default"); - staticStructures.add(ONESERIES); - Set UNDEFINED = new HashSet(); - UNDEFINED.add("Undefined"); - staticStructures.add(UNDEFINED); + Set> staticStructures = new HashSet>(); + Set OPENINGMEDAL = new HashSet(); + OPENINGMEDAL.add("Opening Series"); + OPENINGMEDAL.add("Medal"); + staticStructures.add(OPENINGMEDAL); + Set QUALIFICATIONFINALSMEDAL = new HashSet(); + QUALIFICATIONFINALSMEDAL.add("Qualification"); + QUALIFICATIONFINALSMEDAL.add("Finals"); + QUALIFICATIONFINALSMEDAL.add("Medal"); + staticStructures.add(QUALIFICATIONFINALSMEDAL); + Set QUALIFICATIONFINALS = new HashSet(); + QUALIFICATIONFINALS.add("Qualification"); + QUALIFICATIONFINALS.add("Finals"); + staticStructures.add(QUALIFICATIONFINALS); + Set ONESERIES = new HashSet(); + ONESERIES.add("Default"); + staticStructures.add(ONESERIES); + Set UNDEFINED = new HashSet(); + UNDEFINED.add("Undefined"); + staticStructures.add(UNDEFINED); - for (Set struct : staticStructures) { - structure.put(struct, new HashSet()); - } + for (Set struct : staticStructures) { + structure.put(struct, new HashSet()); + } - for (RegattaDTO regatta : regattas) { - Set temp = new HashSet(); - for (SeriesDTO series : regatta.series) { - temp.add(series.getName()); - } - if (temp.isEmpty()) { - structure.get(UNDEFINED).add(regatta); - } else { - for (Set struct : staticStructures) { - if (struct.equals(temp)) { - structure.get(struct).add(regatta); - break; - } - } - } - } - return structure; - } + for (RegattaDTO regatta : regattas) { + Set temp = new HashSet(); + for (SeriesDTO series : regatta.series) { + temp.add(series.getName()); + } + if (temp.isEmpty()) { + structure.get(UNDEFINED).add(regatta); + } else { + for (Set struct : staticStructures) { + if (struct.equals(temp)) { + structure.get(struct).add(regatta); + break; + } + } + } + } + return structure; + } - private void fillRegattas(Iterable regattas) { - regattaListComposite.fillRegattas((List) regattas); - } + private void fillRegattas(Iterable regattas) { + regattaListComposite.fillRegattas((List) regattas); + } - private void showRegattaStructure( - final LinkedHashMap, Set> structure) { + private void showRegattaStructure(final LinkedHashMap, Set> structure) { - Grid grid = new Grid(structure.size(), 2); - int i = 0; - for (final Set struct : structure.keySet()) { - Button editBtn = new Button("Edit Series"); - editBtn.addClickHandler(new ClickHandler() { + Grid grid = new Grid(structure.size(), 2); + int i = 0; + for (final Set struct : structure.keySet()) { + Button editBtn = new Button("Edit Series"); + editBtn.addClickHandler(new ClickHandler() { - @Override - public void onClick(ClickEvent event) { - setDefaultRegatta(structure.get(struct)); - } - }); + @Override + public void onClick(ClickEvent event) { + setDefaultRegatta(structure.get(struct)); + } + }); - String text = ""; - for (String string : struct) { - text += string + ", "; - } - text += "(" + structure.get(struct).size() + ")"; - grid.setWidget(i, 0, new Label(text)); - grid.setWidget(i, 1, editBtn); - i++; - } - editSeriesPanel.add(grid); - } + String text = ""; + for (String string : struct) { + text += string + ", "; + } + text += "(" + structure.get(struct).size() + ")"; + grid.setWidget(i, 0, new Label(text)); + grid.setWidget(i, 1, editBtn); + i++; + } + editSeriesPanel.add(grid); + } - private void setDefaultRegatta(final Iterable selectedRegattas) { - List existingEvents = new ArrayList(); - EventDTO selectedEvent = getSelectedEvent(); - if (selectedEvent != null) { - existingEvents.add(getSelectedEvent()); - } - DefaultRegattaCreateDialog dialog = new DefaultRegattaCreateDialog( - existingEvents, selectedRegattas, sailingService, - errorReporter, stringMessages, - new DialogCallback() { - @Override - public void cancel() { - } + private void setDefaultRegatta(final Iterable selectedRegattas) { + List existingEvents = new ArrayList(); + EventDTO selectedEvent = getSelectedEvent(); + if (selectedEvent != null) { + existingEvents.add(getSelectedEvent()); + } + DefaultRegattaCreateDialog dialog = new DefaultRegattaCreateDialog(existingEvents, selectedRegattas, + sailingService, errorReporter, stringMessages, new DialogCallback() { + @Override + public void cancel() { + } - @Override - public void ok(final EventAndRegattaDTO newRegatta) { + @Override + public void ok(final EventAndRegattaDTO newRegatta) { - } - }); - dialog.ensureDebugId("DefaultRegattaCreateDialog"); - dialog.show(); - } + } + }); + dialog.ensureDebugId("DefaultRegattaCreateDialog"); + dialog.show(); + } - private EventDTO getSelectedEvent() { - EventDTO result = null; - int selIndex = sailingEventsListBox.getSelectedIndex(); - if (selIndex > 0) { // the zero index represents the 'no selection' text - String itemText = sailingEventsListBox.getItemText(selIndex); - for (EventDTO eventDTO : existingEvents) { - if (eventDTO.getName().equals(itemText)) { - result = eventDTO; - break; - } - } - } - return result; - } + private EventDTO getSelectedEvent() { + EventDTO result = null; + int selIndex = sailingEventsListBox.getSelectedIndex(); + if (selIndex > 0) { // the zero index represents the 'no selection' text + String itemText = sailingEventsListBox.getItemText(selIndex); + for (EventDTO eventDTO : existingEvents) { + if (eventDTO.getName().equals(itemText)) { + result = eventDTO; + break; + } + } + } + return result; + } - private void createRegattas(final Iterable selectedRegattas, - EventDTO newEvent) { - eventManagementPanel.fillEvents(); - sailingService.createRegattaStructure(selectedRegattas, newEvent, - new AsyncCallback() { - @Override - public void onFailure(Throwable caught) { - errorReporter.reportError(stringMessages - .errorAddingResultImportUrl(caught.getMessage())); - } + private void createRegattas(final Iterable selectedRegattas, EventDTO newEvent) { + eventManagementPanel.fillEvents(); + sailingService.createRegattaStructure(selectedRegattas, newEvent, new AsyncCallback() { + @Override + public void onFailure(Throwable caught) { + errorReporter.reportError(stringMessages.errorAddingResultImportUrl(caught.getMessage())); + } - @Override - public void onSuccess(Void result) { - regattaRefresher.fillRegattas(); - } - }); - } + @Override + public void onSuccess(Void result) { + regattaRefresher.fillRegattas(); + } + }); + } } 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 26b585569f6..9f072cc4f6c 100755 --- 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 @@ -523,8 +523,7 @@ public interface SailingService extends RemoteService { * Revoke the events in the {@code RaceLog} that are identified by the {@code eventIds}. This only affects such * events that implement {@link Revokable}. */ - void revokeRaceLogEvents(String leaderboardName, String raceColumnName, String fleetName, List eventIds) - List eventIds) throws NotRevokableException; + void revokeRaceLogEvents(String leaderboardName, String raceColumnName, String fleetName, List eventIds) throws NotRevokableException; Collection getGPSFixImporterTypes(); 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 414b92d7746..aa41e64b2df 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 @@ -390,15 +390,15 @@ import com.sap.sailing.simulator.PolarDiagram; import com.sap.sailing.simulator.SailingSimulator; import com.sap.sailing.simulator.SimulationParameters; import com.sap.sailing.simulator.TimedPositionWithSpeed; -import com.sap.sailing.xrr.schema.RegattaResults; -import com.sap.sailing.xrr.structureimport.SeriesParameters; -import com.sap.sailing.xrr.structureimport.StructureImporter; import com.sap.sailing.simulator.impl.PolarDiagramCSV; import com.sap.sailing.simulator.impl.SailingSimulatorImpl; import com.sap.sailing.simulator.impl.SimulationParametersImpl; import com.sap.sailing.simulator.util.SailingSimulatorConstants; import com.sap.sailing.simulator.windfield.WindFieldGenerator; import com.sap.sailing.simulator.windfield.impl.WindFieldTrackedRaceImpl; +import com.sap.sailing.xrr.schema.RegattaResults; +import com.sap.sailing.xrr.structureimport.SeriesParameters; +import com.sap.sailing.xrr.structureimport.StructureImporter; import com.sap.sse.BuildVersion; import com.sap.sse.common.Duration; import com.sap.sse.common.TimePoint; @@ -420,8 +420,7 @@ import eventimport.RegattaJSON; /** * The server side implementation of the RPC service. */ -public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements SailingService, RaceFetcher, - RegattaFetcher { +public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements SailingService, RaceFetcher, RegattaFetcher { private static final Logger logger = Logger.getLogger(SailingServiceImpl.class.getName()); private static final long serialVersionUID = 9031688830194537489L; @@ -437,7 +436,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S private final MongoObjectFactory mongoObjectFactory; private final SwissTimingAdapterPersistence swissTimingAdapterPersistence; - + private final ServiceTracker swissTimingAdapterTracker; private final ServiceTracker tractracAdapterTracker; @@ -445,8 +444,9 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S private final ServiceTracker igtimiAdapterTracker; private final ServiceTracker raceLogTrackingAdapterTracker; - - private final ServiceTracker deviceIdentifierStringSerializationHandlerTracker; + + private final ServiceTracker + deviceIdentifierStringSerializationHandlerTracker; private final com.sap.sailing.domain.tractracadapter.persistence.MongoObjectFactory tractracMongoObjectFactory; @@ -459,11 +459,11 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S private final com.sap.sailing.domain.common.CountryCodeFactory countryCodeFactory; private final Executor executor; - + private final com.sap.sailing.domain.base.DomainFactory baseDomainFactory; - + private static final int LEADERBOARD_BY_NAME_RESULTS_CACHE_BY_ID_SIZE = 100; - + private static final int LEADERBOARD_DIFFERENCE_CACHE_SIZE = 50; private final LinkedHashMap leaderboardByNameResultsCacheById; @@ -471,9 +471,9 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S private int leaderboardDifferenceCacheByIdPairHits; private int leaderboardDifferenceCacheByIdPairMisses; /** - * Caches some results of the hard to compute difference between two {@link LeaderboardDTO}s. The objects contained - * as values have been obtained by {@link IncrementalLeaderboardDTO#strip(LeaderboardDTO)}. The cache size is - * limited to {@link #LEADERBOARD_DIFFERENCE_CACHE_SIZE}. + * Caches some results of the hard to compute difference between two {@link LeaderboardDTO}s. The objects contained as values + * have been obtained by {@link IncrementalLeaderboardDTO#strip(LeaderboardDTO)}. The cache size is limited to + * {@link #LEADERBOARD_DIFFERENCE_CACHE_SIZE}. */ private final LinkedHashMap, IncrementalLeaderboardDTO> leaderboardDifferenceCacheByIdPair; @@ -499,8 +499,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S baseDomainFactory = getService().getBaseDomainFactory(); mongoObjectFactory = getService().getMongoObjectFactory(); domainObjectFactory = getService().getDomainObjectFactory(); - // TODO what about passing on the mongo/domain object factory to obtain an according - // SwissTimingAdapterPersistence instance similar to how the tractracDomainObjectFactory etc. are created below? + // TODO what about passing on the mongo/domain object factory to obtain an according SwissTimingAdapterPersistence instance similar to how the tractracDomainObjectFactory etc. are created below? swissTimingAdapterPersistence = SwissTimingAdapterPersistence.INSTANCE; swissTimingReplayService = getSwissTimingReplayService(context); scoreCorrectionProviderServiceTracker = createAndOpenScoreCorrectionProviderServiceTracker(context); @@ -510,20 +509,15 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S tractracMongoObjectFactory = com.sap.sailing.domain.tractracadapter.persistence.MongoObjectFactory.INSTANCE; swissTimingFactory = SwissTimingFactory.INSTANCE; countryCodeFactory = com.sap.sailing.domain.common.CountryCodeFactory.INSTANCE; - leaderboardDifferenceCacheByIdPair = new LinkedHashMap, IncrementalLeaderboardDTO>( - LEADERBOARD_DIFFERENCE_CACHE_SIZE, 0.75f, /* accessOrder */true) { + leaderboardDifferenceCacheByIdPair = new LinkedHashMap, IncrementalLeaderboardDTO>(LEADERBOARD_DIFFERENCE_CACHE_SIZE, 0.75f, /* accessOrder */ true) { private static final long serialVersionUID = 3775119859130148488L; - @Override - protected boolean removeEldestEntry( - Entry, IncrementalLeaderboardDTO> eldest) { + protected boolean removeEldestEntry(Entry, IncrementalLeaderboardDTO> eldest) { return this.size() > LEADERBOARD_DIFFERENCE_CACHE_SIZE; } }; - leaderboardByNameResultsCacheById = new LinkedHashMap( - LEADERBOARD_BY_NAME_RESULTS_CACHE_BY_ID_SIZE, 0.75f, /* accessOrder */true) { + leaderboardByNameResultsCacheById = new LinkedHashMap(LEADERBOARD_BY_NAME_RESULTS_CACHE_BY_ID_SIZE, 0.75f, /* accessOrder */ true) { private static final long serialVersionUID = 3775119859130148488L; - @Override protected boolean removeEldestEntry(Entry eldest) { return this.size() > LEADERBOARD_BY_NAME_RESULTS_CACHE_BY_ID_SIZE; @@ -533,23 +527,22 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S // providing the updates is not outperformed by all the re-calculations happening here. Leave at least one // core to other things, but by using at least three threads ensure that no simplistic deadlocks may occur. final int THREAD_POOL_SIZE = Math.max(Runtime.getRuntime().availableProcessors(), 3); - executor = new ThreadPoolExecutor(/* corePoolSize */THREAD_POOL_SIZE, - /* maximumPoolSize */THREAD_POOL_SIZE, - /* keepAliveTime */60, TimeUnit.SECONDS, - /* workQueue */new LinkedBlockingQueue()); + executor = new ThreadPoolExecutor(/* corePoolSize */ THREAD_POOL_SIZE, + /* maximumPoolSize */ THREAD_POOL_SIZE, + /* keepAliveTime */ 60, TimeUnit.SECONDS, + /* workQueue */ new LinkedBlockingQueue()); } - + /** - * Stops this service and frees its resources. In particular, caching services and threads owned by this service - * will be notified to stop their jobs. + * Stops this service and frees its resources. In particular, caching services and threads owned by this service will be + * notified to stop their jobs. */ public void stop() { quickRanksLiveCache.stop(); } protected SwissTimingReplayService getSwissTimingReplayService(BundleContext context) { - return createAndOpenSwissTimingReplayServiceTracker(context).getService().createSwissTimingReplayService( - getSwissTimingAdapter().getSwissTimingDomainFactory()); + return createAndOpenSwissTimingReplayServiceTracker(context).getService().createSwissTimingReplayService(getSwissTimingAdapter().getSwissTimingDomainFactory()); } protected SwissTimingAdapter getSwissTimingAdapter() { @@ -560,16 +553,14 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S return tractracAdapterTracker.getService().getOrCreateTracTracAdapter(baseDomainFactory); } - protected ServiceTracker createAndOpenTracTracAdapterTracker( - BundleContext context) { + protected ServiceTracker createAndOpenTracTracAdapterTracker(BundleContext context) { ServiceTracker result = new ServiceTracker( context, TracTracAdapterFactory.class.getName(), null); result.open(); return result; } - protected ServiceTracker createAndOpenIgtimiTracker( - BundleContext context) { + protected ServiceTracker createAndOpenIgtimiTracker(BundleContext context) { ServiceTracker result = new ServiceTracker( context, IgtimiConnectionFactory.class.getName(), null); result.open(); @@ -594,7 +585,8 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S protected ServiceTracker createAndOpenRaceLogTrackingAdapterTracker( BundleContext context) { - ServiceTracker result = new ServiceTracker( + ServiceTracker result = + new ServiceTracker( context, RaceLogTrackingAdapterFactory.class.getName(), null); result.open(); return result; @@ -625,8 +617,8 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S */ protected ServiceTracker createAndOpenScoreCorrectionProviderServiceTracker( BundleContext bundleContext) { - ServiceTracker tracker = new ServiceTracker( - bundleContext, ScoreCorrectionProvider.class.getName(), + ServiceTracker tracker = new ServiceTracker(bundleContext, + ScoreCorrectionProvider.class.getName(), /* customizer */null); tracker.open(); return tracker; @@ -645,7 +637,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S public ScoreCorrectionProviderDTO getScoreCorrectionsOfProvider(String providerName) throws Exception { ScoreCorrectionProviderDTO result = null; for (ScoreCorrectionProvider scoreCorrectionProvider : getAllScoreCorrectionProviders()) { - if (scoreCorrectionProvider.getName().equals(providerName)) { + if(scoreCorrectionProvider.getName().equals(providerName)) { result = convertScoreCorrectionProviderDTO(scoreCorrectionProvider); break; } @@ -666,7 +658,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S private ScoreCorrectionProviderDTO convertScoreCorrectionProviderDTO(ScoreCorrectionProvider scoreCorrectionProvider) throws Exception { - Map>> hasResultsForBoatClassFromDateByEventName = new HashMap>>(); + Map>> hasResultsForBoatClassFromDateByEventName = new HashMap>>(); for (Map.Entry>> e : scoreCorrectionProvider .getHasResultsForBoatClassFromDateByEventName().entrySet()) { Set> set = new HashSet>(); @@ -675,8 +667,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } hasResultsForBoatClassFromDateByEventName.put(e.getKey(), set); } - return new ScoreCorrectionProviderDTO(scoreCorrectionProvider.getName(), - hasResultsForBoatClassFromDateByEventName); + return new ScoreCorrectionProviderDTO(scoreCorrectionProvider.getName(), hasResultsForBoatClassFromDateByEventName); } protected ServiceTracker createAndOpenReplicationServiceTracker( @@ -698,7 +689,6 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S *

* * Otherwise, the leaderboard is computed synchronously on the fly. - * * @param previousLeaderboardId * if null or no leaderboard with that {@link LeaderboardDTO#getId() ID} is known, a * {@link FullLeaderboardDTO} will be computed; otherwise, an {@link IncrementalLeaderboardDTO} will be @@ -707,8 +697,8 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S @Override public IncrementalOrFullLeaderboardDTO getLeaderboardByName(final String leaderboardName, final Date date, final Collection namesOfRaceColumnsForWhichToLoadLegDetails, boolean addOverallDetails, - String previousLeaderboardId, boolean fillNetPointsUncorrected) throws NoWindException, - InterruptedException, ExecutionException, IllegalArgumentException { + String previousLeaderboardId, boolean fillNetPointsUncorrected) throws NoWindException, InterruptedException, ExecutionException, + IllegalArgumentException { try { long startOfRequestHandling = System.currentTimeMillis(); IncrementalOrFullLeaderboardDTO result = null; @@ -721,8 +711,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S timePoint = new MillisecondsTimePoint(date); } LeaderboardDTO leaderboardDTO = leaderboard.getLeaderboardDTO(timePoint, - namesOfRaceColumnsForWhichToLoadLegDetails, addOverallDetails, getService(), baseDomainFactory, - fillNetPointsUncorrected); + namesOfRaceColumnsForWhichToLoadLegDetails, addOverallDetails, getService(), baseDomainFactory, fillNetPointsUncorrected); LeaderboardDTO previousLeaderboardDTO = null; synchronized (leaderboardByNameResultsCacheById) { leaderboardByNameResultsCacheById.put(leaderboardDTO.getId(), leaderboardDTO); @@ -730,22 +719,18 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S previousLeaderboardDTO = leaderboardByNameResultsCacheById.get(previousLeaderboardId); } } - // Un-comment the following lines if you need to update the file used by LeaderboardDTODiffingTest, set - // a breakpoint + // Un-comment the following lines if you need to update the file used by LeaderboardDTODiffingTest, set a breakpoint // and toggle the storeLeaderboardForTesting flag if you found a good version. See also bug 1417. - // boolean storeLeaderboardForTesting = false; - // if (storeLeaderboardForTesting) { - // ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(new - // File("c:/data/SAP/sailing/workspace/java/com.sap.sailing.domain.test/resources/IncrementalLeaderboardDTO.ser"))); - // oos.writeObject(leaderboardDTO); - // oos.close(); - // } +// boolean storeLeaderboardForTesting = false; +// if (storeLeaderboardForTesting) { +// ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(new File("c:/data/SAP/sailing/workspace/java/com.sap.sailing.domain.test/resources/IncrementalLeaderboardDTO.ser"))); +// oos.writeObject(leaderboardDTO); +// oos.close(); +// } final IncrementalLeaderboardDTO cachedDiff; if (previousLeaderboardId != null) { synchronized (leaderboardDifferenceCacheByIdPair) { - cachedDiff = leaderboardDifferenceCacheByIdPair - .get(new com.sap.sse.common.Util.Pair(previousLeaderboardId, - leaderboardDTO.getId())); + cachedDiff = leaderboardDifferenceCacheByIdPair.get(new com.sap.sse.common.Util.Pair(previousLeaderboardId, leaderboardDTO.getId())); } if (cachedDiff == null) { leaderboardDifferenceCacheByIdPairMisses++; @@ -760,18 +745,15 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } else { final IncrementalLeaderboardDTO incrementalResult; if (cachedDiff == null) { - IncrementalLeaderboardDTO preResult = new IncrementalLeaderboardDTOCloner().clone( - leaderboardDTO).strip(previousLeaderboardDTO); + IncrementalLeaderboardDTO preResult = new IncrementalLeaderboardDTOCloner().clone(leaderboardDTO).strip(previousLeaderboardDTO); synchronized (leaderboardDifferenceCacheByIdPair) { - leaderboardDifferenceCacheByIdPair.put(new com.sap.sse.common.Util.Pair( - previousLeaderboardId, leaderboardDTO.getId()), preResult); + leaderboardDifferenceCacheByIdPair.put(new com.sap.sse.common.Util.Pair(previousLeaderboardId, leaderboardDTO.getId()), preResult); } incrementalResult = preResult; } else { incrementalResult = cachedDiff; } - incrementalResult.setCurrentServerTime(new Date()); // may update a cached object, but we consider a - // reference update atomic + incrementalResult.setCurrentServerTime(new Date()); // may update a cached object, but we consider a reference update atomic result = incrementalResult; } logger.fine("getLeaderboardByName(" + leaderboardName + ", " + date + ", " @@ -790,7 +772,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } catch (IllegalArgumentException e) { throw e; } catch (Exception e) { - logger.log(Level.SEVERE, "Exception during SailingService.getLeaderboardByName", e); + logger.log(Level.SEVERE,"Exception during SailingService.getLeaderboardByName", e); throw new RuntimeException(e); } } @@ -818,7 +800,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S private MarkDTO convertToMarkDTO(Mark mark, Position position) { MarkDTO markDTO; - if (position != null) { + if(position != null) { markDTO = new MarkDTO(mark.getId().toString(), mark.getName(), position.getLatDeg(), position.getLngDeg()); } else { markDTO = new MarkDTO(mark.getId().toString(), mark.getName()); @@ -838,8 +820,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S regattaDTO.endDate = regatta.getStartDate() != null ? regatta.getEndDate().asDate() : null; BoatClass boatClass = regatta.getBoatClass(); if (boatClass != null) { - regattaDTO.boatClass = new BoatClassDTO(boatClass.getName(), boatClass.getDisplayName(), boatClass - .getHullLength().getMeters()); + regattaDTO.boatClass = new BoatClassDTO(boatClass.getName(), boatClass.getDisplayName(), boatClass.getHullLength().getMeters()); } if (regatta.getDefaultCourseArea() != null) { regattaDTO.defaultCourseAreaUuid = regatta.getDefaultCourseArea().getId(); @@ -866,9 +847,8 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } List raceColumns = convertToRaceColumnDTOs(series.getRaceColumns()); SeriesDTO result = new SeriesDTO(series.getName(), fleets, raceColumns, series.isMedal(), - series.getResultDiscardingRule() == null ? null : series.getResultDiscardingRule() - .getDiscardIndexResultsStartingWithHowManyRaces(), series.isStartsWithZeroScore(), - series.isFirstColumnIsNonDiscardableCarryForward(), series.hasSplitFleetContiguousScoring()); + series.getResultDiscardingRule() == null ? null : series.getResultDiscardingRule().getDiscardIndexResultsStartingWithHowManyRaces(), + series.isStartsWithZeroScore(), series.isFirstColumnIsNonDiscardableCarryForward(), series.hasSplitFleetContiguousScoring()); return result; } @@ -877,41 +857,39 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S raceColumnDTO.setMedalRace(raceColumn.isMedalRace()); raceColumnDTO.setExplicitFactor(raceColumn.getExplicitFactor()); } - + private List convertToRaceColumnDTOs(Iterable raceColumns) { List raceColumnDTOs = new ArrayList(); RaceColumnDTOFactory columnFactory = RaceColumnDTOFactory.INSTANCE; for (RaceColumn raceColumn : raceColumns) { - - final RaceColumnDTO raceColumnDTO = columnFactory.createRaceColumnDTO(raceColumn.getName(), raceColumn - .isMedalRace(), raceColumn.getExplicitFactor(), - raceColumn instanceof RaceColumnInSeries ? ((RaceColumnInSeries) raceColumn).getRegatta().getName() - : null, raceColumn instanceof RaceColumnInSeries ? ((RaceColumnInSeries) raceColumn) - .getSeries().getName() : null); + final RaceColumnDTO raceColumnDTO = columnFactory.createRaceColumnDTO(raceColumn.getName(), + raceColumn.isMedalRace(), raceColumn.getExplicitFactor(), + raceColumn instanceof RaceColumnInSeries ? ((RaceColumnInSeries) raceColumn).getRegatta().getName() : null, + raceColumn instanceof RaceColumnInSeries ? ((RaceColumnInSeries) raceColumn).getSeries().getName() : null); raceColumnDTOs.add(raceColumnDTO); } return raceColumnDTOs; } - + private RaceInfoDTO createRaceInfoDTO(String seriesName, RaceColumn raceColumn, Fleet fleet) { RaceInfoDTO raceInfoDTO = new RaceInfoDTO(); RaceLog raceLog = raceColumn.getRaceLog(fleet); if (raceLog != null) { - + raceInfoDTO.isTracked = raceColumn.getTrackedRace(fleet) != null ? true : false; ReadonlyRaceState state = ReadonlyRaceStateImpl.create(raceLog); - + TimePoint startTime = state.getStartTime(); if (startTime != null) { raceInfoDTO.startTime = startTime.asDate(); } raceInfoDTO.lastStatus = state.getStatus(); - + if (raceLog.getLastRawFix() != null) { raceInfoDTO.lastUpdateTime = raceLog.getLastRawFix().getCreatedAt().asDate(); } - + TimePoint finishedTime = state.getFinishedTime(); if (finishedTime != null) { raceInfoDTO.finishedTime = finishedTime.asDate(); @@ -924,11 +902,9 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } if (startTime != null) { - FlagPoleState activeFlagState = state.getRacingProcedure().getActiveFlags(startTime, - MillisecondsTimePoint.now()); + FlagPoleState activeFlagState = state.getRacingProcedure().getActiveFlags(startTime, MillisecondsTimePoint.now()); List activeFlags = activeFlagState.getCurrentState(); - FlagPoleState previousFlagState = activeFlagState.getPreviousState(state.getRacingProcedure(), - startTime); + FlagPoleState previousFlagState = activeFlagState.getPreviousState(state.getRacingProcedure(), startTime); List previousFlags = previousFlagState.getCurrentState(); FlagPole mostInterestingFlagPole = FlagPoleState.getMostInterestingFlagPole(previousFlags, activeFlags); @@ -937,18 +913,17 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S raceInfoDTO.lastUpperFlag = mostInterestingFlagPole.getUpperFlag(); raceInfoDTO.lastLowerFlag = mostInterestingFlagPole.getLowerFlag(); raceInfoDTO.lastFlagsAreDisplayed = mostInterestingFlagPole.isDisplayed(); - raceInfoDTO.lastFlagsDisplayedStateChanged = previousFlagState - .hasPoleChanged(mostInterestingFlagPole); + raceInfoDTO.lastFlagsDisplayedStateChanged = previousFlagState.hasPoleChanged(mostInterestingFlagPole); } } - + AbortingFlagFinder abortingFlagFinder = new AbortingFlagFinder(raceLog); - + RaceLogFlagEvent abortingFlagEvent = abortingFlagFinder.analyze(); if (abortingFlagEvent != null) { raceInfoDTO.isRaceAbortedInPassBefore = true; raceInfoDTO.abortingTimeInPassBefore = abortingFlagEvent.getLogicalTimePoint().asDate(); - + if (raceInfoDTO.lastStatus.equals(RaceLogRaceStatus.UNSCHEDULED)) { raceInfoDTO.lastUpperFlag = abortingFlagEvent.getUpperFlag(); raceInfoDTO.lastLowerFlag = abortingFlagEvent.getLowerFlag(); @@ -956,13 +931,13 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S raceInfoDTO.lastFlagsDisplayedStateChanged = true; } } - + CourseBase lastCourse = state.getCourseDesign(); if (lastCourse != null) { raceInfoDTO.lastCourseDesign = convertCourseDesignToRaceCourseDTO(lastCourse); raceInfoDTO.lastCourseName = lastCourse.getName(); } - + if (raceInfoDTO.lastStatus.equals(RaceLogRaceStatus.FINISHED)) { TimePoint protestStartTime = state.getProtestTime(); if (protestStartTime != null) { @@ -974,7 +949,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S raceInfoDTO.lastFlagsDisplayedStateChanged = true; } } - + Wind wind = state.getWindFix(); if (wind != null) { raceInfoDTO.lastWind = createWindDTOFromAlreadyAveraged(wind, MillisecondsTimePoint.now()); @@ -990,7 +965,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S raceInfoDTO.isTracked = raceColumn.getTrackedRace(fleet) != null ? true : false; return raceInfoDTO; } - + private void fillStartProcedureSpecifics(RaceInfoDTO raceInfoDTO, ReadonlyRaceState state) { RaceInfoExtensionDTO info = null; raceInfoDTO.startProcedure = state.getRacingProcedure().getType(); @@ -1015,8 +990,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S List waypointDTOs = new ArrayList(); for (Waypoint waypoint : lastCourseDesign.getWaypoints()) { ControlPointDTO controlPointDTO = convertToControlPointDTO(waypoint.getControlPoint()); - WaypointDTO waypointDTO = new WaypointDTO(waypoint.getName(), controlPointDTO, - waypoint.getPassingInstructions()); + WaypointDTO waypointDTO = new WaypointDTO(waypoint.getName(), controlPointDTO, waypoint.getPassingInstructions()); waypointDTOs.add(waypointDTO); } result = new RaceCourseDTO(waypointDTOs); @@ -1029,18 +1003,16 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S for (RaceDefinition r : regatta.getAllRaces()) { RegattaAndRaceIdentifier raceIdentifier = new RegattaNameAndRaceName(regatta.getName(), r.getName()); TrackedRace trackedRace = getService().getExistingTrackedRace(raceIdentifier); - TrackedRaceDTO trackedRaceDTO = null; + TrackedRaceDTO trackedRaceDTO = null; if (trackedRace != null) { trackedRaceDTO = getBaseDomainFactory().createTrackedRaceDTO(trackedRace); - } - RaceWithCompetitorsDTO raceDTO = new RaceWithCompetitorsDTO(raceIdentifier, - convertToCompetitorDTOs(r.getCompetitors()), trackedRaceDTO, getService().isRaceBeingTracked( - regatta, r)); + RaceWithCompetitorsDTO raceDTO = new RaceWithCompetitorsDTO(raceIdentifier, convertToCompetitorDTOs(r.getCompetitors()), + trackedRaceDTO, getService().isRaceBeingTracked(regatta, r)); if (trackedRace != null) { getBaseDomainFactory().updateRaceDTOWithTrackedRaceData(trackedRace, raceDTO); } - raceDTO.boatClass = regatta.getBoatClass() == null ? null : regatta.getBoatClass().getName(); + raceDTO.boatClass = regatta.getBoatClass() == null ? null : regatta.getBoatClass().getName(); result.add(raceDTO); } return result; @@ -1056,18 +1028,15 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } @Override - public com.sap.sse.common.Util.Pair> listTracTracRacesInEvent( - String eventJsonURL, boolean listHiddenRaces) throws MalformedURLException, IOException, ParseException, - org.json.simple.parser.ParseException, URISyntaxException { - com.sap.sse.common.Util.Pair> raceRecords; - raceRecords = getTracTracAdapter().getTracTracRaceRecords(new URL(eventJsonURL), /* loadClientParam */false); + public com.sap.sse.common.Util.Pair> listTracTracRacesInEvent(String eventJsonURL, boolean listHiddenRaces) throws MalformedURLException, IOException, ParseException, org.json.simple.parser.ParseException, URISyntaxException { + com.sap.sse.common.Util.Pair> raceRecords; + raceRecords = getTracTracAdapter().getTracTracRaceRecords(new URL(eventJsonURL), /*loadClientParam*/ false); List result = new ArrayList(); for (RaceRecord raceRecord : raceRecords.getB()) { - if (listHiddenRaces == false - && raceRecord.getRaceStatus().equals(TracTracConnectionConstants.HIDDEN_STATUS)) { + if (listHiddenRaces == false && raceRecord.getRaceStatus().equals(TracTracConnectionConstants.HIDDEN_STATUS)) { continue; } - + result.add(new TracTracRaceRecordDTO(raceRecord.getID(), raceRecord.getEventName(), raceRecord.getName(), raceRecord.getTrackingStartTime().asDate(), raceRecord @@ -1083,19 +1052,14 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } @Override - public void trackWithTracTrac(RegattaIdentifier regattaToAddTo, Iterable rrs, - String liveURI, String storedURI, String courseDesignUpdateURI, boolean trackWind, - final boolean correctWindByDeclination, final boolean simulateWithStartTimeNow, String tracTracUsername, - String tracTracPassword) throws Exception { - logger.info("tracWithTracTrac for regatta " + regattaToAddTo + " for race records " + rrs + " with liveURI " - + liveURI + " and storedURI " + storedURI); + public void trackWithTracTrac(RegattaIdentifier regattaToAddTo, Iterable rrs, String liveURI, String storedURI, + String courseDesignUpdateURI, boolean trackWind, final boolean correctWindByDeclination, final boolean simulateWithStartTimeNow, + String tracTracUsername, String tracTracPassword) throws Exception { + logger.info("tracWithTracTrac for regatta "+regattaToAddTo+" for race records "+rrs+" with liveURI "+liveURI+" and storedURI "+storedURI); for (TracTracRaceRecordDTO rr : rrs) { // reload JSON and load clientparams.php - RaceRecord record = getTracTracAdapter().getSingleTracTracRaceRecord(new URL(rr.jsonURL), rr.id, /* loadClientParams */ - true); - logger.info("Loaded race " + record.getName() + " in " + record.getEventName() + " start:" - + record.getRaceStartTime() + " trackingStart:" + record.getTrackingStartTime() + " trackingEnd:" - + record.getTrackingEndTime()); + RaceRecord record = getTracTracAdapter().getSingleTracTracRaceRecord(new URL(rr.jsonURL), rr.id, /*loadClientParams*/true); + logger.info("Loaded race " + record.getName() + " in " + record.getEventName() + " start:" + record.getRaceStartTime() + " trackingStart:" + record.getTrackingStartTime() + " trackingEnd:" + record.getTrackingEndTime()); // note that the live URI may be null for races that were put into replay mode final String effectiveLiveURI; if (!record.getRaceStatus().equals(TracTracConnectionConstants.REPLAY_STATUS)) { @@ -1146,19 +1110,17 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S Iterable configs = tractracDomainObjectFactory.getTracTracConfigurations(); List result = new ArrayList(); for (TracTracConfiguration ttConfig : configs) { - result.add(new TracTracConfigurationDTO(ttConfig.getName(), ttConfig.getJSONURL().toString(), ttConfig - .getLiveDataURI().toString(), ttConfig.getStoredDataURI().toString(), ttConfig - .getCourseDesignUpdateURI().toString(), ttConfig.getTracTracUsername().toString(), ttConfig - .getTracTracPassword().toString())); + result.add(new TracTracConfigurationDTO(ttConfig.getName(), ttConfig.getJSONURL().toString(), + ttConfig.getLiveDataURI().toString(), ttConfig.getStoredDataURI().toString(), ttConfig.getCourseDesignUpdateURI().toString(), + ttConfig.getTracTracUsername().toString(), ttConfig.getTracTracPassword().toString())); } return result; } @Override - public void storeTracTracConfiguration(String name, String jsonURL, String liveDataURI, String storedDataURI, - String courseDesignUpdateURI, String tracTracUsername, String tracTracPassword) throws Exception { - tractracMongoObjectFactory.storeTracTracConfiguration(getTracTracAdapter().createTracTracConfiguration(name, - jsonURL, liveDataURI, storedDataURI, courseDesignUpdateURI, tracTracUsername, tracTracPassword)); + public void storeTracTracConfiguration(String name, String jsonURL, String liveDataURI, String storedDataURI, String courseDesignUpdateURI, String tracTracUsername, String tracTracPassword) throws Exception { + tractracMongoObjectFactory.storeTracTracConfiguration(getTracTracAdapter().createTracTracConfiguration(name, jsonURL, liveDataURI, storedDataURI, + courseDesignUpdateURI, tracTracUsername, tracTracPassword)); } @Override @@ -1189,13 +1151,11 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } /** - * @param timeoutInMilliseconds - * eventually passed to {@link RaceHandle#getRace(long)}. If the race definition can be obtained within - * this timeout, wind for the race will be tracked; otherwise, the method returns without taking any - * effect. + * @param timeoutInMilliseconds eventually passed to {@link RaceHandle#getRace(long)}. If the race definition + * can be obtained within this timeout, wind for the race will be tracked; otherwise, the method returns without + * taking any effect. */ - private void startTrackingWind(RaceHandle raceHandle, boolean correctByDeclination, long timeoutInMilliseconds) - throws Exception { + private void startTrackingWind(RaceHandle raceHandle, boolean correctByDeclination, long timeoutInMilliseconds) throws Exception { Regatta regatta = raceHandle.getRegatta(); if (regatta != null) { RaceDefinition race = raceHandle.getRace(timeoutInMilliseconds); @@ -1209,8 +1169,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } @Override - public WindInfoForRaceDTO getRawWindFixes(RegattaAndRaceIdentifier raceIdentifier, - Collection windSources) { + public WindInfoForRaceDTO getRawWindFixes(RegattaAndRaceIdentifier raceIdentifier, Collection windSources) { WindInfoForRaceDTO result = null; TrackedRace trackedRace = getExistingTrackedRace(raceIdentifier); if (trackedRace != null) { @@ -1227,7 +1186,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S windSourcesToDeliver.add(new WindSourceImpl(WindSourceType.WEB)); } for (WindSource windSource : windSourcesToDeliver) { - if (windSource.getType() == WindSourceType.WEB) { + if(windSource.getType() == WindSourceType.WEB) { WindTrackInfoDTO windTrackInfoDTO = new WindTrackInfoDTO(); windTrackInfoDTO.windFixes = new ArrayList(); WindTrack windTrack = trackedRace.getOrCreateWindTrack(windSource); @@ -1237,7 +1196,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S Iterator windIter = windTrack.getRawFixes().iterator(); while (windIter.hasNext()) { Wind wind = windIter.next(); - if (wind != null) { + if(wind != null) { WindDTO windDTO = createWindDTO(wind, windTrack); windTrackInfoDTO.windFixes.add(windDTO); } @@ -1260,11 +1219,13 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S windDTO.trueWindSpeedInKnots = wind.getKnots(); windDTO.trueWindSpeedInMetersPerSecond = wind.getMetersPerSecond(); if (wind.getPosition() != null) { - windDTO.position = new PositionDTO(wind.getPosition().getLatDeg(), wind.getPosition().getLngDeg()); + windDTO.position = new PositionDTO(wind.getPosition().getLatDeg(), wind.getPosition() + .getLngDeg()); } if (wind.getTimePoint() != null) { windDTO.measureTimepoint = wind.getTimePoint().asMillis(); - Wind estimatedWind = windTrack.getAveragedWind(wind.getPosition(), wind.getTimePoint()); + Wind estimatedWind = windTrack + .getAveragedWind(wind.getPosition(), wind.getTimePoint()); if (estimatedWind != null) { windDTO.dampenedTrueWindBearingDeg = estimatedWind.getBearing().getDegrees(); windDTO.dampenedTrueWindFromDeg = estimatedWind.getBearing().reverse().getDegrees(); @@ -1290,7 +1251,8 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S windDTO.dampenedTrueWindSpeedInKnots = wind.getKnots(); windDTO.dampenedTrueWindSpeedInMetersPerSecond = wind.getMetersPerSecond(); if (wind.getPosition() != null) { - windDTO.position = new PositionDTO(wind.getPosition().getLatDeg(), wind.getPosition().getLngDeg()); + windDTO.position = new PositionDTO(wind.getPosition().getLatDeg(), wind.getPosition() + .getLngDeg()); } if (wind.getTimePoint() != null) { windDTO.measureTimepoint = wind.getTimePoint().asMillis(); @@ -1299,8 +1261,8 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } /** - * Fetches the {@link WindTrack#getAveragedWind(Position, TimePoint) average wind} from all wind tracks or those - * identified by windSourceTypeNames + * Fetches the {@link WindTrack#getAveragedWind(Position, TimePoint) average wind} from all wind tracks or those identified + * by windSourceTypeNames */ @Override public WindInfoForRaceDTO getAveragedWindInfo(RegattaAndRaceIdentifier raceIdentifier, Date from, long millisecondsStepWidth, @@ -1335,11 +1297,9 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S Double minWindConfidence = 2.0; Double maxWindConfidence = -1.0; for (int i = 0; i < numberOfFixes; i++) { - WindWithConfidence> averagedWindWithConfidence = windTrack - .getAveragedWindWithConfidence(position, timePoint); + WindWithConfidence> averagedWindWithConfidence = windTrack.getAveragedWindWithConfidence(position, timePoint); if (averagedWindWithConfidence != null) { - WindDTO windDTO = createWindDTOFromAlreadyAveraged(averagedWindWithConfidence.getObject(), - timePoint); + WindDTO windDTO = createWindDTOFromAlreadyAveraged(averagedWindWithConfidence.getObject(), timePoint); double confidence = averagedWindWithConfidence.getConfidence(); windDTO.confidence = confidence; windTrackInfoDTO.windFixes.add(windDTO); @@ -1352,8 +1312,8 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } timePoint = new MillisecondsTimePoint(timePoint.asMillis() + millisecondsStepWidth); } - windTrackInfoDTO.minWindConfidence = minWindConfidence; - windTrackInfoDTO.maxWindConfidence = maxWindConfidence; + windTrackInfoDTO.minWindConfidence = minWindConfidence; + windTrackInfoDTO.maxWindConfidence = maxWindConfidence; } } } @@ -1370,14 +1330,13 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S * trackedRace.getTimePointOfNewestEvent()}. */ @Override - public WindInfoForRaceDTO getAveragedWindInfo(RegattaAndRaceIdentifier raceIdentifier, Date from, - long millisecondsStepWidth, int numberOfFixes, Collection windSourceTypeNames, - boolean onlyUpToNewestEvent, boolean includeCombinedWindForAllLegMiddles) throws NoWindException { + public WindInfoForRaceDTO getAveragedWindInfo(RegattaAndRaceIdentifier raceIdentifier, Date from, long millisecondsStepWidth, + int numberOfFixes, Collection windSourceTypeNames, boolean onlyUpToNewestEvent, boolean includeCombinedWindForAllLegMiddles) + throws NoWindException { assert from != null; TrackedRace trackedRace = getExistingTrackedRace(raceIdentifier); - WindInfoForRaceDTO result = getAveragedWindInfo(new MillisecondsTimePoint(from), millisecondsStepWidth, - numberOfFixes, windSourceTypeNames, trackedRace, /* onlyUpToNewestEvent */true, - includeCombinedWindForAllLegMiddles); + WindInfoForRaceDTO result = getAveragedWindInfo(new MillisecondsTimePoint(from), millisecondsStepWidth, numberOfFixes, + windSourceTypeNames, trackedRace, /* onlyUpToNewestEvent */ true, includeCombinedWindForAllLegMiddles); return result; } @@ -1428,12 +1387,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S for (final TrackedLeg trackedLeg : trackedRace.getTrackedLegs()) { WindTrackInfoDTO windTrackInfoForLegMiddle = createWindTrackInfoDTO(from, millisecondsStepWidth, numberOfFixes, trackedRace, onlyUpToNewestEvent, newestEvent, combinedWindSource, - new PositionAtTimeProvider() { - @Override - public Position getPosition(TimePoint at) { - return trackedLeg.getMiddleOfLeg(at); - } - }); + new PositionAtTimeProvider() { @Override public Position getPosition(TimePoint at) { return trackedLeg.getMiddleOfLeg(at); }}); result.addWindOnLegMiddle(zeroBasedLegNumber, windTrackInfoForLegMiddle); zeroBasedLegNumber++; } @@ -1445,7 +1399,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S private interface PositionAtTimeProvider { Position getPosition(TimePoint at); } - + private WindTrackInfoDTO createWindTrackInfoDTO(TimePoint from, long millisecondsStepWidth, int numberOfFixes, TrackedRace trackedRace, boolean onlyUpToNewestEvent, TimePoint newestEvent, WindSource windSource, PositionAtTimeProvider positionProvider) { @@ -1456,10 +1410,10 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S TimePoint timePoint = from; Double minWindConfidence = 2.0; Double maxWindConfidence = -1.0; - for (int i = 0; i < numberOfFixes - && (!onlyUpToNewestEvent || (newestEvent != null && timePoint.before(newestEvent))); i++) { - WindWithConfidence> averagedWindWithConfidence = windTrack - .getAveragedWindWithConfidence(positionProvider.getPosition(timePoint), timePoint); + for (int i = 0; i < numberOfFixes && (!onlyUpToNewestEvent || + (newestEvent != null && timePoint.before(newestEvent))); i++) { + WindWithConfidence> averagedWindWithConfidence = + windTrack.getAveragedWindWithConfidence(positionProvider.getPosition(timePoint), timePoint); if (averagedWindWithConfidence != null) { if (logger.getLevel() != null && logger.getLevel().equals(Level.FINEST)) { logger.finest("Found averaged wind: " + averagedWindWithConfidence); @@ -1476,13 +1430,12 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } } else { if (logger.getLevel() != null && logger.getLevel().equals(Level.FINEST)) { - logger.finest("Did NOT find any averaged wind for timepoint " + timePoint + " and tracked race " - + trackedRace.getRaceIdentifier().getRaceName()); + logger.finest("Did NOT find any averaged wind for timepoint " + timePoint + " and tracked race " + trackedRace.getRaceIdentifier().getRaceName()); } } timePoint = new MillisecondsTimePoint(timePoint.asMillis() + millisecondsStepWidth); } - windTrackInfoDTO.minWindConfidence = minWindConfidence; + windTrackInfoDTO.minWindConfidence = minWindConfidence; windTrackInfoDTO.maxWindConfidence = maxWindConfidence; return windTrackInfoDTO; } @@ -1506,14 +1459,12 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S WindInfoForRaceDTO result = null; if (trackedRace != null) { TimePoint fromTimePoint = from == null ? trackedRace.getStartOfTracking() : new MillisecondsTimePoint(from); - TimePoint toTimePoint = to == null ? trackedRace.getEndOfRace() == null ? MillisecondsTimePoint.now() - .minus(trackedRace.getDelayToLiveInMillis()) : trackedRace.getEndOfRace() - : new MillisecondsTimePoint(to); + TimePoint toTimePoint = to == null ? trackedRace.getEndOfRace() == null ? + MillisecondsTimePoint.now().minus(trackedRace.getDelayToLiveInMillis()) : trackedRace.getEndOfRace() : new MillisecondsTimePoint(to); if (fromTimePoint != null && toTimePoint != null) { - int numberOfFixes = (int) ((toTimePoint.asMillis() - fromTimePoint.asMillis()) / resolutionInMilliseconds); + int numberOfFixes = (int) ((toTimePoint.asMillis() - fromTimePoint.asMillis())/resolutionInMilliseconds); result = getAveragedWindInfo(fromTimePoint, resolutionInMilliseconds, numberOfFixes, - windSourceTypeNames, trackedRace, onlyUpToNewestEvent, /* includeCombinedWindForAllLegMiddles */ - false); + windSourceTypeNames, trackedRace, onlyUpToNewestEvent, /* includeCombinedWindForAllLegMiddles */ false); } } return result; @@ -1686,7 +1637,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } Wind wind = new WindImpl(p, at, speedWithBearing); Iterable webWindSources = trackedRace.getWindSources(WindSourceType.WEB); - if (Util.size(webWindSources) == 0) { + if(Util.size(webWindSources) == 0) { // create a new WEB wind source if not available trackedRace.recordWind(wind, new WindSourceImpl(WindSourceType.WEB)); } else { @@ -1727,7 +1678,8 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S */ private Map> getBoatPositions(RegattaAndRaceIdentifier raceIdentifier, Map fromPerCompetitorIdAsString, Map toPerCompetitorIdAsString, - boolean extrapolate) throws NoWindException { + boolean extrapolate) + throws NoWindException { Map, LegType> legTypeCache = new HashMap<>(); Map> result = new HashMap>(); TrackedRace trackedRace = getExistingTrackedRace(raceIdentifier); @@ -1738,10 +1690,8 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S List fixesForCompetitor = new ArrayList(); result.put(competitorDTO, fixesForCompetitor); GPSFixTrack track = trackedRace.getTrack(competitor); - TimePoint fromTimePoint = new MillisecondsTimePoint(fromPerCompetitorIdAsString.get(competitorDTO - .getIdAsString())); - TimePoint toTimePointExcluding = new MillisecondsTimePoint( - toPerCompetitorIdAsString.get(competitorDTO.getIdAsString())); + TimePoint fromTimePoint = new MillisecondsTimePoint(fromPerCompetitorIdAsString.get(competitorDTO.getIdAsString())); + TimePoint toTimePointExcluding = new MillisecondsTimePoint(toPerCompetitorIdAsString.get(competitorDTO.getIdAsString())); // copy the fixes into a list while holding the monitor; then release the monitor to avoid deadlocks // during wind estimations required for tack determination List fixes = new ArrayList(); @@ -1752,7 +1702,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S GPSFixMoving fix = fixIter.next(); if (fix.getTimePoint().before(toTimePointExcluding)) { if (logger.isLoggable(Level.FINEST)) { - logger.finest("" + competitor.getName() + ": " + fix); + logger.finest(""+competitor.getName()+": " + fix); } fixes.add(fix); } else { @@ -1763,16 +1713,14 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S track.unlockAfterRead(); } if (fixes.isEmpty()) { - // then there was no (smoothened) fix between fromTimePoint and toTimePointExcluding; - // estimate... - TimePoint middle = new MillisecondsTimePoint( - (toTimePointExcluding.asMillis() + fromTimePoint.asMillis()) / 2); + // then there was no (smoothened) fix between fromTimePoint and toTimePointExcluding; estimate... + TimePoint middle = new MillisecondsTimePoint((toTimePointExcluding.asMillis()+fromTimePoint.asMillis())/2); Position estimatedPosition = track.getEstimatedPosition(middle, extrapolate); SpeedWithBearing estimatedSpeed = track.getEstimatedSpeed(middle); if (estimatedPosition != null && estimatedSpeed != null) { GPSFixMoving estimatedFix = new GPSFixMovingImpl(estimatedPosition, middle, estimatedSpeed); if (logger.getLevel() != null && logger.getLevel().equals(Level.FINEST)) { - logger.finest("" + competitor.getName() + ": " + estimatedFix + " (estimated)"); + logger.finest(""+competitor.getName()+": " + estimatedFix+" (estimated)"); } fixes.add(estimatedFix); } @@ -1780,13 +1728,11 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S Iterator fixIter = fixes.iterator(); if (fixIter.hasNext()) { GPSFixMoving fix = fixIter.next(); - while (fix != null - && (fix.getTimePoint().before(toTimePointExcluding) || (fix.getTimePoint().equals( - toTimePointExcluding) && toTimePointExcluding.equals(fromTimePoint)))) { + while (fix != null && (fix.getTimePoint().before(toTimePointExcluding) || + (fix.getTimePoint().equals(toTimePointExcluding) && toTimePointExcluding.equals(fromTimePoint)))) { Wind wind = trackedRace.getWind(fix.getPosition(), fix.getTimePoint()); final SpeedWithBearing estimatedSpeed = track.getEstimatedSpeed(fix.getTimePoint()); - Tack tack = wind == null ? null : trackedRace.getTack(estimatedSpeed, wind, - fix.getTimePoint()); + Tack tack = wind == null? null : trackedRace.getTack(estimatedSpeed, wind, fix.getTimePoint()); TrackedLegOfCompetitor trackedLegOfCompetitor = trackedRace.getTrackedLeg(competitor, fix.getTimePoint()); LegType legType; @@ -1804,8 +1750,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } else { legType = null; } - WindDTO windDTO = wind == null ? null : createWindDTOFromAlreadyAveraged(wind, - toTimePointExcluding); + WindDTO windDTO = wind == null ? null : createWindDTOFromAlreadyAveraged(wind, toTimePointExcluding); GPSFixDTO fixDTO = createGPSFixDTO(fix, estimatedSpeed, windDTO, tack, legType, /* extrapolate */ false); fixesForCompetitor.add(fixDTO); @@ -1817,8 +1762,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S Position position = track.getEstimatedPosition(toTimePointExcluding, extrapolate); Wind wind2 = trackedRace.getWind(position, toTimePointExcluding); SpeedWithBearing estimatedSpeed2 = track.getEstimatedSpeed(toTimePointExcluding); - Tack tack2 = wind2 == null ? null : trackedRace.getTack(estimatedSpeed2, wind2, - toTimePointExcluding); + Tack tack2 = wind2 == null ? null : trackedRace.getTack(estimatedSpeed2, wind2, toTimePointExcluding); LegType legType2; if (trackedLegOfCompetitor != null && trackedLegOfCompetitor.getLeg() != null) { TimePoint quantifiedTimePoint = quantifyTimePointWithResolution( @@ -1829,19 +1773,19 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S legType2 = legTypeCache.get(cacheKey); if (legType2 == null) { legType2 = trackedRace.getTrackedLeg(trackedLegOfCompetitor.getLeg()) - .getLegType(fix.getTimePoint()); + .getLegType( + fix.getTimePoint()); legTypeCache.put(cacheKey, legType2); } } else { legType2 = null; } - WindDTO windDTO2 = wind2 == null ? null : createWindDTOFromAlreadyAveraged(wind2, - toTimePointExcluding); - GPSFixDTO extrapolated = new GPSFixDTO(toPerCompetitorIdAsString.get(competitorDTO - .getIdAsString()), position == null ? null : new PositionDTO( - position.getLatDeg(), position.getLngDeg()), estimatedSpeed2 == null ? null - : createSpeedWithBearingDTO(estimatedSpeed2), windDTO2, tack2, legType2, /* extrapolated */ - true); + WindDTO windDTO2 = wind2 == null ? null : createWindDTOFromAlreadyAveraged(wind2, toTimePointExcluding); + GPSFixDTO extrapolated = new GPSFixDTO( + toPerCompetitorIdAsString.get(competitorDTO.getIdAsString()), + position==null?null:new PositionDTO(position.getLatDeg(), position.getLngDeg()), + estimatedSpeed2==null?null:createSpeedWithBearingDTO(estimatedSpeed2), windDTO2, + tack2, legType2, /* extrapolated */ true); fixesForCompetitor.add(extrapolated); } fix = null; @@ -1859,14 +1803,14 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } private SpeedWithBearingDTO createSpeedWithBearingDTO(SpeedWithBearing speedWithBearing) { - return new SpeedWithBearingDTO(speedWithBearing.getKnots(), speedWithBearing.getBearing().getDegrees()); + return new SpeedWithBearingDTO(speedWithBearing.getKnots(), speedWithBearing + .getBearing().getDegrees()); } - private GPSFixDTO createGPSFixDTO(GPSFix fix, SpeedWithBearing speedWithBearing, WindDTO windDTO, Tack tack, - LegType legType, boolean extrapolated) { - return new GPSFixDTO(fix.getTimePoint().asDate(), fix.getPosition() == null ? null : new PositionDTO(fix - .getPosition().getLatDeg(), fix.getPosition().getLngDeg()), speedWithBearing == null ? null - : createSpeedWithBearingDTO(speedWithBearing), windDTO, tack, legType, extrapolated); + private GPSFixDTO createGPSFixDTO(GPSFix fix, SpeedWithBearing speedWithBearing, WindDTO windDTO, Tack tack, LegType legType, boolean extrapolated) { + return new GPSFixDTO(fix.getTimePoint().asDate(), fix.getPosition()==null?null:new PositionDTO(fix + .getPosition().getLatDeg(), fix.getPosition().getLngDeg()), + speedWithBearing==null?null:createSpeedWithBearingDTO(speedWithBearing), windDTO, tack, legType, extrapolated); } @Override @@ -1881,19 +1825,14 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S List markPassingTimesDTOs = new ArrayList(); raceTimesInfo.setMarkPassingTimes(markPassingTimesDTOs); - raceTimesInfo.startOfRace = trackedRace.getStartOfRace() == null ? null : trackedRace.getStartOfRace() - .asDate(); - raceTimesInfo.startOfTracking = trackedRace.getStartOfTracking() == null ? null : trackedRace - .getStartOfTracking().asDate(); - raceTimesInfo.newestTrackingEvent = trackedRace.getTimePointOfNewestEvent() == null ? null : trackedRace - .getTimePointOfNewestEvent().asDate(); - raceTimesInfo.endOfTracking = trackedRace.getEndOfTracking() == null ? null : trackedRace - .getEndOfTracking().asDate(); + raceTimesInfo.startOfRace = trackedRace.getStartOfRace() == null ? null : trackedRace.getStartOfRace().asDate(); + raceTimesInfo.startOfTracking = trackedRace.getStartOfTracking() == null ? null : trackedRace.getStartOfTracking().asDate(); + raceTimesInfo.newestTrackingEvent = trackedRace.getTimePointOfNewestEvent() == null ? null : trackedRace.getTimePointOfNewestEvent().asDate(); + raceTimesInfo.endOfTracking = trackedRace.getEndOfTracking() == null ? null : trackedRace.getEndOfTracking().asDate(); raceTimesInfo.endOfRace = trackedRace.getEndOfRace() == null ? null : trackedRace.getEndOfRace().asDate(); raceTimesInfo.delayToLiveInMs = trackedRace.getDelayToLiveInMillis(); - Iterable>> markPassingsTimes = trackedRace - .getMarkPassingsTimes(); + Iterable>> markPassingsTimes = trackedRace.getMarkPassingsTimes(); synchronized (markPassingsTimes) { int numberOfWaypoints = Util.size(markPassingsTimes); int wayPointNumber = 1; @@ -1936,7 +1875,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } finally { trackedRace.getRace().getCourse().unlockAfterRead(); } - } + } if (raceTimesInfo != null) { raceTimesInfo.currentServerTime = new Date(); } @@ -1979,11 +1918,10 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } return result; } - + @Override public CoursePositionsDTO getCoursePositions(RegattaAndRaceIdentifier raceIdentifier, Date date) { CoursePositionsDTO result = new CoursePositionsDTO(); - TrackedRace trackedRace = getExistingTrackedRace(raceIdentifier); if (trackedRace != null) { final TimePoint dateAsTimePoint; @@ -2054,7 +1992,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } return result; } - + @Override public RaceCourseDTO getRaceCourse(RegattaAndRaceIdentifier raceIdentifier, Date date) { List waypointDTOs = new ArrayList(); @@ -2081,41 +2019,35 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } return new RaceCourseDTO(waypointDTOs, allMarks); } - - private ControlPointDTO convertToControlPointDTO(ControlPoint controlPoint, TrackedRace trackedRace, - TimePoint timePoint) { + + private ControlPointDTO convertToControlPointDTO(ControlPoint controlPoint, TrackedRace trackedRace, TimePoint timePoint) { ControlPointDTO result; if (controlPoint instanceof ControlPointWithTwoMarks) { final Mark left = ((ControlPointWithTwoMarks) controlPoint).getLeft(); - final Position leftPos = trackedRace.getOrCreateTrack(left).getEstimatedPosition(timePoint, /* extrapolate */ - false); + final Position leftPos = trackedRace.getOrCreateTrack(left).getEstimatedPosition(timePoint, /* extrapolate */ false); final Mark right = ((ControlPointWithTwoMarks) controlPoint).getRight(); - final Position rightPos = trackedRace.getOrCreateTrack(right).getEstimatedPosition(timePoint, /* extrapolate */ - false); - result = new GateDTO(controlPoint.getId().toString(), controlPoint.getName(), convertToMarkDTO(left, - leftPos), convertToMarkDTO(right, rightPos)); + final Position rightPos = trackedRace.getOrCreateTrack(right).getEstimatedPosition(timePoint, /* extrapolate */ false); + result = new GateDTO(controlPoint.getId().toString(), controlPoint.getName(), convertToMarkDTO(left, leftPos), convertToMarkDTO(right, rightPos)); } else { - final Position posOfFirst = trackedRace.getOrCreateTrack(controlPoint.getMarks().iterator().next()) - .getEstimatedPosition(timePoint, /* extrapolate */false); - result = new MarkDTO(controlPoint.getId().toString(), controlPoint.getName(), posOfFirst == null ? -1 - : posOfFirst.getLatDeg(), posOfFirst == null ? -1 : posOfFirst.getLngDeg()); + final Position posOfFirst = trackedRace.getOrCreateTrack(controlPoint.getMarks().iterator().next()). + getEstimatedPosition(timePoint, /* extrapolate */ false); + result = new MarkDTO(controlPoint.getId().toString(), controlPoint.getName(), posOfFirst == null ? -1 : posOfFirst.getLatDeg(), posOfFirst == null ? -1 : posOfFirst.getLngDeg()); } return result; } - + private ControlPointDTO convertToControlPointDTO(ControlPoint controlPoint) { ControlPointDTO result; if (controlPoint instanceof ControlPointWithTwoMarks) { final Mark left = ((ControlPointWithTwoMarks) controlPoint).getLeft(); final Mark right = ((ControlPointWithTwoMarks) controlPoint).getRight(); - result = new GateDTO(controlPoint.getId().toString(), controlPoint.getName(), convertToMarkDTO(left, null), - convertToMarkDTO(right, null)); + result = new GateDTO(controlPoint.getId().toString(), controlPoint.getName(), convertToMarkDTO(left, null), convertToMarkDTO(right, null)); } else { result = new MarkDTO(controlPoint.getId().toString(), controlPoint.getName()); } return result; } - + private ControlPoint getOrCreateControlPoint(ControlPointDTO dto) { String id = dto.getIdAsString(); if (id == null) { @@ -2128,15 +2060,14 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S return baseDomainFactory.getOrCreateControlPointWithTwoMarks(id, gateDTO.getName(), left, right); } else { MarkDTO markDTO = (MarkDTO) dto; - return baseDomainFactory.getOrCreateMark(id, dto.getName(), markDTO.type, markDTO.color, markDTO.shape, - markDTO.pattern); + return baseDomainFactory.getOrCreateMark(id, dto.getName(), markDTO.type, markDTO.color, markDTO.shape, markDTO.pattern); } } /** - * Creates new ControlPoints, if nThe resulting list of control points is then passed to - * {@link Course#update(List, com.sap.sailing.domain.base.DomainFactory)} for the course of the race identified by - * raceIdentifier. + * Creates new ControlPoints, if nThe resulting + * list of control points is then passed to {@link Course#update(List, com.sap.sailing.domain.base.DomainFactory)} for + * the course of the race identified by raceIdentifier. */ @Override public void updateRaceCourse(RegattaAndRaceIdentifier raceIdentifier, @@ -2156,14 +2087,14 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } } - private List getMarkPositionDTOs(TimePoint timePoint, TrackedRace trackedRace, Waypoint waypoint) { + private List getMarkPositionDTOs( + TimePoint timePoint, TrackedRace trackedRace, Waypoint waypoint) { List markPositionDTOs = new ArrayList(); for (Mark startMark : waypoint.getMarks()) { - final Position estimatedMarkPosition = trackedRace.getOrCreateTrack(startMark).getEstimatedPosition( - timePoint, /* extrapolate */false); + final Position estimatedMarkPosition = trackedRace.getOrCreateTrack(startMark) + .getEstimatedPosition(timePoint, /* extrapolate */false); if (estimatedMarkPosition != null) { - markPositionDTOs.add(new PositionDTO(estimatedMarkPosition.getLatDeg(), estimatedMarkPosition - .getLngDeg())); + markPositionDTOs.add(new PositionDTO(estimatedMarkPosition.getLatDeg(), estimatedMarkPosition.getLngDeg())); } } return markPositionDTOs; @@ -2177,7 +2108,6 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S public List computeQuickRanks(RegattaAndRaceIdentifier raceIdentifier, TimePoint timePoint) throws NoWindException { List result = new ArrayList(); - TrackedRace trackedRace = getExistingTrackedRace(raceIdentifier); if (trackedRace != null) { final TimePoint actualTimePoint; @@ -2218,8 +2148,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } @Override - public void setWindSourcesToExclude(RegattaAndRaceIdentifier raceIdentifier, - Iterable windSourcesToExclude) { + public void setWindSourcesToExclude(RegattaAndRaceIdentifier raceIdentifier, Iterable windSourcesToExclude) { getService().apply(new SetWindSourcesToExclude(raceIdentifier, windSourcesToExclude)); } @@ -2238,7 +2167,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S Map windTrackInfoDTOs = new HashMap(); result.windTrackInfoByWindSource = windTrackInfoDTOs; - for (WindSource windSource : trackedRace.getWindSources()) { + for(WindSource windSource: trackedRace.getWindSources()) { windTrackInfoDTOs.put(windSource, new WindTrackInfoDTO()); } windTrackInfoDTOs.put(new WindSourceImpl(WindSourceType.COMBINED), new WindTrackInfoDTO()); @@ -2290,7 +2219,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S private ReplicationService getReplicationService() { return replicationServiceTracker.getService(); } - + @Override public List getLeaderboardNames() { return new ArrayList(getService().getLeaderboards().keySet()); @@ -2300,46 +2229,38 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S public com.sap.sse.common.Util.Pair checkLeaderboardName(String leaderboardName) { com.sap.sse.common.Util.Pair result = null; - if (getService().getLeaderboards().containsKey(leaderboardName)) { + if(getService().getLeaderboards().containsKey(leaderboardName)) { Leaderboard leaderboard = getService().getLeaderboards().get(leaderboardName); boolean isMetaLeaderboard = leaderboard instanceof MetaLeaderboard ? true : false; boolean isRegattaLeaderboard = leaderboard instanceof RegattaLeaderboard ? true : false; LeaderboardType type; - if (isMetaLeaderboard) { - type = isRegattaLeaderboard ? LeaderboardType.RegattaMetaLeaderboard - : LeaderboardType.FlexibleMetaLeaderboard; + if(isMetaLeaderboard) { + type = isRegattaLeaderboard ? LeaderboardType.RegattaMetaLeaderboard : LeaderboardType.FlexibleMetaLeaderboard; } else { type = isRegattaLeaderboard ? LeaderboardType.RegattaLeaderboard : LeaderboardType.FlexibleLeaderboard; } result = new com.sap.sse.common.Util.Pair(leaderboard.getName(), type); } - + return result; } @Override - public StrippedLeaderboardDTO createFlexibleLeaderboard(String leaderboardName, String leaderboardDisplayName, - int[] discardThresholds, ScoringSchemeType scoringSchemeType, UUID courseAreaId) { - return createStrippedLeaderboardDTO( - getService().apply( - new CreateFlexibleLeaderboard(leaderboardName, leaderboardDisplayName, discardThresholds, - baseDomainFactory.createScoringScheme(scoringSchemeType), courseAreaId)), false, false); + public StrippedLeaderboardDTO createFlexibleLeaderboard(String leaderboardName, String leaderboardDisplayName, int[] discardThresholds, ScoringSchemeType scoringSchemeType, + UUID courseAreaId) { + return createStrippedLeaderboardDTO(getService().apply(new CreateFlexibleLeaderboard(leaderboardName, leaderboardDisplayName, discardThresholds, + baseDomainFactory.createScoringScheme(scoringSchemeType), courseAreaId)), false, false); } - public StrippedLeaderboardDTO createRegattaLeaderboard(RegattaIdentifier regattaIdentifier, - String leaderboardDisplayName, int[] discardThresholds) { - return createStrippedLeaderboardDTO( - getService().apply( - new CreateRegattaLeaderboard(regattaIdentifier, leaderboardDisplayName, discardThresholds)), - false, false); + public StrippedLeaderboardDTO createRegattaLeaderboard(RegattaIdentifier regattaIdentifier, String leaderboardDisplayName, int[] discardThresholds) { + return createStrippedLeaderboardDTO(getService().apply(new CreateRegattaLeaderboard(regattaIdentifier, leaderboardDisplayName, discardThresholds)), false, false); } @Override public List getLeaderboards() { Map leaderboards = getService().getLeaderboards(); List results = new ArrayList(); - - for (Leaderboard leaderboard : leaderboards.values()) { + for(Leaderboard leaderboard: leaderboards.values()) { StrippedLeaderboardDTO dao = createStrippedLeaderboardDTO(leaderboard, false, false); results.add(dao); } @@ -2376,8 +2297,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S List results = new ArrayList(); if (regatta != null && regatta.races != null) { for (RaceDTO race : regatta.races) { - List leaderboard = getLeaderboardsByRaceAndRegatta(race, - regatta.getRegattaIdentifier()); + List leaderboard = getLeaderboardsByRaceAndRegatta(race, regatta.getRegattaIdentifier()); if (leaderboard != null && !leaderboard.isEmpty()) { results.addAll(leaderboard); } @@ -2391,13 +2311,11 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } @Override - public List getLeaderboardsByRaceAndRegatta(RaceDTO race, - RegattaIdentifier regattaIdentifier) { + public List getLeaderboardsByRaceAndRegatta(RaceDTO race, RegattaIdentifier regattaIdentifier) { List results = new ArrayList(); Map leaderboards = getService().getLeaderboards(); for (Leaderboard leaderboard : leaderboards.values()) { - if (leaderboard instanceof RegattaLeaderboard - && ((RegattaLeaderboard) leaderboard).getRegatta().getRegattaIdentifier().equals(regattaIdentifier)) { + if (leaderboard instanceof RegattaLeaderboard && ((RegattaLeaderboard) leaderboard).getRegatta().getRegattaIdentifier().equals(regattaIdentifier)) { Iterable races = leaderboard.getRaceColumns(); for (RaceColumn raceInLeaderboard : races) { for (Fleet fleet : raceInLeaderboard.getFleets()) { @@ -2417,16 +2335,14 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } /** - * Creates a {@link LeaderboardDTO} for leaderboard and fills in the name, race master data in the form - * of {@link RaceColumnDTO}s, whether or not there are {@link LeaderboardDTO#hasCarriedPoints carried points} and - * the {@link LeaderboardDTO#discardThresholds discarding thresholds} for the leaderboard. No data about the points + * Creates a {@link LeaderboardDTO} for leaderboard and fills in the name, race master data + * in the form of {@link RaceColumnDTO}s, whether or not there are {@link LeaderboardDTO#hasCarriedPoints carried points} + * and the {@link LeaderboardDTO#discardThresholds discarding thresholds} for the leaderboard. No data about the points * is filled into the result object. No data about the competitor display names is filled in; instead, an empty map * is used for {@link LeaderboardDTO#competitorDisplayNames}.
- * If withGeoLocationData is true the geographical location of all races will be - * determined. + * If withGeoLocationData is true the geographical location of all races will be determined. */ - private StrippedLeaderboardDTO createStrippedLeaderboardDTO(Leaderboard leaderboard, boolean withGeoLocationData, - boolean withStatisticalData) { + private StrippedLeaderboardDTO createStrippedLeaderboardDTO(Leaderboard leaderboard, boolean withGeoLocationData, boolean withStatisticalData) { StrippedLeaderboardDTO leaderboardDTO = new StrippedLeaderboardDTO(); TimePoint startOfLatestRace = null; Long delayToLiveInMillisForLatestRace = null; @@ -2437,13 +2353,11 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S if (leaderboard instanceof RegattaLeaderboard) { RegattaLeaderboard regattaLeaderboard = (RegattaLeaderboard) leaderboard; Regatta regatta = regattaLeaderboard.getRegatta(); - leaderboardDTO.regattaName = regatta.getName(); - leaderboardDTO.type = leaderboard instanceof MetaLeaderboard ? LeaderboardType.RegattaMetaLeaderboard - : LeaderboardType.RegattaLeaderboard; + leaderboardDTO.regattaName = regatta.getName(); + leaderboardDTO.type = leaderboard instanceof MetaLeaderboard ? LeaderboardType.RegattaMetaLeaderboard : LeaderboardType.RegattaLeaderboard; leaderboardDTO.scoringScheme = regatta.getScoringScheme().getType(); } else { - leaderboardDTO.type = leaderboard instanceof MetaLeaderboard ? LeaderboardType.FlexibleMetaLeaderboard - : LeaderboardType.FlexibleLeaderboard; + leaderboardDTO.type = leaderboard instanceof MetaLeaderboard ? LeaderboardType.FlexibleMetaLeaderboard : LeaderboardType.FlexibleLeaderboard; leaderboardDTO.scoringScheme = leaderboard.getScoringScheme().getType(); } if (leaderboard.getDefaultCourseArea() != null) { @@ -2453,8 +2367,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S leaderboardDTO.setDelayToLiveInMillisForLatestRace(delayToLiveInMillisForLatestRace); leaderboardDTO.hasCarriedPoints = leaderboard.hasCarriedPoints(); if (leaderboard.getResultDiscardingRule() instanceof ThresholdBasedResultDiscardingRule) { - leaderboardDTO.discardThresholds = ((ThresholdBasedResultDiscardingRule) leaderboard - .getResultDiscardingRule()).getDiscardIndexResultsStartingWithHowManyRaces(); + leaderboardDTO.discardThresholds = ((ThresholdBasedResultDiscardingRule) leaderboard.getResultDiscardingRule()).getDiscardIndexResultsStartingWithHowManyRaces(); } else { leaderboardDTO.discardThresholds = null; } @@ -2464,36 +2377,26 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S RegattaAndRaceIdentifier raceIdentifier = null; TrackedRace trackedRace = raceColumn.getTrackedRace(fleet); if (trackedRace != null) { - if (startOfLatestRace == null - || (trackedRace.getStartOfRace() != null && trackedRace.getStartOfRace().compareTo( - startOfLatestRace) > 0)) { + if (startOfLatestRace == null || (trackedRace.getStartOfRace() != null && trackedRace.getStartOfRace().compareTo(startOfLatestRace) > 0)) { delayToLiveInMillisForLatestRace = trackedRace.getDelayToLiveInMillis(); } - - raceIdentifier = new RegattaNameAndRaceName(trackedRace.getTrackedRegatta().getRegatta().getName(), - trackedRace.getRace().getName()); - raceDTO = baseDomainFactory.createRaceDTO(getService(), withGeoLocationData, raceIdentifier, - trackedRace); - if (withStatisticalData) { + raceIdentifier = new RegattaNameAndRaceName(trackedRace.getTrackedRegatta().getRegatta().getName(), trackedRace.getRace().getName()); + raceDTO = baseDomainFactory.createRaceDTO(getService(), withGeoLocationData, raceIdentifier, trackedRace); + if(withStatisticalData) { Collection mediaTracksForRace = getService().getMediaTracksForRace(raceIdentifier); - raceDTO.trackedRaceStatistics = baseDomainFactory.createTrackedRaceStatisticsDTO(trackedRace, - leaderboard, raceColumn, fleet, mediaTracksForRace); + raceDTO.trackedRaceStatistics = baseDomainFactory.createTrackedRaceStatisticsDTO(trackedRace, leaderboard, raceColumn, fleet, mediaTracksForRace); } - } + } final FleetDTO fleetDTO = baseDomainFactory.convertToFleetDTO(fleet); - RaceColumnDTO raceColumnDTO = leaderboardDTO.addRace(raceColumn.getName(), raceColumn - .getExplicitFactor(), raceColumn.getFactor(), - raceColumn instanceof RaceColumnInSeries ? ((RaceColumnInSeries) raceColumn).getRegatta() - .getName() : null, - raceColumn instanceof RaceColumnInSeries ? ((RaceColumnInSeries) raceColumn).getSeries() - .getName() : null, fleetDTO, raceColumn.isMedalRace(), raceIdentifier, raceDTO); + RaceColumnDTO raceColumnDTO = leaderboardDTO.addRace(raceColumn.getName(), raceColumn.getExplicitFactor(), raceColumn.getFactor(), + raceColumn instanceof RaceColumnInSeries ? ((RaceColumnInSeries) raceColumn).getRegatta().getName() : null, + raceColumn instanceof RaceColumnInSeries ? ((RaceColumnInSeries) raceColumn).getSeries().getName() : null, + fleetDTO, raceColumn.isMedalRace(), raceIdentifier, raceDTO); RaceLog raceLog = raceColumn.getRaceLog(fleet); - RaceLogTrackingState raceLogTrackingState = raceLog == null ? RaceLogTrackingState.NOT_A_RACELOG_TRACKED_RACE - : new RaceLogTrackingStateAnalyzer(raceLog).analyze(); - boolean raceLogTrackerExists = raceLog == null ? false : getService().getRaceTrackerById( - raceLog.getId()) != null; - boolean competitorRegistrationsExist = raceLog == null ? false : !new RegisteredCompetitorsAnalyzer( - raceLog).analyze().isEmpty(); + RaceLogTrackingState raceLogTrackingState = raceLog == null ? RaceLogTrackingState.NOT_A_RACELOG_TRACKED_RACE : + new RaceLogTrackingStateAnalyzer(raceLog).analyze(); + boolean raceLogTrackerExists = raceLog == null ? false : getService().getRaceTrackerById(raceLog.getId()) != null; + boolean competitorRegistrationsExist = raceLog == null ? false : !new RegisteredCompetitorsAnalyzer(raceLog).analyze().isEmpty(); RaceLogTrackingInfoDTO raceLogTrackingInfo = new RaceLogTrackingInfoDTO(raceLogTrackerExists, competitorRegistrationsExist, raceLogTrackingState); raceColumnDTO.setRaceLogTrackingInfo(fleetDTO, raceLogTrackingInfo); @@ -2503,14 +2406,11 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } @Override - public StrippedLeaderboardDTO updateLeaderboard(String leaderboardName, String newLeaderboardName, - String newLeaderboardDisplayName, int[] newDiscardingThresholds, UUID newCourseAreaId) { - Leaderboard updatedLeaderboard = getService().apply( - new UpdateLeaderboard(leaderboardName, newLeaderboardName, newLeaderboardDisplayName, - newDiscardingThresholds, newCourseAreaId)); + public StrippedLeaderboardDTO updateLeaderboard(String leaderboardName, String newLeaderboardName, String newLeaderboardDisplayName, int[] newDiscardingThresholds, UUID newCourseAreaId) { + Leaderboard updatedLeaderboard = getService().apply(new UpdateLeaderboard(leaderboardName, newLeaderboardName, newLeaderboardDisplayName, newDiscardingThresholds, newCourseAreaId)); return createStrippedLeaderboardDTO(updatedLeaderboard, false, false); } - + @Override public void removeLeaderboards(Collection leaderboardNames) { for (String leaderoardName : leaderboardNames) { @@ -2534,9 +2434,8 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } @Override - public void addColumnsToLeaderboard(String leaderboardName, - List> columnsToAdd) { - for (com.sap.sse.common.Util.Pair columnToAdd : columnsToAdd) { + public void addColumnsToLeaderboard(String leaderboardName, List> columnsToAdd) { + for(com.sap.sse.common.Util.Pair columnToAdd: columnsToAdd) { getService().apply(new AddColumnToLeaderboard(columnToAdd.getA(), leaderboardName, columnToAdd.getB())); } } @@ -2565,20 +2464,17 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S @Override public void suppressCompetitorInLeaderboard(String leaderboardName, String competitorIdAsString, boolean suppressed) { - getService().apply( - new SetSuppressedFlagForCompetitorInLeaderboard(leaderboardName, competitorIdAsString, suppressed)); + getService().apply(new SetSuppressedFlagForCompetitorInLeaderboard(leaderboardName, competitorIdAsString, suppressed)); } @Override public boolean connectTrackedRaceToLeaderboardColumn(String leaderboardName, String raceColumnName, String fleetName, RegattaAndRaceIdentifier raceIdentifier) { - return getService().apply( - new ConnectTrackedRaceToLeaderboardColumn(leaderboardName, raceColumnName, fleetName, raceIdentifier)); + return getService().apply(new ConnectTrackedRaceToLeaderboardColumn(leaderboardName, raceColumnName, fleetName, raceIdentifier)); } @Override - public Map getRegattaAndRaceNameOfTrackedRaceConnectedToLeaderboardColumn( - String leaderboardName, String raceColumnName) { + public Map getRegattaAndRaceNameOfTrackedRaceConnectedToLeaderboardColumn(String leaderboardName, String raceColumnName) { Map result = new HashMap(); Leaderboard leaderboard = getService().getLeaderboardByName(leaderboardName); if (leaderboard != null) { @@ -2598,8 +2494,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } @Override - public void disconnectLeaderboardColumnFromTrackedRace(String leaderboardName, String raceColumnName, - String fleetName) { + public void disconnectLeaderboardColumnFromTrackedRace(String leaderboardName, String raceColumnName, String fleetName) { getService().apply(new DisconnectLeaderboardColumnFromTrackedRace(leaderboardName, raceColumnName, fleetName)); } @@ -2609,8 +2504,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } @Override - public com.sap.sse.common.Util.Triple updateLeaderboardMaxPointsReason( - String leaderboardName, String competitorIdAsString, String raceColumnName, + public com.sap.sse.common.Util.Triple updateLeaderboardMaxPointsReason(String leaderboardName, String competitorIdAsString, String raceColumnName, MaxPointsReason maxPointsReason, Date date) throws NoWindException { return getService().apply( new UpdateLeaderboardMaxPointsReason(leaderboardName, raceColumnName, competitorIdAsString, @@ -2618,50 +2512,41 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } @Override - public com.sap.sse.common.Util.Triple updateLeaderboardScoreCorrection( - String leaderboardName, String competitorIdAsString, String columnName, Double correctedScore, Date date) - throws NoWindException { + public com.sap.sse.common.Util.Triple updateLeaderboardScoreCorrection(String leaderboardName, + String competitorIdAsString, String columnName, Double correctedScore, Date date) throws NoWindException { return getService().apply( new UpdateLeaderboardScoreCorrection(leaderboardName, columnName, competitorIdAsString, correctedScore, new MillisecondsTimePoint(date))); } @Override - public void updateLeaderboardScoreCorrectionMetadata(String leaderboardName, - Date timePointOfLastCorrectionValidity, String comment) { + public void updateLeaderboardScoreCorrectionMetadata(String leaderboardName, Date timePointOfLastCorrectionValidity, String comment) { getService().apply( new UpdateLeaderboardScoreCorrectionMetadata(leaderboardName, - timePointOfLastCorrectionValidity == null ? null : new MillisecondsTimePoint( - timePointOfLastCorrectionValidity), comment)); + timePointOfLastCorrectionValidity == null ? null : new MillisecondsTimePoint(timePointOfLastCorrectionValidity), + comment)); } @Override - public void updateLeaderboardScoreCorrectionsAndMaxPointsReasons(BulkScoreCorrectionDTO updates) - throws NoWindException { + public void updateLeaderboardScoreCorrectionsAndMaxPointsReasons(BulkScoreCorrectionDTO updates) throws NoWindException { Date dateForResults = new Date(); // we don't care about the result date/time here; use current date as default - for (Map.Entry> e : updates.getScoreUpdatesForRaceColumnByCompetitorIdAsString() - .entrySet()) { + for (Map.Entry> e : updates.getScoreUpdatesForRaceColumnByCompetitorIdAsString().entrySet()) { for (Map.Entry raceColumnNameAndCorrectedScore : e.getValue().entrySet()) { updateLeaderboardScoreCorrection(updates.getLeaderboardName(), e.getKey(), - raceColumnNameAndCorrectedScore.getKey(), raceColumnNameAndCorrectedScore.getValue(), - dateForResults); + raceColumnNameAndCorrectedScore.getKey(), raceColumnNameAndCorrectedScore.getValue(), dateForResults); } } - for (Map.Entry> e : updates - .getMaxPointsUpdatesForRaceColumnByCompetitorIdAsString().entrySet()) { + for (Map.Entry> e : updates.getMaxPointsUpdatesForRaceColumnByCompetitorIdAsString().entrySet()) { for (Map.Entry raceColumnNameAndNewMaxPointsReason : e.getValue().entrySet()) { updateLeaderboardMaxPointsReason(updates.getLeaderboardName(), e.getKey(), - raceColumnNameAndNewMaxPointsReason.getKey(), raceColumnNameAndNewMaxPointsReason.getValue(), - dateForResults); + raceColumnNameAndNewMaxPointsReason.getKey(), raceColumnNameAndNewMaxPointsReason.getValue(), dateForResults); } } } @Override - public void updateCompetitorDisplayNameInLeaderboard(String leaderboardName, String competitorIdAsString, - String displayName) { - getService().apply( - new UpdateCompetitorDisplayNameInLeaderboard(leaderboardName, competitorIdAsString, displayName)); + public void updateCompetitorDisplayNameInLeaderboard(String leaderboardName, String competitorIdAsString, String displayName) { + getService().apply(new UpdateCompetitorDisplayNameInLeaderboard(leaderboardName, competitorIdAsString, displayName)); } @Override @@ -2696,18 +2581,17 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S Iterable configs = swissTimingAdapterPersistence.getSwissTimingConfigurations(); List result = new ArrayList(); for (SwissTimingConfiguration stConfig : configs) { - result.add(new SwissTimingConfigurationDTO(stConfig.getName(), stConfig.getJsonURL(), stConfig - .getHostname(), stConfig.getPort())); + result.add(new SwissTimingConfigurationDTO(stConfig.getName(), stConfig.getJsonURL(), stConfig.getHostname(), stConfig.getPort())); } return result; } @Override - public SwissTimingEventRecordDTO getRacesOfSwissTimingEvent(String eventJsonURL) throws UnknownHostException, - IOException, InterruptedException, ParseException { - SwissTimingEventRecordDTO result = null; + public SwissTimingEventRecordDTO getRacesOfSwissTimingEvent(String eventJsonURL) + throws UnknownHostException, IOException, InterruptedException, ParseException { + SwissTimingEventRecordDTO result = null; List swissTimingRaces = new ArrayList(); - + // TODO: delete getSwissTimingAdapter().getSwissTimingRaceRecords() method // TODO: delete SwissTimingDomainFactory.getRaceTypeFromRaceID(String raceID) URL url = new URL(eventJsonURL); @@ -2716,64 +2600,58 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S EventResultDescriptor eventResult = parser.getEventResult((InputStream) eventResultConn.getContent()); if (eventResult != null) { for (RegattaResultDescriptor regattaResult : eventResult.getRegattaResults()) { - for (RaceResultDescriptor race : regattaResult.getRaceResults()) { - // add only the tracked races - if (race.isTracked() != null && race.isTracked() == true) { - SwissTimingRaceRecordDTO swissTimingRaceRecordDTO = new SwissTimingRaceRecordDTO(race.getId(), - race.getName(), regattaResult.getName(), race.getSeriesName(), race.getFleetName(), - race.getStatus(), race.getStartTime(), - regattaResult.getXrrEntriesUrl() != null ? regattaResult.getXrrEntriesUrl() - .toExternalForm() : null, hasRememberedRegatta(race.getId())); - swissTimingRaceRecordDTO.boatClass = regattaResult.getIsafId() != null - && !regattaResult.getIsafId().isEmpty() ? regattaResult.getIsafId() : regattaResult - .getClassName(); + for(RaceResultDescriptor race: regattaResult.getRaceResults()) { + // add only the tracked races + if(race.isTracked() != null && race.isTracked() == true) { + SwissTimingRaceRecordDTO swissTimingRaceRecordDTO = new SwissTimingRaceRecordDTO(race.getId(), race.getName(), + regattaResult.getName(), race.getSeriesName(), race.getFleetName(), race.getStatus(), race.getStartTime(), + regattaResult.getXrrEntriesUrl() != null ? regattaResult.getXrrEntriesUrl().toExternalForm() : null, hasRememberedRegatta(race.getId())); + swissTimingRaceRecordDTO.boatClass = regattaResult.getIsafId() != null && !regattaResult.getIsafId().isEmpty() ? regattaResult.getIsafId() : regattaResult.getClassName(); swissTimingRaceRecordDTO.gender = regattaResult.getCompetitorGenderType().name(); swissTimingRaces.add(swissTimingRaceRecordDTO); - } + } } } - result = new SwissTimingEventRecordDTO(eventResult.getId(), eventResult.getName(), - eventResult.getTrackingDataHost(), eventResult.getTrackingDataPort(), swissTimingRaces); + result = new SwissTimingEventRecordDTO(eventResult.getId(), eventResult.getName(), eventResult.getTrackingDataHost(), + eventResult.getTrackingDataPort(), swissTimingRaces); } return result; } @Override public void storeSwissTimingConfiguration(String configName, String jsonURL, String hostname, int port) { - if (!jsonURL.equalsIgnoreCase("test")) { - swissTimingAdapterPersistence.storeSwissTimingConfiguration(swissTimingFactory - .createSwissTimingConfiguration(configName, jsonURL, hostname, port)); + if(!jsonURL.equalsIgnoreCase("test")) { + swissTimingAdapterPersistence.storeSwissTimingConfiguration(swissTimingFactory.createSwissTimingConfiguration(configName, jsonURL, hostname, port)); } } @Override - public void trackWithSwissTiming(RegattaIdentifier regattaToAddTo, Iterable rrs, - String hostname, int port, boolean trackWind, final boolean correctWindByDeclination) throws Exception { + public void trackWithSwissTiming(RegattaIdentifier regattaToAddTo, Iterable rrs, String hostname, int port, + boolean trackWind, final boolean correctWindByDeclination) throws Exception { logger.info("tracWithSwissTiming for regatta " + regattaToAddTo + " for race records " + rrs + " with hostname " + hostname + " and port " + port); Map cachedRegattaEntriesLists = new HashMap(); for (SwissTimingRaceRecordDTO rr : rrs) { BoatClass boatClass = getBaseDomainFactory().getOrCreateBoatClass(rr.boatClass); - String raceDescription = rr.regattaName != null ? rr.regattaName : ""; + String raceDescription = rr.regattaName != null ? rr.regattaName : ""; raceDescription += rr.seriesName != null ? "/" + rr.seriesName : ""; - raceDescription += raceDescription.length() > 0 ? "/" + rr.getName() : rr.getName(); + raceDescription += raceDescription.length() > 0 ? "/" + rr.getName() : rr.getName(); // try to find a cached entry list for the regatta RegattaResults regattaResults = cachedRegattaEntriesLists.get(rr.xrrEntriesUrl); - if (regattaResults == null) { - regattaResults = getSwissTimingAdapter().readRegattaEntryListFromXrrUrl(rr.xrrEntriesUrl); - if (regattaResults != null) { - cachedRegattaEntriesLists.put(rr.xrrEntriesUrl, regattaResults); + if(regattaResults == null) { + regattaResults = getSwissTimingAdapter().readRegattaEntryListFromXrrUrl(rr.xrrEntriesUrl); + if(regattaResults != null) { + cachedRegattaEntriesLists.put(rr.xrrEntriesUrl, regattaResults); } } StartList startList = null; - if (regattaResults != null) { - startList = getSwissTimingAdapter().readStartListForRace(rr.raceId, regattaResults); + if(regattaResults != null) { + startList = getSwissTimingAdapter().readStartListForRace(rr.raceId, regattaResults); } // now read the entry list for the race from the result - final RaceHandle raceHandle = getSwissTimingAdapter().addSwissTimingRace(getService(), regattaToAddTo, - rr.raceId, rr.getName(), raceDescription, boatClass, hostname, port, startList, - MongoRaceLogStoreFactory.INSTANCE.getMongoRaceLogStore(mongoObjectFactory, domainObjectFactory), - RaceTracker.TIMEOUT_FOR_RECEIVING_RACE_DEFINITION_IN_MILLISECONDS); + final RaceHandle raceHandle = getSwissTimingAdapter().addSwissTimingRace(getService(), regattaToAddTo, rr.raceId, rr.getName(), raceDescription, + boatClass, hostname, port, startList, + MongoRaceLogStoreFactory.INSTANCE.getMongoRaceLogStore(mongoObjectFactory, domainObjectFactory), RaceTracker.TIMEOUT_FOR_RECEIVING_RACE_DEFINITION_IN_MILLISECONDS); if (trackWind) { new Thread("Wind tracking starter for race " + rr.raceId + "/" + rr.getName()) { public void run() { @@ -2792,20 +2670,17 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S @Override public List listSwissTiminigReplayRaces(String swissTimingUrl) { List replayRaces = getSwissTimingReplayService().listReplayRaces(swissTimingUrl); - List result = new ArrayList(replayRaces.size()); + List result = new ArrayList(replayRaces.size()); for (SwissTimingReplayRace replayRace : replayRaces) { - result.add(new SwissTimingReplayRaceDTO(replayRace.getFlightNumber(), replayRace.getRaceId(), replayRace - .getRsc(), replayRace.getName(), replayRace.getBoatClass(), replayRace.getStartTime(), replayRace - .getLink(), hasRememberedRegatta(replayRace.getRaceId()))); + result.add(new SwissTimingReplayRaceDTO(replayRace.getFlightNumber(), replayRace.getRaceId(), replayRace.getRsc(), replayRace.getName(), replayRace.getBoatClass(), replayRace.getStartTime(), replayRace.getLink(), hasRememberedRegatta(replayRace.getRaceId()))); } return result; } @Override - public void replaySwissTimingRace(RegattaIdentifier regattaIdentifier, - Iterable replayRaceDTOs, boolean trackWind, boolean correctWindByDeclination, - boolean simulateWithStartTimeNow) { - logger.info("replaySwissTimingRace for regatta " + regattaIdentifier + " for races " + replayRaceDTOs); + public void replaySwissTimingRace(RegattaIdentifier regattaIdentifier, Iterable replayRaceDTOs, + boolean trackWind, boolean correctWindByDeclination, boolean simulateWithStartTimeNow) { + logger.info("replaySwissTimingRace for regatta "+regattaIdentifier+" for races "+replayRaceDTOs); Regatta regatta; for (SwissTimingReplayRaceDTO replayRaceDTO : replayRaceDTOs) { try { @@ -2828,8 +2703,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S /* isMedal */false, Collections.singletonList(new FleetImpl( LeaderboardNameConstants.DEFAULT_FLEET_NAME)), /* race column names */new ArrayList(), getService())), false, - baseDomainFactory.createScoringScheme(ScoringSchemeType.LOW_POINT), null, /* useStartTimeInference */ - true); + baseDomainFactory.createScoringScheme(ScoringSchemeType.LOW_POINT), null, /* useStartTimeInference */ true); // TODO: is course area relevant for swiss timing replay? } else { regatta = getService().getRegatta(regattaIdentifier); @@ -2854,7 +2728,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } /** - * Finds a competitor in a sequence of competitors that has an {@link Competitor#getId()} equal to id. + * Finds a competitor in a sequence of competitors that has an {@link Competitor#getId()} equal to id. */ private Competitor getCompetitorByIdAsString(Iterable competitors, String idAsString) { for (Competitor c : competitors) { @@ -2866,8 +2740,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } private Double getCompetitorRaceDataEntry(DetailType dataType, TrackedRace trackedRace, Competitor competitor, - TimePoint timePoint, String leaderboardGroupName, String leaderboardName, - WindLegTypeAndLegBearingCache cache) throws NoWindException { + TimePoint timePoint, String leaderboardGroupName, String leaderboardName, WindLegTypeAndLegBearingCache cache) throws NoWindException { Double result = null; Course course = trackedRace.getRace().getCourse(); course.lockForRead(); // make sure the tracked leg survives this call even if a course update is pending @@ -2900,8 +2773,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S break; case WINDWARD_DISTANCE_TO_OVERALL_LEADER: if (trackedLeg != null) { - Distance distanceToLeader = trackedLeg.getWindwardDistanceToOverallLeader(timePoint, - WindPositionMode.LEG_MIDDLE); + Distance distanceToLeader = trackedLeg.getWindwardDistanceToOverallLeader(timePoint, WindPositionMode.LEG_MIDDLE); result = (distanceToLeader == null) ? null : distanceToLeader.getMeters(); } break; @@ -2950,28 +2822,23 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } @Override - public CompetitorsRaceDataDTO getCompetitorsRaceData(RegattaAndRaceIdentifier race, - List competitors, Date from, Date to, final long stepSizeInMs, final DetailType detailType, - final String leaderboardGroupName, final String leaderboardName) throws NoWindException { + public CompetitorsRaceDataDTO getCompetitorsRaceData(RegattaAndRaceIdentifier race, List competitors, Date from, Date to, + final long stepSizeInMs, final DetailType detailType, final String leaderboardGroupName, final String leaderboardName) throws NoWindException { CompetitorsRaceDataDTO result = null; final TrackedRace trackedRace = getExistingTrackedRace(race); if (trackedRace != null) { TimePoint newestEvent = trackedRace.getTimePointOfNewestEvent(); - final TimePoint startTime = from == null ? trackedRace.getStartOfTracking() : new MillisecondsTimePoint( - from); - final TimePoint endTime = (to == null || to.after(newestEvent.asDate())) ? newestEvent - : new MillisecondsTimePoint(to); - result = new CompetitorsRaceDataDTO(detailType, startTime == null ? null : startTime.asDate(), - endTime == null ? null : endTime.asDate()); + final TimePoint startTime = from == null ? trackedRace.getStartOfTracking() : new MillisecondsTimePoint(from); + final TimePoint endTime = (to == null || to.after(newestEvent.asDate())) ? newestEvent : new MillisecondsTimePoint(to); + result = new CompetitorsRaceDataDTO(detailType, startTime==null?null:startTime.asDate(), endTime==null?null:endTime.asDate()); final ConcurrentHashMap cachesByTimePoint = new ConcurrentHashMap<>(); Map> resultFutures = new HashMap>(); for (final CompetitorDTO competitorDTO : competitors) { - FutureTask future = new FutureTask( - new Callable() { + FutureTask future = new FutureTask(new Callable() { @Override public CompetitorRaceDataDTO call() throws NoWindException { - Competitor competitor = getCompetitorByIdAsString(trackedRace.getRace() - .getCompetitors(), competitorDTO.getIdAsString()); + Competitor competitor = getCompetitorByIdAsString(trackedRace.getRace().getCompetitors(), + competitorDTO.getIdAsString()); ArrayList> markPassingsData = new ArrayList>(); ArrayList> raceData = new ArrayList>(); // Filling the mark passings @@ -2980,21 +2847,17 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S trackedRace.lockForRead(competitorMarkPassings); try { for (MarkPassing markPassing : competitorMarkPassings) { - MillisecondsTimePoint time = new MillisecondsTimePoint(markPassing - .getTimePoint().asMillis()); + MillisecondsTimePoint time = new MillisecondsTimePoint(markPassing.getTimePoint().asMillis()); WindLegTypeAndLegBearingCache cache = cachesByTimePoint.get(time); if (cache == null) { cache = new LeaderboardDTOCalculationReuseCache(time); cachesByTimePoint.put(time, cache); } Double competitorMarkPassingsData = getCompetitorRaceDataEntry(detailType, - trackedRace, competitor, time, leaderboardGroupName, - leaderboardName, cache); + trackedRace, competitor, time, leaderboardGroupName, leaderboardName, cache); if (competitorMarkPassingsData != null) { - markPassingsData - .add(new com.sap.sse.common.Util.Triple( - markPassing.getWaypoint().getName(), time.asDate(), - competitorMarkPassingsData)); + markPassingsData.add(new com.sap.sse.common.Util.Triple(markPassing + .getWaypoint().getName(), time.asDate(), competitorMarkPassingsData)); } } } finally { @@ -3012,8 +2875,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S Double competitorRaceData = getCompetitorRaceDataEntry(detailType, trackedRace, competitor, time, leaderboardGroupName, leaderboardName, cache); if (competitorRaceData != null) { - raceData.add(new com.sap.sse.common.Util.Pair(time.asDate(), - competitorRaceData)); + raceData.add(new com.sap.sse.common.Util.Pair(time.asDate(), competitorRaceData)); } } } @@ -3029,12 +2891,10 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S competitorData = e.getValue().get(); } catch (InterruptedException e1) { competitorData = null; - logger.log(Level.SEVERE, "Exception while trying to compute competitor data " + detailType - + " for competitor " + e.getKey().getName(), e1); + logger.log(Level.SEVERE, "Exception while trying to compute competitor data "+detailType+" for competitor "+e.getKey().getName(), e1); } catch (ExecutionException e1) { competitorData = null; - logger.log(Level.SEVERE, "Exception while trying to compute competitor data " + detailType - + " for competitor " + e.getKey().getName(), e1); + logger.log(Level.SEVERE, "Exception while trying to compute competitor data "+detailType+" for competitor "+e.getKey().getName(), e1); } result.setCompetitorData(e.getKey(), competitorData); } @@ -3043,11 +2903,10 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } @Override - public List, List>> getLeaderboardDataEntriesForAllRaceColumns( - String leaderboardName, Date date, DetailType detailType) throws Exception { - List, List>> result = new ArrayList, List>>(); - // Attention: The reason why we read the data from the LeaderboardDTO and not from the leaderboard directly is - // to ensure + public List, List>> getLeaderboardDataEntriesForAllRaceColumns(String leaderboardName, + Date date, DetailType detailType) throws Exception { + List, List>> result = new ArrayList,List>>(); + // Attention: The reason why we read the data from the LeaderboardDTO and not from the leaderboard directly is to ensure // the use of the leaderboard cache. final Leaderboard leaderboard = getService().getLeaderboardByName(leaderboardName); if (leaderboard != null) { @@ -3061,16 +2920,14 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S if (detailType != null) { switch (detailType) { case REGATTA_TOTAL_POINTS_SUM: - for (Entry> e : leaderboard.getTotalPointsSumAfterRaceColumn( - effectiveTimePoint).entrySet()) { + for (Entry> e : leaderboard.getTotalPointsSumAfterRaceColumn(effectiveTimePoint).entrySet()) { List competitorDTOs = new ArrayList<>(); List pointSums = new ArrayList<>(); for (Entry e2 : e.getValue().entrySet()) { competitorDTOs.add(baseDomainFactory.convertToCompetitorDTO(e2.getKey())); pointSums.add(e2.getValue()); } - result.add(new Triple, List>(e.getKey().getName(), - competitorDTOs, pointSums)); + result.add(new Triple, List>(e.getKey().getName(), competitorDTOs, pointSums)); } break; case REGATTA_RANK: @@ -3086,8 +2943,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S competitorDTOs.add(baseDomainFactory.convertToCompetitorDTO(competitor)); rank++; } - result.add(new Triple, List>(e.getKey().getName(), - competitorDTOs, values)); + result.add(new Triple, List>(e.getKey().getName(), competitorDTOs, values)); } break; default: @@ -3100,28 +2956,27 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } @Override - public List> getLeaderboardsNamesOfMetaLeaderboard( - String metaLeaderboardName) { + public List> getLeaderboardsNamesOfMetaLeaderboard(String metaLeaderboardName) { Leaderboard leaderboard = getService().getLeaderboardByName(metaLeaderboardName); if (leaderboard == null) { - throw new IllegalArgumentException("Couldn't find leaderboard named " + metaLeaderboardName); + throw new IllegalArgumentException("Couldn't find leaderboard named "+metaLeaderboardName); } if (!(leaderboard instanceof MetaLeaderboard)) { - throw new IllegalArgumentException("The leaderboard " + metaLeaderboardName + " is not a metaleaderboard"); + throw new IllegalArgumentException("The leaderboard "+metaLeaderboardName + " is not a metaleaderboard"); } List> result = new ArrayList>(); MetaLeaderboard metaLeaderboard = (MetaLeaderboard) leaderboard; - for (Leaderboard containedLeaderboard : metaLeaderboard.getLeaderboards()) { + for (Leaderboard containedLeaderboard: metaLeaderboard.getLeaderboards()) { result.add(new com.sap.sse.common.Util.Pair(containedLeaderboard.getName(), - containedLeaderboard.getDisplayName() != null ? containedLeaderboard.getDisplayName() - : containedLeaderboard.getName())); + containedLeaderboard.getDisplayName() != null ? containedLeaderboard.getDisplayName() : containedLeaderboard.getName())); } return result; } @Override public Map> getDouglasPoints(RegattaAndRaceIdentifier raceIdentifier, - Map from, Map to, double meters) throws NoWindException { + Map from, Map to, + double meters) throws NoWindException { Map> result = new HashMap>(); TrackedRace trackedRace = getExistingTrackedRace(raceIdentifier); if (trackedRace != null) { @@ -3150,14 +3005,12 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S speedWithBearing = gpsFixTrack.getEstimatedSpeed(fix.getTimePoint()); } Tack tack = trackedRace.getTack(competitor, fix.getTimePoint()); - TrackedLegOfCompetitor trackedLegOfCompetitor = trackedRace.getTrackedLeg(competitor, - fix.getTimePoint()); + TrackedLegOfCompetitor trackedLegOfCompetitor = trackedRace.getTrackedLeg(competitor, fix.getTimePoint()); LegType legType = trackedLegOfCompetitor == null ? null : trackedRace.getTrackedLeg( trackedLegOfCompetitor.getLeg()).getLegType(fix.getTimePoint()); Wind wind = trackedRace.getWind(fix.getPosition(), fix.getTimePoint()); WindDTO windDTO = createWindDTOFromAlreadyAveraged(wind, fix.getTimePoint()); - GPSFixDTO fixDTO = createGPSFixDTO(fix, speedWithBearing, windDTO, tack, legType, /* extrapolated */ - false); + GPSFixDTO fixDTO = createGPSFixDTO(fix, speedWithBearing, windDTO, tack, legType, /* extrapolated */false); gpsFixDouglasList.add(fixDTO); } result.put(competitorDTO, gpsFixDouglasList); @@ -3186,7 +3039,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S List maneuversForCompetitor; try { maneuversForCompetitor = trackedRace.getManeuvers(competitor, timePointFrom, - timePointTo, /* waitForLatest */true); + timePointTo, /* waitForLatest */ true); } catch (NoWindException e) { throw new NoWindError(e); } @@ -3211,25 +3064,25 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S return result; } - private List createManeuverDTOsForCompetitor(List maneuvers, TrackedRace trackedRace, - Competitor competitor) { + private List createManeuverDTOsForCompetitor(List maneuvers, TrackedRace trackedRace, Competitor competitor) { List result = new ArrayList(); for (Maneuver maneuver : maneuvers) { final ManeuverDTO maneuverDTO; if (maneuver.getType() == ManeuverType.MARK_PASSING) { - maneuverDTO = new MarkpassingManeuverDTO(maneuver.getType(), maneuver.getNewTack(), new PositionDTO( - maneuver.getPosition().getLatDeg(), maneuver.getPosition().getLngDeg()), maneuver - .getTimePoint().asDate(), createSpeedWithBearingDTO(maneuver.getSpeedWithBearingBefore()), + maneuverDTO = new MarkpassingManeuverDTO(maneuver.getType(), maneuver.getNewTack(), + new PositionDTO(maneuver.getPosition().getLatDeg(), maneuver.getPosition().getLngDeg()), + maneuver.getTimePoint().asDate(), + createSpeedWithBearingDTO(maneuver.getSpeedWithBearingBefore()), createSpeedWithBearingDTO(maneuver.getSpeedWithBearingAfter()), - maneuver.getDirectionChangeInDegrees(), maneuver.getManeuverLoss() == null ? null : maneuver - .getManeuverLoss().getMeters(), ((MarkPassingManeuver) maneuver).getSide()); - } else { - maneuverDTO = new ManeuverDTO(maneuver.getType(), maneuver.getNewTack(), new PositionDTO(maneuver - .getPosition().getLatDeg(), maneuver.getPosition().getLngDeg()), maneuver.getTimePoint() - .asDate(), createSpeedWithBearingDTO(maneuver.getSpeedWithBearingBefore()), + maneuver.getDirectionChangeInDegrees(), maneuver.getManeuverLoss()==null?null:maneuver.getManeuverLoss().getMeters(), + ((MarkPassingManeuver) maneuver).getSide()); + } else { + maneuverDTO = new ManeuverDTO(maneuver.getType(), maneuver.getNewTack(), + new PositionDTO(maneuver.getPosition().getLatDeg(), maneuver.getPosition().getLngDeg()), + maneuver.getTimePoint().asDate(), + createSpeedWithBearingDTO(maneuver.getSpeedWithBearingBefore()), createSpeedWithBearingDTO(maneuver.getSpeedWithBearingAfter()), - maneuver.getDirectionChangeInDegrees(), maneuver.getManeuverLoss() == null ? null : maneuver - .getManeuverLoss().getMeters()); + maneuver.getDirectionChangeInDegrees(), maneuver.getManeuverLoss()==null?null:maneuver.getManeuverLoss().getMeters()); } result.add(maneuverDTO); } @@ -3262,9 +3115,9 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } /** - * Returns a servlet context that, when asked for a resource, first tries the original servlet context's - * implementation. If that fails, it prepends "war/" to the request because the war/ folder contains all the - * resources exposed externally through the HTTP server. + * Returns a servlet context that, when asked for a resource, first tries the original servlet context's implementation. If that + * fails, it prepends "war/" to the request because the war/ folder contains all the resources exposed externally + * through the HTTP server. */ @Override public ServletContext getServletContext() { @@ -3276,8 +3129,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S * Override of function to prevent exception "Blocked request without GWT permutation header (XSRF attack?)" when testing the GWT sites */ protected void checkPermutationStrongName() throws SecurityException { - // Override to prevent exception "Blocked request without GWT permutation header (XSRF attack?)" when testing - // the GWT sites + //Override to prevent exception "Blocked request without GWT permutation header (XSRF attack?)" when testing the GWT sites return; } @@ -3295,18 +3147,15 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S @Override public LeaderboardGroupDTO getLeaderboardGroupByName(String groupName, boolean withGeoLocationData) { - return convertToLeaderboardGroupDTO(getService().getLeaderboardGroupByName(groupName), withGeoLocationData, - false); + return convertToLeaderboardGroupDTO(getService().getLeaderboardGroupByName(groupName), withGeoLocationData, false); } - private LeaderboardGroupDTO convertToLeaderboardGroupDTO(LeaderboardGroup leaderboardGroup, - boolean withGeoLocationData, boolean withStatisticalData) { + private LeaderboardGroupDTO convertToLeaderboardGroupDTO(LeaderboardGroup leaderboardGroup, boolean withGeoLocationData, boolean withStatisticalData) { LeaderboardGroupDTO groupDTO = new LeaderboardGroupDTO(leaderboardGroup.getId(), leaderboardGroup.getName(), leaderboardGroup.getDisplayName(), leaderboardGroup.getDescription()); groupDTO.displayLeaderboardsInReverseOrder = leaderboardGroup.isDisplayGroupsInReverseOrder(); for (Leaderboard leaderboard : leaderboardGroup.getLeaderboards()) { - groupDTO.leaderboards.add(createStrippedLeaderboardDTO(leaderboard, withGeoLocationData, - withStatisticalData)); + groupDTO.leaderboards.add(createStrippedLeaderboardDTO(leaderboard, withGeoLocationData, withStatisticalData)); } Leaderboard overallLeaderboard = leaderboardGroup.getOverallLeaderboard(); if (overallLeaderboard != null) { @@ -3319,6 +3168,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S return groupDTO; } + @Override public void renameLeaderboardGroup(String oldName, String newName) { getService().apply(new RenameLeaderboardGroup(oldName, newName)); @@ -3337,22 +3187,19 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S @Override public LeaderboardGroupDTO createLeaderboardGroup(String groupName, String description, String displayName, - - boolean displayGroupsInReverseOrder, int[] overallLeaderboardDiscardThresholds, - ScoringSchemeType overallLeaderboardScoringSchemeType) { - CreateLeaderboardGroup createLeaderboardGroupOp = new CreateLeaderboardGroup(groupName, description, - displayName, displayGroupsInReverseOrder, new ArrayList(), overallLeaderboardDiscardThresholds, - overallLeaderboardScoringSchemeType); + boolean displayGroupsInReverseOrder, + int[] overallLeaderboardDiscardThresholds, ScoringSchemeType overallLeaderboardScoringSchemeType) { + CreateLeaderboardGroup createLeaderboardGroupOp = new CreateLeaderboardGroup(groupName, description, displayName, + displayGroupsInReverseOrder, new ArrayList(), overallLeaderboardDiscardThresholds, overallLeaderboardScoringSchemeType); return convertToLeaderboardGroupDTO(getService().apply(createLeaderboardGroupOp), false, false); } @Override public void updateLeaderboardGroup(String oldName, String newName, String newDescription, String newDisplayName, - List leaderboardNames, int[] overallLeaderboardDiscardThresholds, - ScoringSchemeType overallLeaderboardScoringSchemeType) { + List leaderboardNames, int[] overallLeaderboardDiscardThresholds, ScoringSchemeType overallLeaderboardScoringSchemeType) { getService().apply( - new UpdateLeaderboardGroup(oldName, newName, newDescription, newDisplayName, leaderboardNames, - overallLeaderboardDiscardThresholds, overallLeaderboardScoringSchemeType)); + new UpdateLeaderboardGroup(oldName, newName, newDescription, newDisplayName, + leaderboardNames, overallLeaderboardDiscardThresholds, overallLeaderboardScoringSchemeType)); } @Override @@ -3361,38 +3208,33 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S Set replicaDTOs = new HashSet(); for (ReplicaDescriptor replicaDescriptor : service.getReplicaInfo()) { final Map>, Integer> statistics = service.getStatistics(replicaDescriptor); - .getStatistics(replicaDescriptor); Map replicationCountByOperationClassName = new HashMap(); for (Entry>, Integer> e : statistics.entrySet()) { replicationCountByOperationClassName.put(e.getKey().getName(), e.getValue()); } replicaDTOs.add(new ReplicaDTO(replicaDescriptor.getIpAddress().getHostName(), replicaDescriptor .getRegistrationTime().asDate(), replicaDescriptor.getUuid().toString(), - replicationCountByOperationClassName, service - .getAverageNumberOfOperationsPerMessage(replicaDescriptor), service - .getNumberOfMessagesSent(replicaDescriptor), service - .getNumberOfBytesSent(replicaDescriptor), service - .getAverageNumberOfBytesPerMessage(replicaDescriptor))); + replicationCountByOperationClassName, service.getAverageNumberOfOperationsPerMessage(replicaDescriptor), + service.getNumberOfMessagesSent(replicaDescriptor), service.getNumberOfBytesSent(replicaDescriptor), service.getAverageNumberOfBytesPerMessage(replicaDescriptor))); } ReplicationMasterDTO master; ReplicationMasterDescriptor replicatingFromMaster = service.getReplicatingFromMaster(); if (replicatingFromMaster == null) { master = null; } else { - master = new ReplicationMasterDTO(replicatingFromMaster.getHostname(), - replicatingFromMaster.getMessagingPort(), replicatingFromMaster.getServletPort()); + master = new ReplicationMasterDTO(replicatingFromMaster.getHostname(), replicatingFromMaster.getMessagingPort(), + replicatingFromMaster.getServletPort()); } return new ReplicationStateDTO(master, replicaDTOs, service.getServerIdentifier().toString()); } @Override - public void startReplicatingFromMaster(String messagingHost, String masterHost, String exchangeName, - int servletPort, int messagingPort) throws IOException, ClassNotFoundException, InterruptedException { + public void startReplicatingFromMaster(String messagingHost, String masterHost, String exchangeName, int servletPort, int messagingPort) throws IOException, ClassNotFoundException, InterruptedException { // the queue name must be always the same for this server. in order to achieve // this we're using the unique server identifier getReplicationService().startToReplicateFrom( - ReplicationFactory.INSTANCE.createReplicationMasterDescriptor(messagingHost, masterHost, exchangeName, - servletPort, messagingPort, getReplicationService().getServerIdentifier().toString())); + ReplicationFactory.INSTANCE.createReplicationMasterDescriptor(messagingHost, masterHost, exchangeName, servletPort, messagingPort, + getReplicationService().getServerIdentifier().toString())); } @Override @@ -3416,10 +3258,9 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S result.add(localEvent); } } - for (Entry, Exception>> serverRefAndEventsOrException : getService() - .getPublicEventsOfAllSailingServers().entrySet()) { - final com.sap.sse.common.Util.Pair, Exception> eventsOrException = serverRefAndEventsOrException - .getValue(); + for (Entry, Exception>> serverRefAndEventsOrException : + getService().getPublicEventsOfAllSailingServers().entrySet()) { + final com.sap.sse.common.Util.Pair, Exception> eventsOrException = serverRefAndEventsOrException.getValue(); final RemoteSailingServerReference serverRef = serverRefAndEventsOrException.getKey(); final Iterable remoteEvents = eventsOrException.getA(); String baseURL = getBaseURL(serverRef.getURL()).toString(); @@ -3436,10 +3277,9 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } /** - * Determines the base URL (protocol, host and port parts) used for the currently executing servlet request. - * Defaults to http://sapsailing.com. - * - * @throws MalformedURLException + * Determines the base URL (protocol, host and port parts) used for the currently executing servlet request. Defaults + * to http://sapsailing.com. + * @throws MalformedURLException */ private URL getRequestBaseURL() throws MalformedURLException { final URL url = new URL(getThreadLocalRequest().getRequestURL().toString()); @@ -3448,7 +3288,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } private URL getBaseURL(URL url) throws MalformedURLException { - return new URL(url.getProtocol(), url.getHost(), url.getPort(), /* file */""); + return new URL(url.getProtocol(), url.getHost(), url.getPort(), /* file */ ""); } private RemoteSailingServerReferenceDTO createRemoteSailingServerReferenceDTO( @@ -3460,16 +3300,17 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S if (events == null) { eventDTOs = null; final Exception exception = eventsOrException.getB(); - sailingServerDTO = new RemoteSailingServerReferenceDTO(serverRef.getName(), serverRef.getURL() - .toExternalForm(), exception == null ? null : exception.getMessage()); + sailingServerDTO = new RemoteSailingServerReferenceDTO(serverRef.getName(), + serverRef.getURL().toExternalForm(), exception==null?null:exception.getMessage()); } else { eventDTOs = convertToEventDTOs(events); - sailingServerDTO = new RemoteSailingServerReferenceDTO(serverRef.getName(), serverRef.getURL() - .toExternalForm(), eventDTOs); + sailingServerDTO = new RemoteSailingServerReferenceDTO( + serverRef.getName(), serverRef + .getURL().toExternalForm(), eventDTOs); } return sailingServerDTO; } - + private Iterable convertToEventDTOs(Iterable events) { List result = new ArrayList<>(); for (EventBase event : events) { @@ -3485,7 +3326,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S String logoImageURLString, Iterable imageURLStrings, Iterable videoURLStrings, Iterable sponsorImageURLStrings) throws MalformedURLException { TimePoint startTimePoint = startDate != null ? new MillisecondsTimePoint(startDate) : null; - TimePoint endTimePoint = endDate != null ? new MillisecondsTimePoint(endDate) : null; + TimePoint endTimePoint = endDate != null ? new MillisecondsTimePoint(endDate) : null; URL officialWebsiteURL = officialWebsiteURLString != null ? new URL(officialWebsiteURLString) : null; URL logoImageURL = logoImageURLString != null ? new URL(logoImageURLString) : null; List imageURLs = createURLsFromStrings(imageURLStrings); @@ -3517,8 +3358,8 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S Iterable videoURLs, Iterable sponsorImageURLs, String logoImageURLAsString, String officialWebsiteURLAsString) throws MalformedURLException { UUID eventUuid = UUID.randomUUID(); - TimePoint startTimePoint = startDate != null ? new MillisecondsTimePoint(startDate) : null; - TimePoint endTimePoint = endDate != null ? new MillisecondsTimePoint(endDate) : null; + TimePoint startTimePoint = startDate != null ? new MillisecondsTimePoint(startDate) : null; + TimePoint endTimePoint = endDate != null ? new MillisecondsTimePoint(endDate) : null; getService().apply( new CreateEvent(eventName, eventDescription, startTimePoint, endTimePoint, venue, isPublic, eventUuid, createURLsFromStrings(imageURLs), createURLsFromStrings(videoURLs), @@ -3592,7 +3433,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S leaderboardGroupBase.getDescription(), leaderboardGroupBase.getDisplayName(), leaderboardGroupBase.hasOverallLeaderboard()); } - + private void copyEventBaseFieldsToDTO(EventBase event, EventBaseDTO eventDTO) { eventDTO.venue = new VenueDTO(); eventDTO.venue.setName(event.getVenue() != null ? event.getVenue().getName() : null); @@ -3601,25 +3442,39 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S eventDTO.isPublic = event.isPublic(); eventDTO.id = (UUID) event.getId(); eventDTO.setDescription(event.getDescription()); - eventDTO.setOfficialWebsiteURL(event.getOfficialWebsiteURL() != null ? event.getOfficialWebsiteURL().toString() - : null); - eventDTO.setLogoImageURL(event.getLogoImageURL() != null ? event.getLogoImageURL().toString() : null); - for (URL url : event.getSponsorImageURLs()) { + eventDTO.setOfficialWebsiteURL(event.getOfficialWebsiteURL() != null ? event.getOfficialWebsiteURL().toString() : null); + if (event.getLogoImageURL() == null) { + eventDTO.setLogoImageURL(null); + } else { + eventDTO.setLogoImageURL(event.getLogoImageURL().toString()); + setImageSize(event, eventDTO, event.getLogoImageURL()); + } + for(URL url: event.getSponsorImageURLs()) { eventDTO.addSponsorImageURL(url.toString()); + setImageSize(event, eventDTO, url); } - for (URL url : event.getImageURLs()) { + for(URL url: event.getImageURLs()) { eventDTO.addImageURL(url.toString()); + setImageSize(event, eventDTO, url); } - for (URL url : event.getVideoURLs()) { + for(URL url: event.getVideoURLs()) { eventDTO.addVideoURL(url.toString()); } } + private void setImageSize(EventBase event, EventBaseDTO eventDTO, URL imageURL) { + try { + eventDTO.setImageSize(imageURL.toString(), event.getImageSize(imageURL)); + } catch (InterruptedException | ExecutionException e) { + logger.log(Level.FINE, "Was unable to obtain image size for "+imageURL+" earlier.", e); + } + } + private EventDTO convertToEventDTO(Event event, boolean withStatisticalData) { EventDTO eventDTO = new EventDTO(event.getName()); copyEventBaseFieldsToDTO(event, eventDTO); eventDTO.regattas = new ArrayList(); - for (Regatta regatta : event.getRegattas()) { + for (Regatta regatta: event.getRegattas()) { RegattaDTO regattaDTO = new RegattaDTO(); regattaDTO.setName(regatta.getName()); regattaDTO.races = convertToRaceDTOs(regatta); @@ -3631,8 +3486,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S eventDTO.venue.getCourseAreas().add(courseAreaDTO); } for (LeaderboardGroup lg : event.getLeaderboardGroups()) { - eventDTO.addLeaderboardGroup(convertToLeaderboardGroupDTO(lg, /* withGeoLocationData */false, - withStatisticalData)); + eventDTO.addLeaderboardGroup(convertToLeaderboardGroupDTO(lg, /* withGeoLocationData */false, withStatisticalData)); } return eventDTO; } @@ -3642,15 +3496,15 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S courseAreaDTO.id = courseArea.getId(); return courseAreaDTO; } - + /** for backward compatibility with the regatta overview */ @Override public List getRegattaStructureForEvent(UUID eventId) { List raceGroups = new ArrayList(); Event event = getService().getEvent(eventId); Map leaderboardWithLeaderboardGroups = new HashMap(); - for (LeaderboardGroup leaderboardGroup : event.getLeaderboardGroups()) { - for (Leaderboard leaderboard : leaderboardGroup.getLeaderboards()) { + for(LeaderboardGroup leaderboardGroup: event.getLeaderboardGroups()) { + for(Leaderboard leaderboard: leaderboardGroup.getLeaderboards()) { leaderboardWithLeaderboardGroups.put(leaderboard, leaderboardGroup); } } @@ -3661,9 +3515,8 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S RaceGroupDTO raceGroup = new RaceGroupDTO(leaderboard.getName()); raceGroup.courseAreaIdAsString = courseArea.getId().toString(); raceGroup.displayName = getRegattaNameFromLeaderboard(leaderboard); - if (leaderboardWithLeaderboardGroups.containsKey(leaderboard)) { - raceGroup.leaderboardGroupName = leaderboardWithLeaderboardGroups.get(leaderboard) - .getName(); + if(leaderboardWithLeaderboardGroups.containsKey(leaderboard)) { + raceGroup.leaderboardGroupName = leaderboardWithLeaderboardGroups.get(leaderboard).getName(); } if (leaderboard instanceof RegattaLeaderboard) { RegattaLeaderboard regattaLeaderboard = (RegattaLeaderboard) leaderboard; @@ -3671,15 +3524,13 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S RaceGroupSeriesDTO seriesDTO = new RaceGroupSeriesDTO(series.getName()); raceGroup.getSeries().add(seriesDTO); for (Fleet fleet : series.getFleets()) { - FleetDTO fleetDTO = new FleetDTO(fleet.getName(), fleet.getOrdering(), - fleet.getColor()); + FleetDTO fleetDTO = new FleetDTO(fleet.getName(), fleet.getOrdering(), fleet.getColor()); seriesDTO.getFleets().add(fleetDTO); } seriesDTO.getRaceColumns().addAll(convertToRaceColumnDTOs(series.getRaceColumns())); } } else { - RaceGroupSeriesDTO seriesDTO = new RaceGroupSeriesDTO( - LeaderboardNameConstants.DEFAULT_SERIES_NAME); + RaceGroupSeriesDTO seriesDTO = new RaceGroupSeriesDTO(LeaderboardNameConstants.DEFAULT_SERIES_NAME); raceGroup.getSeries().add(seriesDTO); FleetDTO fleetDTO = new FleetDTO(LeaderboardNameConstants.DEFAULT_FLEET_NAME, 0, null); seriesDTO.getFleets().add(fleetDTO); @@ -3699,25 +3550,24 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S List raceGroups = new ArrayList(); Event event = getService().getEvent(eventId); Map leaderboardWithLeaderboardGroups = new HashMap(); - for (LeaderboardGroup leaderboardGroup : event.getLeaderboardGroups()) { - for (Leaderboard leaderboard : leaderboardGroup.getLeaderboards()) { + for(LeaderboardGroup leaderboardGroup: event.getLeaderboardGroups()) { + for(Leaderboard leaderboard: leaderboardGroup.getLeaderboards()) { leaderboardWithLeaderboardGroups.put(leaderboard, leaderboardGroup); } } if (event != null) { - for (LeaderboardGroup leaderboardGroup : event.getLeaderboardGroups()) { - for (Leaderboard leaderboard : leaderboardGroup.getLeaderboards()) { + for(LeaderboardGroup leaderboardGroup: event.getLeaderboardGroups()) { + for(Leaderboard leaderboard: leaderboardGroup.getLeaderboards()) { RaceGroupDTO raceGroup = new RaceGroupDTO(leaderboard.getName()); for (CourseArea courseArea : event.getVenue().getCourseAreas()) { - if (leaderboard.getDefaultCourseArea() != null - && leaderboard.getDefaultCourseArea() == courseArea) { + if (leaderboard.getDefaultCourseArea() != null && leaderboard.getDefaultCourseArea() == courseArea) { raceGroup.courseAreaIdAsString = courseArea.getId().toString(); break; } } raceGroup.displayName = getRegattaNameFromLeaderboard(leaderboard); - if (leaderboardWithLeaderboardGroups.containsKey(leaderboard)) { - raceGroup.leaderboardGroupName = leaderboardWithLeaderboardGroups.get(leaderboard).getName(); + if(leaderboardWithLeaderboardGroups.containsKey(leaderboard)) { + raceGroup.leaderboardGroupName = leaderboardWithLeaderboardGroups.get(leaderboard).getName(); } if (leaderboard instanceof RegattaLeaderboard) { RegattaLeaderboard regattaLeaderboard = (RegattaLeaderboard) leaderboard; @@ -3732,14 +3582,13 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S seriesDTO.getRaceColumns().addAll(convertToRaceColumnDTOs(series.getRaceColumns())); } } else { - RaceGroupSeriesDTO seriesDTO = new RaceGroupSeriesDTO( - LeaderboardNameConstants.DEFAULT_SERIES_NAME); + RaceGroupSeriesDTO seriesDTO = new RaceGroupSeriesDTO(LeaderboardNameConstants.DEFAULT_SERIES_NAME); raceGroup.getSeries().add(seriesDTO); FleetDTO fleetDTO = new FleetDTO(LeaderboardNameConstants.DEFAULT_FLEET_NAME, 0, null); seriesDTO.getFleets().add(fleetDTO); seriesDTO.getRaceColumns().addAll(convertToRaceColumnDTOs(leaderboard.getRaceColumns())); - for (Competitor c : leaderboard.getCompetitors()) { - if (c.getBoat() != null && c.getBoat().getBoatClass() != null) { + for(Competitor c: leaderboard.getCompetitors()) { + if(c.getBoat() != null && c.getBoat().getBoatClass() != null) { raceGroup.boatClass = c.getBoat().getBoatClass().getDisplayName(); } } @@ -3751,17 +3600,16 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S return raceGroups; } + /** - * The name of the regatta to be shown on the regatta overview webpage is retrieved from the name of the - * {@link Leaderboard}. Since regattas are not always represented by a {@link Regatta} object in the Sailing Suite - * but need to be shown on the regatta overview page, the leaderboard is used as the representative of the sailing - * regatta. When a display name is set for a leaderboard, this name is favored against the (mostly technical) - * regatta name as the display name represents the publicly visible name of the regatta.
- * When the leaderboard is a {@link RegattaLeaderboard} the name of the {@link Regatta} is used, otherwise the - * leaderboard is a {@link FlexibleLeaderboard} and it's name is used as the last option. - * - * @param leaderboard - * The {@link Leaderboard} from which the name is be retrieved + * The name of the regatta to be shown on the regatta overview webpage is retrieved from the name of the {@link Leaderboard}. Since regattas are + * not always represented by a {@link Regatta} object in the Sailing Suite but need to be shown on the regatta overview page, the leaderboard is + * used as the representative of the sailing regatta. When a display name is set for a leaderboard, this name is favored against the (mostly technical) + * regatta name as the display name represents the publicly visible name of the regatta. + *
+ * When the leaderboard is a {@link RegattaLeaderboard} the name of the {@link Regatta} is used, otherwise the leaderboard + * is a {@link FlexibleLeaderboard} and it's name is used as the last option. + * @param leaderboard The {@link Leaderboard} from which the name is be retrieved * @return the name of the regatta to be shown on the regatta overview page */ private String getRegattaNameFromLeaderboard(Leaderboard leaderboard) { @@ -3785,21 +3633,20 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S removeRegatta(regatta); } } - + @Override public void removeRegatta(RegattaIdentifier regattaIdentifier) { getService().apply(new RemoveRegatta(regattaIdentifier)); } - + @Override public void removeSeries(RegattaIdentifier identifier, String seriesName) { getService().apply(new RemoveSeries(identifier, seriesName)); } private RaceColumnInSeriesDTO convertToRaceColumnInSeriesDTO(RaceColumnInSeries raceColumnInSeries) { - - RaceColumnInSeriesDTO raceColumnInSeriesDTO = new RaceColumnInSeriesDTO(raceColumnInSeries.getSeries() - .getName(), raceColumnInSeries.getRegatta().getName()); + RaceColumnInSeriesDTO raceColumnInSeriesDTO = new RaceColumnInSeriesDTO(raceColumnInSeries.getSeries().getName(), + raceColumnInSeries.getRegatta().getName()); fillRaceColumnDTO(raceColumnInSeries, raceColumnInSeriesDTO); return raceColumnInSeriesDTO; } @@ -3814,22 +3661,20 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } @Override - public List addRaceColumnsToSeries(RegattaIdentifier regattaIdentifier, String seriesName, - List columnNames) { + public List addRaceColumnsToSeries(RegattaIdentifier regattaIdentifier, String seriesName, List columnNames) { List result = new ArrayList(); - for (String columnName : columnNames) { - RaceColumnInSeries raceColumnInSeries = getService().apply( - new AddColumnToSeries(regattaIdentifier, seriesName, columnName)); - if (raceColumnInSeries != null) { + for(String columnName: columnNames) { + RaceColumnInSeries raceColumnInSeries = getService().apply(new AddColumnToSeries(regattaIdentifier, seriesName, columnName)); + if(raceColumnInSeries != null) { result.add(convertToRaceColumnInSeriesDTO(raceColumnInSeries)); } } return result; } - + @Override - public void updateSeries(RegattaIdentifier regattaIdentifier, String seriesName, String newSeriesName, - boolean isMedal, int[] resultDiscardingThresholds, boolean startsWithZeroScore, + public void updateSeries(RegattaIdentifier regattaIdentifier, String seriesName, String newSeriesName, boolean isMedal, + int[] resultDiscardingThresholds, boolean startsWithZeroScore, boolean firstColumnIsNonDiscardableCarryForward, boolean hasSplitFleetContiguousScoring, List fleets) { getService().apply( @@ -3839,21 +3684,18 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } @Override - public RaceColumnInSeriesDTO addRaceColumnToSeries(RegattaIdentifier regattaIdentifier, String seriesName, - String columnName) { + public RaceColumnInSeriesDTO addRaceColumnToSeries(RegattaIdentifier regattaIdentifier, String seriesName, String columnName) { RaceColumnInSeriesDTO result = null; - RaceColumnInSeries raceColumnInSeries = getService().apply( - new AddColumnToSeries(regattaIdentifier, seriesName, columnName)); - if (raceColumnInSeries != null) { + RaceColumnInSeries raceColumnInSeries = getService().apply(new AddColumnToSeries(regattaIdentifier, seriesName, columnName)); + if(raceColumnInSeries != null) { result = convertToRaceColumnInSeriesDTO(raceColumnInSeries); } return result; } @Override - public void removeRaceColumnsFromSeries(RegattaIdentifier regattaIdentifier, String seriesName, - List columnNames) { - for (String columnName : columnNames) { + public void removeRaceColumnsFromSeries(RegattaIdentifier regattaIdentifier, String seriesName, List columnNames) { + for(String columnName: columnNames) { getService().apply(new RemoveColumnFromSeries(regattaIdentifier, seriesName, columnName)); } } @@ -3875,21 +3717,263 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S @Override public RegattaDTO createRegatta(String regattaName, String boatClassName, Date startDate, Date endDate, - RegattaCreationParametersDTO seriesNamesWithFleetNamesAndFleetOrderingAndMedal, boolean persistent, - ScoringSchemeType scoringSchemeType, UUID defaultCourseAreaId, boolean useStartTimeInference) { + RegattaCreationParametersDTO seriesNamesWithFleetNamesAndFleetOrderingAndMedal, + boolean persistent, ScoringSchemeType scoringSchemeType, UUID defaultCourseAreaId, boolean useStartTimeInference) { TimePoint startTimePoint = startDate != null ? new MillisecondsTimePoint(startDate) : null; TimePoint endTimePoint = endDate != null ? new MillisecondsTimePoint(endDate) : null; Regatta regatta = getService().apply( - new AddSpecificRegatta(regattaName, boatClassName, UUID.randomUUID(), + new AddSpecificRegatta( regattaName, boatClassName, startTimePoint, endTimePoint, UUID.randomUUID(), - .createScoringScheme(scoringSchemeType), defaultCourseAreaId, useStartTimeInference)); + seriesNamesWithFleetNamesAndFleetOrderingAndMedal, + persistent, baseDomainFactory.createScoringScheme(scoringSchemeType), defaultCourseAreaId, useStartTimeInference)); return convertToRegattaDTO(regatta); } - private void createRegattaFromRegattaDTO(RegattaDTO regatta){ - this.createRegatta(regatta.getName(), regatta.boatClass.getName(), - new RegattaCreationParametersDTO(getSeriesCreationParameters(regatta)), - true, regatta.scoringScheme, regatta.defaultCourseAreaUuid, regatta.useStartTimeInference); + @Override + public RegattaScoreCorrectionDTO getScoreCorrections(String scoreCorrectionProviderName, String eventName, + String boatClassName, Date timePointWhenResultPublished) throws Exception { + RegattaScoreCorrectionDTO result = null; + for (ScoreCorrectionProvider scp : getAllScoreCorrectionProviders()) { + if (scp.getName().equals(scoreCorrectionProviderName)) { + result = createScoreCorrection(scp.getScoreCorrections(eventName, boatClassName, + new MillisecondsTimePoint(timePointWhenResultPublished))); + break; + } + } + return result; + } + + private RegattaScoreCorrectionDTO createScoreCorrection(RegattaScoreCorrections scoreCorrections) { + // Key is the race name or number as String; values are maps whose key is the sailID. + LinkedHashMap> map = new LinkedHashMap>(); + for (ScoreCorrectionsForRace sc4r : scoreCorrections.getScoreCorrectionsForRaces()) { + Map entryMap = new HashMap(); + for (String sailID : sc4r.getSailIDs()) { + entryMap.put(sailID, createScoreCorrectionEntryDTO(sc4r.getScoreCorrectionForCompetitor(sailID))); + } + map.put(sc4r.getRaceNameOrNumber(), entryMap); + } + return new RegattaScoreCorrectionDTO(scoreCorrections.getProvider().getName(), map); + } + + private ScoreCorrectionEntryDTO createScoreCorrectionEntryDTO( + ScoreCorrectionForCompetitorInRace scoreCorrectionForCompetitor) { + return new ScoreCorrectionEntryDTO(scoreCorrectionForCompetitor.getPoints(), + scoreCorrectionForCompetitor.isDiscarded(), scoreCorrectionForCompetitor.getMaxPointsReason()); + } + + @Override + public List getUrlResultProviderNames() { + List result = new ArrayList(); + for (ScoreCorrectionProvider scp : getAllScoreCorrectionProviders()) { + if (scp instanceof ResultUrlProvider) { + result.add(scp.getName()); + } + } + return result; + } + + private ResultUrlProvider getUrlBasedScoreCorrectionProvider(String resultProviderName) { + ResultUrlProvider result = null; + for (ScoreCorrectionProvider scp : getAllScoreCorrectionProviders()) { + if (scp instanceof ResultUrlProvider && scp.getName().equals(resultProviderName)) { + result = (ResultUrlProvider) scp; + break; + } + } + return result; + } + + @Override + public List getRemoteSailingServerReferences() { + List result = new ArrayList(); + for (Entry, Exception>> remoteSailingServerRefAndItsCachedEvent : + getService().getPublicEventsOfAllSailingServers().entrySet()) { + RemoteSailingServerReferenceDTO dto = createRemoteSailingServerReferenceDTO( + remoteSailingServerRefAndItsCachedEvent.getKey(), + remoteSailingServerRefAndItsCachedEvent.getValue()); + result.add(dto); + } + return result; + } + + @Override + public void removeSailingServers(Set namesOfSailingServersToRemove) throws Exception { + for (String serverName : namesOfSailingServersToRemove) { + getService().apply(new RemoveRemoteSailingServerReference(serverName)); + } + } + + @Override + public RemoteSailingServerReferenceDTO addRemoteSailingServerReference(RemoteSailingServerReferenceDTO sailingServer) throws MalformedURLException { + final String expandedURL; + if (sailingServer.getUrl().contains("//")) { + expandedURL = sailingServer.getUrl(); + } else { + expandedURL = "http://" + sailingServer.getUrl(); + } + URL serverURL = new URL(expandedURL); + RemoteSailingServerReference serverRef = getService().apply(new AddRemoteSailingServerReference(sailingServer.getName(), serverURL)); + com.sap.sse.common.Util.Pair, Exception> eventsOrException = getService().updateRemoteServerEventCacheSynchronously(serverRef); + return createRemoteSailingServerReferenceDTO(serverRef, eventsOrException); + + } + + @Override + public List getResultImportUrls(String resultProviderName) { + List result = new ArrayList(); + ResultUrlProvider urlBasedScoreCorrectionProvider = getUrlBasedScoreCorrectionProvider(resultProviderName); + ResultUrlRegistry resultUrlRegistry = getResultUrlRegistry(); + if (urlBasedScoreCorrectionProvider != null) { + Iterable allUrls = resultUrlRegistry.getResultUrls(resultProviderName); + for (URL url : allUrls) { + result.add(url.toString()); + } + } + return result; + } + + @Override + public void removeResultImportURLs(String resultProviderName, Set toRemove) throws Exception { + ResultUrlProvider urlBasedScoreCorrectionProvider = getUrlBasedScoreCorrectionProvider(resultProviderName); + ResultUrlRegistry resultUrlRegistry = getResultUrlRegistry(); + if (urlBasedScoreCorrectionProvider != null) { + for (String urlToRemove : toRemove) { + resultUrlRegistry.unregisterResultUrl(resultProviderName, new URL(urlToRemove)); + } + } + } + + @Override + public void addResultImportUrl(String resultProviderName, String url) throws Exception { + ResultUrlProvider urlBasedScoreCorrectionProvider = getUrlBasedScoreCorrectionProvider(resultProviderName); + if (urlBasedScoreCorrectionProvider != null) { + ResultUrlRegistry resultUrlRegistry = getResultUrlRegistry(); + resultUrlRegistry.registerResultUrl(resultProviderName, new URL(url)); + } + } + + private ResultUrlRegistry getResultUrlRegistry() { + return resultUrlRegistryServiceTracker.getService(); + } + + @Override + public List getOverallLeaderboardNamesContaining(String leaderboardName) { + Leaderboard leaderboard = getService().getLeaderboardByName(leaderboardName); + if (leaderboard == null) { + throw new IllegalArgumentException("Couldn't find leaderboard named "+leaderboardName); + } + List result = new ArrayList(); + for (Map.Entry leaderboardEntry : getService().getLeaderboards().entrySet()) { + if (leaderboardEntry.getValue() instanceof MetaLeaderboard) { + MetaLeaderboard metaLeaderboard = (MetaLeaderboard) leaderboardEntry.getValue(); + if (Util.contains(metaLeaderboard.getLeaderboards(), leaderboard)) { + result.add(leaderboardEntry.getKey()); + } + } + } + return result; + } + + @Override + public List getPreviousSwissTimingArchiveConfigurations() { + Iterable configs = swissTimingAdapterPersistence.getSwissTimingArchiveConfigurations(); + List result = new ArrayList(); + for (SwissTimingArchiveConfiguration stArchiveConfig : configs) { + result.add(new SwissTimingArchiveConfigurationDTO(stArchiveConfig.getJsonUrl())); + } + return result; + } + + @Override + public void storeSwissTimingArchiveConfiguration(String swissTimingJsonUrl) { + swissTimingAdapterPersistence.storeSwissTimingArchiveConfiguration(swissTimingFactory.createSwissTimingArchiveConfiguration( + swissTimingJsonUrl)); + } + + @Override + public PolarSheetGenerationResponse generatePolarSheetForRaces(List selectedRaces, + PolarSheetGenerationSettings settings, String name) throws Exception { + String id = UUID.randomUUID().toString(); + RacingEventService service = getService(); + Set trackedRaces = new HashSet(); + for (RegattaAndRaceIdentifier race : selectedRaces) { + trackedRaces.add(service.getTrackedRace(race)); + } + PolarSheetGenerationWorker genWorker = new PolarSheetGenerationWorker(trackedRaces, settings, executor); + genWorker.startPolarSheetGeneration(); + if (name == null || name.isEmpty()) { + name = getCommonBoatClass(trackedRaces); + } + PolarSheetsData result = genWorker.get(); + return new PolarSheetGenerationResponseImpl(id, name, result); + } + + private String getCommonBoatClass(Set trackedRaces) { + BoatClass boatClass = null; + for (TrackedRace race : trackedRaces) { + if (boatClass == null) { + boatClass = race.getRace().getBoatClass(); + } + if (!boatClass.getName().toLowerCase().matches(race.getRace().getBoatClass().getName().toLowerCase())) { + return "Mixed"; + } + } + + return boatClass.getName(); + } + + protected com.sap.sailing.domain.base.DomainFactory getBaseDomainFactory() { + return baseDomainFactory; + } + + @Override + public List getRaceStateEntriesForLeaderboard(String leaderboardName, + boolean showOnlyCurrentlyRunningRaces, boolean showOnlyRacesOfSameDay, final List visibleRegattas) + throws NoWindException, InterruptedException, ExecutionException { + Leaderboard leaderboard = getService().getLeaderboardByName(leaderboardName); + return getRaceStateEntriesForLeaderboard(leaderboard, showOnlyCurrentlyRunningRaces, showOnlyRacesOfSameDay, visibleRegattas); + } + + private List getRaceStateEntriesForLeaderboard(Leaderboard leaderboard, + boolean showOnlyCurrentlyRunningRaces, boolean showOnlyRacesOfSameDay, final List visibleRegattas) + throws NoWindException, InterruptedException, ExecutionException { + List result = new ArrayList(); + Calendar dayToCheck = Calendar.getInstance(); + dayToCheck.setTime(new Date()); + CourseArea usedCourseArea = leaderboard.getDefaultCourseArea(); + if (leaderboard != null) { + if (visibleRegattas != null && !visibleRegattas.contains(leaderboard.getName())) { + return result; + } + String regattaName = getRegattaNameFromLeaderboard(leaderboard); + if (leaderboard instanceof RegattaLeaderboard) { + RegattaLeaderboard regattaLeaderboard = (RegattaLeaderboard) leaderboard; + for (Series series : regattaLeaderboard.getRegatta().getSeries()) { + Map> entriesPerFleet = new HashMap>(); + for (RaceColumn raceColumn : series.getRaceColumns()) { + getRegattaOverviewEntries(showOnlyRacesOfSameDay, dayToCheck, + usedCourseArea, leaderboard, regattaName, series.getName(), raceColumn, entriesPerFleet); + } + result.addAll(getRegattaOverviewEntriesToBeShown(showOnlyCurrentlyRunningRaces, entriesPerFleet)); + } + + } else { + Map> entriesPerFleet = new HashMap>(); + for (RaceColumn raceColumn : leaderboard.getRaceColumns()) { + getRegattaOverviewEntries(showOnlyRacesOfSameDay, dayToCheck, usedCourseArea, + leaderboard, regattaName, LeaderboardNameConstants.DEFAULT_SERIES_NAME, raceColumn, entriesPerFleet); + } + result.addAll(getRegattaOverviewEntriesToBeShown(showOnlyCurrentlyRunningRaces, entriesPerFleet)); + } + } + return result; + } + + private void createRegattaFromRegattaDTO(RegattaDTO regatta) { + this.createRegatta(regatta.getName(), regatta.boatClass.getName(), regatta.startDate, regatta.endDate, + new RegattaCreationParametersDTO(getSeriesCreationParameters(regatta)), + true, regatta.scoringScheme, regatta.defaultCourseAreaUuid, regatta.useStartTimeInference); } private SeriesParameters getSeriesParameters(SeriesDTO seriesDTO) { @@ -3905,7 +3989,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S private LinkedHashMap getSeriesCreationParameters(RegattaDTO regattaDTO) { LinkedHashMap seriesCreationParams = new LinkedHashMap(); for (SeriesDTO series : regattaDTO.series){ - SeriesParameters seriesParameters = getSeriesParameters(series); + SeriesParameters seriesParameters = getSeriesParameters(series); seriesCreationParams.put(series.getName(), new SeriesCreationParametersDTO(series.getFleets(), false, seriesParameters.isStartswithZeroScore(), seriesParameters.isFirstColumnIsNonDiscardableCarryForward(), seriesParameters.getDiscardingThresholds(), seriesParameters.isHasSplitFleetContiguousScoring())); @@ -3928,12 +4012,12 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S private List createRegattasWithRaces(RegattaDTO regatta, String eventName) { List leaderboardNames = new ArrayList(); for (SeriesDTO series : regatta.series) { - List raceNames = new ArrayList(); - for (RaceColumnDTO raceColumnInSeries : series.getRaceColumns()) { - raceNames.add(raceColumnInSeries.getName()); - } + List raceNames = new ArrayList(); + for (RaceColumnDTO raceColumnInSeries : series.getRaceColumns()) { + raceNames.add(raceColumnInSeries.getName()); + } addRaceColumnsToSeries(regatta.getRegattaIdentifier(), series.getName(), raceNames); - } + } if (getLeaderboard(regatta.getName()) == null) { leaderboardNames.add(regatta.getName()); @@ -3944,7 +4028,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S @Override public void createRegattaStructure(final Iterable regattas, final EventDTO newEvent) { - final List leaderboardNames = new ArrayList(); + final List leaderboardNames = new ArrayList(); for(RegattaDTO regatta: regattas){ createRegattaFromRegattaDTO(regatta); leaderboardNames.addAll(createRegattasWithRaces(regatta, newEvent.getName())); @@ -3991,262 +4075,16 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S e.printStackTrace(); } } - - @Override - public RegattaScoreCorrectionDTO getScoreCorrections(String scoreCorrectionProviderName, String eventName, - String boatClassName, Date timePointWhenResultPublished) throws Exception { - RegattaScoreCorrectionDTO result = null; - for (ScoreCorrectionProvider scp : getAllScoreCorrectionProviders()) { - if (scp.getName().equals(scoreCorrectionProviderName)) { - result = createScoreCorrection(scp.getScoreCorrections(eventName, boatClassName, - new MillisecondsTimePoint(timePointWhenResultPublished))); - break; - } - } - return result; - } - - private RegattaScoreCorrectionDTO createScoreCorrection(RegattaScoreCorrections scoreCorrections) { - // Key is the race name or number as String; values are maps whose key is the sailID. - LinkedHashMap> map = new LinkedHashMap>(); - for (ScoreCorrectionsForRace sc4r : scoreCorrections.getScoreCorrectionsForRaces()) { - Map entryMap = new HashMap(); - for (String sailID : sc4r.getSailIDs()) { - entryMap.put(sailID, createScoreCorrectionEntryDTO(sc4r.getScoreCorrectionForCompetitor(sailID))); - } - map.put(sc4r.getRaceNameOrNumber(), entryMap); - } - return new RegattaScoreCorrectionDTO(scoreCorrections.getProvider().getName(), map); - } - - private ScoreCorrectionEntryDTO createScoreCorrectionEntryDTO( - ScoreCorrectionForCompetitorInRace scoreCorrectionForCompetitor) { - return new ScoreCorrectionEntryDTO(scoreCorrectionForCompetitor.getPoints(), - scoreCorrectionForCompetitor.isDiscarded(), scoreCorrectionForCompetitor.getMaxPointsReason()); - } - - @Override - public List getUrlResultProviderNames() { - List result = new ArrayList(); - for (ScoreCorrectionProvider scp : getAllScoreCorrectionProviders()) { - if (scp instanceof ResultUrlProvider) { - result.add(scp.getName()); - } - } - return result; - } - - private ResultUrlProvider getUrlBasedScoreCorrectionProvider(String resultProviderName) { - ResultUrlProvider result = null; - for (ScoreCorrectionProvider scp : getAllScoreCorrectionProviders()) { - if (scp instanceof ResultUrlProvider && scp.getName().equals(resultProviderName)) { - result = (ResultUrlProvider) scp; - break; - } - } - return result; - } - - @Override - public List getRemoteSailingServerReferences() { - List result = new ArrayList(); - for (Entry, Exception>> remoteSailingServerRefAndItsCachedEvent : getService() - .getPublicEventsOfAllSailingServers().entrySet()) { - RemoteSailingServerReferenceDTO dto = createRemoteSailingServerReferenceDTO( - remoteSailingServerRefAndItsCachedEvent.getKey(), - remoteSailingServerRefAndItsCachedEvent.getValue()); - result.add(dto); - } - return result; - } - - @Override - public void removeSailingServers(Set namesOfSailingServersToRemove) throws Exception { - for (String serverName : namesOfSailingServersToRemove) { - getService().apply(new RemoveRemoteSailingServerReference(serverName)); - } - } - - @Override - public RemoteSailingServerReferenceDTO addRemoteSailingServerReference(RemoteSailingServerReferenceDTO sailingServer) - throws MalformedURLException { - final String expandedURL; - if (sailingServer.getUrl().contains("//")) { - expandedURL = sailingServer.getUrl(); - } else { - expandedURL = "http://" + sailingServer.getUrl(); - } - URL serverURL = new URL(expandedURL); - RemoteSailingServerReference serverRef = getService().apply( - new AddRemoteSailingServerReference(sailingServer.getName(), serverURL)); - com.sap.sse.common.Util.Pair, Exception> eventsOrException = getService() - .updateRemoteServerEventCacheSynchronously(serverRef); - return createRemoteSailingServerReferenceDTO(serverRef, eventsOrException); - - } - - @Override - public List getResultImportUrls(String resultProviderName) { - List result = new ArrayList(); - ResultUrlProvider urlBasedScoreCorrectionProvider = getUrlBasedScoreCorrectionProvider(resultProviderName); - ResultUrlRegistry resultUrlRegistry = getResultUrlRegistry(); - if (urlBasedScoreCorrectionProvider != null) { - Iterable allUrls = resultUrlRegistry.getResultUrls(resultProviderName); - for (URL url : allUrls) { - result.add(url.toString()); - } - } - return result; - } - - @Override - public void removeResultImportURLs(String resultProviderName, Set toRemove) throws Exception { - ResultUrlProvider urlBasedScoreCorrectionProvider = getUrlBasedScoreCorrectionProvider(resultProviderName); - ResultUrlRegistry resultUrlRegistry = getResultUrlRegistry(); - if (urlBasedScoreCorrectionProvider != null) { - for (String urlToRemove : toRemove) { - resultUrlRegistry.unregisterResultUrl(resultProviderName, new URL(urlToRemove)); - } - } - } - - @Override - public void addResultImportUrl(String resultProviderName, String url) throws Exception { - ResultUrlProvider urlBasedScoreCorrectionProvider = getUrlBasedScoreCorrectionProvider(resultProviderName); - if (urlBasedScoreCorrectionProvider != null) { - ResultUrlRegistry resultUrlRegistry = getResultUrlRegistry(); - resultUrlRegistry.registerResultUrl(resultProviderName, new URL(url)); - } - } - - private ResultUrlRegistry getResultUrlRegistry() { - return resultUrlRegistryServiceTracker.getService(); - } - - @Override - public List getOverallLeaderboardNamesContaining(String leaderboardName) { - Leaderboard leaderboard = getService().getLeaderboardByName(leaderboardName); - if (leaderboard == null) { - throw new IllegalArgumentException("Couldn't find leaderboard named " + leaderboardName); - } - List result = new ArrayList(); - for (Map.Entry leaderboardEntry : getService().getLeaderboards().entrySet()) { - if (leaderboardEntry.getValue() instanceof MetaLeaderboard) { - MetaLeaderboard metaLeaderboard = (MetaLeaderboard) leaderboardEntry.getValue(); - if (Util.contains(metaLeaderboard.getLeaderboards(), leaderboard)) { - result.add(leaderboardEntry.getKey()); - } - } - } - return result; - } - - @Override - public List getPreviousSwissTimingArchiveConfigurations() { - Iterable configs = swissTimingAdapterPersistence - .getSwissTimingArchiveConfigurations(); - List result = new ArrayList(); - for (SwissTimingArchiveConfiguration stArchiveConfig : configs) { - result.add(new SwissTimingArchiveConfigurationDTO(stArchiveConfig.getJsonUrl())); - } - return result; - } - - @Override - public void storeSwissTimingArchiveConfiguration(String swissTimingJsonUrl) { - swissTimingAdapterPersistence.storeSwissTimingArchiveConfiguration(swissTimingFactory - .createSwissTimingArchiveConfiguration(swissTimingJsonUrl)); - } - - @Override - public PolarSheetGenerationResponse generatePolarSheetForRaces(List selectedRaces, - PolarSheetGenerationSettings settings, String name) throws Exception { - String id = UUID.randomUUID().toString(); - RacingEventService service = getService(); - Set trackedRaces = new HashSet(); - for (RegattaAndRaceIdentifier race : selectedRaces) { - trackedRaces.add(service.getTrackedRace(race)); - } - PolarSheetGenerationWorker genWorker = new PolarSheetGenerationWorker(trackedRaces, settings, executor); - genWorker.startPolarSheetGeneration(); - if (name == null || name.isEmpty()) { - name = getCommonBoatClass(trackedRaces); - } - PolarSheetsData result = genWorker.get(); - return new PolarSheetGenerationResponseImpl(id, name, result); - } - - private String getCommonBoatClass(Set trackedRaces) { - BoatClass boatClass = null; - for (TrackedRace race : trackedRaces) { - if (boatClass == null) { - boatClass = race.getRace().getBoatClass(); - } - if (!boatClass.getName().toLowerCase().matches(race.getRace().getBoatClass().getName().toLowerCase())) { - return "Mixed"; - } - } - - return boatClass.getName(); - } - - protected com.sap.sailing.domain.base.DomainFactory getBaseDomainFactory() { - return baseDomainFactory; - } - - @Override - public List getRaceStateEntriesForLeaderboard(String leaderboardName, - boolean showOnlyCurrentlyRunningRaces, boolean showOnlyRacesOfSameDay, final List visibleRegattas) - throws NoWindException, InterruptedException, ExecutionException { - Leaderboard leaderboard = getService().getLeaderboardByName(leaderboardName); - return getRaceStateEntriesForLeaderboard(leaderboard, showOnlyCurrentlyRunningRaces, showOnlyRacesOfSameDay, - visibleRegattas); - } - - private List getRaceStateEntriesForLeaderboard(Leaderboard leaderboard, - boolean showOnlyCurrentlyRunningRaces, boolean showOnlyRacesOfSameDay, final List visibleRegattas) - throws NoWindException, InterruptedException, ExecutionException { - List result = new ArrayList(); - Calendar dayToCheck = Calendar.getInstance(); - dayToCheck.setTime(new Date()); - CourseArea usedCourseArea = leaderboard.getDefaultCourseArea(); - if (leaderboard != null) { - if (visibleRegattas != null && !visibleRegattas.contains(leaderboard.getName())) { - return result; - } - String regattaName = getRegattaNameFromLeaderboard(leaderboard); - if (leaderboard instanceof RegattaLeaderboard) { - RegattaLeaderboard regattaLeaderboard = (RegattaLeaderboard) leaderboard; - for (Series series : regattaLeaderboard.getRegatta().getSeries()) { - Map> entriesPerFleet = new HashMap>(); - for (RaceColumn raceColumn : series.getRaceColumns()) { - getRegattaOverviewEntries(showOnlyRacesOfSameDay, dayToCheck, usedCourseArea, leaderboard, - regattaName, series.getName(), raceColumn, entriesPerFleet); - } - result.addAll(getRegattaOverviewEntriesToBeShown(showOnlyCurrentlyRunningRaces, entriesPerFleet)); - } - - } else { - Map> entriesPerFleet = new HashMap>(); - for (RaceColumn raceColumn : leaderboard.getRaceColumns()) { - getRegattaOverviewEntries(showOnlyRacesOfSameDay, dayToCheck, usedCourseArea, leaderboard, - regattaName, LeaderboardNameConstants.DEFAULT_SERIES_NAME, raceColumn, entriesPerFleet); - } - result.addAll(getRegattaOverviewEntriesToBeShown(showOnlyCurrentlyRunningRaces, entriesPerFleet)); - } - } - return result; - } - + @Override public List getRaceStateEntriesForRaceGroup(UUID eventId, List visibleCourseAreaIds, List visibleRegattas, boolean showOnlyCurrentlyRunningRaces, boolean showOnlyRacesOfSameDay) throws NoWindException, InterruptedException, ExecutionException { List result = new ArrayList(); - + Calendar dayToCheck = Calendar.getInstance(); dayToCheck.setTime(new Date()); - + Event event = getService().getEvent(eventId); if (event != null) { for (CourseArea courseArea : event.getVenue().getCourseAreas()) { @@ -4264,13 +4102,14 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S return result; } - private void getRegattaOverviewEntries(boolean showOnlyRacesOfSameDay, Calendar dayToCheck, CourseArea courseArea, - Leaderboard leaderboard, String regattaName, String seriesName, RaceColumn raceColumn, + private void getRegattaOverviewEntries(boolean showOnlyRacesOfSameDay, Calendar dayToCheck, + CourseArea courseArea, Leaderboard leaderboard, String regattaName, String seriesName, RaceColumn raceColumn, Map> entriesPerFleet) { for (Fleet fleet : raceColumn.getFleets()) { - RegattaOverviewEntryDTO entry = createRegattaOverviewEntryDTO(courseArea, leaderboard, regattaName, - seriesName, raceColumn, fleet, showOnlyRacesOfSameDay, dayToCheck); + RegattaOverviewEntryDTO entry = createRegattaOverviewEntryDTO(courseArea, + leaderboard, regattaName, seriesName, raceColumn, fleet, + showOnlyRacesOfSameDay, dayToCheck); if (entry != null) { addRegattaOverviewEntryToEntriesPerFleet(entriesPerFleet, fleet, entry); } @@ -4289,20 +4128,20 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S if (entry.raceInfo.lastStatus.equals(RaceLogRaceStatus.FINISHED)) { finishedEntries.add(entry); } else if (entry.raceInfo.lastStatus.equals(RaceLogRaceStatus.UNSCHEDULED)) { - // don't filter when the race is unscheduled and aborted before + //don't filter when the race is unscheduled and aborted before if (!entry.raceInfo.isRaceAbortedInPassBefore) { result.remove(entry); } - + } } } if (!finishedEntries.isEmpty()) { - // keep the last finished race in the list to be shown + //keep the last finished race in the list to be shown int indexOfLastElement = finishedEntries.size() - 1; finishedEntries.remove(indexOfLastElement); - - // ... and remove all other finished races + + //... and remove all other finished races result.removeAll(finishedEntries); } } @@ -4313,14 +4152,13 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S private void addRegattaOverviewEntryToEntriesPerFleet(Map> entriesPerFleet, Fleet fleet, RegattaOverviewEntryDTO entry) { if (!entriesPerFleet.containsKey(fleet.getName())) { - entriesPerFleet.put(fleet.getName(), new ArrayList()); + entriesPerFleet.put(fleet.getName(), new ArrayList()); } entriesPerFleet.get(fleet.getName()).add(entry); } - + private RegattaOverviewEntryDTO createRegattaOverviewEntryDTO(CourseArea courseArea, Leaderboard leaderboard, - String regattaName, String seriesName, RaceColumn raceColumn, Fleet fleet, boolean showOnlyRacesOfSameDay, - Calendar dayToCheck) { + String regattaName, String seriesName, RaceColumn raceColumn, Fleet fleet, boolean showOnlyRacesOfSameDay, Calendar dayToCheck) { RegattaOverviewEntryDTO entry = new RegattaOverviewEntryDTO(); if (courseArea != null) { entry.courseAreaName = courseArea.getName(); @@ -4333,16 +4171,15 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S entry.regattaName = leaderboard.getName(); entry.raceInfo = createRaceInfoDTO(seriesName, raceColumn, fleet); entry.currentServerTime = new Date(); - + if (showOnlyRacesOfSameDay) { - if (!RaceStateOfSameDayHelper.isRaceStateOfSameDay(entry.raceInfo.startTime, entry.raceInfo.finishedTime, - entry.raceInfo.abortingTimeInPassBefore, dayToCheck)) { + if (!RaceStateOfSameDayHelper.isRaceStateOfSameDay(entry.raceInfo.startTime, entry.raceInfo.finishedTime, entry.raceInfo.abortingTimeInPassBefore, dayToCheck)) { entry = null; } } return entry; } - + @Override public String getBuildVersion() { return BuildVersion.getBuildVersion(); @@ -4389,18 +4226,17 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S public RaceLogDTO getRaceLog(String leaderboardName, RaceColumnDTO raceColumnDTO, FleetDTO fleet) { RaceLogDTO result = null; RaceLog raceLog = getService().getRaceLog(leaderboardName, raceColumnDTO.getName(), fleet.getName()); - if (raceLog != null) { + if(raceLog != null) { List entries = new ArrayList(); - result = new RaceLogDTO(leaderboardName, raceColumnDTO.getName(), fleet.getName(), - raceLog.getCurrentPassId(), entries); + result = new RaceLogDTO(leaderboardName, raceColumnDTO.getName(), fleet.getName(), raceLog.getCurrentPassId(), entries); raceLog.lockForRead(); try { - for (RaceLogEvent raceLogEvent : raceLog.getRawFixes()) { - RaceLogEventDTO entry = new RaceLogEventDTO(raceLogEvent.getPassId(), raceLogEvent.getAuthor() - .getName(), raceLogEvent.getAuthor().getPriority(), + for(RaceLogEvent raceLogEvent: raceLog.getRawFixes()) { + RaceLogEventDTO entry = new RaceLogEventDTO(raceLogEvent.getPassId(), + raceLogEvent.getAuthor().getName(), raceLogEvent.getAuthor().getPriority(), raceLogEvent.getCreatedAt() != null ? raceLogEvent.getCreatedAt().asDate() : null, - raceLogEvent.getLogicalTimePoint() != null ? raceLogEvent.getLogicalTimePoint().asDate() - : null, raceLogEvent.getClass().getSimpleName(), raceLogEvent.getShortInfo()); + raceLogEvent.getLogicalTimePoint() != null ? raceLogEvent.getLogicalTimePoint().asDate() : null, + raceLogEvent.getClass().getSimpleName(), raceLogEvent.getShortInfo()); entries.add(entry); } } finally { @@ -4573,7 +4409,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S return importOperationId; } - + private URL createUrl(String host, Integer port, String path, String query) throws Exception { URL url; if (query != null) { @@ -4635,24 +4471,21 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S @Override public CompetitorDTO addOrUpdateCompetitor(CompetitorDTO competitor) { - Nationality nationality = (competitor.getThreeLetterIocCountryCode() == null || competitor - .getThreeLetterIocCountryCode().isEmpty()) ? null : getBaseDomainFactory().getOrCreateNationality( - competitor.getThreeLetterIocCountryCode()); - // new competitor - if (competitor.getIdAsString() == null || competitor.getIdAsString().isEmpty()) { - BoatClass boatClass = getBaseDomainFactory().getOrCreateBoatClass(competitor.getBoatClass().getName()); - DynamicPerson sailor = new PersonImpl(competitor.getName(), nationality, null, null); - DynamicTeam team = new TeamImpl(competitor.getName() + " team", Collections.singleton(sailor), null); - DynamicBoat boat = new BoatImpl(competitor.getName() + " boat", boatClass, competitor.getSailID()); - return getBaseDomainFactory().convertToCompetitorDTO( - getBaseDomainFactory().getOrCreateCompetitor(UUID.randomUUID(), competitor.getName(), - competitor.getColor(), team, boat)); - } - + Nationality nationality = (competitor.getThreeLetterIocCountryCode() == null || competitor.getThreeLetterIocCountryCode().isEmpty()) ? null : + getBaseDomainFactory().getOrCreateNationality(competitor.getThreeLetterIocCountryCode()); + //new competitor + if (competitor.getIdAsString() == null || competitor.getIdAsString().isEmpty()) { + BoatClass boatClass = getBaseDomainFactory().getOrCreateBoatClass(competitor.getBoatClass().getName()); + DynamicPerson sailor = new PersonImpl(competitor.getName(), nationality, null, null); + DynamicTeam team = new TeamImpl(competitor.getName() + " team", Collections.singleton(sailor), null); + DynamicBoat boat = new BoatImpl(competitor.getName() + " boat", boatClass, competitor.getSailID()); + return getBaseDomainFactory().convertToCompetitorDTO(getBaseDomainFactory().getOrCreateCompetitor(UUID.randomUUID(), competitor.getName(), competitor.getColor(), + team, boat)); + } + return getBaseDomainFactory().convertToCompetitorDTO( - getService().apply( - new UpdateCompetitor(competitor.getIdAsString(), competitor.getName(), competitor.getColor(), - competitor.getSailID(), nationality))); + getService().apply(new UpdateCompetitor(competitor.getIdAsString(), competitor.getName(), + competitor.getColor(), competitor.getSailID(), nationality))); } @Override @@ -4663,12 +4496,12 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } getService().apply(new AllowCompetitorResetToDefaults(competitorIdsAsStrings)); } - + @Override public List getDeviceConfigurationMatchers() { List configs = new ArrayList(); - for (Entry entry : getService().getAllDeviceConfigurations() - .entrySet()) { + for (Entry entry : + getService().getAllDeviceConfigurations().entrySet()) { DeviceConfigurationMatcher matcher = entry.getKey(); configs.add(convertToDeviceConfigurationMatcherDTO(matcher)); } @@ -4687,8 +4520,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } @Override - public DeviceConfigurationMatcherDTO createOrUpdateDeviceConfiguration(DeviceConfigurationMatcherDTO matcherDTO, - DeviceConfigurationDTO configurationDTO) { + public DeviceConfigurationMatcherDTO createOrUpdateDeviceConfiguration(DeviceConfigurationMatcherDTO matcherDTO, DeviceConfigurationDTO configurationDTO) { DeviceConfigurationMatcher matcher = convertToDeviceConfigurationMatcher(matcherDTO.type, matcherDTO.clients); DeviceConfiguration configuration = convertToDeviceConfiguration(configurationDTO); getService().createOrUpdateDeviceConfiguration(matcher, configuration); @@ -4704,20 +4536,21 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S private DeviceConfigurationMatcherDTO convertToDeviceConfigurationMatcherDTO(DeviceConfigurationMatcher matcher) { List clients = new ArrayList(); - + if (matcher instanceof DeviceConfigurationMatcherSingle) { - clients.add(((DeviceConfigurationMatcherSingle) matcher).getClientIdentifier()); + clients.add(((DeviceConfigurationMatcherSingle)matcher).getClientIdentifier()); } else if (matcher instanceof DeviceConfigurationMatcherMulti) { - Util.addAll(((DeviceConfigurationMatcherMulti) matcher).getClientIdentifiers(), clients); + Util.addAll(((DeviceConfigurationMatcherMulti)matcher).getClientIdentifiers(), clients); } - - DeviceConfigurationMatcherDTO dto = new DeviceConfigurationMatcherDTO(matcher.getMatcherType(), clients, + + DeviceConfigurationMatcherDTO dto = new DeviceConfigurationMatcherDTO( + matcher.getMatcherType(), + clients, matcher.getMatchingRank()); return dto; } - private DeviceConfigurationMatcher convertToDeviceConfigurationMatcher(DeviceConfigurationMatcherType type, - List clientIds) { + private DeviceConfigurationMatcher convertToDeviceConfigurationMatcher(DeviceConfigurationMatcherType type, List clientIds) { return baseDomainFactory.getOrCreateDeviceConfigurationMatcher(type, clientIds); } @@ -4738,10 +4571,10 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S return null; } DeviceConfigurationDTO.RegattaConfigurationDTO dto = new DeviceConfigurationDTO.RegattaConfigurationDTO(); - + dto.defaultRacingProcedureType = configuration.getDefaultRacingProcedureType(); dto.defaultCourseDesignerMode = configuration.getDefaultCourseDesignerMode(); - + if (configuration.getRRS26Configuration() != null) { dto.rrs26Configuration = new DeviceConfigurationDTO.RegattaConfigurationDTO.RRS26ConfigurationDTO(); dto.rrs26Configuration.classFlag = configuration.getRRS26Configuration().getClassFlag(); @@ -4751,11 +4584,9 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S if (configuration.getGateStartConfiguration() != null) { dto.gateStartConfiguration = new DeviceConfigurationDTO.RegattaConfigurationDTO.GateStartConfigurationDTO(); dto.gateStartConfiguration.classFlag = configuration.getGateStartConfiguration().getClassFlag(); - dto.gateStartConfiguration.hasInidividualRecall = configuration.getGateStartConfiguration() - .hasInidividualRecall(); + dto.gateStartConfiguration.hasInidividualRecall = configuration.getGateStartConfiguration().hasInidividualRecall(); dto.gateStartConfiguration.hasPathfinder = configuration.getGateStartConfiguration().hasPathfinder(); - dto.gateStartConfiguration.hasAdditionalGolfDownTime = configuration.getGateStartConfiguration() - .hasAdditionalGolfDownTime(); + dto.gateStartConfiguration.hasAdditionalGolfDownTime = configuration.getGateStartConfiguration().hasAdditionalGolfDownTime(); } if (configuration.getESSConfiguration() != null) { dto.essConfiguration = new DeviceConfigurationDTO.RegattaConfigurationDTO.ESSConfigurationDTO(); @@ -4771,8 +4602,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } private DeviceConfigurationImpl convertToDeviceConfiguration(DeviceConfigurationDTO dto) { - DeviceConfigurationImpl configuration = new DeviceConfigurationImpl( - convertToRegattaConfiguration(dto.regattaConfiguration)); + DeviceConfigurationImpl configuration = new DeviceConfigurationImpl(convertToRegattaConfiguration(dto.regattaConfiguration)); configuration.setAllowedCourseAreaNames(dto.allowedCourseAreaNames); configuration.setResultsMailRecipient(dto.resultsMailRecipient); configuration.setByNameDesignerCourseNames(dto.byNameDesignerCourseNames); @@ -4818,23 +4648,20 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S @Override public boolean setStartTimeAndProcedure(RaceLogSetStartTimeAndProcedureDTO dto) { - TimePoint newStartTime = getService().setStartTimeAndProcedure(dto.leaderboardName, dto.raceColumnName, - dto.fleetName, dto.authorName, dto.authorPriority, dto.passId, - new MillisecondsTimePoint(dto.logicalTimePoint), new MillisecondsTimePoint(dto.startTime), + TimePoint newStartTime = getService().setStartTimeAndProcedure(dto.leaderboardName, dto.raceColumnName, + dto.fleetName, dto.authorName, dto.authorPriority, + dto.passId, new MillisecondsTimePoint(dto.logicalTimePoint), new MillisecondsTimePoint(dto.startTime), dto.racingProcedure); return new MillisecondsTimePoint(dto.startTime).equals(newStartTime); } @Override - public com.sap.sse.common.Util.Triple getStartTimeAndProcedure( - String leaderboardName, String raceColumnName, String fleetName) { - com.sap.sse.common.Util.Triple result = getService() - .getStartTimeAndProcedure(leaderboardName, raceColumnName, fleetName); + public com.sap.sse.common.Util.Triple getStartTimeAndProcedure(String leaderboardName, String raceColumnName, String fleetName) { + com.sap.sse.common.Util.Triple result = getService().getStartTimeAndProcedure(leaderboardName, raceColumnName, fleetName); if (result == null || result.getA() == null) { return null; } - return new com.sap.sse.common.Util.Triple(result.getA() == null ? null - : result.getA().asDate(), result.getB(), result.getC()); + return new com.sap.sse.common.Util.Triple(result.getA() == null ? null : result.getA().asDate(), result.getB(), result.getC()); } @Override @@ -4871,9 +4698,8 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } @Override - public Map importWindFromIgtimi(List selectedRaces, - boolean correctByDeclination) throws IllegalStateException, ClientProtocolException, IOException, - org.json.simple.parser.ParseException { + public Map importWindFromIgtimi(List selectedRaces, boolean correctByDeclination) throws IllegalStateException, + ClientProtocolException, IOException, org.json.simple.parser.ParseException { final IgtimiConnectionFactory igtimiConnectionFactory = getIgtimiConnectionFactory(); final Iterable trackedRaces; if (selectedRaces != null && !selectedRaces.isEmpty()) { @@ -4896,7 +4722,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S if (i == null) { i = 0; } - numberOfWindFixesImportedPerRace.put(key, i + resultForAccount.getValue()); + numberOfWindFixesImportedPerRace.put(key, i+resultForAccount.getValue()); } } return numberOfWindFixesImportedPerRace; @@ -4947,53 +4773,52 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } @Override - public void denoteForRaceLogTracking(String leaderboardName, String raceColumnName, String fleetName) - throws Exception { - Leaderboard leaderboard = getService().getLeaderboardByName(leaderboardName); - RaceColumn raceColumn = getService().getLeaderboardByName(leaderboardName).getRaceColumnByName(raceColumnName); - Fleet fleet = raceColumn.getFleetByName(fleetName); - - getRaceLogTrackingAdapter().denoteRaceForRaceLogTracking(getService(), leaderboard, raceColumn, fleet, null); + public void denoteForRaceLogTracking(String leaderboardName, + String raceColumnName, String fleetName) throws Exception { + Leaderboard leaderboard = getService().getLeaderboardByName(leaderboardName); + RaceColumn raceColumn = getService().getLeaderboardByName(leaderboardName).getRaceColumnByName(raceColumnName); + Fleet fleet = raceColumn.getFleetByName(fleetName); + + getRaceLogTrackingAdapter().denoteRaceForRaceLogTracking(getService(), leaderboard, raceColumn, fleet, null); } - + @Override public void removeDenotationForRaceLogTracking(String leaderboardName, String raceColumnName, String fleetName) { RaceLog raceLog = getRaceLog(leaderboardName, raceColumnName, fleetName); getRaceLogTrackingAdapter().removeDenotationForRaceLogTracking(getService(), raceLog); } - + @Override public void denoteForRaceLogTracking(String leaderboardName) throws Exception { - Leaderboard leaderboard = getService().getLeaderboardByName(leaderboardName); + Leaderboard leaderboard = getService().getLeaderboardByName(leaderboardName); getRaceLogTrackingAdapter().denoteAllRacesForRaceLogTracking(getService(), leaderboard); } - + /** - * @param triple - * leaderboard and racecolumn and fleet names + * @param triple leaderboard and racecolumn and fleet names * @return */ private RaceLog getRaceLog(com.sap.sse.common.Util.Triple triple) { return getRaceLog(triple.getA(), triple.getB(), triple.getC()); } - + private RaceLog getRaceLog(String leaderboardName, String raceColumnName, String fleetName) { RaceColumn raceColumn = getService().getLeaderboardByName(leaderboardName).getRaceColumnByName(raceColumnName); Fleet fleet = raceColumn.getFleetByName(fleetName); return raceColumn.getRaceLog(fleet); } - + @Override - public Collection getCompetitorRegistrations(String leaderboardName, String raceColumnName, - String fleetName) { - return convertToCompetitorDTOs(new RegisteredCompetitorsAnalyzer(getRaceLog(leaderboardName, raceColumnName, - fleetName)).analyze()); + public Collection getCompetitorRegistrations(String leaderboardName, String raceColumnName, String fleetName) { + return convertToCompetitorDTOs( + new RegisteredCompetitorsAnalyzer( + getRaceLog(leaderboardName, raceColumnName, fleetName)).analyze()); } - + private Competitor getCompetitor(CompetitorDTO dto) { return getService().getCompetitorStore().getExistingCompetitorByIdAsString(dto.getIdAsString()); } - + @Override public void setCompetitorRegistrations(String leaderboardName, String raceColumnName, String fleetName, Set competitorDTOs) { @@ -5002,10 +4827,10 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S for (CompetitorDTO dto : competitorDTOs) { competitors.add(getCompetitor(dto)); } - + getRaceLogTrackingAdapter().registerCompetitors(getService(), raceLog, competitors); } - + private Mark convertToMark(MarkDTO dto, boolean resolve) { if (resolve) { Mark existing = baseDomainFactory.getExistingMarkByIdAsString(dto.getIdAsString()); @@ -5013,12 +4838,12 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S return existing; } } - + Serializable id = UUID.randomUUID(); - + return baseDomainFactory.getOrCreateMark(id, dto.getName(), dto.type, dto.color, dto.shape, dto.pattern); } - + /** * Also finds the last position of the marks, if set by pinging them */ @@ -5026,12 +4851,10 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S List dtos = new ArrayList(); for (Mark mark : marks) { DynamicGPSFixTrackImpl track = new DynamicGPSFixTrackImpl(mark, 0); - DeviceMappingEvent lastPingMappingEvent = new LastPingMappingEventFinder(raceLog, mark) - .analyze(); + DeviceMappingEvent lastPingMappingEvent = new LastPingMappingEventFinder(raceLog, mark).analyze(); if (lastPingMappingEvent != null) { try { - getService().getGPSFixStore().loadMarkTrack(track, - DeviceMappingImpl.convertToDeviceMapping(lastPingMappingEvent)); + getService().getGPSFixStore().loadMarkTrack(track, DeviceMappingImpl.convertToDeviceMapping(lastPingMappingEvent)); } catch (TransformationException | NoCorrespondingServiceRegisteredException e) { logger.log(Level.WARNING, "Could not convert to Mark DTO: " + mark); } @@ -5041,7 +4864,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } return dtos; } - + @Override public void addMarkToRaceLog(String leaderboardName, String raceColumnName, String fleetName, MarkDTO markDTO) { Mark mark = convertToMark(markDTO, false); @@ -5050,42 +4873,42 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S getService().getServerAuthor(), raceLog.getCurrentPassId(), mark); raceLog.add(event); } - + @Override public Collection getMarksInRaceLog(String leaderboardName, String raceColumnName, String fleetName) { RaceLog raceLog = getRaceLog(leaderboardName, raceColumnName, fleetName); Collection marks = new DefinedMarkFinder(raceLog).analyze(); return convertToMarkDTOs(raceLog, marks); } - + @Override public void addCourseDefinitionToRaceLog(String leaderboardName, String raceColumnName, String fleetName, List> courseDTO) { RaceLog raceLog = getRaceLog(leaderboardName, raceColumnName, fleetName); String name = String.format("Course for %s - %s - %s", leaderboardName, raceColumnName, fleetName); - + CourseBase lastPublishedCourse = new LastPublishedCourseDesignFinder(raceLog).analyze(); if (lastPublishedCourse == null) { lastPublishedCourse = new CourseDataImpl(name); } - + List> controlPoints = new ArrayList<>(); for (Pair waypointDTO : courseDTO) { controlPoints.add(new Pair<>(getOrCreateControlPoint(waypointDTO.getA()), waypointDTO.getB())); } Course course = new CourseImpl(name, lastPublishedCourse.getWaypoints()); - + try { course.update(controlPoints, baseDomainFactory); } catch (Exception e) { throw new RuntimeException(e); } - + RaceLogEvent event = RaceLogEventFactory.INSTANCE.createCourseDesignChangedEvent(MillisecondsTimePoint.now(), getService().getServerAuthor(), raceLog.getCurrentPassId(), course); raceLog.add(event); } - + private WaypointDTO convertToWaypointDTO(Waypoint waypoint, Map controlPointCache) { ControlPointDTO cp = controlPointCache.get(waypoint.getControlPoint().getId()); if (cp == null) { @@ -5094,7 +4917,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } return new WaypointDTO(waypoint.getName(), cp, waypoint.getPassingInstructions()); } - + private RaceCourseDTO convertToRaceCourseDTO(CourseBase course) { List waypointDTOs = new ArrayList(); Map controlPointCache = new HashMap<>(); @@ -5104,24 +4927,24 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } return result; } - + @Override public RaceCourseDTO getLastCourseDefinitionInRaceLog(String leaderboardName, String raceColumnName, String fleetName) { RaceLog raceLog = getRaceLog(leaderboardName, raceColumnName, fleetName); - + CourseBase lastPublishedCourse = new LastPublishedCourseDesignFinder(raceLog).analyze(); if (lastPublishedCourse == null) { lastPublishedCourse = new CourseDataImpl(""); } - + return convertToRaceCourseDTO(lastPublishedCourse); } - + private Position convertToPosition(PositionDTO dto) { return new DegreePosition(dto.latDeg, dto.lngDeg); } - + @Override public void pingMarkViaRaceLogTracking(String leaderboardName, String raceColumnName, String fleetName, MarkDTO markDTO, PositionDTO positionDTO) { @@ -5130,13 +4953,12 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S TimePoint time = MillisecondsTimePoint.now(); Position position = convertToPosition(positionDTO); GPSFix fix = new GPSFixImpl(position, time); - + getRaceLogTrackingAdapter().pingMark(raceLog, mark, fix, getService()); } - + @Override - public void copyCourseAndCompetitorsToOtherRaceLogs( - com.sap.sse.common.Util.Triple fromTriple, + public void copyCourseAndCompetitorsToOtherRaceLogs(com.sap.sse.common.Util.Triple fromTriple, Set> toTriples) { RaceLog fromRaceLog = getRaceLog(fromTriple); Set toRaceLogs = new HashSet<>(); @@ -5146,36 +4968,35 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S getRaceLogTrackingAdapter().copyCourseAndCompetitors(fromRaceLog, toRaceLogs, baseDomainFactory, getService()); } - + private TypeBasedServiceFinder getDeviceIdentifierStringSerializerHandlerFinder( boolean withFallback) { TypeBasedServiceFinderFactory factory = getService().getTypeBasedServiceFinderFactory(); - TypeBasedServiceFinder finder = factory - .createServiceFinder(DeviceIdentifierStringSerializationHandler.class); + TypeBasedServiceFinder finder = factory.createServiceFinder(DeviceIdentifierStringSerializationHandler.class); if (withFallback) { finder.setFallbackService(new PlaceHolderDeviceIdentifierStringSerializationHandler()); } return finder; } - - private DeviceIdentifier deserializeDeviceIdentifier(String type, String deviceId) - throws NoCorrespondingServiceRegisteredException, TransformationException { - DeviceIdentifierStringSerializationHandler handler = getDeviceIdentifierStringSerializerHandlerFinder(false) - .findService(type); + + private DeviceIdentifier deserializeDeviceIdentifier(String type, String deviceId) throws NoCorrespondingServiceRegisteredException, + TransformationException { + DeviceIdentifierStringSerializationHandler handler = + getDeviceIdentifierStringSerializerHandlerFinder(false).findService(type); return handler.deserialize(deviceId, type, deviceId); } - + private String serializeDeviceIdentifier(DeviceIdentifier deviceId) throws TransformationException { - return getDeviceIdentifierStringSerializerHandlerFinder(true).findService(deviceId.getIdentifierType()) - .serialize(deviceId).getB(); + return getDeviceIdentifierStringSerializerHandlerFinder(true).findService( + deviceId.getIdentifierType()).serialize(deviceId).getB(); } - + private DeviceMappingDTO convertToDeviceMappingDTO(DeviceMapping mapping) throws TransformationException { String deviceId = serializeDeviceIdentifier(mapping.getDevice()); - Date from = mapping.getTimeRange().from() == null || mapping.getTimeRange().from().asMillis() == Long.MIN_VALUE ? null - : mapping.getTimeRange().from().asDate(); - Date to = mapping.getTimeRange().to() == null || mapping.getTimeRange().to().asMillis() == Long.MAX_VALUE ? null - : mapping.getTimeRange().to().asDate(); + Date from = mapping.getTimeRange().from() == null || mapping.getTimeRange().from().asMillis() == Long.MIN_VALUE ? + null : mapping.getTimeRange().from().asDate(); + Date to = mapping.getTimeRange().to() == null || mapping.getTimeRange().to().asMillis() == Long.MAX_VALUE ? + null : mapping.getTimeRange().to().asDate(); MappableToDevice item = null; if (mapping.getMappedTo() instanceof Competitor) { item = baseDomainFactory.convertToCompetitorDTO((Competitor) mapping.getMappedTo()); @@ -5196,16 +5017,16 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } originalRaceLogEventUUIDs.add((UUID) id); } + return new DeviceMappingDTO(new DeviceIdentifierDTO(mapping.getDevice().getIdentifierType(), deviceId), from, to, item, originalRaceLogEventUUIDs); } - + @Override public List getDeviceMappingsFromRaceLog(String leaderboardName, String raceColumnName, String fleetName) throws TransformationException { RaceLog raceLog = getRaceLog(leaderboardName, raceColumnName, fleetName); List result = new ArrayList(); - for (List> list : new DeviceCompetitorMappingFinder(raceLog).analyze() - .values()) { + for (List> list : new DeviceCompetitorMappingFinder(raceLog).analyze().values()) { for (DeviceMapping mapping : list) { result.add(convertToDeviceMappingDTO(mapping)); } @@ -5217,7 +5038,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } return result; } - + @Override public void addDeviceMappingToRaceLog(String leaderboardName, String raceColumnName, String fleetName, DeviceMappingDTO dto) throws NoCorrespondingServiceRegisteredException, TransformationException { @@ -5228,44 +5049,42 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S TimePoint from = mapping.getTimeRange().openBeginning() ? null : mapping.getTimeRange().from(); TimePoint to = mapping.getTimeRange().openEnd() ? null : mapping.getTimeRange().to(); if (dto.mappedTo instanceof MarkDTO) { - Mark mark = convertToMark(((MarkDTO) dto.mappedTo), true); + Mark mark = convertToMark(((MarkDTO) dto.mappedTo), true); event = RaceLogEventFactory.INSTANCE.createDeviceMarkMappingEvent(now, getService().getServerAuthor(), mapping.getDevice(), mark, raceLog.getCurrentPassId(), from, to); } else if (dto.mappedTo instanceof CompetitorDTO) { Competitor competitor = getService().getCompetitorStore().getExistingCompetitorByIdAsString( ((CompetitorDTO) dto.mappedTo).getIdAsString()); - event = RaceLogEventFactory.INSTANCE.createDeviceCompetitorMappingEvent(now, - getService().getServerAuthor(), mapping.getDevice(), competitor, raceLog.getCurrentPassId(), from, - to); + event = RaceLogEventFactory.INSTANCE.createDeviceCompetitorMappingEvent(now, getService().getServerAuthor(), + mapping.getDevice(), competitor, raceLog.getCurrentPassId(), from, to); } else { throw new RuntimeException("Can only map devices to competitors or marks"); } raceLog.add(event); } - - private ServiceTracker createAndOpenDeviceIdentifierStringSerializationHandlerTracker( - BundleContext context) { - ServiceTracker tracker = new ServiceTracker( - context, DeviceIdentifierStringSerializationHandler.class, null); - + + private ServiceTracker + createAndOpenDeviceIdentifierStringSerializationHandlerTracker(BundleContext context) { + ServiceTracker tracker = + new ServiceTracker( + context, DeviceIdentifierStringSerializationHandler.class, null); + tracker.open(); return tracker; } - + @Override public List getDeserializableDeviceIdentifierTypes() { List result = new ArrayList(); - for (ServiceReference reference : deviceIdentifierStringSerializationHandlerTracker - .getServiceReferences()) { + for (ServiceReference reference : + deviceIdentifierStringSerializationHandlerTracker.getServiceReferences()) { result.add((String) reference.getProperty(TypeBasedServiceFinder.TYPE)); } return result; } - - DeviceMapping convertToDeviceMapping(DeviceMappingDTO dto) throws NoCorrespondingServiceRegisteredException, - TransformationException { - DeviceIdentifier device = deserializeDeviceIdentifier(dto.deviceIdentifier.deviceType, - dto.deviceIdentifier.deviceId); + + DeviceMapping convertToDeviceMapping(DeviceMappingDTO dto) throws NoCorrespondingServiceRegisteredException, TransformationException { + DeviceIdentifier device = deserializeDeviceIdentifier(dto.deviceIdentifier.deviceType, dto.deviceIdentifier.deviceId); TimePoint from = dto.from == null ? null : new MillisecondsTimePoint(dto.from); TimePoint to = dto.to == null ? null : new MillisecondsTimePoint(dto.to); TimeRange timeRange = new TimeRangeImpl(from, to); @@ -5281,21 +5100,21 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S throw new RuntimeException("Can only map devices to competitors or marks"); } } - + @Override public void closeOpenEndedDeviceMapping(String leaderboardName, String raceColumnName, String fleetName, - DeviceMappingDTO mappingDTO, Date closingTimePoint) throws NoCorrespondingServiceRegisteredException, - TransformationException { + DeviceMappingDTO mappingDTO, Date closingTimePoint) throws NoCorrespondingServiceRegisteredException, TransformationException { RaceLog raceLog = getRaceLog(leaderboardName, raceColumnName, fleetName); DeviceMapping mapping = convertToDeviceMapping(mappingDTO); - List closingEvents = new OpenEndedDeviceMappingCloser(raceLog, mapping, - getService().getServerAuthor(), new MillisecondsTimePoint(closingTimePoint)).analyze(); - + List closingEvents = + new OpenEndedDeviceMappingCloser(raceLog, mapping, getService().getServerAuthor(), + new MillisecondsTimePoint(closingTimePoint)).analyze(); + for (RaceLogEvent event : closingEvents) { - raceLog.add(event); + raceLog.add(event); } } - + @Override public void revokeRaceLogEvents(String leaderboardName, String raceColumnName, String fleetName, List eventIds) throws NotRevokableException { @@ -5309,32 +5128,32 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } } } - + @Override public void startRaceLogTracking(String leaderboardName, String raceColumnName, String fleetName) throws NotDenotedForRaceLogTrackingException, Exception { Leaderboard leaderboard = getService().getLeaderboardByName(leaderboardName); RaceColumn raceColumn = leaderboard.getRaceColumnByName(raceColumnName); Fleet fleet = raceColumn.getFleetByName(fleetName); - + getRaceLogTrackingAdapter().startTracking(getService(), leaderboard, raceColumn, fleet); } - + @Override public Collection getGPSFixImporterTypes() { Set result = new HashSet<>(); Collection> refs = Collections.emptyList(); try { - refs = Activator.getDefault().getServiceReferences(GPSFixImporter.class, null); + refs = Activator.getDefault(). getServiceReferences(GPSFixImporter.class, null); } catch (InvalidSyntaxException e) { - // shouldn't happen, as we are passing null for the filter + //shouldn't happen, as we are passing null for the filter } for (ServiceReference ref : refs) { result.add((String) ref.getProperty(TypeBasedServiceFinder.TYPE)); } return result; } - + @Override public List getTrackFileImportDeviceIds(List uuids) throws NoCorrespondingServiceRegisteredException, TransformationException { @@ -5346,8 +5165,8 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S TimeRange timeRange = getService().getGPSFixStore().getTimeRangeCoveredByFixes(device); Date from = timeRange == null ? null : timeRange.from().asDate(); Date to = timeRange == null ? null : timeRange.to().asDate(); - result.add(new TrackFileImportDeviceIdentifierDTO(uuidAsString, device.getFileName(), - device.getTrackName(), numFixes, from, to)); + result.add(new TrackFileImportDeviceIdentifierDTO(uuidAsString, device.getFileName(), device.getTrackName(), + numFixes, from, to)); } return result; } @@ -5362,8 +5181,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } @Override - public Iterable search(String serverNameOrNullForMain, KeywordQuery query) - throws MalformedURLException { + public Iterable search(String serverNameOrNullForMain, KeywordQuery query) throws MalformedURLException { final List result = new ArrayList<>(); if (serverNameOrNullForMain == null) { Result searchResult = getService().search(query); @@ -5371,27 +5189,25 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S result.add(createLeaderboardSearchResultDTO(hit, getRequestBaseURL(), false)); } } else { - RemoteSailingServerReference remoteRef = getService().getRemoteServerReferenceByName( - serverNameOrNullForMain); - for (LeaderboardSearchResultBase hit : getService().searchRemotely(serverNameOrNullForMain, query) - .getHits()) { + RemoteSailingServerReference remoteRef = getService().getRemoteServerReferenceByName(serverNameOrNullForMain); + for (LeaderboardSearchResultBase hit : getService().searchRemotely(serverNameOrNullForMain, query).getHits()) { result.add(createLeaderboardSearchResultDTO(hit, remoteRef.getURL(), true)); } } return result; } - private LeaderboardSearchResultDTO createLeaderboardSearchResultDTO( - LeaderboardSearchResultBase leaderboardSearchResult, URL baseURL, boolean isOnRemoteServer) { + private LeaderboardSearchResultDTO createLeaderboardSearchResultDTO(LeaderboardSearchResultBase leaderboardSearchResult, URL baseURL, + boolean isOnRemoteServer) { ArrayList leaderboardGroups = new ArrayList<>(); for (LeaderboardGroupBase lgb : leaderboardSearchResult.getLeaderboardGroups()) { LeaderboardGroupBaseDTO leaderboardGroupDTO = convertToLeaderboardGroupBaseDTO(lgb); leaderboardGroups.add(leaderboardGroupDTO); } - return new LeaderboardSearchResultDTO(baseURL.toString(), isOnRemoteServer, leaderboardSearchResult - .getLeaderboard().getName(), leaderboardSearchResult.getLeaderboard().getDisplayName(), - leaderboardSearchResult.getRegattaName(), leaderboardSearchResult.getBoatClassName(), - convertToEventDTO(leaderboardSearchResult.getEvent()), leaderboardGroups); + return new LeaderboardSearchResultDTO(baseURL.toString(), isOnRemoteServer, leaderboardSearchResult.getLeaderboard().getName(), + leaderboardSearchResult.getLeaderboard().getDisplayName(), leaderboardSearchResult.getRegattaName(), + leaderboardSearchResult.getBoatClassName(), convertToEventDTO(leaderboardSearchResult.getEvent()), + leaderboardGroups); } @Override @@ -5401,9 +5217,9 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S raceIdentifier.getRegattaName(), raceIdentifier.getRaceName()); DynamicTrackedRace trackedRace = getService().getTrackedRace(regattaAndRaceIdentifier); trackedRace.setStartTimeReceived(new MillisecondsTimePoint(newStartTimeReceived)); - + return baseDomainFactory.createRaceDTO(getService(), false, regattaAndRaceIdentifier, trackedRace); } return null; } -} +} diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/RegattaStructureDTO.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/RegattaStructureDTO.java deleted file mode 100644 index 0925628ea26..00000000000 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/RegattaStructureDTO.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.sap.sailing.gwt.ui.shared; - -import com.sap.sailing.xrr.structureimport.SeriesParameters; - - -public class RegattaStructureDTO { -// private final RegattaStructureKey regattaStructure; - private SeriesDTO defaultSeries; -// private final Set linkedBuildStructures; - - public RegattaStructureDTO(/*RegattaStructureKey regattaStructure, Set linkedBuildStructures*/) { -// this.regattaStructure = regattaStructure; -// this.linkedBuildStructures = linkedBuildStructures; - defaultSeries = new SeriesDTO("Default", null, null, false, null, false, false, false); - } - -// public String getRegattaStructureAsString() { -// String regattaStructureString = ""; -// -// for (String s : regattaStructure.getRegattaStructureKey()) { -// regattaStructureString = regattaStructureString.concat("," + s); -// } -// return regattaStructureString.substring(1); -// } -// -// public void setDefaultSeries(RegattaDTO defaultRegatta) { -// SeriesParameters defaultSeries = new SeriesParameters(false, false, false, null); -// if (!defaultRegatta.series.isEmpty()) { -// SeriesDTO series = defaultRegatta.series.get(0); -// defaultSeries -// .setFirstColumnIsNonDiscardableCarryForward(series.isFirstColumnIsNonDiscardableCarryForward()); -// defaultSeries.setHasSplitFleetContiguousScoring(series.hasSplitFleetContiguousScoring()); -// defaultSeries.setStartswithZeroScore(series.isStartsWithZeroScore()); -// defaultSeries.setDiscardingThresholds(series.getDiscardThresholds()); -// } -// } -// -// public SeriesDTO getDefaultSeries() { -// return defaultSeries; -// } - -// public Set getLinkedBuildStructures() { -// return linkedBuildStructures; -// } - - - -} diff --git a/java/com.sap.sailing.monitoring/src/com/sap/sailing/monitoring/OSGiRestartingPortMonitor.java b/java/com.sap.sailing.monitoring/src/com/sap/sailing/monitoring/OSGiRestartingPortMonitor.java index 813183bdf24..416aca8839e 100644 --- a/java/com.sap.sailing.monitoring/src/com/sap/sailing/monitoring/OSGiRestartingPortMonitor.java +++ b/java/com.sap.sailing.monitoring/src/com/sap/sailing/monitoring/OSGiRestartingPortMonitor.java @@ -10,6 +10,7 @@ import javax.mail.NoSuchProviderException; import javax.mail.PasswordAuthentication; import javax.mail.Session; import javax.mail.Transport; +import javax.mail.internet.AddressException; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; diff --git a/java/com.sap.sailing.xrr.resultimport.test/META-INF/MANIFEST.MF b/java/com.sap.sailing.xrr.resultimport.test/META-INF/MANIFEST.MF index 34cec8679da..98d70b203e1 100644 --- a/java/com.sap.sailing.xrr.resultimport.test/META-INF/MANIFEST.MF +++ b/java/com.sap.sailing.xrr.resultimport.test/META-INF/MANIFEST.MF @@ -5,7 +5,7 @@ Bundle-SymbolicName: com.sap.sailing.xrr.resultimport.test Bundle-Version: 1.0.0.qualifier Bundle-Vendor: SAP Fragment-Host: com.sap.sailing.xrr.resultimport -Bundle-RequiredExecutionEnvironment: JavaSE-1.7 +Bundle-RequiredExecutionEnvironment: JavaSE-1.8 Require-Bundle: org.junit4;bundle-version="4.8.2", com.sap.sse.common Export-Package: com.sap.sailing.xrr.resultimport.test diff --git a/java/com.sap.sailing.xrr.resultimport/META-INF/MANIFEST.MF b/java/com.sap.sailing.xrr.resultimport/META-INF/MANIFEST.MF index b3ab4551c93..490f8570201 100644 --- a/java/com.sap.sailing.xrr.resultimport/META-INF/MANIFEST.MF +++ b/java/com.sap.sailing.xrr.resultimport/META-INF/MANIFEST.MF @@ -4,7 +4,7 @@ Bundle-Name: Resultimport Bundle-SymbolicName: com.sap.sailing.xrr.resultimport Bundle-Version: 1.0.0.qualifier Bundle-Vendor: SAP -Bundle-RequiredExecutionEnvironment: JavaSE-1.7 +Bundle-RequiredExecutionEnvironment: JavaSE-1.8 Export-Package: com.sap.sailing.xrr.resultimport, com.sap.sailing.xrr.resultimport.impl Import-Package: com.google.gwt.json.client, diff --git a/java/com.sap.sailing.xrr.structureimport/src/com/sap/sailing/xrr/structureimport/StructureImporter.java b/java/com.sap.sailing.xrr.structureimport/src/com/sap/sailing/xrr/structureimport/StructureImporter.java index f530a11ccbc..e91d1af139d 100755 --- a/java/com.sap.sailing.xrr.structureimport/src/com/sap/sailing/xrr/structureimport/StructureImporter.java +++ b/java/com.sap.sailing.xrr.structureimport/src/com/sap/sailing/xrr/structureimport/StructureImporter.java @@ -7,11 +7,9 @@ import java.net.URL; import java.net.URLConnection; import java.util.ArrayList; import java.util.Collections; -import java.util.HashMap; import java.util.HashSet; import java.util.LinkedHashMap; import java.util.List; -import java.util.Map; import java.util.Set; import java.util.UUID; import java.util.logging.Logger; @@ -41,8 +39,6 @@ import com.sap.sailing.domain.base.impl.TeamImpl; import com.sap.sailing.domain.common.Color; import com.sap.sailing.domain.common.FleetColors; import com.sap.sailing.domain.common.ScoringSchemeType; -import com.sap.sailing.domain.common.dto.FleetDTO; -import com.sap.sailing.domain.common.dto.SeriesCreationParametersDTO; import com.sap.sailing.xrr.resultimport.ParserFactory; import com.sap.sailing.xrr.schema.Boat; import com.sap.sailing.xrr.schema.Crew; @@ -52,6 +48,7 @@ import com.sap.sailing.xrr.schema.Person; import com.sap.sailing.xrr.schema.Race; import com.sap.sailing.xrr.schema.RegattaResults; import com.sap.sailing.xrr.schema.Team; +import com.sap.sse.common.TimePoint; import eventimport.EventImport; import eventimport.RegattaJSON; @@ -94,10 +91,14 @@ public class StructureImporter { } } BuildStructure buildStructure = new BuildStructure(races); - RegattaImpl regatta = new RegattaImpl(RegattaImpl.getDefaultName(event.getTitle(), - ((Division) event.getRaceOrDivisionOrRegattaSeriesResult().get(0)).getTitle()), new BoatClassImpl(((Division) event - .getRaceOrDivisionOrRegattaSeriesResult().get(0)).getTitle(),true), setSeries(buildStructure), false, this.baseDomainFactory - .createScoringScheme(ScoringSchemeType.LOW_POINT), event.getEventID(), null); + final TimePoint startDate = null; // FIXME + final TimePoint endDate = null; // FIXME + RegattaImpl regatta = new RegattaImpl( + RegattaImpl.getDefaultName(event.getTitle(), ((Division) event.getRaceOrDivisionOrRegattaSeriesResult().get(0)).getTitle()), + new BoatClassImpl(((Division) event.getRaceOrDivisionOrRegattaSeriesResult().get(0)).getTitle(), true), + startDate, endDate, + setSeries(buildStructure), false, this.baseDomainFactory.createScoringScheme(ScoringSchemeType.LOW_POINT), event.getEventID(), + null); addSpecificRegattas.add(regatta); } return addSpecificRegattas; diff --git a/java/com.sap.sse.gwt/src/com/sap/sse/gwt/client/controls/listedit/ListEditorComposite.java b/java/com.sap.sse.gwt/src/com/sap/sse/gwt/client/controls/listedit/ListEditorComposite.java index 39eca517ca6..f9ecd60a6f4 100755 --- a/java/com.sap.sse.gwt/src/com/sap/sse/gwt/client/controls/listedit/ListEditorComposite.java +++ b/java/com.sap.sse.gwt/src/com/sap/sse/gwt/client/controls/listedit/ListEditorComposite.java @@ -36,7 +36,7 @@ import com.sap.sse.common.Util; public class ListEditorComposite extends Composite implements HasValue>, HasValueChangeHandlers> { - private ListEditorUiStrategy activeUi = null; + private final ListEditorUiStrategy activeUi; private List values; @@ -49,7 +49,7 @@ public class ListEditorComposite extends Composite implements HasValu initWidget(activeUi.initWidget()); activeUi.refresh(); - } + } @Override public List getValue() {