moved some filter base classes to the com.sap.sailing.domain.filter package

some naming and UI cleanup
This commit is contained in:
fmittag
2013-04-17 16:25:54 +02:00
parent b3bb55c445
commit 095f026a35
24 changed files with 231 additions and 98 deletions
@@ -7,6 +7,7 @@ Bundle-Vendor: SAP
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
Bundle-ActivationPolicy: lazy
Export-Package: com.sap.sailing.domain.common,
com.sap.sailing.domain.common.filter,
com.sap.sailing.domain.common.impl,
com.sap.sailing.domain.common.quadtree,
com.sap.sailing.domain.common.quadtree.impl;x-friends:="com.sap.sailing.domain.test",
@@ -4,4 +4,5 @@
<source path='common'/>
<source path='common/impl'/>
<source path='common/racelog'/>
<source path='common/filter'/>
</module>
@@ -1,4 +1,4 @@
package com.sap.sailing.gwt.ui.client;
package com.sap.sailing.domain.common.filter;
import com.sap.sailing.domain.common.impl.Util.Pair;
@@ -1,7 +1,8 @@
package com.sap.sailing.gwt.ui.client;
package com.sap.sailing.domain.common.filter;
import java.util.Collection;
public interface CollectionFilter<FilterObjectType, ValueType> extends Filter<FilterObjectType, ValueType> {
Collection<FilterObjectType> filter(Collection<FilterObjectType> objectCollection);
}
@@ -0,0 +1,44 @@
package com.sap.sailing.domain.common.filter;
import com.sap.sailing.domain.common.impl.Util.Pair;
/**
* A filter base interface.
*/
public interface Filter<FilterObjectType, ValueType> {
/**
* @return All supported filter operators
*/
Iterable<FilterOperators> getSupportedOperators();
/**
* @return The default operator for the filter or null if there is no default operator.
*/
FilterOperators getDefaultOperator();
/**
* @return The type of the value which is used to filter the object to filter
*/
Class<ValueType> getValueType();
/**
* @return The combination of filter operator to use and the filter value to use for the filtering
*/
Pair<FilterOperators, ValueType> getConfiguration();
/**
* Sets the combination of filter operator to use and the filter value to use for the filtering
*/
void setConfiguration(Pair<FilterOperators, ValueType> filterValueAndOperator);
/**
* @return The name of the filter
*/
String getName();
/**
* @return a copy of the filter object
*/
Filter<FilterObjectType, ValueType> copy();
}
@@ -1,4 +1,4 @@
package com.sap.sailing.gwt.ui.client;
package com.sap.sailing.domain.common.filter;
/**
* An enumeration of filter operators
@@ -1,8 +1,9 @@
package com.sap.sailing.gwt.ui.client;
package com.sap.sailing.domain.common.filter;
import java.util.LinkedHashSet;
import java.util.Set;
/**
* A named set of filters.
* Each of the filters has it's own configuration.
@@ -1,4 +1,5 @@
package com.sap.sailing.gwt.ui.client;
package com.sap.sailing.domain.common.filter;
public interface ObjectFilter<FilterObjectType, ValueType> extends Filter<FilterObjectType, ValueType> {
@@ -124,6 +124,12 @@ img.openColumn {
font-family: 'UbuntuLight', Arial, Verdana, sans-serif;
}
.raceBoardControls {
float: right;
margin: 9px 0 0 12px;
font-family: 'UbuntuLight', Arial, Verdana, sans-serif;
}
.raceBoardNavigation-navigationitem {
color: #dddcdc;
text-transform: uppercase;
@@ -16,6 +16,9 @@ import com.google.gwt.user.client.ui.ListBox;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;
import com.sap.sailing.domain.common.filter.Filter;
import com.sap.sailing.domain.common.filter.FilterOperators;
import com.sap.sailing.domain.common.filter.FilterSet;
import com.sap.sailing.domain.common.impl.Util.Pair;
import com.sap.sailing.gwt.ui.shared.CompetitorDTO;
@@ -53,7 +56,7 @@ public abstract class AbstractCompetitorsFilterSetDialog extends DataEntryDialog
if (!nameNotEmpty) {
errorMessage = stringMessages.pleaseEnterAName();
} else if(filterCount < 1) {
errorMessage = "Please add at least one filter.";
errorMessage = "Please add at least one filter criteria.";
} else {
for(Filter<CompetitorDTO, ?> filter: competitorsFilterSet.getFilters()) {
Object filterValue = filter.getConfiguration().getB();
@@ -93,7 +96,7 @@ public abstract class AbstractCompetitorsFilterSetDialog extends DataEntryDialog
HorizontalPanel hPanel = new HorizontalPanel();
mainPanel.add(hPanel);
hPanel.add(new Label("Name of the filter set:"));
hPanel.add(new Label("Filter name:"));
hPanel.add(filterSetNameTextBox);
filterListBox.addChangeHandler(new ChangeHandler() {
@@ -103,7 +106,7 @@ public abstract class AbstractCompetitorsFilterSetDialog extends DataEntryDialog
}
});
filterListBox.addItem("Select a filter...");
filterListBox.addItem("Select a filter criteria...");
for(Filter<?,?> filter: availableCompetitorsFilter) {
filterListBox.addItem(filter.getName());
}
@@ -137,7 +140,7 @@ public abstract class AbstractCompetitorsFilterSetDialog extends DataEntryDialog
HorizontalPanel addFilterPanel = new HorizontalPanel();
mainPanel.add(addFilterPanel);
addFilterPanel.add(new Label("Available Filters:"));
addFilterPanel.add(new Label("Filter criterias:"));
addFilterPanel.add(filterListBox);
addFilterPanel.add(addFilterButton);
@@ -288,7 +291,7 @@ public abstract class AbstractCompetitorsFilterSetDialog extends DataEntryDialog
competitorsFiltersGrid = new Grid(filterCount + headlineRow + footerRow, 4);
competitorsFiltersGrid.setCellSpacing(4);
if(headlineRow == 1) {
competitorsFiltersGrid.setWidget(0 ,0, new Label("Filter name"));
competitorsFiltersGrid.setWidget(0 ,0, new Label("Filter criteria"));
competitorsFiltersGrid.setWidget(0 ,1, new Label("Operator"));
competitorsFiltersGrid.setWidget(0 ,2, new Label("Value"));
}
@@ -298,7 +301,7 @@ public abstract class AbstractCompetitorsFilterSetDialog extends DataEntryDialog
competitorsFiltersGrid.setWidget(i + headlineRow, 1, filterOperatorSelectionListBoxes.get(i));
competitorsFiltersGrid.setWidget(i + headlineRow, 2, filterValueFields.get(i));
competitorsFiltersGrid.setWidget(i + headlineRow, 3, filterDeleteButtons.get(i));
}
}
} else {
competitorsFiltersGrid = new Grid(0, 0);
}
@@ -3,6 +3,10 @@ package com.sap.sailing.gwt.ui.client;
import java.util.ArrayList;
import java.util.List;
import com.sap.sailing.domain.common.filter.AbstractFilter;
import com.sap.sailing.domain.common.filter.Filter;
import com.sap.sailing.domain.common.filter.FilterOperators;
import com.sap.sailing.domain.common.filter.ObjectFilter;
import com.sap.sailing.gwt.ui.shared.CompetitorDTO;
public class CompetitorNationalityFilter extends AbstractFilter<CompetitorDTO, String> implements ObjectFilter<CompetitorDTO, String> {
@@ -75,11 +79,6 @@ public class CompetitorNationalityFilter extends AbstractFilter<CompetitorDTO, S
public String getName() {
return "Nationality";
}
@Override
public String getDescription() {
return "Shows competitors of a nationality (ISO code or IOC code).";
}
@Override
public Filter<CompetitorDTO, String> copy() {
@@ -6,6 +6,10 @@ import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
import com.sap.sailing.domain.common.filter.AbstractFilter;
import com.sap.sailing.domain.common.filter.CollectionFilter;
import com.sap.sailing.domain.common.filter.Filter;
import com.sap.sailing.domain.common.filter.FilterOperators;
import com.sap.sailing.gwt.ui.shared.CompetitorDTO;
public class CompetitorRankFilter extends AbstractFilter<CompetitorDTO, Integer> implements CollectionFilter<CompetitorDTO, Integer> {
@@ -24,7 +28,6 @@ public class CompetitorRankFilter extends AbstractFilter<CompetitorDTO, Integer>
super();
}
@Override
public FilterOperators getDefaultOperator() {
return FilterOperators.GreaterThanEquals;
@@ -63,17 +66,11 @@ public class CompetitorRankFilter extends AbstractFilter<CompetitorDTO, Integer>
return result;
}
@Override
public String getName() {
return "Top ranked competitors";
}
@Override
public String getDescription() {
return "Shows the top [number] ranked competitors";
}
@Override
public Iterable<FilterOperators> getSupportedOperators() {
@@ -8,6 +8,10 @@ import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.Set;
import com.sap.sailing.domain.common.filter.CollectionFilter;
import com.sap.sailing.domain.common.filter.Filter;
import com.sap.sailing.domain.common.filter.FilterSet;
import com.sap.sailing.domain.common.filter.ObjectFilter;
import com.sap.sailing.domain.common.impl.Util;
import com.sap.sailing.gwt.ui.shared.CompetitorDTO;
@@ -1,5 +1,6 @@
package com.sap.sailing.gwt.ui.client;
import com.sap.sailing.domain.common.filter.FilterSet;
import com.sap.sailing.gwt.ui.shared.CompetitorDTO;
public interface CompetitorSelectionProvider {
@@ -3,6 +3,7 @@ package com.sap.sailing.gwt.ui.client;
import java.util.LinkedHashSet;
import java.util.Set;
import com.sap.sailing.domain.common.filter.FilterSet;
import com.sap.sailing.gwt.ui.shared.CompetitorDTO;
public class CompetitorsFilterSets {
@@ -19,7 +20,7 @@ public class CompetitorsFilterSets {
return activeFilterSet;
}
public void setActiveFilter(FilterSet<CompetitorDTO> newActiveFilterSet) {
public void setActiveFilterSet(FilterSet<CompetitorDTO> newActiveFilterSet) {
if(newActiveFilterSet != null) {
if(filterSets.contains(newActiveFilterSet)) {
this.activeFilterSet = newActiveFilterSet;
@@ -11,6 +11,7 @@ import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.RadioButton;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;
import com.sap.sailing.domain.common.filter.FilterSet;
import com.sap.sailing.gwt.ui.shared.CompetitorDTO;
/**
@@ -45,7 +46,7 @@ public class CompetitorsFilterSetsDialog extends DataEntryDialog<CompetitorsFilt
}
public CompetitorsFilterSetsDialog(CompetitorsFilterSets competitorsFilterSets, StringMessages stringMessages, DialogCallback<CompetitorsFilterSets> callback) {
super("Competitors filter sets...", null, stringMessages.ok(), stringMessages.cancel(), new CompetitorsFilterSetsValidator(), callback);
super("Competitors filters", null, stringMessages.ok(), stringMessages.cancel(), new CompetitorsFilterSetsValidator(), callback);
this.competitorsFilterSets = competitorsFilterSets;
this.stringMessages = stringMessages;
@@ -56,7 +57,7 @@ public class CompetitorsFilterSetsDialog extends DataEntryDialog<CompetitorsFilt
deleteFilterSetButtons = new ArrayList<Button>();
filterSets = new ArrayList<FilterSet<CompetitorDTO>>();
addFilterSetButton = new Button("Add filter set");
addFilterSetButton = new Button("Add filter");
}
@Override
@@ -67,7 +68,7 @@ public class CompetitorsFilterSetsDialog extends DataEntryDialog<CompetitorsFilt
if(competitorsFilterSets.getFilterSets().size() < 1) {
headLineText = "Please create a filter set to filter the list of competitors.";
} else {
headLineText = "Available filter sets...";
headLineText = "Available filters";
}
mainPanel.add(new Label(headLineText));
@@ -184,6 +185,12 @@ public class CompetitorsFilterSetsDialog extends DataEntryDialog<CompetitorsFilt
}
index++;
}
// in case the filter set to delete is the 'active' one, we set the "Filter nothing" filter set 'active'
if(activeFilterSetRadioButtons.get(index).getValue()) {
activeFilterSetRadioButtons.get(0).setValue(true);
}
activeFilterSetRadioButtons.remove(index);
editFilterSetButtons.remove(index);
deleteFilterSetButtons.remove(index);
@@ -207,11 +214,11 @@ public class CompetitorsFilterSetsDialog extends DataEntryDialog<CompetitorsFilt
if(!filterSet.getName().equals(FILTER_NOTHING_FILTERSET)) {
result.addFilterSet(filterSet);
if(isActiveFilterSet) {
result.setActiveFilter(filterSet);
result.setActiveFilterSet(filterSet);
}
} else {
if(isActiveFilterSet) {
result.setActiveFilter(null);
result.setActiveFilterSet(null);
}
}
}
@@ -1,5 +1,6 @@
package com.sap.sailing.gwt.ui.client;
import com.sap.sailing.domain.common.filter.FilterSet;
import com.sap.sailing.gwt.ui.shared.CompetitorDTO;
@@ -7,7 +8,7 @@ public class CreateCompetitorsFilterSetDialog extends AbstractCompetitorsFilterS
public CreateCompetitorsFilterSetDialog(StringMessages stringMessages,
DialogCallback<FilterSet<CompetitorDTO>> callback) {
super(new FilterSet<CompetitorDTO>(null), "Create a filter set", stringMessages, callback);
super(new FilterSet<CompetitorDTO>(null), "Create a filter", stringMessages, callback);
filterListBox = createListBox(false);
filterSetNameTextBox = createTextBox(null);
@@ -1,12 +1,13 @@
package com.sap.sailing.gwt.ui.client;
import com.sap.sailing.domain.common.filter.FilterSet;
import com.sap.sailing.gwt.ui.shared.CompetitorDTO;
public class EditCompetitorsFilterSetDialog extends AbstractCompetitorsFilterSetDialog {
public EditCompetitorsFilterSetDialog(FilterSet<CompetitorDTO> competitorsFilterSet, StringMessages stringMessages,
com.sap.sailing.gwt.ui.client.DataEntryDialog.DialogCallback<FilterSet<CompetitorDTO>> callback) {
super(competitorsFilterSet, "Edit filter set", stringMessages, callback);
super(competitorsFilterSet, "Edit filter", stringMessages, callback);
filterListBox = createListBox(false);
filterSetNameTextBox = createTextBox(competitorsFilterSet.getName());
@@ -1,21 +0,0 @@
package com.sap.sailing.gwt.ui.client;
import com.sap.sailing.domain.common.impl.Util.Pair;
public interface Filter<FilterObjectType, ValueType> {
Iterable<FilterOperators> getSupportedOperators();
FilterOperators getDefaultOperator();
Class<ValueType> getValueType();
Pair<FilterOperators, ValueType> getConfiguration();
void setConfiguration(Pair<FilterOperators, ValueType> filterValueAndOperator);
String getName();
String getDescription();
Filter<FilterObjectType, ValueType> copy();
}
@@ -1,6 +1,7 @@
package com.sap.sailing.gwt.ui.client;
import com.google.gwt.core.shared.GWT;
import com.sap.sailing.domain.common.filter.FilterOperators;
public class FilterOperatorsFormatter {
@@ -15,7 +15,6 @@ import com.google.gwt.user.client.ui.AbstractImagePrototype;
import com.google.gwt.user.client.ui.Anchor;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.FormPanel;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.IntegerBox;
import com.google.gwt.user.client.ui.Label;
@@ -30,7 +29,7 @@ import com.sap.sailing.gwt.ui.shared.components.SettingsDialogComponent;
import com.sap.sailing.gwt.ui.shared.controls.slider.SliderBar;
import com.sap.sailing.gwt.ui.shared.controls.slider.TimeSlider;
public class TimePanel<T extends TimePanelSettings> extends FormPanel implements Component<T>, TimeListener, TimeZoomChangeListener,
public class TimePanel<T extends TimePanelSettings> extends SimplePanel implements Component<T>, TimeListener, TimeZoomChangeListener,
TimeRangeChangeListener, PlayStateListener, RequiresResize {
protected final Timer timer;
protected final TimeRangeWithZoomProvider timeRangeProvider;
@@ -9,6 +9,7 @@ import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.DockLayoutPanel;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.RootLayoutPanel;
import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
import com.sap.sailing.gwt.ui.client.AbstractEntryPoint;
@@ -173,7 +174,7 @@ public class RaceBoardEntryPoint extends AbstractEntryPoint {
private FlowPanel createTimePanel(RaceBoardPanel raceBoardPanel) {
FlowPanel timeLineInnerBgPanel = new FlowPanel();
timeLineInnerBgPanel.addStyleName("timeLineInnerBgPanel");
timeLineInnerBgPanel.add(raceBoardPanel.getTimeWidget());
timeLineInnerBgPanel.add(raceBoardPanel.getTimePanel());
FlowPanel timeLineInnerPanel = new FlowPanel();
timeLineInnerPanel.add(timeLineInnerBgPanel);
@@ -209,8 +210,7 @@ public class RaceBoardEntryPoint extends AbstractEntryPoint {
private void createRaceBoardInOneScreenMode(RaceBoardPanel raceBoardPanel) {
DockLayoutPanel p = new DockLayoutPanel(Unit.PX);
RootLayoutPanel.get().add(p);
FlowPanel toolbarPanel = new FlowPanel();
toolbarPanel.add(raceBoardPanel.getNavigationWidget());
Panel toolbarPanel = raceBoardPanel.getToolbarPanel();
if (!UserAgentChecker.INSTANCE.isUserAgentSupported(userAgent)) {
HTML lbl = new HTML(stringMessages.warningBrowserUnsupported());
lbl.setStyleName("browserOptimizedMessage");
@@ -17,11 +17,16 @@ import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.CheckBox;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.MenuBar;
import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.SimplePanel;
import com.google.gwt.user.client.ui.Widget;
import com.sap.sailing.domain.common.RaceIdentifier;
import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
import com.sap.sailing.domain.common.filter.FilterOperators;
import com.sap.sailing.domain.common.filter.FilterSet;
import com.sap.sailing.domain.common.impl.Util.Pair;
import com.sap.sailing.gwt.ui.actions.AsyncActionsExecutor;
import com.sap.sailing.gwt.ui.client.CompetitorRankFilter;
import com.sap.sailing.gwt.ui.client.CompetitorSelectionModel;
import com.sap.sailing.gwt.ui.client.CompetitorsFilterSets;
import com.sap.sailing.gwt.ui.client.CompetitorsFilterSetsDialog;
@@ -43,6 +48,7 @@ import com.sap.sailing.gwt.ui.leaderboard.ExplicitRaceColumnSelectionWithPresele
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardPanel;
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardSettings;
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardSettingsFactory;
import com.sap.sailing.gwt.ui.shared.CompetitorDTO;
import com.sap.sailing.gwt.ui.shared.RaceDTO;
import com.sap.sailing.gwt.ui.shared.RegattaDTO;
import com.sap.sailing.gwt.ui.shared.UserDTO;
@@ -82,8 +88,9 @@ public class RaceBoardPanel extends SimplePanel implements RegattaDisplayer, Rac
private int scrollOffset;
private final List<ComponentViewer> componentViewers;
private FlowPanel componentsNavigationPanel;
private FlowPanel settingsPanel;
private final FlowPanel componentControlsPanel;
private final FlowPanel viewControlsPanel;
private final FlowPanel toolbarPanel;
private RaceTimePanel timePanel;
private final Timer timer;
private final RaceSelectionProvider raceSelectionProvider;
@@ -97,6 +104,9 @@ public class RaceBoardPanel extends SimplePanel implements RegattaDisplayer, Rac
private WindChart windChart;
private MultiChartPanel competitorChart;
private CheckBox competitorsFilterCheckBox;
private FilterSet<CompetitorDTO> lastActiveCompetitorFilterSet;
/**
* The component viewer in <code>ONESCREEN</code> view mode. <code>null</code> if in <code>CASCADE</code> view mode
*/
@@ -132,8 +142,27 @@ public class RaceBoardPanel extends SimplePanel implements RegattaDisplayer, Rac
timeRangeWithZoomModel = new TimeRangeWithZoomModel();
componentViewers = new ArrayList<ComponentViewer>();
competitorSelectionModel = new CompetitorSelectionModel(/* hasMultiSelection */ true);
componentsNavigationPanel = new FlowPanel();
componentsNavigationPanel.addStyleName("raceBoardNavigation");
// create a default Top N competitors filter as default filter
FilterSet<CompetitorDTO> topNCompetitorsFilterSet = new FilterSet<CompetitorDTO>("Top 50");
CompetitorRankFilter rankFilter = new CompetitorRankFilter();
rankFilter.setConfiguration(new Pair<FilterOperators, Integer>(FilterOperators.Equals, 50));
topNCompetitorsFilterSet.addFilter(rankFilter);
competitorsFilterSets.addFilterSet(topNCompetitorsFilterSet);
competitorsFilterSets.setActiveFilterSet(topNCompetitorsFilterSet);
competitorSelectionModel.setCompetitorsFilterSet(competitorsFilterSets.getActiveFilterSet());
toolbarPanel = new FlowPanel();
toolbarPanel.setWidth("100%");
mainPanel.add(toolbarPanel);
componentControlsPanel = new FlowPanel();
componentControlsPanel.addStyleName("raceBoardNavigation");
toolbarPanel.add(componentControlsPanel);
viewControlsPanel = new FlowPanel();
viewControlsPanel.addStyleName("raceBoardControls");
toolbarPanel.add(viewControlsPanel);
switch (getConfiguration().getViewMode()) {
case ONESCREEN:
createOneScreenView(leaderboardName, leaderboardGroupName, mainPanel);
@@ -178,31 +207,7 @@ public class RaceBoardPanel extends SimplePanel implements RegattaDisplayer, Rac
addComponentToNavigationMenu(leaderboardAndMapViewer, competitorChart, true);
addComponentToNavigationMenu(leaderboardAndMapViewer, raceMap, false);
Button editCompetitorsFilterButton = new Button("Filter competitors...");
componentsNavigationPanel.add(editCompetitorsFilterButton);
editCompetitorsFilterButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
CompetitorsFilterSetsDialog competitorsFilterSetsDialog = new CompetitorsFilterSetsDialog(competitorsFilterSets,
stringMessages, new DialogCallback<CompetitorsFilterSets>() {
@Override
public void ok(final CompetitorsFilterSets newCompetitorsFilterSets) {
competitorsFilterSets.getFilterSets().clear();
competitorsFilterSets.getFilterSets().addAll(newCompetitorsFilterSets.getFilterSets());
competitorsFilterSets.setActiveFilter(newCompetitorsFilterSets.getActiveFilterSet());
competitorSelectionModel.setCompetitorsFilterSet(newCompetitorsFilterSets.getActiveFilterSet());
}
@Override
public void cancel() {
}
});
competitorsFilterSetsDialog .show();
}
});
addCompetitorsFilterControl(viewControlsPanel);
addMediaSelectorToNavigationMenu();
}
@@ -214,7 +219,7 @@ public class RaceBoardPanel extends SimplePanel implements RegattaDisplayer, Rac
timer.addTimeListener(mediaSelector);
mediaService.getMediaTracksForRace(selectedRaceIdentifier, mediaSelector);
for (Widget widget : mediaSelector.widgets()) {
componentsNavigationPanel.add(widget);
componentControlsPanel.add(widget);
}
}
@@ -239,8 +244,92 @@ public class RaceBoardPanel extends SimplePanel implements RegattaDisplayer, Rac
return new LeaderboardPanel(sailingService, asyncActionsExecutor, leaderBoardSettings, selectedRaceIdentifier,
competitorSelectionModel, timer, leaderboardGroupName, leaderboardName, errorReporter, stringMessages,
userAgent, /* showRaceDetails */ true, raceTimesInfoProvider, /* autoExpandLastRaceColumn */ false);
}
}
private void updateCompetitorsFilterControlState(CompetitorsFilterSets filterSets) {
FilterSet<CompetitorDTO> activeFilterSet = filterSets.getActiveFilterSet();
if(activeFilterSet != null) {
if(lastActiveCompetitorFilterSet != activeFilterSet) {
lastActiveCompetitorFilterSet = activeFilterSet;
}
} else {
lastActiveCompetitorFilterSet = null;
}
competitorsFilterCheckBox.setValue(activeFilterSet != null, false /* fireChangeValue*/);
if(lastActiveCompetitorFilterSet != null) {
competitorsFilterCheckBox.setText("Competitors Filter" + "(" + lastActiveCompetitorFilterSet.getName() + ")");
} else {
competitorsFilterCheckBox.setText("Competitors Filter");
}
}
private void addCompetitorsFilterControl(Panel parentPanel) {
String competitorsFilterTitle = "Competitors filter";
competitorsFilterCheckBox = new CheckBox(competitorsFilterTitle);
competitorsFilterCheckBox.getElement().getStyle().setFloat(Style.Float.LEFT);
competitorsFilterCheckBox.setTitle(competitorsFilterTitle);
competitorsFilterCheckBox.addStyleName("raceBoardNavigation-innerElement");
competitorsFilterCheckBox.addValueChangeHandler(new ValueChangeHandler<Boolean>() {
@Override
public void onValueChange(ValueChangeEvent<Boolean> newValue) {
boolean isChecked = competitorsFilterCheckBox.getValue();
if(isChecked) {
if(lastActiveCompetitorFilterSet != null) {
competitorsFilterSets.setActiveFilterSet(lastActiveCompetitorFilterSet);
competitorSelectionModel.setCompetitorsFilterSet(competitorsFilterSets.getActiveFilterSet());
updateCompetitorsFilterControlState(competitorsFilterSets);
} else {
showEditCompetitorsFiltersDialog();
}
} else {
competitorsFilterSets.setActiveFilterSet(null);
competitorSelectionModel.setCompetitorsFilterSet(competitorsFilterSets.getActiveFilterSet());
updateCompetitorsFilterControlState(competitorsFilterSets);
}
}
});
parentPanel.add(competitorsFilterCheckBox);
Button settingsButton = new Button("");
settingsButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
showEditCompetitorsFiltersDialog();
}
});
settingsButton.addStyleName("raceBoardNavigation-settingsButton");
settingsButton.getElement().getStyle().setFloat(Style.Float.LEFT);
settingsButton.setTitle("Competitors filter");
parentPanel.add(settingsButton);
updateCompetitorsFilterControlState(competitorsFilterSets);
}
private void showEditCompetitorsFiltersDialog() {
CompetitorsFilterSetsDialog competitorsFilterSetsDialog = new CompetitorsFilterSetsDialog(competitorsFilterSets,
stringMessages, new DialogCallback<CompetitorsFilterSets>() {
@Override
public void ok(final CompetitorsFilterSets newCompetitorsFilterSets) {
competitorsFilterSets.getFilterSets().clear();
competitorsFilterSets.getFilterSets().addAll(newCompetitorsFilterSets.getFilterSets());
competitorsFilterSets.setActiveFilterSet(newCompetitorsFilterSets.getActiveFilterSet());
competitorSelectionModel.setCompetitorsFilterSet(newCompetitorsFilterSets.getActiveFilterSet());
updateCompetitorsFilterControlState(newCompetitorsFilterSets);
}
@Override
public void cancel() {
}
});
competitorsFilterSetsDialog .show();
}
private <SettingsType> void addComponentToNavigationMenu(final ComponentViewer componentViewer,
final Component<SettingsType> component, boolean isToogleCheckboxEnabled) {
final CheckBox checkBox= new CheckBox(component.getLocalizedShortName());
@@ -269,7 +358,7 @@ public class RaceBoardPanel extends SimplePanel implements RegattaDisplayer, Rac
}
});
componentsNavigationPanel.add(checkBox);
componentControlsPanel.add(checkBox);
if(component.hasSettings()) {
Button settingsButton = new Button("");
@@ -283,7 +372,7 @@ public class RaceBoardPanel extends SimplePanel implements RegattaDisplayer, Rac
settingsButton.getElement().getStyle().setFloat(Style.Float.LEFT);
settingsButton.setTitle(stringMessages.settingsForComponent(component.getLocalizedShortName()));
componentsNavigationPanel.add(settingsButton);
componentControlsPanel.add(settingsButton);
}
}
@@ -340,15 +429,11 @@ public class RaceBoardPanel extends SimplePanel implements RegattaDisplayer, Rac
}
}
public Widget getNavigationWidget() {
return componentsNavigationPanel;
}
public Widget getSettingsWidget() {
return settingsPanel;
public Panel getToolbarPanel() {
return toolbarPanel;
}
public Widget getTimeWidget() {
public Panel getTimePanel() {
return timePanel;
}
@@ -187,7 +187,7 @@ public class TVViewController implements RaceTimesInfoProviderListener {
private FlowPanel createTimePanel(RaceBoardPanel raceBoardPanel) {
FlowPanel timeLineInnerBgPanel = new FlowPanel();
timeLineInnerBgPanel.addStyleName("timeLineInnerBgPanel");
timeLineInnerBgPanel.add(raceBoardPanel.getTimeWidget());
timeLineInnerBgPanel.add(raceBoardPanel.getTimePanel());
FlowPanel timeLineInnerPanel = new FlowPanel();
timeLineInnerPanel.add(timeLineInnerBgPanel);