mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-09-23 22:19:13 +00:00
Merge remote-tracking branch 'origin/master' into design2015
This commit is contained in:
@@ -181,7 +181,11 @@ done
|
||||
|
||||
ACDIR=$SERVERS_HOME/$TARGET_SERVER_NAME
|
||||
echo INSTALL goes to $ACDIR
|
||||
extra="${extra} -Dgwt.workers=${GWT_WORKERS}"
|
||||
echo TMP will be used for java.io.tmpdir and is $TMP
|
||||
if [ "$TMP" = "" ]; then
|
||||
export TMP=/tmp
|
||||
fi
|
||||
extra="${extra} -Dgwt.workers=${GWT_WORKERS} -Djava.io.tmpdir=$TMP"
|
||||
|
||||
shift $((OPTIND-1))
|
||||
|
||||
|
||||
Binary file not shown.
+1
-2
@@ -18,7 +18,7 @@ import com.sap.sse.gwt.shared.GwtHttpRequestUtils;
|
||||
public abstract class SharedLeaderboardRegattaTabView<T extends AbstractEventRegattaPlace> extends Composite implements RegattaTabView<T>,
|
||||
LeaderboardUpdateListener {
|
||||
private boolean initialLeaderboardSizeCalculated = false;
|
||||
|
||||
|
||||
public SharedLeaderboardRegattaTabView() {
|
||||
}
|
||||
|
||||
@@ -35,7 +35,6 @@ public abstract class SharedLeaderboardRegattaTabView<T extends AbstractEventReg
|
||||
leaderboardName, //
|
||||
true,
|
||||
autoExpandLastRaceColumn);
|
||||
leaderboardPanel.addLeaderboardUpdateListener(this);
|
||||
|
||||
if(ElementSizeMutationObserver.isSupported()) {
|
||||
ElementSizeMutationObserver observer = new ElementSizeMutationObserver(new DomMutationCallback() {
|
||||
|
||||
+14
-3
@@ -19,13 +19,14 @@ import com.sap.sailing.gwt.common.client.controls.tabbar.TabView;
|
||||
import com.sap.sailing.gwt.home.desktop.partials.old.competitorcharts.OldCompetitorCharts;
|
||||
import com.sap.sailing.gwt.home.desktop.partials.old.competitorcharts.OldCompetitorChartsDelegateFullscreenViewer;
|
||||
import com.sap.sailing.gwt.home.desktop.places.event.regatta.EventRegattaView;
|
||||
import com.sap.sailing.gwt.home.desktop.places.event.regatta.EventRegattaView.Presenter;
|
||||
import com.sap.sailing.gwt.home.desktop.places.event.regatta.RegattaAnalyticsDataManager;
|
||||
import com.sap.sailing.gwt.home.desktop.places.event.regatta.SharedLeaderboardRegattaTabView;
|
||||
import com.sap.sailing.gwt.home.desktop.places.event.regatta.EventRegattaView.Presenter;
|
||||
import com.sap.sailing.gwt.home.shared.ExperimentalFeatures;
|
||||
import com.sap.sailing.gwt.home.shared.partials.placeholder.Placeholder;
|
||||
import com.sap.sailing.gwt.ui.client.CompetitorSelectionChangeListener;
|
||||
import com.sap.sailing.gwt.ui.client.CompetitorSelectionModel;
|
||||
import com.sap.sailing.gwt.ui.client.LeaderboardUpdateProvider;
|
||||
import com.sap.sse.common.Util;
|
||||
|
||||
/**
|
||||
@@ -40,7 +41,8 @@ public class RegattaCompetitorAnalyticsTabView extends SharedLeaderboardRegattaT
|
||||
private Presenter currentPresenter;
|
||||
|
||||
private final int MAX_COMPETITORS_IN_CHART = 30;
|
||||
|
||||
private LeaderboardUpdateProvider leaderboardUpdateProvider = null;
|
||||
|
||||
public RegattaCompetitorAnalyticsTabView() {
|
||||
super();
|
||||
}
|
||||
@@ -70,7 +72,8 @@ public class RegattaCompetitorAnalyticsTabView extends SharedLeaderboardRegattaT
|
||||
if(regattaAnalyticsManager.getLeaderboardPanel() == null) {
|
||||
createSharedLeaderboardPanel(leaderboardName, regattaAnalyticsManager);
|
||||
}
|
||||
|
||||
leaderboardUpdateProvider = regattaAnalyticsManager.getLeaderboardPanel();
|
||||
leaderboardUpdateProvider.addLeaderboardUpdateListener(this);
|
||||
initWidget(ourUiBinder.createAndBindUi(this));
|
||||
|
||||
DetailType initialDetailType = DetailType.REGATTA_RANK;
|
||||
@@ -140,4 +143,12 @@ public class RegattaCompetitorAnalyticsTabView extends SharedLeaderboardRegattaT
|
||||
@Override
|
||||
public void currentRaceSelected(RaceIdentifier raceIdentifier, RaceColumnDTO raceColumn) {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onUnload() {
|
||||
super.onUnload();
|
||||
if (leaderboardUpdateProvider != null) {
|
||||
leaderboardUpdateProvider.removeLeaderboardUpdateListener(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
+12
@@ -18,6 +18,7 @@ import com.sap.sailing.gwt.home.desktop.places.event.regatta.RegattaAnalyticsDat
|
||||
import com.sap.sailing.gwt.home.desktop.places.event.regatta.SharedLeaderboardRegattaTabView;
|
||||
import com.sap.sailing.gwt.home.desktop.places.event.regatta.EventRegattaView.Presenter;
|
||||
import com.sap.sailing.gwt.home.shared.partials.placeholder.Placeholder;
|
||||
import com.sap.sailing.gwt.ui.client.LeaderboardUpdateProvider;
|
||||
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardPanel;
|
||||
|
||||
/**
|
||||
@@ -34,6 +35,8 @@ public class RegattaLeaderboardTabView extends SharedLeaderboardRegattaTabView<R
|
||||
@UiField(provided = true)
|
||||
protected OldLeaderboard leaderboard;
|
||||
|
||||
private LeaderboardUpdateProvider leaderboardUpdateProvider = null;
|
||||
|
||||
public RegattaLeaderboardTabView() {
|
||||
leaderboard = new OldLeaderboard(new OldLeaderboardDelegateFullscreenViewer());
|
||||
}
|
||||
@@ -64,6 +67,8 @@ public class RegattaLeaderboardTabView extends SharedLeaderboardRegattaTabView<R
|
||||
if(leaderboardPanel == null) {
|
||||
leaderboardPanel = createSharedLeaderboardPanel(leaderboardName, regattaAnalyticsManager);
|
||||
}
|
||||
leaderboardUpdateProvider = leaderboardPanel;
|
||||
leaderboardUpdateProvider.addLeaderboardUpdateListener(this);
|
||||
initWidget(ourUiBinder.createAndBindUi(this));
|
||||
leaderboard.setLeaderboard(leaderboardPanel, currentPresenter.getAutoRefreshTimer());
|
||||
if (currentPresenter.getEventDTO().getState() == EventState.RUNNING) {
|
||||
@@ -103,4 +108,11 @@ public class RegattaLeaderboardTabView extends SharedLeaderboardRegattaTabView<R
|
||||
return new RegattaLeaderboardPlace(currentPresenter.getCtx());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onUnload() {
|
||||
super.onUnload();
|
||||
if (leaderboardUpdateProvider != null) {
|
||||
leaderboardUpdateProvider.removeLeaderboardUpdateListener(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
+6
-1
@@ -34,6 +34,7 @@ public abstract class AbstractCompetitorRegistrationsDialog extends DataEntryDia
|
||||
private boolean editable;
|
||||
private Button registerBtn;
|
||||
private Button unregisterBtn;
|
||||
private Button addCompetitorButton;
|
||||
private CheckBox showOnlyCompetitorsOfLogCheckBox;
|
||||
|
||||
private String boatClass;
|
||||
@@ -63,7 +64,7 @@ public abstract class AbstractCompetitorRegistrationsDialog extends DataEntryDia
|
||||
protected Widget getAdditionalWidget() {
|
||||
final FlowPanel mainPanel = new FlowPanel();
|
||||
final HorizontalPanel buttonPanel = new HorizontalPanel();
|
||||
final Button addCompetitorButton = new Button(stringMessages.add(stringMessages.competitor()));
|
||||
addCompetitorButton = new Button(stringMessages.add(stringMessages.competitor()));
|
||||
addCompetitorButton.addClickHandler(new ClickHandler() {
|
||||
@Override
|
||||
public void onClick(ClickEvent event) {
|
||||
@@ -175,16 +176,20 @@ public abstract class AbstractCompetitorRegistrationsDialog extends DataEntryDia
|
||||
public void deactivateRegistrationButtons(String tooltip){
|
||||
registerBtn.setEnabled(false);
|
||||
unregisterBtn.setEnabled(false);
|
||||
addCompetitorButton.setEnabled(false);
|
||||
registerBtn.setTitle(tooltip);
|
||||
unregisterBtn.setTitle(tooltip);
|
||||
addCompetitorButton.setTitle(tooltip);
|
||||
validate();
|
||||
}
|
||||
|
||||
public void activateRegistrationButtons(){
|
||||
registerBtn.setEnabled(true);
|
||||
unregisterBtn.setEnabled(true);
|
||||
addCompetitorButton.setEnabled(true);
|
||||
registerBtn.setTitle("");
|
||||
unregisterBtn.setTitle("");
|
||||
addCompetitorButton.setTitle("");
|
||||
validate();
|
||||
}
|
||||
|
||||
|
||||
-176
@@ -1,176 +0,0 @@
|
||||
package com.sap.sailing.gwt.ui.adminconsole;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import com.google.gwt.user.client.ui.CaptionPanel;
|
||||
import com.google.gwt.user.client.ui.HorizontalPanel;
|
||||
import com.google.gwt.user.client.ui.VerticalPanel;
|
||||
import com.google.gwt.user.client.ui.Widget;
|
||||
import com.google.gwt.view.client.SelectionChangeEvent;
|
||||
import com.google.gwt.view.client.SingleSelectionModel;
|
||||
import com.sap.sailing.domain.common.dto.CompetitorDTO;
|
||||
import com.sap.sailing.domain.common.racelog.tracking.MappableToDevice;
|
||||
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
|
||||
import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
import com.sap.sailing.gwt.ui.shared.DeviceIdentifierDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.DeviceMappingDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.MarkDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.TrackFileImportDeviceIdentifierDTO;
|
||||
import com.sap.sse.gwt.client.ErrorReporter;
|
||||
import com.sap.sse.gwt.client.celltable.RefreshableSingleSelectionModel;
|
||||
import com.sap.sse.gwt.client.dialog.DataEntryDialog;
|
||||
|
||||
public abstract class AbstractLogImportFixesAndAddMappingsDialog extends DataEntryDialog<Collection<DeviceMappingDTO>> {
|
||||
TrackFileImportWidget importWidget;
|
||||
private TrackFileImportDeviceIdentifierTableWrapper deviceIdTable;
|
||||
protected final CompetitorTableWrapper<RefreshableSingleSelectionModel<CompetitorDTO>> competitorTable;
|
||||
protected final MarkTableWrapper<RefreshableSingleSelectionModel<MarkDTO>> markTable;
|
||||
private final StringMessages stringMessages;
|
||||
|
||||
private final Map<TrackFileImportDeviceIdentifierDTO, MappableToDevice> mappings = new HashMap<>();
|
||||
|
||||
private TrackFileImportDeviceIdentifierDTO deviceToSelect;
|
||||
private CompetitorDTO compToSelect;
|
||||
private MarkDTO markToSelect;
|
||||
private boolean inInstableTransitionState = false;
|
||||
|
||||
public AbstractLogImportFixesAndAddMappingsDialog(SailingServiceAsync sailingService, final ErrorReporter errorReporter,
|
||||
final StringMessages stringMessages, DialogCallback<Collection<DeviceMappingDTO>> callback) {
|
||||
super(stringMessages.add(stringMessages.deviceMappings()), stringMessages.add(stringMessages.deviceMappings()),
|
||||
stringMessages.add(), stringMessages.cancel(), new DataEntryDialog.Validator<Collection<DeviceMappingDTO>>() {
|
||||
@Override
|
||||
public String getErrorMessage(Collection<DeviceMappingDTO> valueToValidate) {
|
||||
return null;
|
||||
}
|
||||
}, true, callback);
|
||||
this.stringMessages = stringMessages;
|
||||
deviceIdTable = new TrackFileImportDeviceIdentifierTableWrapper(sailingService, stringMessages, errorReporter);
|
||||
importWidget = new TrackFileImportWidget(deviceIdTable, stringMessages, sailingService, errorReporter);
|
||||
deviceIdTable.getSelectionModel().addSelectionChangeHandler(new SelectionChangeEvent.Handler() {
|
||||
@Override
|
||||
public void onSelectionChange(SelectionChangeEvent event) {
|
||||
deviceSelectionChanged(deviceIdTable.getSelectionModel().getSelectedObject());
|
||||
}
|
||||
});
|
||||
competitorTable = new CompetitorTableWrapper<>(sailingService, stringMessages, errorReporter, /* multiSelection */ false, true);
|
||||
markTable = new MarkTableWrapper<RefreshableSingleSelectionModel<MarkDTO>>(
|
||||
/* multiSelection */ false, sailingService, stringMessages, errorReporter);
|
||||
|
||||
competitorTable.getSelectionModel().addSelectionChangeHandler(new SelectionChangeEvent.Handler() {
|
||||
@Override
|
||||
public void onSelectionChange(SelectionChangeEvent event) {
|
||||
mappedToSelectionChanged(competitorTable.getSelectionModel().getSelectedObject());
|
||||
}
|
||||
});
|
||||
markTable.getSelectionModel().addSelectionChangeHandler(new SelectionChangeEvent.Handler() {
|
||||
@Override
|
||||
public void onSelectionChange(SelectionChangeEvent event) {
|
||||
mappedToSelectionChanged(markTable.getSelectionModel().getSelectedObject());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
abstract void getMarks(SailingServiceAsync sailingService, final ErrorReporter errorReporter);
|
||||
abstract void getCompetitorRegistrations(SailingServiceAsync sailingService, final ErrorReporter errorReporter);
|
||||
|
||||
private static <T> void selectOrClear(SingleSelectionModel<T> selectionModel, T object) {
|
||||
if (object == null) {
|
||||
selectionModel.clear();
|
||||
} else {
|
||||
selectionModel.setSelected(object, true);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Avoid programmatic deselections that re-trigger the selection listeners and lead to a loop.
|
||||
*/
|
||||
private void select() {
|
||||
if (inInstableTransitionState) {
|
||||
if (deviceIdTable.getSelectionModel().getSelectedObject() == deviceToSelect &&
|
||||
competitorTable.getSelectionModel().getSelectedObject() == compToSelect &&
|
||||
markTable.getSelectionModel().getSelectedObject() == markToSelect) {
|
||||
inInstableTransitionState = false;
|
||||
}
|
||||
} else {
|
||||
inInstableTransitionState = true;
|
||||
selectOrClear(deviceIdTable.getSelectionModel(), deviceToSelect);
|
||||
selectOrClear(competitorTable.getSelectionModel(), compToSelect);
|
||||
selectOrClear(markTable.getSelectionModel(), markToSelect);
|
||||
}
|
||||
}
|
||||
|
||||
private void mappedToSelectionChanged(MappableToDevice mappedTo) {
|
||||
if (! inInstableTransitionState) {
|
||||
TrackFileImportDeviceIdentifierDTO device = deviceIdTable.getSelectionModel().getSelectedObject();
|
||||
if (device != null) {
|
||||
mappings.put(device, mappedTo);
|
||||
}
|
||||
|
||||
if (mappedTo instanceof CompetitorDTO) {
|
||||
markToSelect = null;
|
||||
compToSelect = (CompetitorDTO) mappedTo;
|
||||
} else {
|
||||
compToSelect = null;
|
||||
markToSelect = (MarkDTO) mappedTo;
|
||||
}
|
||||
}
|
||||
select();
|
||||
}
|
||||
|
||||
private void deviceSelectionChanged(TrackFileImportDeviceIdentifierDTO deviceId) {
|
||||
if (! inInstableTransitionState) {
|
||||
deviceToSelect = deviceId;
|
||||
compToSelect = null;
|
||||
markToSelect = null;
|
||||
|
||||
if (deviceId != null) {
|
||||
MappableToDevice mappedTo = mappings.get(deviceId);
|
||||
if (mappedTo instanceof CompetitorDTO) {
|
||||
compToSelect = (CompetitorDTO) mappedTo;
|
||||
} else if (mappedTo instanceof MarkDTO) {
|
||||
markToSelect = (MarkDTO) mappedTo;
|
||||
}
|
||||
}
|
||||
}
|
||||
select();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Widget getAdditionalWidget() {
|
||||
HorizontalPanel panel = new HorizontalPanel();
|
||||
VerticalPanel leftPanel = new VerticalPanel();
|
||||
VerticalPanel tablesPanel = new VerticalPanel();
|
||||
CaptionPanel marksPanel = new CaptionPanel(stringMessages.mark());
|
||||
CaptionPanel competitorsPanel = new CaptionPanel(stringMessages.competitor());
|
||||
|
||||
leftPanel.add(importWidget);
|
||||
leftPanel.add(deviceIdTable);
|
||||
panel.add(leftPanel);
|
||||
panel.add(tablesPanel);
|
||||
tablesPanel.add(marksPanel);
|
||||
tablesPanel.add(competitorsPanel);
|
||||
|
||||
marksPanel.setContentWidget(markTable.asWidget());
|
||||
competitorsPanel.setContentWidget(competitorTable.asWidget());
|
||||
|
||||
return panel;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Collection<DeviceMappingDTO> getResult() {
|
||||
List<DeviceMappingDTO> result = new ArrayList<>();
|
||||
for (TrackFileImportDeviceIdentifierDTO device : mappings.keySet()) {
|
||||
DeviceIdentifierDTO deviceIdDto = new DeviceIdentifierDTO("FILE", device.uuidAsString);
|
||||
MappableToDevice mappedTo = mappings.get(device);
|
||||
DeviceMappingDTO mapping = new DeviceMappingDTO(deviceIdDto, device.from, device.to,
|
||||
mappedTo, null);
|
||||
result.add(mapping);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
+6
@@ -96,4 +96,10 @@ interface AdminConsoleResources extends ClientBundle {
|
||||
|
||||
@Source("com/sap/sailing/gwt/ui/client/images/compose_mail_small.png")
|
||||
ImageResource inviteBuoyTenders();
|
||||
|
||||
@Source("com/sap/sailing/gwt/ui/client/images/ajax-loader.gif")
|
||||
ImageResource loaderGif();
|
||||
|
||||
@Source("com/sap/sailing/gwt/ui/client/images/transparent.gif")
|
||||
ImageResource transparentGif();
|
||||
}
|
||||
+4
-4
@@ -324,13 +324,13 @@ public class CompetitorTableWrapper<S extends RefreshableSelectionModel<Competit
|
||||
public void onSuccess(CompetitorDTO updatedCompetitor) {
|
||||
//only reload selected competitors reloading with refreshCompetitorList(leaderboardName)
|
||||
//would not work in case the list is not based on a leaderboard e.g. AbstractCompetitorRegistrationDialog
|
||||
int editedCompetitorIndex = getDataProvider().getList().indexOf(originalCompetitor);
|
||||
getDataProvider().getList().remove(originalCompetitor);
|
||||
int editedCompetitorIndex = getFilterField().indexOf(originalCompetitor);
|
||||
getFilterField().remove(originalCompetitor);
|
||||
if (editedCompetitorIndex >= 0){
|
||||
getDataProvider().getList().add(editedCompetitorIndex, updatedCompetitor);
|
||||
getFilterField().add(editedCompetitorIndex, updatedCompetitor);
|
||||
} else {
|
||||
//in case competitor was not present --> not edit, but create
|
||||
getDataProvider().getList().add(updatedCompetitor);
|
||||
getFilterField().add(updatedCompetitor);
|
||||
}
|
||||
getDataProvider().refresh();
|
||||
}
|
||||
|
||||
+4
-30
@@ -4,13 +4,8 @@ import java.util.Collection;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
import com.github.gwtbootstrap.datetimepicker.client.ui.base.HasViewMode.ViewMode;
|
||||
import com.google.gwt.event.dom.client.ChangeEvent;
|
||||
import com.google.gwt.event.dom.client.ChangeHandler;
|
||||
import com.google.gwt.event.logical.shared.AttachEvent;
|
||||
import com.google.gwt.event.logical.shared.AttachEvent.Handler;
|
||||
import com.google.gwt.event.logical.shared.ValueChangeEvent;
|
||||
import com.google.gwt.event.logical.shared.ValueChangeHandler;
|
||||
import com.google.gwt.user.client.rpc.AsyncCallback;
|
||||
import com.google.gwt.user.client.ui.CaptionPanel;
|
||||
import com.google.gwt.user.client.ui.Grid;
|
||||
@@ -25,6 +20,7 @@ import com.sap.sailing.domain.common.racelog.tracking.DeviceMappingConstants;
|
||||
import com.sap.sailing.domain.common.racelog.tracking.MappableToDevice;
|
||||
import com.sap.sailing.domain.common.racelog.tracking.QRCodeURLCreationException;
|
||||
import com.sap.sailing.gwt.ui.adminconsole.ItemToMapToDeviceSelectionPanel.SelectionChangedHandler;
|
||||
import com.sap.sailing.gwt.ui.client.DataEntryDialogWithBootstrap;
|
||||
import com.sap.sailing.gwt.ui.client.GwtUrlHelper;
|
||||
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
|
||||
import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
@@ -38,7 +34,7 @@ import com.sap.sse.gwt.client.controls.GenericListBox;
|
||||
import com.sap.sse.gwt.client.controls.GenericListBox.ValueBuilder;
|
||||
import com.sap.sse.gwt.client.dialog.DataEntryDialog;
|
||||
|
||||
public class RegattaLogAddDeviceMappingDialog extends DataEntryDialog<DeviceMappingDTO> {
|
||||
public class RegattaLogAddDeviceMappingDialog extends DataEntryDialogWithBootstrap<DeviceMappingDTO> {
|
||||
private final String leaderboardName;
|
||||
private final GenericListBox<EventDTO> events;
|
||||
|
||||
@@ -88,9 +84,9 @@ public class RegattaLogAddDeviceMappingDialog extends DataEntryDialog<DeviceMapp
|
||||
this.stringMessages = stringMessages;
|
||||
this.sailingService = sailingService;
|
||||
|
||||
from = initTimeBox();
|
||||
from = createDateTimeBox(new Date());
|
||||
from.setValue(null);
|
||||
to = initTimeBox();
|
||||
to = createDateTimeBox(new Date());
|
||||
to.setValue(null);
|
||||
|
||||
deviceType = createListBox(false);
|
||||
@@ -207,28 +203,6 @@ public class RegattaLogAddDeviceMappingDialog extends DataEntryDialog<DeviceMapp
|
||||
return panel;
|
||||
}
|
||||
|
||||
private BetterDateTimeBox initTimeBox() {
|
||||
final BetterDateTimeBox timeBox = new BetterDateTimeBox();
|
||||
timeBox.addValueChangeHandler(new ValueChangeHandler<Date>() {
|
||||
@Override
|
||||
public void onValueChange(ValueChangeEvent<Date> event) {
|
||||
validate();
|
||||
}
|
||||
});
|
||||
timeBox.addAttachHandler(new Handler() {
|
||||
@Override
|
||||
public void onAttachOrDetach(AttachEvent event) {
|
||||
if (event.isAttached()) {
|
||||
addAutoHidePartner(timeBox.getPicker());
|
||||
}
|
||||
}
|
||||
});
|
||||
timeBox.setAutoClose(true);
|
||||
timeBox.setStartView(ViewMode.HOUR);
|
||||
timeBox.setFormat("dd/mm/yyyy hh:ii");
|
||||
return timeBox;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean validate() {
|
||||
if (super.validate()){
|
||||
|
||||
+179
-20
@@ -1,37 +1,100 @@
|
||||
package com.sap.sailing.gwt.ui.adminconsole;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import com.google.gwt.user.client.rpc.AsyncCallback;
|
||||
import com.google.gwt.user.client.ui.CaptionPanel;
|
||||
import com.google.gwt.user.client.ui.HorizontalPanel;
|
||||
import com.google.gwt.user.client.ui.VerticalPanel;
|
||||
import com.google.gwt.user.client.ui.Widget;
|
||||
import com.google.gwt.view.client.SelectionChangeEvent;
|
||||
import com.google.gwt.view.client.SingleSelectionModel;
|
||||
import com.sap.sailing.domain.common.dto.CompetitorDTO;
|
||||
import com.sap.sailing.domain.common.racelog.tracking.MappableToDevice;
|
||||
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
|
||||
import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
import com.sap.sailing.gwt.ui.shared.DeviceIdentifierDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.DeviceMappingDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.MarkDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.TrackFileImportDeviceIdentifierDTO;
|
||||
import com.sap.sse.gwt.client.ErrorReporter;
|
||||
import com.sap.sse.gwt.client.celltable.RefreshableSingleSelectionModel;
|
||||
import com.sap.sse.gwt.client.dialog.DataEntryDialog;
|
||||
|
||||
public class RegattaLogImportFixesAndAddMappingsDialog extends AbstractLogImportFixesAndAddMappingsDialog {
|
||||
public class RegattaLogImportFixesAndAddMappingsDialog extends DataEntryDialog<Collection<DeviceMappingDTO>> {
|
||||
private String leaderboardName;
|
||||
TrackFileImportWidget importWidget;
|
||||
private TrackFileImportDeviceIdentifierTableWrapper deviceIdTable;
|
||||
protected final CompetitorTableWrapper<RefreshableSingleSelectionModel<CompetitorDTO>> competitorTable;
|
||||
protected final MarkTableWrapper<RefreshableSingleSelectionModel<MarkDTO>> markTable;
|
||||
private final StringMessages stringMessages;
|
||||
|
||||
public RegattaLogImportFixesAndAddMappingsDialog(SailingServiceAsync sailingService, final ErrorReporter errorReporter,
|
||||
final StringMessages stringMessages, String leaderboardName,
|
||||
private final Map<TrackFileImportDeviceIdentifierDTO, MappableToDevice> mappings = new HashMap<>();
|
||||
|
||||
private TrackFileImportDeviceIdentifierDTO deviceToSelect;
|
||||
private CompetitorDTO compToSelect;
|
||||
private MarkDTO markToSelect;
|
||||
private boolean inInstableTransitionState = false;
|
||||
|
||||
public RegattaLogImportFixesAndAddMappingsDialog(SailingServiceAsync sailingService,
|
||||
final ErrorReporter errorReporter, final StringMessages stringMessages, String leaderboardName,
|
||||
DialogCallback<Collection<DeviceMappingDTO>> callback) {
|
||||
super(sailingService,errorReporter, stringMessages, callback);
|
||||
|
||||
super(stringMessages.add(stringMessages.deviceMappings()), stringMessages.add(stringMessages.deviceMappings()),
|
||||
stringMessages.add(), stringMessages.cancel(),
|
||||
new DataEntryDialog.Validator<Collection<DeviceMappingDTO>>() {
|
||||
@Override
|
||||
public String getErrorMessage(Collection<DeviceMappingDTO> valueToValidate) {
|
||||
if (!valueToValidate.isEmpty()){
|
||||
return null;
|
||||
} else {
|
||||
return stringMessages.pleaseCreateAtLeastOneMappingBy();
|
||||
}
|
||||
}
|
||||
}, true, callback);
|
||||
this.stringMessages = stringMessages;
|
||||
deviceIdTable = new TrackFileImportDeviceIdentifierTableWrapper(sailingService, stringMessages, errorReporter);
|
||||
importWidget = new TrackFileImportWidget(deviceIdTable, stringMessages, sailingService, errorReporter);
|
||||
deviceIdTable.getSelectionModel().addSelectionChangeHandler(new SelectionChangeEvent.Handler() {
|
||||
@Override
|
||||
public void onSelectionChange(SelectionChangeEvent event) {
|
||||
deviceSelectionChanged(deviceIdTable.getSelectionModel().getSelectedObject());
|
||||
}
|
||||
});
|
||||
competitorTable = new CompetitorTableWrapper<>(sailingService, stringMessages, errorReporter, /* multiSelection */
|
||||
false, true);
|
||||
markTable = new MarkTableWrapper<RefreshableSingleSelectionModel<MarkDTO>>(
|
||||
/* multiSelection */false, sailingService, stringMessages, errorReporter);
|
||||
|
||||
competitorTable.getSelectionModel().addSelectionChangeHandler(new SelectionChangeEvent.Handler() {
|
||||
@Override
|
||||
public void onSelectionChange(SelectionChangeEvent event) {
|
||||
mappedToSelectionChanged(competitorTable.getSelectionModel().getSelectedObject());
|
||||
}
|
||||
});
|
||||
markTable.getSelectionModel().addSelectionChangeHandler(new SelectionChangeEvent.Handler() {
|
||||
@Override
|
||||
public void onSelectionChange(SelectionChangeEvent event) {
|
||||
mappedToSelectionChanged(markTable.getSelectionModel().getSelectedObject());
|
||||
}
|
||||
});
|
||||
|
||||
this.leaderboardName = leaderboardName;
|
||||
|
||||
|
||||
getCompetitorRegistrations(sailingService, errorReporter);
|
||||
getMarks(sailingService, errorReporter);
|
||||
getMarks(sailingService, errorReporter);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
void getMarks(SailingServiceAsync sailingService, final ErrorReporter errorReporter) {
|
||||
sailingService.getMarksInRegattaLog(leaderboardName, new AsyncCallback<Iterable<MarkDTO>>() {
|
||||
@Override
|
||||
public void onSuccess(Iterable<MarkDTO> result) {
|
||||
markTable.refresh(result);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onFailure(Throwable caught) {
|
||||
errorReporter.reportError("Could not load marks: " + caught.getMessage());
|
||||
@@ -39,19 +102,115 @@ public class RegattaLogImportFixesAndAddMappingsDialog extends AbstractLogImport
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
void getCompetitorRegistrations(SailingServiceAsync sailingService, final ErrorReporter errorReporter) {
|
||||
sailingService.getCompetitorRegistrationsInRegattaLog(leaderboardName, new AsyncCallback<Collection<CompetitorDTO>>() {
|
||||
@Override
|
||||
public void onSuccess(Collection<CompetitorDTO> result) {
|
||||
competitorTable.refreshCompetitorList(result);
|
||||
sailingService.getCompetitorRegistrationsInRegattaLog(leaderboardName,
|
||||
new AsyncCallback<Collection<CompetitorDTO>>() {
|
||||
@Override
|
||||
public void onSuccess(Collection<CompetitorDTO> result) {
|
||||
competitorTable.refreshCompetitorList(result);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailure(Throwable caught) {
|
||||
errorReporter.reportError("Could not load competitors: " + caught.getMessage());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private static <T> void selectOrClear(SingleSelectionModel<T> selectionModel, T object) {
|
||||
if (object == null) {
|
||||
selectionModel.clear();
|
||||
} else {
|
||||
selectionModel.setSelected(object, true);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Avoid programmatic deselections that re-trigger the selection listeners and lead to a loop.
|
||||
*/
|
||||
private void select() {
|
||||
if (inInstableTransitionState) {
|
||||
if (deviceIdTable.getSelectionModel().getSelectedObject() == deviceToSelect
|
||||
&& competitorTable.getSelectionModel().getSelectedObject() == compToSelect
|
||||
&& markTable.getSelectionModel().getSelectedObject() == markToSelect) {
|
||||
inInstableTransitionState = false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailure(Throwable caught) {
|
||||
errorReporter.reportError("Could not load competitors: " + caught.getMessage());
|
||||
} else {
|
||||
inInstableTransitionState = true;
|
||||
selectOrClear(deviceIdTable.getSelectionModel(), deviceToSelect);
|
||||
selectOrClear(competitorTable.getSelectionModel(), compToSelect);
|
||||
selectOrClear(markTable.getSelectionModel(), markToSelect);
|
||||
}
|
||||
}
|
||||
|
||||
private void mappedToSelectionChanged(MappableToDevice mappedTo) {
|
||||
if (!inInstableTransitionState) {
|
||||
TrackFileImportDeviceIdentifierDTO device = deviceIdTable.getSelectionModel().getSelectedObject();
|
||||
if (device != null) {
|
||||
mappings.put(device, mappedTo);
|
||||
}
|
||||
});
|
||||
|
||||
if (mappedTo instanceof CompetitorDTO) {
|
||||
markToSelect = null;
|
||||
compToSelect = (CompetitorDTO) mappedTo;
|
||||
} else {
|
||||
compToSelect = null;
|
||||
markToSelect = (MarkDTO) mappedTo;
|
||||
}
|
||||
}
|
||||
select();
|
||||
validate();
|
||||
}
|
||||
|
||||
private void deviceSelectionChanged(TrackFileImportDeviceIdentifierDTO deviceId) {
|
||||
if (!inInstableTransitionState) {
|
||||
deviceToSelect = deviceId;
|
||||
compToSelect = null;
|
||||
markToSelect = null;
|
||||
|
||||
if (deviceId != null) {
|
||||
MappableToDevice mappedTo = mappings.get(deviceId);
|
||||
if (mappedTo instanceof CompetitorDTO) {
|
||||
compToSelect = (CompetitorDTO) mappedTo;
|
||||
} else if (mappedTo instanceof MarkDTO) {
|
||||
markToSelect = (MarkDTO) mappedTo;
|
||||
}
|
||||
}
|
||||
}
|
||||
select();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Widget getAdditionalWidget() {
|
||||
HorizontalPanel panel = new HorizontalPanel();
|
||||
VerticalPanel leftPanel = new VerticalPanel();
|
||||
VerticalPanel tablesPanel = new VerticalPanel();
|
||||
CaptionPanel marksPanel = new CaptionPanel(stringMessages.mark());
|
||||
CaptionPanel competitorsPanel = new CaptionPanel(stringMessages.competitor());
|
||||
|
||||
leftPanel.add(importWidget);
|
||||
leftPanel.add(deviceIdTable);
|
||||
panel.add(leftPanel);
|
||||
panel.add(tablesPanel);
|
||||
tablesPanel.add(marksPanel);
|
||||
tablesPanel.add(competitorsPanel);
|
||||
|
||||
marksPanel.setContentWidget(markTable.asWidget());
|
||||
competitorsPanel.setContentWidget(competitorTable.asWidget());
|
||||
|
||||
return panel;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Collection<DeviceMappingDTO> getResult() {
|
||||
List<DeviceMappingDTO> result = new ArrayList<>();
|
||||
for (TrackFileImportDeviceIdentifierDTO device : mappings.keySet()) {
|
||||
DeviceIdentifierDTO deviceIdDto = new DeviceIdentifierDTO("FILE", device.uuidAsString);
|
||||
MappableToDevice mappedTo = mappings.get(device);
|
||||
DeviceMappingDTO mapping = new DeviceMappingDTO(deviceIdDto, device.from, device.to, mappedTo, null);
|
||||
result.add(mapping);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+3
-10
@@ -2,16 +2,15 @@ package com.sap.sailing.gwt.ui.adminconsole;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
import com.google.gwt.event.logical.shared.ValueChangeEvent;
|
||||
import com.google.gwt.event.logical.shared.ValueChangeHandler;
|
||||
import com.google.gwt.user.client.ui.Grid;
|
||||
import com.google.gwt.user.client.ui.Label;
|
||||
import com.google.gwt.user.client.ui.Widget;
|
||||
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.sse.gwt.client.dialog.DataEntryDialog;
|
||||
|
||||
public class SetStartTimeReceivedDialog extends DataEntryDialog<Date> {
|
||||
public class SetStartTimeReceivedDialog extends DataEntryDialogWithBootstrap<Date> {
|
||||
|
||||
private final StringMessages stringMessages;
|
||||
|
||||
@@ -28,13 +27,7 @@ public class SetStartTimeReceivedDialog extends DataEntryDialog<Date> {
|
||||
|
||||
Label timeBoxLabel = new Label(stringMessages.startTime() + ":");
|
||||
content.setWidget(0, 0, timeBoxLabel);
|
||||
timeBox = new BetterDateTimeBox();
|
||||
timeBox.addValueChangeHandler(new ValueChangeHandler<Date>() {
|
||||
@Override
|
||||
public void onValueChange(ValueChangeEvent<Date> event) {
|
||||
validate();
|
||||
}
|
||||
});
|
||||
timeBox = createDateTimeBox(new Date());
|
||||
content.setWidget(0, 1, timeBox);
|
||||
|
||||
return content;
|
||||
|
||||
+3
-30
@@ -2,19 +2,15 @@ package com.sap.sailing.gwt.ui.adminconsole;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
import com.github.gwtbootstrap.datetimepicker.client.ui.base.HasViewMode.ViewMode;
|
||||
import com.google.gwt.event.logical.shared.AttachEvent;
|
||||
import com.google.gwt.event.logical.shared.AttachEvent.Handler;
|
||||
import com.google.gwt.event.logical.shared.ValueChangeEvent;
|
||||
import com.google.gwt.event.logical.shared.ValueChangeHandler;
|
||||
import com.google.gwt.user.client.ui.Grid;
|
||||
import com.google.gwt.user.client.ui.Label;
|
||||
import com.google.gwt.user.client.ui.Widget;
|
||||
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.sse.gwt.client.dialog.DataEntryDialog;
|
||||
|
||||
public class SetTimePointDialog extends DataEntryDialog<Date> {
|
||||
public class SetTimePointDialog extends DataEntryDialogWithBootstrap<Date> {
|
||||
private final BetterDateTimeBox time;
|
||||
private final StringMessages stringMessages;
|
||||
|
||||
@@ -29,29 +25,7 @@ public class SetTimePointDialog extends DataEntryDialog<Date> {
|
||||
|
||||
this.stringMessages = stringMessages;
|
||||
|
||||
time = createTimeBox();
|
||||
}
|
||||
|
||||
private BetterDateTimeBox createTimeBox() {
|
||||
final BetterDateTimeBox timeBox = new BetterDateTimeBox();
|
||||
timeBox.addValueChangeHandler(new ValueChangeHandler<Date>() {
|
||||
@Override
|
||||
public void onValueChange(ValueChangeEvent<Date> event) {
|
||||
validate();
|
||||
}
|
||||
});
|
||||
timeBox.addAttachHandler(new Handler() {
|
||||
@Override
|
||||
public void onAttachOrDetach(AttachEvent event) {
|
||||
if (event.isAttached()) {
|
||||
addAutoHidePartner(timeBox.getPicker());
|
||||
}
|
||||
}
|
||||
});
|
||||
timeBox.setAutoClose(true);
|
||||
timeBox.setStartView(ViewMode.HOUR);
|
||||
timeBox.setFormat("dd/mm/yyyy hh:ii");
|
||||
return timeBox;
|
||||
time = createDateTimeBox(new Date());
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -66,5 +40,4 @@ public class SetTimePointDialog extends DataEntryDialog<Date> {
|
||||
protected Date getResult() {
|
||||
return time.getValue();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+10
@@ -4,6 +4,7 @@ import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
import com.google.gwt.core.client.GWT;
|
||||
import com.google.gwt.event.dom.client.ClickEvent;
|
||||
import com.google.gwt.event.dom.client.ClickHandler;
|
||||
import com.google.gwt.user.client.rpc.AsyncCallback;
|
||||
@@ -13,6 +14,7 @@ import com.google.gwt.user.client.ui.FormPanel;
|
||||
import com.google.gwt.user.client.ui.FormPanel.SubmitCompleteEvent;
|
||||
import com.google.gwt.user.client.ui.FormPanel.SubmitCompleteHandler;
|
||||
import com.google.gwt.user.client.ui.HorizontalPanel;
|
||||
import com.google.gwt.user.client.ui.Image;
|
||||
import com.google.gwt.user.client.ui.IsWidget;
|
||||
import com.google.gwt.user.client.ui.ListBox;
|
||||
import com.google.gwt.user.client.ui.Panel;
|
||||
@@ -25,6 +27,8 @@ import com.sap.sse.gwt.client.ErrorReporter;
|
||||
|
||||
public class TrackFileImportWidget implements IsWidget {
|
||||
private final Panel mainPanel = new VerticalPanel();
|
||||
private static AdminConsoleResources resources = GWT.create(AdminConsoleResources.class);
|
||||
private static Image loaderImage = new Image(resources.loaderGif());
|
||||
|
||||
public TrackFileImportWidget(final TrackFileImportDeviceIdentifierTableWrapper table, StringMessages stringMessages,
|
||||
final SailingServiceAsync sailingService, final ErrorReporter errorReporter) {
|
||||
@@ -40,11 +44,13 @@ public class TrackFileImportWidget implements IsWidget {
|
||||
@Override
|
||||
public void onSuccess(List<TrackFileImportDeviceIdentifierDTO> result) {
|
||||
table.getDataProvider().getList().addAll(result);
|
||||
loaderImage.setResource(resources.transparentGif());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailure(Throwable caught) {
|
||||
errorReporter.reportError("Could not load TrackFileImportDeviceIds: " + caught.getMessage());
|
||||
loaderImage.setResource(resources.transparentGif());
|
||||
}
|
||||
});
|
||||
|
||||
@@ -66,6 +72,8 @@ public class TrackFileImportWidget implements IsWidget {
|
||||
FileUpload fileUpload = new FileUpload();
|
||||
fileUpload.setName("file");
|
||||
inFormPanel.add(fileUpload);
|
||||
loaderImage.setResource(resources.transparentGif());
|
||||
loaderImage.setPixelSize(16, 16);
|
||||
|
||||
final ListBox preferredImporter = new ListBox();
|
||||
preferredImporter.setName("preferredImporter");
|
||||
@@ -87,10 +95,12 @@ public class TrackFileImportWidget implements IsWidget {
|
||||
|
||||
Button btnUpload = new Button(stringMessages.importFixes());
|
||||
inFormPanel.add(btnUpload);
|
||||
inFormPanel.add(loaderImage);
|
||||
btnUpload.addClickHandler(new ClickHandler() {
|
||||
@Override
|
||||
public void onClick(ClickEvent arg0) {
|
||||
formPanel.submit();
|
||||
loaderImage.setResource(resources.loaderGif());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
package com.sap.sailing.gwt.ui.client;
|
||||
|
||||
public interface LeaderboardUpdateProvider {
|
||||
void addLeaderboardUpdateListener(LeaderboardUpdateListener listener);
|
||||
|
||||
void removeLeaderboardUpdateListener(LeaderboardUpdateListener listener);
|
||||
}
|
||||
+1
@@ -1467,4 +1467,5 @@ public interface StringMessages extends com.sap.sse.gwt.client.StringMessages, c
|
||||
String showOnlyCompetitorsOfLog();
|
||||
String confirmLosingCompetitorEditsWhenTogglingLogBasedView();
|
||||
String removalOfMarkDisabledMayBeUsedInRaces(String raceNames);
|
||||
String pleaseCreateAtLeastOneMappingBy();
|
||||
}
|
||||
|
||||
+2
-1
@@ -1433,4 +1433,5 @@ bufferLineStrokeWeight=Buffer line stroke weight
|
||||
profile=Profile
|
||||
showOnlyCompetitorsOfLog=Show only competitors registered in Log
|
||||
confirmLosingCompetitorEditsWhenTogglingLogBasedView=This will reset your current, unsaved changes to the competitors.\nDo you really want to continue?
|
||||
removalOfMarkDisabledMayBeUsedInRaces=Removal deavticated, marks are used in races {0}
|
||||
removalOfMarkDisabledMayBeUsedInRaces=Removal deavticated, marks are used in races {0}
|
||||
pleaseCreateAtLeastOneMappingBy=Plase create at list one mapping by first selecting a track on the left hand side and then selecting a mark or competitor on the right hand side
|
||||
|
||||
+1
@@ -1425,3 +1425,4 @@ scoringSchemeHighPointFirstGetsTwelveOrEight=High-Point System 12 Punkte
|
||||
scoringSchemeHighPointFirstGetsTwelveOrEightDescription=Scores als Punkte. Der Gewinner bekommt 12 Punkte.
|
||||
scoringSchemeHighPointEssOverall12=High Point System ESS Gesamtwertung (12)
|
||||
scoringSchemeHighPointEssOverall12Description=High Point System, der Gewinner eines Acts erhält 12 Punkte, der Zweite 11 und so weiter.
|
||||
pleaseCreateAtLeastOneMappingBy=Bitte erstellen Sie mindestens eine Zuordnung, indem Sie zunächst einen Track auf der linken Seite und anschließend einen Teilnehmer oder eine Tonne auf der rechten Seite auswählen
|
||||
|
||||
+1
@@ -1356,3 +1356,4 @@ scoringSchemeHighPointFirstGetsTwelveOrEight=High Point, winner gets 12 points (
|
||||
scoringSchemeHighPointFirstGetsTwelveOrEightDescription=Score in points. Winner scores 12 points, 2nd - 11 points, .... A tie is broken in favour of the competitor having won most races, if tie remains then tie is broken by the rank in the last race scored.
|
||||
scoringSchemeHighPointEssOverall12=High Point System ESS Overall (12)
|
||||
scoringSchemeHighPointEssOverall12Description=Score in points. Winner of an act scores 12 points, 2nd - 11 points, .... Any tie in the overall Extreme Sailing Series is broken in favour of the competitor with the most Act wins. If that does not break the tie, the result in the last Act will be used.
|
||||
pleaseCreateAtLeastOneMappingBy=Plase create at list one mapping by first selecting a track on the left hand side and then selecting a mark or competitor on the right hand side
|
||||
|
||||
+1
@@ -1371,3 +1371,4 @@ scoringSchemeHighPointFirstGetsTwelveOrEight=High Point, winner gets 12 points (
|
||||
scoringSchemeHighPointFirstGetsTwelveOrEightDescription=Score in points. Winner scores 12 points, 2nd - 11 points, .... A tie is broken in favour of the competitor having won most races, if tie remains then tie is broken by the rank in the last race scored.
|
||||
scoringSchemeHighPointEssOverall12=High Point System ESS Overall (12)
|
||||
scoringSchemeHighPointEssOverall12Description=Score in points. Winner of an act scores 12 points, 2nd - 11 points, .... Any tie in the overall Extreme Sailing Series is broken in favour of the competitor with the most Act wins. If that does not break the tie, the result in the last Act will be used.
|
||||
pleaseCreateAtLeastOneMappingBy=Plase create at list one mapping by first selecting a track on the left hand side and then selecting a mark or competitor on the right hand side
|
||||
|
||||
+9
-2
@@ -81,6 +81,7 @@ import com.sap.sailing.gwt.ui.client.CompetitorSelectionChangeListener;
|
||||
import com.sap.sailing.gwt.ui.client.CompetitorSelectionProvider;
|
||||
import com.sap.sailing.gwt.ui.client.FlagImageResolver;
|
||||
import com.sap.sailing.gwt.ui.client.LeaderboardUpdateListener;
|
||||
import com.sap.sailing.gwt.ui.client.LeaderboardUpdateProvider;
|
||||
import com.sap.sailing.gwt.ui.client.RaceTimesInfoProvider;
|
||||
import com.sap.sailing.gwt.ui.client.RaceTimesInfoProviderListener;
|
||||
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
|
||||
@@ -127,7 +128,7 @@ import com.sap.sse.gwt.client.useragent.UserAgentDetails;
|
||||
*/
|
||||
public class LeaderboardPanel extends SimplePanel implements TimeListener, PlayStateListener, DisplayedLeaderboardRowsProvider,
|
||||
Component<LeaderboardSettings>, IsEmbeddableComponent, CompetitorSelectionChangeListener, LeaderboardFetcher,
|
||||
BusyStateProvider {
|
||||
BusyStateProvider, LeaderboardUpdateProvider {
|
||||
public static final String LOAD_LEADERBOARD_DATA_CATEGORY = "loadLeaderboardData";
|
||||
|
||||
protected static final NumberFormat scoreFormat = NumberFormat.getFormat("0.##");
|
||||
@@ -3211,11 +3212,17 @@ public class LeaderboardPanel extends SimplePanel implements TimeListener, PlayS
|
||||
timeChanged(getLeaderboardDisplayDate(), null);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void addLeaderboardUpdateListener(LeaderboardUpdateListener listener) {
|
||||
this.leaderboardUpdateListener.add(listener);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeLeaderboardUpdateListener(LeaderboardUpdateListener listener) {
|
||||
this.leaderboardUpdateListener.remove(listener);
|
||||
}
|
||||
|
||||
protected void informLeaderboardUpdateListenersAboutLeaderboardUpdated(LeaderboardDTO leaderboard) {
|
||||
for (LeaderboardUpdateListener listener : this.leaderboardUpdateListener) {
|
||||
listener.updatedLeaderboard(leaderboard);
|
||||
|
||||
BIN
Binary file not shown.
|
After Width: | Height: | Size: 673 B |
BIN
Binary file not shown.
|
After Width: | Height: | Size: 42 B |
+17
-2
@@ -2,7 +2,7 @@ package com.sap.sse.gwt.client.panels;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
import com.google.gwt.event.dom.client.KeyUpEvent;
|
||||
import com.google.gwt.event.dom.client.KeyUpHandler;
|
||||
@@ -35,7 +35,7 @@ import com.sap.sse.common.filter.AbstractListFilter;
|
||||
*
|
||||
*/
|
||||
public abstract class AbstractFilterablePanel<T> extends HorizontalPanel {
|
||||
protected Collection<T> all;
|
||||
protected List<T> all;
|
||||
protected final AbstractCellTable<T> display;
|
||||
protected final ListDataProvider<T> filtered;
|
||||
protected final TextBox textBox;
|
||||
@@ -105,6 +105,21 @@ public abstract class AbstractFilterablePanel<T> extends HorizontalPanel {
|
||||
all.add(object);
|
||||
filter();
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds an object at a certain position and applies the search filter.
|
||||
*/
|
||||
public void add(int index, T object) {
|
||||
all.add(index, object);
|
||||
filter();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the index of the first occurrence of the specified element in this list, or -1 if this list does not contain the element.
|
||||
*/
|
||||
public int indexOf(T object) {
|
||||
return all.indexOf(object);
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes an object and applies the search filter.
|
||||
|
||||
+1
-1
@@ -475,7 +475,7 @@
|
||||
<!-- GWT version detected from dependencyManagement -->
|
||||
<execution>
|
||||
<configuration>
|
||||
<extraJvmArgs>-Dgwt.persistentunitcache=false -Xmx2048m</extraJvmArgs>
|
||||
<extraJvmArgs>-Dgwt.persistentunitcache=false -Xmx2048m -Djava.io.tmpdir=${env.TMP}</extraJvmArgs>
|
||||
<!--
|
||||
<userAgents>chrome</userAgents>
|
||||
-->
|
||||
|
||||
Reference in New Issue
Block a user