mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-11-14 22:43:57 +00:00
Merge remote-tracking branch 'server/master'
This commit is contained in:
commit
cdad4cd330
23 files changed
+245
-77
No files matched your search
+3
-2
@@ -25,11 +25,12 @@ import com.sap.sailing.gwt.home.desktop.partials.racelist.RaceListColumnFactory.
|
||||
import com.sap.sailing.gwt.home.desktop.partials.racelist.RaceListResources.LocalCss;
|
||||
import com.sap.sailing.gwt.home.desktop.places.event.EventView;
|
||||
import com.sap.sailing.gwt.home.shared.partials.filter.FilterValueChangeHandler;
|
||||
import com.sap.sailing.gwt.home.shared.partials.filter.FilterValueProvider;
|
||||
import com.sap.sailing.gwt.ui.leaderboard.SortedCellTable;
|
||||
import com.sap.sse.common.filter.Filter;
|
||||
|
||||
public abstract class AbstractRaceList<T extends RaceMetadataDTO<? extends AbstractWindDTO>>
|
||||
extends Composite implements FilterValueChangeHandler<SimpleRaceMetadataDTO, SimpleCompetitorDTO> {
|
||||
public abstract class AbstractRaceList<T extends RaceMetadataDTO<? extends AbstractWindDTO>> extends Composite
|
||||
implements FilterValueProvider<SimpleCompetitorDTO>, FilterValueChangeHandler<SimpleRaceMetadataDTO> {
|
||||
|
||||
private static final LocalCss CSS = RaceListResources.INSTANCE.css();
|
||||
|
||||
|
||||
+21
-4
@@ -44,6 +44,7 @@ import com.sap.sailing.gwt.home.desktop.places.event.regatta.EventRegattaView.Pr
|
||||
import com.sap.sailing.gwt.home.desktop.places.event.regatta.RegattaTabView;
|
||||
import com.sap.sailing.gwt.home.shared.partials.filter.FilterPresenter;
|
||||
import com.sap.sailing.gwt.home.shared.partials.filter.FilterValueChangeHandler;
|
||||
import com.sap.sailing.gwt.home.shared.partials.filter.FilterValueProvider;
|
||||
import com.sap.sailing.gwt.home.shared.partials.filter.FilterWidget;
|
||||
import com.sap.sailing.gwt.home.shared.partials.filter.RacesByCompetitorTextBoxFilter;
|
||||
import com.sap.sailing.gwt.home.shared.partials.placeholder.InfoPlaceholder;
|
||||
@@ -130,8 +131,10 @@ public class RegattaRacesTabView extends Composite implements RegattaTabView<Reg
|
||||
}
|
||||
}, new GetRegattaWithProgressAction(eventId, regattaId));
|
||||
addRacesAction(liveRacesListUi.getRefreshable(), new GetLiveRacesForRegattaAction(eventId, regattaId), Navigation.SORT_LIST_FORMAT);
|
||||
filterPresenter.addProvider(Navigation.SORT_LIST_FORMAT, liveRacesListUi.getRaceList());
|
||||
filterPresenter.addHandler(Navigation.SORT_LIST_FORMAT, liveRacesListUi.getRaceList());
|
||||
addRacesAction(raceListContainerUi, new GetFinishedRacesAction(eventId, regattaId), Navigation.SORT_LIST_FORMAT);
|
||||
filterPresenter.addProvider(Navigation.SORT_LIST_FORMAT, finishedRacesList);
|
||||
filterPresenter.addHandler(Navigation.SORT_LIST_FORMAT, finishedRacesList);
|
||||
|
||||
listNavigationPanelUi.addAction(Navigation.SORT_LIST_FORMAT, true);
|
||||
@@ -139,6 +142,7 @@ public class RegattaRacesTabView extends Composite implements RegattaTabView<Reg
|
||||
RegattaCompetitionPresenter competitionPresenter = new DesktopRegattaCompetitionPresenter();
|
||||
addRacesAction(competitionPresenter, new GetCompetitionFormatRacesAction(eventId, regattaId),
|
||||
Navigation.COMPETITION_FORMAT);
|
||||
filterPresenter.addProvider(Navigation.COMPETITION_FORMAT, competitionPresenter);
|
||||
filterPresenter.addHandler(Navigation.COMPETITION_FORMAT, competitionPresenter);
|
||||
}
|
||||
|
||||
@@ -282,19 +286,32 @@ public class RegattaRacesTabView extends Composite implements RegattaTabView<Reg
|
||||
}
|
||||
|
||||
private class RegattaRacesTabViewFilterPresenter extends FilterPresenter<SimpleRaceMetadataDTO, SimpleCompetitorDTO> {
|
||||
private final Map<Navigation, List<FilterValueChangeHandler<SimpleRaceMetadataDTO, SimpleCompetitorDTO>>> handlersByTab = new HashMap<>();
|
||||
|
||||
private final Map<Navigation, List<FilterValueProvider<SimpleCompetitorDTO>>> providersByTab = new HashMap<>();
|
||||
private final Map<Navigation, List<FilterValueChangeHandler<SimpleRaceMetadataDTO>>> handlersByTab = new HashMap<>();
|
||||
|
||||
private RegattaRacesTabViewFilterPresenter(FilterWidget<SimpleRaceMetadataDTO, SimpleCompetitorDTO> filterWidget) {
|
||||
super(filterWidget);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected List<FilterValueChangeHandler<SimpleRaceMetadataDTO, SimpleCompetitorDTO>> getCurrentValueChangeHandlers() {
|
||||
protected List<FilterValueProvider<SimpleCompetitorDTO>> getCurrentValueProviders() {
|
||||
return providersByTab.get(currentlySelectedTab);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected List<FilterValueChangeHandler<SimpleRaceMetadataDTO>> getCurrentValueChangeHandlers() {
|
||||
return handlersByTab.get(currentlySelectedTab);
|
||||
}
|
||||
|
||||
private void addHandler(Navigation assosiatedTab, FilterValueChangeHandler<SimpleRaceMetadataDTO, SimpleCompetitorDTO> handler) {
|
||||
List<FilterValueChangeHandler<SimpleRaceMetadataDTO, SimpleCompetitorDTO>> list = handlersByTab.get(assosiatedTab);
|
||||
private void addProvider(Navigation assosiatedTab, FilterValueProvider<SimpleCompetitorDTO> provider) {
|
||||
List<FilterValueProvider<SimpleCompetitorDTO>> list = providersByTab.get(assosiatedTab);
|
||||
if (list == null) this.providersByTab.put(assosiatedTab, list = new ArrayList<>());
|
||||
list.add(provider);
|
||||
}
|
||||
|
||||
private void addHandler(Navigation assosiatedTab, FilterValueChangeHandler<SimpleRaceMetadataDTO> handler) {
|
||||
List<FilterValueChangeHandler<SimpleRaceMetadataDTO>> list = handlersByTab.get(assosiatedTab);
|
||||
if (list == null) this.handlersByTab.put(assosiatedTab, list = new ArrayList<>());
|
||||
list.add(handler);
|
||||
super.addHandler(handler);
|
||||
|
||||
+10
-1
@@ -15,11 +15,13 @@ import com.google.gwt.user.client.ui.Composite;
|
||||
import com.google.gwt.user.client.ui.Widget;
|
||||
import com.sap.sailing.domain.common.impl.InvertibleComparatorAdapter;
|
||||
import com.sap.sailing.gwt.common.theme.component.celltable.DesignedCellTableResources;
|
||||
import com.sap.sailing.gwt.home.shared.partials.filter.UserSettingsByKeyTextBoxFilter;
|
||||
import com.sap.sailing.gwt.home.shared.places.user.profile.settings.UserSettingsEntry;
|
||||
import com.sap.sailing.gwt.home.shared.places.user.profile.settings.UserSettingsView;
|
||||
import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
import com.sap.sailing.gwt.ui.leaderboard.SortedCellTable;
|
||||
import com.sap.sse.common.Util.Function;
|
||||
import com.sap.sse.common.filter.Filter;
|
||||
import com.sap.sse.common.util.NaturalComparator;
|
||||
|
||||
/**
|
||||
@@ -35,6 +37,8 @@ public class UserSettings extends Composite implements UserSettingsView {
|
||||
@UiField
|
||||
DivElement notificationsTextUi;
|
||||
@UiField
|
||||
UserSettingsByKeyTextBoxFilter userSettingsFilterUi;
|
||||
@UiField
|
||||
DivElement tableWrapper;
|
||||
@UiField(provided = true)
|
||||
final SortedCellTable<UserSettingsEntry> userSettingsTable = new SortedCellTable<>(0,
|
||||
@@ -92,10 +96,15 @@ public class UserSettings extends Composite implements UserSettingsView {
|
||||
userSettingsTable.addColumn(showColumn, "", null, false);
|
||||
deleteColumn.setCellStyleNames(DesignedCellTableResources.INSTANCE.cellTableStyle().buttonCell());
|
||||
userSettingsTable.addColumn(deleteColumn, "", null, false);
|
||||
|
||||
userSettingsFilterUi.addFilterValueChangeHandler(filter -> presenter.updateData());
|
||||
presenter.setView(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Filter<UserSettingsEntry> getFilter() {
|
||||
return userSettingsFilterUi.getFilter();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setEntries(List<UserSettingsEntry> entries) {
|
||||
if (entries.isEmpty()) {
|
||||
|
||||
+6
-1
@@ -1,7 +1,9 @@
|
||||
<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
|
||||
<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder" xmlns:g="urn:import:com.google.gwt.user.client.ui"
|
||||
xmlns:um="urn:import:com.sap.sailing.gwt.home.shared.usermanagement.decorator"
|
||||
xmlns:ms="urn:import:com.sap.sailing.gwt.home.shared.partials.multiselection" xmlns:c="urn:import:com.google.gwt.user.cellview.client">
|
||||
xmlns:ms="urn:import:com.sap.sailing.gwt.home.shared.partials.multiselection"
|
||||
xmlns:f="urn:import:com.sap.sailing.gwt.home.shared.partials.filter"
|
||||
xmlns:c="urn:import:com.google.gwt.user.cellview.client">
|
||||
<ui:with field="i18n" type="com.sap.sailing.gwt.ui.client.StringMessages" />
|
||||
<ui:with field="res" type="com.sap.sailing.gwt.common.client.SharedResources" />
|
||||
<ui:style>
|
||||
@@ -13,6 +15,9 @@
|
||||
<div ui:field="notificationsTextUi" class="{res.mediaCss.column} {res.mediaCss.medium12} {res.mainCss.spacermargintopsmall} {res.mainCss.spacermarginbottomsmall}">
|
||||
<ui:text from="{i18n.userNotificationsOnlyIfMailAddressIsVerified}" />
|
||||
</div>
|
||||
<div class="{res.mediaCss.column} {res.mediaCss.mediumoffset6} {res.mediaCss.medium6}">
|
||||
<f:UserSettingsByKeyTextBoxFilter ui:field="userSettingsFilterUi"/>
|
||||
</div>
|
||||
<div ui:field="tableWrapper" class="{res.mediaCss.column} {res.mediaCss.small12} {res.mainCss.spacermargintopmediumsmall}">
|
||||
<c:CellTable ui:field="userSettingsTable" addStyleNames="{style.table}" />
|
||||
</div>
|
||||
|
||||
-12
@@ -29,18 +29,6 @@ public class EventHeader extends Composite {
|
||||
@UiField DivElement eventDateUi;
|
||||
@UiField DivElement eventLocationUi;
|
||||
|
||||
public EventHeader(EventViewDTO event) {
|
||||
this(event, (String)null);
|
||||
}
|
||||
|
||||
public EventHeader(EventViewDTO event, String optionalRegattaDisplayName) {
|
||||
this(event, optionalRegattaDisplayName, null);
|
||||
}
|
||||
|
||||
public EventHeader(EventViewDTO event, PlaceNavigation<?> logoNavigation) {
|
||||
this(event, null, logoNavigation);
|
||||
}
|
||||
|
||||
public EventHeader(EventViewDTO event, String optionalRegattaDisplayName, PlaceNavigation<?> logoNavigation) {
|
||||
EventHeaderResources.INSTANCE.css().ensureInjected();
|
||||
initWidget(uiBinder.createAndBindUi(this));
|
||||
|
||||
+17
-7
@@ -13,6 +13,7 @@ import com.sap.sailing.gwt.home.mobile.places.event.EventViewBase;
|
||||
import com.sap.sailing.gwt.home.mobile.places.event.overview.AbstractEventOverview;
|
||||
import com.sap.sailing.gwt.home.shared.partials.filter.FilterPresenter;
|
||||
import com.sap.sailing.gwt.home.shared.partials.filter.FilterValueChangeHandler;
|
||||
import com.sap.sailing.gwt.home.shared.partials.filter.FilterValueProvider;
|
||||
import com.sap.sailing.gwt.home.shared.partials.filter.FilterWidget;
|
||||
import com.sap.sailing.gwt.home.shared.partials.filter.RegattaByLeaderboardGroupNameFilter;
|
||||
import com.sap.sailing.gwt.home.shared.partials.regattalist.RegattaListPresenter;
|
||||
@@ -38,8 +39,8 @@ public class MultiRegattaViewImpl extends AbstractEventOverview {
|
||||
new RegattaListPresenter<RegattasAndLiveRacesDTO>(regattaStatusUi);
|
||||
RegattaByLeaderboardGroupNameFilter leaderboardGroupNameFilter = new RegattaByLeaderboardGroupNameFilter();
|
||||
regattaStatusUi.setFilterSectionWidget(leaderboardGroupNameFilter);
|
||||
MultiRegattaViewImplFilterPresenter filterPresenter =
|
||||
new MultiRegattaViewImplFilterPresenter(leaderboardGroupNameFilter, regattaListPresenter);
|
||||
MultiRegattaViewImplFilterPresenter filterPresenter = new MultiRegattaViewImplFilterPresenter(
|
||||
leaderboardGroupNameFilter, regattaListPresenter, regattaListPresenter);
|
||||
container.add(regattaStatusUi);
|
||||
refreshManager.add(filterPresenter.getRefreshableWidgetWrapper(
|
||||
regattaListPresenter.getRefreshableWidgetWrapper(regattaStatusUi)),
|
||||
@@ -47,18 +48,27 @@ public class MultiRegattaViewImpl extends AbstractEventOverview {
|
||||
}
|
||||
|
||||
private class MultiRegattaViewImplFilterPresenter extends FilterPresenter<RegattaMetadataDTO, String> {
|
||||
private final List<FilterValueChangeHandler<RegattaMetadataDTO, String>> valueChangeHandler;
|
||||
|
||||
private final List<FilterValueProvider<String>> valueProviders;
|
||||
private final List<FilterValueChangeHandler<RegattaMetadataDTO>> valueChangeHandlers;
|
||||
|
||||
public MultiRegattaViewImplFilterPresenter(FilterWidget<RegattaMetadataDTO, String> filterWidget,
|
||||
FilterValueChangeHandler<RegattaMetadataDTO, String> valueChangeHandler) {
|
||||
FilterValueProvider<String> valueProvider,
|
||||
FilterValueChangeHandler<RegattaMetadataDTO> valueChangeHandler) {
|
||||
super(filterWidget);
|
||||
this.valueChangeHandler = Arrays.asList(valueChangeHandler);
|
||||
this.valueProviders = Arrays.asList(valueProvider);
|
||||
this.valueChangeHandlers = Arrays.asList(valueChangeHandler);
|
||||
super.addHandler(valueChangeHandler);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected List<FilterValueChangeHandler<RegattaMetadataDTO, String>> getCurrentValueChangeHandlers() {
|
||||
return valueChangeHandler;
|
||||
protected List<FilterValueProvider<String>> getCurrentValueProviders() {
|
||||
return valueProviders;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected List<FilterValueChangeHandler<RegattaMetadataDTO>> getCurrentValueChangeHandlers() {
|
||||
return valueChangeHandlers;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+19
-8
@@ -21,6 +21,7 @@ import com.sap.sailing.gwt.home.mobile.places.QuickfinderPresenter;
|
||||
import com.sap.sailing.gwt.home.mobile.places.event.AbstractEventView;
|
||||
import com.sap.sailing.gwt.home.shared.partials.filter.FilterPresenter;
|
||||
import com.sap.sailing.gwt.home.shared.partials.filter.FilterValueChangeHandler;
|
||||
import com.sap.sailing.gwt.home.shared.partials.filter.FilterValueProvider;
|
||||
import com.sap.sailing.gwt.home.shared.partials.filter.FilterWidget;
|
||||
import com.sap.sailing.gwt.home.shared.partials.filter.RacesByCompetitorTextBoxFilter;
|
||||
import com.sap.sailing.gwt.home.shared.partials.placeholder.InfoPlaceholder;
|
||||
@@ -42,12 +43,13 @@ public class RacesViewImpl extends AbstractEventView<RacesView.Presenter> implem
|
||||
setViewContent(uiBinder.createAndBindUi(this));
|
||||
if(presenter.getRegatta() != null) {
|
||||
RegattaCompetitionPresenter competitionPresenter = new MobileRegattaCompetitionPresenter();
|
||||
RacesViewImplFilterPresenter filterPresenter = new RacesViewImplFilterPresenter(competitorFilterUi, competitionPresenter);
|
||||
refreshManager.add(filterPresenter.getRefreshableWidgetWrapper(competitionPresenter), new GetCompetitionFormatRacesAction(getEventId(), getRegattaId()));
|
||||
RacesViewImplFilterPresenter filterPresenter = new RacesViewImplFilterPresenter(competitorFilterUi,
|
||||
competitionPresenter, competitionPresenter);
|
||||
refreshManager.add(filterPresenter.getRefreshableWidgetWrapper(competitionPresenter),
|
||||
new GetCompetitionFormatRacesAction(getEventId(), getRegattaId()));
|
||||
} else {
|
||||
setViewContent(new InfoPlaceholder(StringMessages.INSTANCE.noDataForEvent()));
|
||||
}
|
||||
competitorFilterUi.removeFromParent();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -72,18 +74,27 @@ public class RacesViewImpl extends AbstractEventView<RacesView.Presenter> implem
|
||||
}
|
||||
|
||||
private class RacesViewImplFilterPresenter extends FilterPresenter<SimpleRaceMetadataDTO, SimpleCompetitorDTO> {
|
||||
private final List<FilterValueChangeHandler<SimpleRaceMetadataDTO, SimpleCompetitorDTO>> valueChangeHandler;
|
||||
|
||||
private final List<FilterValueProvider<SimpleCompetitorDTO>> valueProviders;
|
||||
private final List<FilterValueChangeHandler<SimpleRaceMetadataDTO>> valueChangeHandlers;
|
||||
|
||||
public RacesViewImplFilterPresenter(FilterWidget<SimpleRaceMetadataDTO, SimpleCompetitorDTO> filterWidget,
|
||||
FilterValueChangeHandler<SimpleRaceMetadataDTO, SimpleCompetitorDTO> valueChangeHandler) {
|
||||
FilterValueProvider<SimpleCompetitorDTO> valueProvider,
|
||||
FilterValueChangeHandler<SimpleRaceMetadataDTO> valueChangeHandler) {
|
||||
super(filterWidget);
|
||||
this.valueChangeHandler = Arrays.asList(valueChangeHandler);
|
||||
this.valueProviders = Arrays.asList(valueProvider);
|
||||
this.valueChangeHandlers = Arrays.asList(valueChangeHandler);
|
||||
super.addHandler(valueChangeHandler);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected List<FilterValueChangeHandler<SimpleRaceMetadataDTO, SimpleCompetitorDTO>> getCurrentValueChangeHandlers() {
|
||||
return valueChangeHandler;
|
||||
protected List<FilterValueProvider<SimpleCompetitorDTO>> getCurrentValueProviders() {
|
||||
return valueProviders;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected List<FilterValueChangeHandler<SimpleRaceMetadataDTO>> getCurrentValueChangeHandlers() {
|
||||
return valueChangeHandlers;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+10
@@ -9,9 +9,11 @@ import com.google.gwt.uibinder.client.UiField;
|
||||
import com.google.gwt.user.client.ui.Composite;
|
||||
import com.google.gwt.user.client.ui.FlowPanel;
|
||||
import com.google.gwt.user.client.ui.Widget;
|
||||
import com.sap.sailing.gwt.home.shared.partials.filter.UserSettingsByKeyTextBoxFilter;
|
||||
import com.sap.sailing.gwt.home.shared.places.user.profile.settings.UserSettingsEntry;
|
||||
import com.sap.sailing.gwt.home.shared.places.user.profile.settings.UserSettingsView;
|
||||
import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
import com.sap.sse.common.filter.Filter;
|
||||
|
||||
/**
|
||||
* Implementation of {@link UserSettingsView} where users can change their preferred selections and notifications.
|
||||
@@ -26,6 +28,8 @@ public class UserSettings extends Composite implements UserSettingsView {
|
||||
@UiField
|
||||
DivElement notificationsTextUi;
|
||||
@UiField
|
||||
UserSettingsByKeyTextBoxFilter userSettingsFilterUi;
|
||||
@UiField
|
||||
FlowPanel settingsContainerUi;
|
||||
|
||||
private final Presenter presenter;
|
||||
@@ -33,9 +37,15 @@ public class UserSettings extends Composite implements UserSettingsView {
|
||||
public UserSettings(UserSettingsView.Presenter presenter) {
|
||||
this.presenter = presenter;
|
||||
initWidget(uiBinder.createAndBindUi(this));
|
||||
userSettingsFilterUi.addFilterValueChangeHandler(filter -> presenter.updateData());
|
||||
presenter.setView(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Filter<UserSettingsEntry> getFilter() {
|
||||
return userSettingsFilterUi.getFilter();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setEntries(List<UserSettingsEntry> entries) {
|
||||
notificationsTextUi.setInnerText(entries.isEmpty() ? StringMessages.INSTANCE.noDataFound()
|
||||
|
||||
+5
-1
@@ -1,11 +1,15 @@
|
||||
<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
|
||||
<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder" xmlns:g="urn:import:com.google.gwt.user.client.ui">
|
||||
<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder" xmlns:g="urn:import:com.google.gwt.user.client.ui"
|
||||
xmlns:f="urn:import:com.sap.sailing.gwt.home.shared.partials.filter">
|
||||
<ui:with field="i18n" type="com.sap.sailing.gwt.ui.client.StringMessages" />
|
||||
<ui:with field="res" type="com.sap.sailing.gwt.common.client.SharedResources" />
|
||||
<g:HTMLPanel addStyleNames="{res.mediaCss.grid} {res.mainCss.spacermarginbottommediumsmall}">
|
||||
<div ui:field="notificationsTextUi" class="{res.mediaCss.column} {res.mediaCss.small12} {res.mainCss.spacermargintopsmall} {res.mainCss.spacermarginbottomsmall}">
|
||||
<ui:text from="{i18n.userNotificationsOnlyIfMailAddressIsVerified}" />
|
||||
</div>
|
||||
<div class="{res.mediaCss.column} {res.mediaCss.small12} {res.mainCss.spacermarginbottomsmall}">
|
||||
<f:UserSettingsByKeyTextBoxFilter ui:field="userSettingsFilterUi"/>
|
||||
</div>
|
||||
<g:FlowPanel ui:field="settingsContainerUi" addStyleNames="{res.mediaCss.column} {res.mediaCss.small12}" />
|
||||
</g:HTMLPanel>
|
||||
</ui:UiBinder>
|
||||
+20
-14
@@ -7,27 +7,33 @@ import com.google.gwt.event.shared.HandlerRegistration;
|
||||
import com.google.gwt.user.client.ui.Composite;
|
||||
import com.sap.sse.common.filter.Filter;
|
||||
|
||||
/**
|
||||
* Abstract implementation of {@link FilterWidget} holding a list of
|
||||
* {@link #addFilterValueChangeHandler(FilterValueChangeHandler) added} {@link FilterValueChangeHandler handlers} and
|
||||
* providing a {@link #notifyValueChangeHandlers() convenience method} to notify them.
|
||||
*
|
||||
* @param <T>
|
||||
* the actual type of values to be filtered
|
||||
* @param <C>
|
||||
* the actual type of values to select
|
||||
*/
|
||||
public abstract class AbstractFilterWidget<T, C> extends Composite implements FilterWidget<T, C> {
|
||||
|
||||
private final List<FilterValueChangeHandler<T, C>> valueChangeHandlers = new ArrayList<>();
|
||||
|
||||
private final List<FilterValueChangeHandler<T>> valueChangeHandlers = new ArrayList<>();
|
||||
|
||||
@Override
|
||||
public HandlerRegistration addFilterValueChangeHandler(final FilterValueChangeHandler<T, C> handler) {
|
||||
public HandlerRegistration addFilterValueChangeHandler(final FilterValueChangeHandler<T> handler) {
|
||||
valueChangeHandlers.add(handler);
|
||||
handler.onFilterValueChanged(getFilter());
|
||||
return new HandlerRegistration() {
|
||||
@Override
|
||||
public void removeHandler() {
|
||||
valueChangeHandlers.remove(handler);
|
||||
}
|
||||
};
|
||||
return () -> valueChangeHandlers.remove(handler);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Convenience method to notify all {@link #addFilterValueChangeHandler(FilterValueChangeHandler) added}
|
||||
* {@link FilterValueChangeHandler handler}s.
|
||||
*/
|
||||
protected void notifyValueChangeHandlers() {
|
||||
Filter<T> filter = getFilter();
|
||||
for(FilterValueChangeHandler<T, C> valueChangeHandler : valueChangeHandlers) {
|
||||
valueChangeHandler.onFilterValueChanged(filter);
|
||||
}
|
||||
valueChangeHandlers.forEach(valueChangeHandler -> valueChangeHandler.onFilterValueChanged(filter));
|
||||
}
|
||||
|
||||
}
|
||||
+1
-1
@@ -26,7 +26,7 @@ public abstract class AbstractTextInputFilter<T, C> extends AbstractFilterWidget
|
||||
private void initTextInputWidget(Widget textInputWidget, String placeholderText, KeyUpHandler handler) {
|
||||
textInputWidget.getElement().setAttribute("placeholder", placeholderText);
|
||||
textInputWidget.addStyleName(FilterWidgetResources.INSTANCE.css().input_filter_text_input());
|
||||
textInputWidget.addHandler(handler, KeyUpEvent.getType());
|
||||
textInputWidget.addDomHandler(handler, KeyUpEvent.getType());
|
||||
containerUi.add(textInputWidget);
|
||||
}
|
||||
|
||||
|
||||
+6
-8
@@ -27,23 +27,21 @@ public abstract class FilterPresenter<T, C extends Comparable<C>> {
|
||||
this.filterWidget.asWidget().setVisible(false);
|
||||
}
|
||||
|
||||
protected abstract List<FilterValueChangeHandler<T, C>> getCurrentValueChangeHandlers();
|
||||
protected abstract List<FilterValueChangeHandler<T>> getCurrentValueChangeHandlers();
|
||||
|
||||
protected void addHandler(FilterValueChangeHandler<T, C> handler) {
|
||||
protected abstract List<FilterValueProvider<C>> getCurrentValueProviders();
|
||||
|
||||
protected void addHandler(FilterValueChangeHandler<T> handler) {
|
||||
this.filterWidget.addFilterValueChangeHandler(handler);
|
||||
}
|
||||
|
||||
public void update() {
|
||||
Set<C> filterableValues = new TreeSet<>();
|
||||
for (FilterValueChangeHandler<T, C> valueChangeHandler : getCurrentValueChangeHandlers()) {
|
||||
filterableValues.addAll(valueChangeHandler.getFilterableValues());
|
||||
}
|
||||
getCurrentValueProviders().forEach(provider -> filterableValues.addAll(provider.getFilterableValues()));
|
||||
this.filterWidget.asWidget().setVisible(!filterableValues.isEmpty());
|
||||
this.filterWidget.setSelectableValues(filterableValues);
|
||||
Filter<T> filter = filterableValues.isEmpty() ? alwaysMatchingFilter : this.filterWidget.getFilter();
|
||||
for (FilterValueChangeHandler<T, C> valueChangeHandler : getCurrentValueChangeHandlers()) {
|
||||
valueChangeHandler.onFilterValueChanged(filter);
|
||||
}
|
||||
getCurrentValueChangeHandlers().forEach(handler -> handler.onFilterValueChanged(filter));
|
||||
}
|
||||
|
||||
public <D extends DTO> RefreshableWidget<D> getRefreshableWidgetWrapper(final RefreshableWidget<D> wrappedWidget) {
|
||||
|
||||
+16
-6
@@ -1,13 +1,23 @@
|
||||
package com.sap.sailing.gwt.home.shared.partials.filter;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
import com.sap.sse.common.filter.Filter;
|
||||
|
||||
public interface FilterValueChangeHandler<T, C> {
|
||||
|
||||
/**
|
||||
* Handler interface for class which need to be informed about the value change of a {@link FilterWidget}.
|
||||
*
|
||||
* @param <T>
|
||||
* the actual type of values to be filtered
|
||||
*/
|
||||
@FunctionalInterface
|
||||
public interface FilterValueChangeHandler<T> {
|
||||
|
||||
/**
|
||||
* Called if the value of the {@link FilterWidget widget}, where this {@link FilterValueChangeHandler handler} was
|
||||
* added, changes providing the {@link Filter} representing the its state.
|
||||
*
|
||||
* @param filter
|
||||
* {@link Filter} instance representing the {@link FilterWidget widget} state
|
||||
*/
|
||||
void onFilterValueChanged(Filter<T> filter);
|
||||
|
||||
Collection<C> getFilterableValues();
|
||||
|
||||
}
|
||||
+21
@@ -0,0 +1,21 @@
|
||||
package com.sap.sailing.gwt.home.shared.partials.filter;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
/**
|
||||
* Handler interface for class provide the values available for selection in a {@link FilterWidget}.
|
||||
*
|
||||
* @param <C>
|
||||
* the actual type of values to select
|
||||
*/
|
||||
@FunctionalInterface
|
||||
public interface FilterValueProvider<C> {
|
||||
|
||||
/**
|
||||
* Provides the values available for selection in a {@link FilterWidget widget}.
|
||||
*
|
||||
* @return {@link Collection} of select-able values
|
||||
*/
|
||||
Collection<C> getFilterableValues();
|
||||
|
||||
}
|
||||
+31
-3
@@ -6,11 +6,39 @@ import com.google.gwt.event.shared.HandlerRegistration;
|
||||
import com.google.gwt.user.client.ui.IsWidget;
|
||||
import com.sap.sse.common.filter.Filter;
|
||||
|
||||
/**
|
||||
* Interface for {@link IsWidget widgets} used to filter a specific type values based on another type, where the values
|
||||
* available for selection can be {@link #setSelectableValues(Collection) set}.
|
||||
*
|
||||
* @param <T>
|
||||
* the actual type of values to be filtered
|
||||
* @param <C>
|
||||
* the actual type of values to select
|
||||
*/
|
||||
public interface FilterWidget<T, C> extends IsWidget {
|
||||
|
||||
HandlerRegistration addFilterValueChangeHandler(FilterValueChangeHandler<T, C> handler);
|
||||
|
||||
/**
|
||||
* Adds a {@link FilterValueChangeHandler handler} to the {@link FilterWidget widget} which is called on values
|
||||
* changes.
|
||||
*
|
||||
* @param handler
|
||||
* the {@link FilterValueChangeHandler handler} to add
|
||||
* @return {@link HandlerRegistration} which can be used to remove the handler
|
||||
*/
|
||||
HandlerRegistration addFilterValueChangeHandler(FilterValueChangeHandler<T> handler);
|
||||
|
||||
/**
|
||||
* Provides a {@link Filter} instance based on the {@link FilterWidget widget} state.
|
||||
*
|
||||
* @return {@link Filter} instance representing the {@link FilterWidget widget} state
|
||||
*/
|
||||
Filter<T> getFilter();
|
||||
|
||||
|
||||
/**
|
||||
* Sets the values available for selection to the {@link FilterWidget widget}.
|
||||
*
|
||||
* @param selectableValues
|
||||
* {@link Collection} of select-able values
|
||||
*/
|
||||
void setSelectableValues(Collection<C> selectableValues);
|
||||
}
|
||||
+33
@@ -0,0 +1,33 @@
|
||||
package com.sap.sailing.gwt.home.shared.partials.filter;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
import com.sap.sailing.gwt.home.shared.places.user.profile.settings.UserSettingsEntry;
|
||||
import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
import com.sap.sse.common.filter.AbstractKeywordFilter;
|
||||
import com.sap.sse.common.filter.Filter;
|
||||
|
||||
public class UserSettingsByKeyTextBoxFilter extends AbstractTextBoxFilter<UserSettingsEntry, String> {
|
||||
|
||||
public UserSettingsByKeyTextBoxFilter() {
|
||||
super(StringMessages.INSTANCE.userSettingsFilter());
|
||||
}
|
||||
|
||||
private final UserSettingsByKeyFilter filter = new UserSettingsByKeyFilter();
|
||||
|
||||
@Override
|
||||
protected Filter<UserSettingsEntry> getFilter(String searchString) {
|
||||
this.filter.setKeywords(Arrays.asList(searchString));
|
||||
return filter;
|
||||
}
|
||||
|
||||
private class UserSettingsByKeyFilter extends AbstractKeywordFilter<UserSettingsEntry> {
|
||||
|
||||
@Override
|
||||
public Iterable<String> getStrings(UserSettingsEntry userSettingsEntry) {
|
||||
return Arrays.asList(userSettingsEntry.getKey());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
+4
-3
@@ -12,6 +12,7 @@ import com.sap.sailing.gwt.home.communication.event.RaceCompetitionFormatSeriesD
|
||||
import com.sap.sailing.gwt.home.communication.event.SimpleCompetitorDTO;
|
||||
import com.sap.sailing.gwt.home.communication.race.SimpleRaceMetadataDTO;
|
||||
import com.sap.sailing.gwt.home.shared.partials.filter.FilterValueChangeHandler;
|
||||
import com.sap.sailing.gwt.home.shared.partials.filter.FilterValueProvider;
|
||||
import com.sap.sailing.gwt.home.shared.partials.regattacompetition.RegattaCompetitionView.RegattaCompetitionFleetView;
|
||||
import com.sap.sailing.gwt.home.shared.partials.regattacompetition.RegattaCompetitionView.RegattaCompetitionRaceView;
|
||||
import com.sap.sailing.gwt.home.shared.partials.regattacompetition.RegattaCompetitionView.RegattaCompetitionSeriesView;
|
||||
@@ -19,9 +20,9 @@ import com.sap.sailing.gwt.home.shared.refresh.RefreshableWidget;
|
||||
import com.sap.sse.common.filter.Filter;
|
||||
import com.sap.sse.gwt.dispatch.shared.commands.ListResult;
|
||||
|
||||
public abstract class RegattaCompetitionPresenter implements
|
||||
RefreshableWidget<ListResult<RaceCompetitionFormatSeriesDTO>>,
|
||||
FilterValueChangeHandler<SimpleRaceMetadataDTO, SimpleCompetitorDTO> {
|
||||
public abstract class RegattaCompetitionPresenter
|
||||
implements RefreshableWidget<ListResult<RaceCompetitionFormatSeriesDTO>>,
|
||||
FilterValueProvider<SimpleCompetitorDTO>, FilterValueChangeHandler<SimpleRaceMetadataDTO> {
|
||||
|
||||
private final RegattaCompetitionView view;
|
||||
private Filter<SimpleRaceMetadataDTO> latestRacesByCompetitorFilter;
|
||||
|
||||
+7
-5
@@ -10,18 +10,20 @@ import java.util.Set;
|
||||
|
||||
import com.sap.sailing.gwt.home.communication.eventview.RegattaMetadataDTO;
|
||||
import com.sap.sailing.gwt.home.shared.partials.filter.FilterValueChangeHandler;
|
||||
import com.sap.sailing.gwt.home.shared.partials.filter.FilterValueProvider;
|
||||
import com.sap.sailing.gwt.home.shared.partials.regattalist.RegattaListView.RegattaListItem;
|
||||
import com.sap.sailing.gwt.home.shared.refresh.RefreshableWidget;
|
||||
import com.sap.sse.common.Util;
|
||||
import com.sap.sse.common.filter.Filter;
|
||||
import com.sap.sse.gwt.dispatch.shared.commands.DTO;
|
||||
|
||||
public class RegattaListPresenter<D extends DTO> implements FilterValueChangeHandler<RegattaMetadataDTO, String>{
|
||||
|
||||
public class RegattaListPresenter<D extends DTO>
|
||||
implements FilterValueProvider<String>, FilterValueChangeHandler<RegattaMetadataDTO> {
|
||||
|
||||
private final RegattaListView view;
|
||||
private final Map<RegattaListItem, RegattaMetadataDTO> stucture = new HashMap<>();
|
||||
private Filter<RegattaMetadataDTO> latestLeaderboardGroupFilter;
|
||||
|
||||
|
||||
public <V extends RegattaListView & RefreshableWidget<D>> RegattaListPresenter(V view) {
|
||||
this.view = view;
|
||||
}
|
||||
@@ -42,9 +44,9 @@ public class RegattaListPresenter<D extends DTO> implements FilterValueChangeHan
|
||||
Util.addAll(regattaMetadata.getLeaderboardGroupNames(), filterableValues);
|
||||
}
|
||||
}
|
||||
return filterableValues.size() > 1 ? filterableValues : Collections.<String>emptySet();
|
||||
return filterableValues.size() > 1 ? filterableValues : Collections.<String> emptySet();
|
||||
}
|
||||
|
||||
|
||||
public RefreshableWidget<D> getRefreshableWidgetWrapper(final RefreshableWidget<D> wrappedWidget) {
|
||||
return new RefreshableWidget<D>() {
|
||||
@Override
|
||||
|
||||
+7
-1
@@ -7,6 +7,7 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.TreeSet;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import com.google.gwt.storage.client.Storage;
|
||||
import com.google.gwt.user.client.rpc.AsyncCallback;
|
||||
@@ -51,6 +52,11 @@ public class UserSettingsPresenter<C extends ClientFactoryWithDispatch & ErrorAn
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateData() {
|
||||
view.setEntries(currentlyShownEntries.stream().filter(view.getFilter()::matches).collect(Collectors.toList()));
|
||||
}
|
||||
|
||||
private void loadSettingsFromLocalStorage(final Map<String, String> userSettings) {
|
||||
final Map<String, String> localSettings = loadSettingsFromLocalStorage();
|
||||
final Set<String> allKeys = new TreeSet<>((a, b) -> a.compareTo(b));
|
||||
@@ -60,7 +66,7 @@ public class UserSettingsPresenter<C extends ClientFactoryWithDispatch & ErrorAn
|
||||
for(String key : allKeys) {
|
||||
currentlyShownEntries.add(new UserSettingsEntry(key, userSettings.get(key), localSettings.get(key)));
|
||||
}
|
||||
view.setEntries(currentlyShownEntries);
|
||||
this.updateData();
|
||||
}
|
||||
|
||||
private Map<String, String> loadSettingsFromLocalStorage() {
|
||||
|
||||
+5
@@ -4,6 +4,7 @@ import java.util.List;
|
||||
|
||||
import com.google.gwt.user.client.ui.IsWidget;
|
||||
import com.sap.sailing.gwt.home.shared.partials.multiselection.SuggestedMultiSelectionDataProvider;
|
||||
import com.sap.sse.common.filter.Filter;
|
||||
|
||||
/**
|
||||
* Interface for the user preferences UI. To support desktop as well as mobile version, an
|
||||
@@ -12,6 +13,8 @@ import com.sap.sailing.gwt.home.shared.partials.multiselection.SuggestedMultiSel
|
||||
*/
|
||||
public interface UserSettingsView extends IsWidget {
|
||||
|
||||
Filter<UserSettingsEntry> getFilter();
|
||||
|
||||
void setEntries(List<UserSettingsEntry> entries);
|
||||
|
||||
/**
|
||||
@@ -21,6 +24,8 @@ public interface UserSettingsView extends IsWidget {
|
||||
public interface Presenter {
|
||||
void loadData();
|
||||
|
||||
void updateData();
|
||||
|
||||
void remove(UserSettingsEntry entry);
|
||||
|
||||
void setView(UserSettingsView view);
|
||||
|
||||
Regular → Executable
+1
@@ -1818,6 +1818,7 @@ public interface StringMessages extends com.sap.sse.gwt.client.StringMessages,
|
||||
String documentSettingsId();
|
||||
String settingsForId(String id);
|
||||
String userProfileSettingsTabDescription();
|
||||
String userSettingsFilter();
|
||||
String requiresRegattaRaceAndLeaderboard();
|
||||
String couldNotFindRaceInRegatte(String raceName, String regattaName);
|
||||
String algorithmTimeOutText();
|
||||
|
||||
Regular → Executable
+1
@@ -1799,6 +1799,7 @@ resetToDefault=Reset to default
|
||||
resetToDefaultInProgress=In resetting...
|
||||
settingsRemoved=Default settings restored
|
||||
settingsRemovedError=Could not restore default settings
|
||||
userSettingsFilter=Settings filter
|
||||
requiresRegattaRaceAndLeaderboard=This page requires a valid regatta name, race name and leaderboard name.
|
||||
couldNotFindRaceInRegatte=Could not obtain a race with name {0} for a regatta with name {1}
|
||||
algorithmTimeOutText=out-of-bounds
|
||||
|
||||
+1
@@ -1782,6 +1782,7 @@ resetToDefault=Auf Standard zurücksetzen
|
||||
resetToDefaultInProgress=Setze zurück...
|
||||
settingsRemoved=Standardeinstellungen wiederhergestellt
|
||||
settingsRemovedError=Fehler beim Widerherstellen der Standardeinstellungen
|
||||
userSettingsFilter=Einstellungsfilter
|
||||
errorLoadingRegattasForLeaderboardGroup=Es ist ein Fehler beim Laden der zugehörigen Regatten aufgetreten {0}: {1}
|
||||
errorLoadingLeaderBoardGroup=Fehler beim laden der LeaderboardGruppe {0}: {1}
|
||||
errorLoadingLeaderBoardGroups=Fehler beim Datenladen {0}
|
||||
|
||||
Reference in new issue
Block a user