mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-09-23 14:08:40 +00:00
moved some filter base classes to the com.sap.sailing.domain.filter package
some naming and UI cleanup
This commit is contained in:
@@ -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
-1
@@ -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;
|
||||
|
||||
+2
-1
@@ -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);
|
||||
}
|
||||
+44
@@ -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
-1
@@ -1,4 +1,4 @@
|
||||
package com.sap.sailing.gwt.ui.client;
|
||||
package com.sap.sailing.domain.common.filter;
|
||||
|
||||
/**
|
||||
* An enumeration of filter operators
|
||||
+2
-1
@@ -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.
|
||||
+2
-1
@@ -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;
|
||||
|
||||
+9
-6
@@ -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);
|
||||
}
|
||||
|
||||
+4
-5
@@ -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() {
|
||||
|
||||
+4
-7
@@ -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() {
|
||||
|
||||
+4
@@ -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
@@ -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 {
|
||||
|
||||
+2
-1
@@ -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;
|
||||
|
||||
+12
-5
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+2
-1
@@ -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);
|
||||
|
||||
+2
-1
@@ -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
@@ -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 {
|
||||
|
||||
|
||||
+1
-2
@@ -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;
|
||||
|
||||
+3
-3
@@ -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");
|
||||
|
||||
+125
-40
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user