made a RaceboardPanel a 'Perspective', applied all settings created in the Autoplay config to the Raceboardpanel

This commit is contained in:
fmittag committed 2015-12-12 18:17:56 +01:00
1 parent f87332ea54
commit a1a5c75d44
8 files changed
+154 -16

No files matched your search

@@ -72,7 +72,6 @@ public class AutoPlayController implements RaceTimesInfoProviderListener {
// leaderboard related attributes
private LeaderboardDTO leaderboard;
// private LeaderboardSettings leaderboardSettings;
// raceboard related attributes
private RegattaAndRaceIdentifier currentLiveRace;
@@ -105,10 +104,6 @@ public class AutoPlayController implements RaceTimesInfoProviderListener {
this.leaderboardPerspectiveSettings = allLeaderboardSettings.getA();
this.leaderboardComponentsSettings = allLeaderboardSettings.getB();
// if(this.leaderboardSettings == null) {
// leaderboardSettings = LeaderboardSettingsFactory.getInstance().createNewDefaultSettings(null, null, null, /* autoExpandFirstRace */ false, /* showRegattaRank */ true, /* showCompetitorSailIdColumn */ true, /* showCompetitorFullNameColumn */ true);
// }
//
asyncActionsExecutor = new AsyncActionsExecutor();
leaderboard = null;
leaderboardTimer = new Timer(PlayModes.Live, /* delayBetweenAutoAdvancesInMilliseconds */1000l);
@@ -135,7 +130,7 @@ public class AutoPlayController implements RaceTimesInfoProviderListener {
private LeaderboardPanel createLeaderboardPanel(String leaderboardName, boolean showRaceDetails) {
CompetitorSelectionModel selectionModel = new CompetitorSelectionModel(/* hasMultiSelection */ true);
LeaderboardSettings leaderboardSettings = (LeaderboardSettings) leaderboardComponentsSettings.getSettingsPerComponent().iterator().next().getB();
LeaderboardSettings leaderboardSettings = leaderboardComponentsSettings.getSettingsForType(LeaderboardSettings.class);
LeaderboardPanel leaderboardPanel = new LeaderboardPanel(sailingService, asyncActionsExecutor,
leaderboardSettings, true,
/* preSelectedRace */null, selectionModel, leaderboardTimer, /*leaderboardGroupName*/ "", leaderboardName,
@@ -299,6 +294,8 @@ public class AutoPlayController implements RaceTimesInfoProviderListener {
leaderboardTimer.pause();
raceboardTimer.setPlayMode(PlayModes.Live);
raceBoardPanel.setSettingsOfComponents(raceboardComponentsSettings);
isInitialScreen = false;
}
@@ -0,0 +1,64 @@
package com.sap.sailing.gwt.ui.client.shared.perspective;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.Widget;
import com.sap.sse.common.settings.Settings;
import com.sap.sse.gwt.client.shared.components.Component;
import com.sap.sse.gwt.client.shared.components.CompositeSettings;
import com.sap.sse.gwt.client.shared.components.CompositeSettings.ComponentAndSettingsPair;
/**
* An abstract base class for perspectives with a widget.
* @author Frank
*
*/
public abstract class AbstractPerspectiveComposite<SettingsType extends Settings> extends Composite implements Perspective<SettingsType> {
protected final List<Component<?>> components;
public AbstractPerspectiveComposite() {
components = new ArrayList<Component<?>>();
}
@Override
public CompositeSettings getSettingsOfComponents() {
Collection<ComponentAndSettingsPair<?>> settings = new HashSet<>();
for (Component<?> component : components) {
ComponentAndSettingsPair<?> componentAndSettings = getComponentAndSettings(component);
if (componentAndSettings != null) {
settings.add(componentAndSettings);
}
}
return new CompositeSettings(settings);
}
private <ComponentSettingsType extends Settings> ComponentAndSettingsPair<ComponentSettingsType> getComponentAndSettings(Component<ComponentSettingsType> component) {
return component.hasSettings() ? new ComponentAndSettingsPair<ComponentSettingsType>(component, component.getSettings()) : null;
}
@Override
public void updateSettingsOfComponents(CompositeSettings newSettings) {
for (CompositeSettings.ComponentAndSettingsPair<?> componentAndSettings : newSettings.getSettingsPerComponent()) {
updateSettings(componentAndSettings);
}
}
private <ComponentSettingsType extends Settings> void updateSettings(ComponentAndSettingsPair<ComponentSettingsType> componentAndSettings) {
componentAndSettings.getA().updateSettings(componentAndSettings.getB());
}
@Override
public Iterable<Component<?>> getComponents() {
return components;
}
@Override
public Widget getEntryWidget() {
return this.asWidget();
}
}
@@ -22,6 +22,7 @@ public abstract class AbstractPerspectiveWithoutSettings extends AbstractPerspec
@Override
public void updateSettings(AbstractSettings newSettings) {
// no-op
}
@Override
@@ -17,5 +17,7 @@ public interface Perspective<SettingsType extends Settings> extends Component<Se
void updateSettingsOfComponents(CompositeSettings settingsOfComponents);
void setSettingsOfComponents(CompositeSettings settingsOfComponents);
String getPerspectiveName();
}
@@ -5,6 +5,7 @@ import com.sap.sailing.domain.common.dto.AbstractLeaderboardDTO;
import com.sap.sailing.gwt.autoplay.client.place.start.ProxyLeaderboardComponent;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.client.shared.perspective.AbstractPerspective;
import com.sap.sse.gwt.client.shared.components.CompositeSettings;
import com.sap.sse.gwt.client.shared.components.SettingsDialogComponent;
/**
@@ -69,4 +70,9 @@ public class ProxyLeaderboardPerspective extends AbstractPerspective<Leaderboard
public String getDependentCssClassName() {
return "";
}
@Override
public void setSettingsOfComponents(CompositeSettings settingsOfComponents) {
// no-op
}
}
@@ -12,6 +12,7 @@ import com.sap.sailing.gwt.ui.client.shared.charts.WindChartSettings;
import com.sap.sailing.gwt.ui.client.shared.perspective.AbstractPerspective;
import com.sap.sailing.gwt.ui.client.shared.racemap.RaceMapSettings;
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardSettings;
import com.sap.sse.gwt.client.shared.components.CompositeSettings;
import com.sap.sse.gwt.client.shared.components.SettingsDialogComponent;
/**
@@ -82,4 +83,9 @@ public class ProxyRaceBoardPerspective extends AbstractPerspective<RaceBoardPers
public RaceBoardPerspectiveSettings getSettings() {
return perspectiveSettings;
}
@Override
public void setSettingsOfComponents(CompositeSettings settingsOfComponents) {
// no-op
}
}
@@ -20,7 +20,6 @@ import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.MenuBar;
import com.google.gwt.user.client.ui.RequiresResize;
import com.google.gwt.user.client.ui.SimplePanel;
import com.google.gwt.user.client.ui.UIObject;
import com.google.gwt.user.client.ui.Widget;
import com.sap.sailing.domain.common.LeaderboardNameConstants;
@@ -50,12 +49,15 @@ import com.sap.sailing.gwt.ui.client.media.MediaPlayerManagerComponent;
import com.sap.sailing.gwt.ui.client.media.PopupPositionProvider;
import com.sap.sailing.gwt.ui.client.shared.charts.EditMarkPassingsPanel;
import com.sap.sailing.gwt.ui.client.shared.charts.MultiCompetitorRaceChart;
import com.sap.sailing.gwt.ui.client.shared.charts.MultiCompetitorRaceChartSettings;
import com.sap.sailing.gwt.ui.client.shared.charts.WindChart;
import com.sap.sailing.gwt.ui.client.shared.charts.WindChartSettings;
import com.sap.sailing.gwt.ui.client.shared.filter.FilterWithUI;
import com.sap.sailing.gwt.ui.client.shared.filter.LeaderboardFetcher;
import com.sap.sailing.gwt.ui.client.shared.perspective.AbstractPerspectiveComposite;
import com.sap.sailing.gwt.ui.client.shared.racemap.RaceMap;
import com.sap.sailing.gwt.ui.client.shared.racemap.RaceMapResources;
import com.sap.sailing.gwt.ui.client.shared.racemap.RaceMapSettings;
import com.sap.sailing.gwt.ui.leaderboard.CompetitorFilterPanel;
import com.sap.sailing.gwt.ui.leaderboard.ExplicitRaceColumnSelectionWithPreselectedRace;
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardPanel;
@@ -69,7 +71,9 @@ import com.sap.sse.gwt.client.async.AsyncActionsExecutor;
import com.sap.sse.gwt.client.player.TimeRangeWithZoomModel;
import com.sap.sse.gwt.client.player.Timer;
import com.sap.sse.gwt.client.shared.components.Component;
import com.sap.sse.gwt.client.shared.components.CompositeSettings;
import com.sap.sse.gwt.client.shared.components.SettingsDialog;
import com.sap.sse.gwt.client.shared.components.SettingsDialogComponent;
import com.sap.sse.gwt.client.useragent.UserAgentDetails;
import com.sap.sse.security.ui.client.UserService;
@@ -82,14 +86,14 @@ import com.sap.sse.security.ui.client.UserService;
* @author Frank Mittag, Axel Uhl (d043530)
*
*/
public class RaceBoardPanel extends SimplePanel implements RaceSelectionChangeListener,
public class RaceBoardPanel extends AbstractPerspectiveComposite<RaceBoardPerspectiveSettings> implements RaceSelectionChangeListener,
LeaderboardUpdateListener, PopupPositionProvider, RequiresResize {
private final SailingServiceAsync sailingService;
private final MediaServiceAsync mediaService;
private final UUID eventId;
private final StringMessages stringMessages;
private final ErrorReporter errorReporter;
private final RaceBoardPerspectiveSettings raceboardViewConfiguration;
private RaceBoardPerspectiveSettings perspectiveSettings;
private String raceBoardName;
private RaceTimePanel timePanel;
@@ -135,13 +139,13 @@ public class RaceBoardPanel extends SimplePanel implements RaceSelectionChangeLi
public RaceBoardPanel(SailingServiceAsync sailingService, MediaServiceAsync mediaService,
UserService userService, AsyncActionsExecutor asyncActionsExecutor, Map<CompetitorDTO, BoatDTO> competitorsAndTheirBoats,
Timer timer, RaceSelectionProvider theRaceSelectionProvider, String leaderboardName,
String leaderboardGroupName, UUID eventId, RaceBoardPerspectiveSettings raceboardViewConfiguration,
String leaderboardGroupName, UUID eventId, RaceBoardPerspectiveSettings raceboardPerspectiveSettings,
ErrorReporter errorReporter, final StringMessages stringMessages,
UserAgentDetails userAgent, RaceTimesInfoProvider raceTimesInfoProvider, boolean showMapControls, boolean isScreenLargeEnoughToOfferChartSupport) {
this.sailingService = sailingService;
this.mediaService = mediaService;
this.stringMessages = stringMessages;
this.raceboardViewConfiguration = raceboardViewConfiguration;
this.perspectiveSettings = raceboardPerspectiveSettings;
this.raceSelectionProvider = theRaceSelectionProvider;
this.raceTimesInfoProvider = raceTimesInfoProvider;
this.errorReporter = errorReporter;
@@ -157,7 +161,7 @@ public class RaceBoardPanel extends SimplePanel implements RaceSelectionChangeLi
this.asyncActionsExecutor = asyncActionsExecutor;
FlowPanel mainPanel = new ResizableFlowPanel();
mainPanel.setSize("100%", "100%");
setWidget(mainPanel);
initWidget(mainPanel);
raceInformationHeader = new FlowPanel();
raceInformationHeader.setStyleName("RegattaRaceInformation-Header");
regattaAndRaceTimeInformationHeader = new FlowPanel();
@@ -220,17 +224,17 @@ public class RaceBoardPanel extends SimplePanel implements RaceSelectionChangeLi
leaderboardPanel.addLeaderboardUpdateListener(this);
// in case the URL configuration contains the name of a competitors filter set we try to activate it
// FIXME the competitorsFilterSets has now moved to CompetitorSearchTextBox (which should probably be renamed); pass on the parameters to the LeaderboardPanel and see what it does with it
if (raceboardViewConfiguration.getActiveCompetitorsFilterSetName() != null) {
if (raceboardPerspectiveSettings.getActiveCompetitorsFilterSetName() != null) {
for (FilterSet<CompetitorDTO, FilterWithUI<CompetitorDTO>> filterSet : competitorSearchTextBox.getCompetitorsFilterSets()
.getFilterSets()) {
if (filterSet.getName().equals(raceboardViewConfiguration.getActiveCompetitorsFilterSetName())) {
if (filterSet.getName().equals(raceboardPerspectiveSettings.getActiveCompetitorsFilterSetName())) {
competitorSearchTextBox.getCompetitorsFilterSets().setActiveFilterSet(filterSet);
break;
}
}
}
timePanel = new RaceTimePanel(timer, timeRangeWithZoomModel, stringMessages, raceTimesInfoProvider,
raceboardViewConfiguration.isCanReplayDuringLiveRaces(), isScreenLargeEnoughToOfferChartSupport);
raceboardPerspectiveSettings.isCanReplayDuringLiveRaces(), isScreenLargeEnoughToOfferChartSupport);
timeRangeWithZoomModel.addTimeZoomChangeListener(timePanel);
raceTimesInfoProvider.addRaceTimesInfoProviderListener(timePanel);
raceSelectionProvider.addRaceSelectionChangeListener(timePanel);
@@ -391,7 +395,7 @@ public class RaceBoardPanel extends SimplePanel implements RaceSelectionChangeLi
}
public RaceBoardPerspectiveSettings getConfiguration() {
return raceboardViewConfiguration;
return perspectiveSettings;
}
@Override
@@ -483,5 +487,52 @@ public class RaceBoardPanel extends SimplePanel implements RaceSelectionChangeLi
((RequiresResize) child).onResize();
}
}
@Override
public String getLocalizedShortName() {
return getPerspectiveName();
}
@Override
public boolean hasSettings() {
return true;
}
@Override
public SettingsDialogComponent<RaceBoardPerspectiveSettings> getSettingsDialogComponent() {
return new RaceBoardPerspectiveSettingsDialogComponent(perspectiveSettings, StringMessages.INSTANCE);
}
@Override
public RaceBoardPerspectiveSettings getSettings() {
return perspectiveSettings;
}
@Override
public void updateSettings(RaceBoardPerspectiveSettings newSettings) {
this.perspectiveSettings = newSettings;
}
@Override
public String getDependentCssClassName() {
return "";
}
@Override
public String getPerspectiveName() {
return "Race Viewer";
}
@Override
public void setSettingsOfComponents(CompositeSettings settingsOfComponents) {
RaceMapSettings raceMapSettings = settingsOfComponents.getSettingsForType(RaceMapSettings.class);
raceMap.updateSettings(raceMapSettings);
LeaderboardSettings leaderboardSettings = settingsOfComponents.getSettingsForType(LeaderboardSettings.class);
leaderboardPanel.updateSettings(leaderboardSettings);
WindChartSettings windChartSettings = settingsOfComponents.getSettingsForType(WindChartSettings.class);
windChart.updateSettings(windChartSettings);
MultiCompetitorRaceChartSettings multiCompetitorRaceChartSettings = settingsOfComponents.getSettingsForType(MultiCompetitorRaceChartSettings.class);
competitorChart.updateSettings(multiCompetitorRaceChartSettings);
}
}
@@ -23,4 +23,15 @@ public class CompositeSettings extends AbstractSettings {
return settingsPerComponent;
}
@SuppressWarnings("unchecked")
public <SettingsType extends Settings> SettingsType getSettingsForType(Class<SettingsType> settingsType) {
SettingsType result = null;
for(ComponentAndSettingsPair<?> componentAndSettings: settingsPerComponent) {
if(componentAndSettings.getB().getClass().getName().equals(settingsType.getName())) {
result = (SettingsType) componentAndSettings.getB();
break;
}
}
return result;
}
}