From e916095de44e5331c6b0812be3918643d91c6851 Mon Sep 17 00:00:00 2001 From: Kai Boernert Date: Wed, 7 Jun 2017 14:10:55 +0200 Subject: [PATCH] added sequence node for race end case --- .../PreLeaderBoardWithCompetitorsNode.java | 38 +++-------- .../nodes/PreLeaderBoardWithFlagsNode.java | 41 ----------- .../client/nodes/RootNodeSixtyInch.java | 20 +++--- .../client/nodes/base/AutoPlayLoopNode.java | 9 --- .../nodes/base/AutoPlaySequenceNode.java | 68 +++++++++++++++++++ .../IdleOverallLeaderBoardViewImpl.java | 5 +- 6 files changed, 93 insertions(+), 88 deletions(-) delete mode 100644 java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/autoplay/client/nodes/PreLeaderBoardWithFlagsNode.java create mode 100644 java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/autoplay/client/nodes/base/AutoPlaySequenceNode.java diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/autoplay/client/nodes/PreLeaderBoardWithCompetitorsNode.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/autoplay/client/nodes/PreLeaderBoardWithCompetitorsNode.java index 906f85c1a0d..b14f94ef9b1 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/autoplay/client/nodes/PreLeaderBoardWithCompetitorsNode.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/autoplay/client/nodes/PreLeaderBoardWithCompetitorsNode.java @@ -1,41 +1,23 @@ package com.sap.sailing.gwt.autoplay.client.nodes; -import java.util.UUID; - -import com.google.gwt.user.client.rpc.AsyncCallback; import com.sap.sailing.gwt.autoplay.client.app.AutoPlayClientFactory; +import com.sap.sailing.gwt.autoplay.client.events.AutoPlayHeaderEvent; import com.sap.sailing.gwt.autoplay.client.nodes.base.FiresPlaceNode; -import com.sap.sailing.gwt.home.communication.event.minileaderboard.GetMiniLeaderboardDTO; -import com.sap.sailing.gwt.home.communication.event.minileaderboard.GetMiniLeaderbordAction; -import com.sap.sse.gwt.dispatch.shared.commands.ResultWithTTL; +import com.sap.sailing.gwt.autoplay.client.places.screens.preliveraceloop.leaderboard.AbstractPreRaceLeaderBoardWithImagePlace; +import com.sap.sailing.gwt.autoplay.client.places.screens.preliveraceloop.leaderboard.PreRaceLeaderBoardWithCompetitorPlace; -public class PreLeaderBoardWithFlagsNode extends FiresPlaceNode { +public class PreLeaderBoardWithCompetitorsNode extends FiresPlaceNode { private final AutoPlayClientFactory cf; - public PreLeaderBoardWithFlagsNode(AutoPlayClientFactory cf) { + public PreLeaderBoardWithCompetitorsNode(AutoPlayClientFactory cf) { this.cf = cf; } - public void onStart() { - - UUID eventId = cf.getAutoPlayCtx().getContextDefinition().getEventId(); - String leaderBoardName = cf.getAutoPlayCtx().getContextDefinition().getLeaderboardName(); - cf.getDispatch().execute(new GetMiniLeaderbordAction(eventId, leaderBoardName), - new AsyncCallback>() { - @Override - public void onFailure(Throwable caught) { - // fireEvent(new DataLoadFailureEvent(MiniLeaderboardLoader.this, caught)); - } - - @Override - public void onSuccess(ResultWithTTL resultTTL) { - /* - * GetMiniLeaderboardDTO dto = resultTTL.getDto(); AbstractPreRaceLeaderBoardWithImagePlace - * place = new AbstractPreRaceLeaderBoardWithImagePlace(); place.setLeaderBoardDTO(dto); - * setPlaceToGo(place); firePlaceChangeAndStartTimer(); - */ - } - }); + AbstractPreRaceLeaderBoardWithImagePlace place = new PreRaceLeaderBoardWithCompetitorPlace(); + setPlaceToGo(place); + firePlaceChangeAndStartTimer(); + getBus().fireEvent(new AutoPlayHeaderEvent(cf.getAutoPlayCtx().getLifeRace().getRegattaName(), + cf.getAutoPlayCtx().getLifeRace().getRaceName())); }; } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/autoplay/client/nodes/PreLeaderBoardWithFlagsNode.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/autoplay/client/nodes/PreLeaderBoardWithFlagsNode.java deleted file mode 100644 index 906f85c1a0d..00000000000 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/autoplay/client/nodes/PreLeaderBoardWithFlagsNode.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.sap.sailing.gwt.autoplay.client.nodes; - -import java.util.UUID; - -import com.google.gwt.user.client.rpc.AsyncCallback; -import com.sap.sailing.gwt.autoplay.client.app.AutoPlayClientFactory; -import com.sap.sailing.gwt.autoplay.client.nodes.base.FiresPlaceNode; -import com.sap.sailing.gwt.home.communication.event.minileaderboard.GetMiniLeaderboardDTO; -import com.sap.sailing.gwt.home.communication.event.minileaderboard.GetMiniLeaderbordAction; -import com.sap.sse.gwt.dispatch.shared.commands.ResultWithTTL; - -public class PreLeaderBoardWithFlagsNode extends FiresPlaceNode { - private final AutoPlayClientFactory cf; - - public PreLeaderBoardWithFlagsNode(AutoPlayClientFactory cf) { - this.cf = cf; - } - - - public void onStart() { - - UUID eventId = cf.getAutoPlayCtx().getContextDefinition().getEventId(); - String leaderBoardName = cf.getAutoPlayCtx().getContextDefinition().getLeaderboardName(); - cf.getDispatch().execute(new GetMiniLeaderbordAction(eventId, leaderBoardName), - new AsyncCallback>() { - @Override - public void onFailure(Throwable caught) { - // fireEvent(new DataLoadFailureEvent(MiniLeaderboardLoader.this, caught)); - } - - @Override - public void onSuccess(ResultWithTTL resultTTL) { - /* - * GetMiniLeaderboardDTO dto = resultTTL.getDto(); AbstractPreRaceLeaderBoardWithImagePlace - * place = new AbstractPreRaceLeaderBoardWithImagePlace(); place.setLeaderBoardDTO(dto); - * setPlaceToGo(place); firePlaceChangeAndStartTimer(); - */ - } - }); - }; -} diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/autoplay/client/nodes/RootNodeSixtyInch.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/autoplay/client/nodes/RootNodeSixtyInch.java index 2c6ea7d58ff..80709e2a14d 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/autoplay/client/nodes/RootNodeSixtyInch.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/autoplay/client/nodes/RootNodeSixtyInch.java @@ -4,6 +4,7 @@ import com.google.gwt.user.client.Command; import com.sap.sailing.gwt.autoplay.client.app.AutoPlayClientFactory; import com.sap.sailing.gwt.autoplay.client.events.FailureEvent; import com.sap.sailing.gwt.autoplay.client.nodes.base.AutoPlayLoopNode; +import com.sap.sailing.gwt.autoplay.client.nodes.base.AutoPlaySequenceNode; import com.sap.sailing.gwt.autoplay.client.nodes.base.RootNodeBase; import com.sap.sailing.gwt.autoplay.client.nodes.base.RootNodeState; @@ -12,30 +13,31 @@ public class RootNodeSixtyInch extends RootNodeBase { private final AutoPlayLoopNode idleLoop; private final AutoPlayLoopNode preLiveRaceLoop; private final AutoPlayLoopNode liveRaceLoop; - private final AutoPlayLoopNode afterLiveRaceLoop; + private final AutoPlaySequenceNode afterLiveRaceLoop; + protected boolean afterRaceFinished = true; public RootNodeSixtyInch(AutoPlayClientFactory cf) { super(cf); this.idleLoop = new AutoPlayLoopNode(30,new IdleUpNextNode(cf),new IdleOverallLeaderBoardNode(cf)); this.preLiveRaceLoop = new AutoPlayLoopNode(90, new PreLeaderBoardWithCompetitorsNode(cf),new PreRaceWithRacemapNode(cf)); this.liveRaceLoop = new AutoPlayLoopNode(30, new LiveRaceWithRacemapNode(cf)); - this.afterLiveRaceLoop = new AutoPlayLoopNode(30, new RaceEndWithCompetitorsBoatsNode(cf), - new RaceEndWithCompetitorsFlagsNode(cf), idleLoop); + this.afterLiveRaceLoop = new AutoPlaySequenceNode(30, new RaceEndWithCompetitorsBoatsNode(cf), + new RaceEndWithCompetitorsFlagsNode(cf)); - afterLiveRaceLoop.setOnLoopEnd(new Command() { + afterLiveRaceLoop.setOnSequenceEnd(new Command() { @Override public void execute() { - - transitionTo(idleLoop); + afterRaceFinished = true; } }); } protected boolean processStateTransition(RootNodeState goingTo, RootNodeState comingFrom) { - // block transitions, until the afterLiveRaceLoop returns to the idleLoop, to ensure scoreboard is shown at - // least 30 seconds - if (comingFrom == RootNodeState.AFTER_LIVE && afterLiveRaceLoop.getCurrentNode() != idleLoop) { + // block transitions, until the afterLiveRaceLoop is finished + if (comingFrom == RootNodeState.AFTER_LIVE && !afterRaceFinished) { return true; + }else{ + afterRaceFinished = false; } switch (goingTo) { case IDLE: diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/autoplay/client/nodes/base/AutoPlayLoopNode.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/autoplay/client/nodes/base/AutoPlayLoopNode.java index c2d1029a9fa..f1812bc12f0 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/autoplay/client/nodes/base/AutoPlayLoopNode.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/autoplay/client/nodes/base/AutoPlayLoopNode.java @@ -4,7 +4,6 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import com.google.gwt.user.client.Command; import com.google.gwt.user.client.Timer; public class AutoPlayLoopNode extends BaseCompositeNode { @@ -12,7 +11,6 @@ public class AutoPlayLoopNode extends BaseCompositeNode { private List nodes = new ArrayList<>(); private int loopTimePerNodeInSeconds; private int currentPos = -1; - private Command onLoopEnd; private Timer transitionTimer = new Timer() { @Override public void run() { @@ -23,9 +21,6 @@ public class AutoPlayLoopNode extends BaseCompositeNode { private void gotoNext() { currentPos++; if (currentPos > nodes.size() - 1) { - if (onLoopEnd != null) { - onLoopEnd.execute(); - } currentPos = 0; } transitionTo(nodes.get(currentPos)); @@ -44,10 +39,6 @@ public class AutoPlayLoopNode extends BaseCompositeNode { this.nodes.addAll(Arrays.asList(nodes)); } - public void setOnLoopEnd(Command onLoopEnd) { - this.onLoopEnd = onLoopEnd; - } - @Override public void onStart() { currentPos = -1; diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/autoplay/client/nodes/base/AutoPlaySequenceNode.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/autoplay/client/nodes/base/AutoPlaySequenceNode.java new file mode 100644 index 00000000000..e039c0e730c --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/autoplay/client/nodes/base/AutoPlaySequenceNode.java @@ -0,0 +1,68 @@ +package com.sap.sailing.gwt.autoplay.client.nodes.base; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import com.google.gwt.user.client.Command; +import com.google.gwt.user.client.Timer; + +public class AutoPlaySequenceNode extends BaseCompositeNode { + + private List nodes = new ArrayList<>(); + private int sequenceTimePerNodeInSeconds; + private int currentPos = -1; + private Command onLoopEnd; + private Timer transitionTimer = new Timer() { + @Override + public void run() { + gotoNext(); + } + }; + + private void gotoNext() { + currentPos++; + if (currentPos > nodes.size() - 1) { + if (onLoopEnd != null) { + onLoopEnd.execute(); + } + //do nothing we stay at the end position + }else{ + transitionTo(nodes.get(currentPos)); + } + } + + @Override + protected void transitionTo(AutoPlayNode nextNode) { + super.transitionTo(nextNode); + if (!isStopped()) { + transitionTimer.schedule(sequenceTimePerNodeInSeconds * 1000); + } + } + + public AutoPlaySequenceNode(int sequenceTimePerNodeInSeconds, AutoPlayNode... nodes) { + this.sequenceTimePerNodeInSeconds = sequenceTimePerNodeInSeconds; + this.nodes.addAll(Arrays.asList(nodes)); + } + + public void setOnSequenceEnd(Command onLoopEnd) { + this.onLoopEnd = onLoopEnd; + } + + @Override + public void onStart() { + currentPos = -1; + gotoNext(); + } + + @Override + public void onStop() { + super.onStop(); + for (AutoPlayNode autoPlayNode : nodes) { + autoPlayNode.stop(); + } + transitionTimer.cancel(); + } + + +} \ No newline at end of file diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/autoplay/client/places/screens/idleloop/leaderboardsixty/IdleOverallLeaderBoardViewImpl.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/autoplay/client/places/screens/idleloop/leaderboardsixty/IdleOverallLeaderBoardViewImpl.java index 0d161c1e355..7f689940878 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/autoplay/client/places/screens/idleloop/leaderboardsixty/IdleOverallLeaderBoardViewImpl.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/autoplay/client/places/screens/idleloop/leaderboardsixty/IdleOverallLeaderBoardViewImpl.java @@ -15,6 +15,8 @@ import com.sap.sailing.gwt.ui.leaderboard.SortedCellTable; import com.sap.sse.gwt.client.panels.ResizableFlowPanel; public class IdleOverallLeaderBoardViewImpl extends ResizeComposite implements IdleOverallLeaderBoardView { + protected static final int TOOLBAR_SIZE = 182; + private static LifeRaceWithRacemapViewImplUiBinder uiBinder = GWT.create(LifeRaceWithRacemapViewImplUiBinder.class); @UiField @@ -44,7 +46,8 @@ public class IdleOverallLeaderBoardViewImpl extends ResizeComposite implements I public void run() { SortedCellTable tbl = leaderboardPanel.getLeaderboardTable(); Widget tb = leaderboardPanel.getToolbarWidget(); - LeaderBoardScaleHelper.scaleContentWidget(AutoPlayMainViewImpl.SAP_HEADER_IN_PX+tb.getOffsetHeight(), tbl); + GWT.log("toolbarsize "+tb.getOffsetHeight()); + LeaderBoardScaleHelper.scaleContentWidget(AutoPlayMainViewImpl.SAP_HEADER_IN_PX+TOOLBAR_SIZE, tbl); } }; resizer.scheduleRepeating(100);