diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/autoplay/client/place/player/AutoPlayController.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/autoplay/client/place/player/AutoPlayController.java index d19bb7781b6..7f6cb5a068e 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/autoplay/client/place/player/AutoPlayController.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/autoplay/client/place/player/AutoPlayController.java @@ -72,7 +72,6 @@ public class AutoPlayController implements RaceTimesInfoProviderListener { // leaderboard related attributes private LeaderboardDTO leaderboard; -// private LeaderboardSettings leaderboardSettings; // raceboard related attributes private RegattaAndRaceIdentifier currentLiveRace; @@ -104,11 +103,7 @@ public class AutoPlayController implements RaceTimesInfoProviderListener { this.raceboardComponentsSettings = allRaceboardSettings.getB(); 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; } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/perspective/AbstractPerspectiveComposite.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/perspective/AbstractPerspectiveComposite.java new file mode 100644 index 00000000000..c0c0371e151 --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/perspective/AbstractPerspectiveComposite.java @@ -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 extends Composite implements Perspective { + + protected final List> components; + + public AbstractPerspectiveComposite() { + components = new ArrayList>(); + } + + @Override + public CompositeSettings getSettingsOfComponents() { + Collection> settings = new HashSet<>(); + for (Component component : components) { + ComponentAndSettingsPair componentAndSettings = getComponentAndSettings(component); + if (componentAndSettings != null) { + settings.add(componentAndSettings); + } + } + return new CompositeSettings(settings); + } + + private ComponentAndSettingsPair getComponentAndSettings(Component component) { + return component.hasSettings() ? new ComponentAndSettingsPair(component, component.getSettings()) : null; + } + + @Override + public void updateSettingsOfComponents(CompositeSettings newSettings) { + for (CompositeSettings.ComponentAndSettingsPair componentAndSettings : newSettings.getSettingsPerComponent()) { + updateSettings(componentAndSettings); + } + } + + private void updateSettings(ComponentAndSettingsPair componentAndSettings) { + componentAndSettings.getA().updateSettings(componentAndSettings.getB()); + } + + @Override + public Iterable> getComponents() { + return components; + } + + @Override + public Widget getEntryWidget() { + return this.asWidget(); + } +} diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/perspective/AbstractPerspectiveWithoutSettings.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/perspective/AbstractPerspectiveWithoutSettings.java index c526cbd51e8..e9720233bc5 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/perspective/AbstractPerspectiveWithoutSettings.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/perspective/AbstractPerspectiveWithoutSettings.java @@ -22,6 +22,7 @@ public abstract class AbstractPerspectiveWithoutSettings extends AbstractPerspec @Override public void updateSettings(AbstractSettings newSettings) { + // no-op } @Override diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/perspective/Perspective.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/perspective/Perspective.java index 96d3657df9e..b4b4fc55abd 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/perspective/Perspective.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/perspective/Perspective.java @@ -16,6 +16,8 @@ public interface Perspective extends Component 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 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> 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 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); + } } diff --git a/java/com.sap.sse.gwt/src/com/sap/sse/gwt/client/shared/components/CompositeSettings.java b/java/com.sap.sse.gwt/src/com/sap/sse/gwt/client/shared/components/CompositeSettings.java index cf19df895d1..5b379d62509 100755 --- a/java/com.sap.sse.gwt/src/com/sap/sse/gwt/client/shared/components/CompositeSettings.java +++ b/java/com.sap.sse.gwt/src/com/sap/sse/gwt/client/shared/components/CompositeSettings.java @@ -23,4 +23,15 @@ public class CompositeSettings extends AbstractSettings { return settingsPerComponent; } + @SuppressWarnings("unchecked") + public SettingsType getSettingsForType(Class settingsType) { + SettingsType result = null; + for(ComponentAndSettingsPair componentAndSettings: settingsPerComponent) { + if(componentAndSettings.getB().getClass().getName().equals(settingsType.getName())) { + result = (SettingsType) componentAndSettings.getB(); + break; + } + } + return result; + } }