Merge remote-tracking branch 'origin/master' into design2015

This commit is contained in:
Benjamin Barth
2016-01-28 16:29:50 +01:00
25 changed files with 287 additions and 283 deletions
+5 -1
View File
@@ -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.
@@ -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() {
@@ -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);
}
}
}
@@ -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);
}
}
}
@@ -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();
}
@@ -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;
}
}
@@ -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();
}
@@ -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,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()){
@@ -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;
}
}
@@ -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;
@@ -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();
}
}
@@ -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());
}
});
}
@@ -0,0 +1,7 @@
package com.sap.sailing.gwt.ui.client;
public interface LeaderboardUpdateProvider {
void addLeaderboardUpdateListener(LeaderboardUpdateListener listener);
void removeLeaderboardUpdateListener(LeaderboardUpdateListener listener);
}
@@ -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();
}
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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);
Binary file not shown.

After

Width:  |  Height:  |  Size: 673 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 B

@@ -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
View File
@@ -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>
-->