From 47eef4eabbbf602feed00c012dee69e8985001eb Mon Sep 17 00:00:00 2001 From: Benjamin Ebling Date: Fri, 25 Nov 2011 16:56:11 +0100 Subject: [PATCH 01/21] First version of Compare-Competitors-Charts --- java/com.sap.sailing.gwt.ui/.classpath | 5 +++ .../gwt/ui/client/LeaderboardPanel.java | 34 +++++++++++++++++- .../sailing/gwt/ui/client/SailingService.java | 4 +++ .../gwt/ui/client/SailingServiceAsync.java | 5 +++ .../gwt/ui/server/SailingServiceImpl.java | 35 +++++++++++++++++++ .../sap/sailing/gwt/ui/AdminConsole.gwt.xml | 3 ++ 6 files changed, 85 insertions(+), 1 deletion(-) diff --git a/java/com.sap.sailing.gwt.ui/.classpath b/java/com.sap.sailing.gwt.ui/.classpath index dd566e6861a..6b39732388a 100755 --- a/java/com.sap.sailing.gwt.ui/.classpath +++ b/java/com.sap.sailing.gwt.ui/.classpath @@ -7,5 +7,10 @@ + + + + + diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/LeaderboardPanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/LeaderboardPanel.java index 3a1fd63fe37..de26a4afa3d 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/LeaderboardPanel.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/LeaderboardPanel.java @@ -26,6 +26,8 @@ import com.google.gwt.user.cellview.client.Header; import com.google.gwt.user.cellview.client.TextHeader; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.Anchor; +import com.google.gwt.user.client.ui.Button; +import com.google.gwt.user.client.ui.DialogBox; import com.google.gwt.user.client.ui.DockPanel; import com.google.gwt.user.client.ui.FormPanel; import com.google.gwt.user.client.ui.HasHorizontalAlignment; @@ -70,6 +72,8 @@ public class LeaderboardPanel extends FormPanel implements TimeListener, PlaySta private final StringConstants stringConstants; private final CellTable leaderboardTable; + + private final MultiSelectionModel leaderboardSelectionModel; private ListDataProvider data; @@ -728,7 +732,8 @@ public class LeaderboardPanel extends FormPanel implements TimeListener, PlaySta leaderboardTable = new CellTableWithStylableHeaders( /* pageSize */100, resources); getLeaderboardTable().setWidth("100%"); - getLeaderboardTable().setSelectionModel(new MultiSelectionModel() {}); + leaderboardSelectionModel = new MultiSelectionModel() {}; + getLeaderboardTable().setSelectionModel(leaderboardSelectionModel); setData(new ListDataProvider()); getData().addDataDisplay(getLeaderboardTable()); listHandler = new ListHandler(getData().getList()); @@ -775,6 +780,15 @@ public class LeaderboardPanel extends FormPanel implements TimeListener, PlaySta dockPanel.add(refreshAndSettingsPanel, DockPanel.EAST); vp.add(dockPanel); vp.add(getLeaderboardTable()); + Button chartButton = new Button("Compare competitors"); + chartButton.addClickHandler(new ClickHandler() { + + @Override + public void onClick(ClickEvent event) { + compareCompetitors(); + } + }); + vp.add(chartButton); setWidget(vp); } @@ -1278,4 +1292,22 @@ public class LeaderboardPanel extends FormPanel implements TimeListener, PlaySta playPause.setHTML(getPlayPauseImgHtml(isPlaying)); playPause.setTitle(isPlaying ? stringConstants.pauseAutomaticRefresh() : stringConstants.autoRefresh()); } + + private void compareCompetitors(){ + String raceName = this.selectedRaceColumns.get(0); + final DialogBox chartBox = new DialogBox(); + final Runnable close = new Runnable() { + + @Override + public void run() { + chartBox.hide(); + } + }; + //chartBox.setSize("800", "800"); + chartBox.setAnimationEnabled(true); + chartBox.add(new CompareCompetitorsPanel(sailingService, new ArrayList(leaderboardSelectionModel.getSelectedSet()), raceName,close)); + chartBox.setTitle("Compare competitors"); + chartBox.center(); + chartBox.show(); + } } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingService.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingService.java index 6e277364785..84713c9e50f 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingService.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingService.java @@ -7,11 +7,13 @@ import java.util.Map; import com.google.gwt.user.client.rpc.RemoteService; import com.google.gwt.user.client.rpc.RemoteServiceRelativePath; +import com.sap.sailing.domain.leaderboard.Leaderboard; import com.sap.sailing.gwt.ui.shared.CompetitorDAO; import com.sap.sailing.gwt.ui.shared.EventDAO; import com.sap.sailing.gwt.ui.shared.GPSFixDAO; import com.sap.sailing.gwt.ui.shared.LeaderboardDAO; import com.sap.sailing.gwt.ui.shared.LeaderboardEntryDAO; +import com.sap.sailing.gwt.ui.shared.LeaderboardRowDAO; import com.sap.sailing.gwt.ui.shared.MarkDAO; import com.sap.sailing.gwt.ui.shared.Pair; import com.sap.sailing.gwt.ui.shared.QuickRankDAO; @@ -120,4 +122,6 @@ public interface SailingService extends RemoteService { void stressTestLeaderboardByName(String leaderboardName, int times) throws Exception; String[] getCountryCodes(); + + List getLeaderboardRowDAOOfRace(String eventName, String raceName, List competitors, int timeStep) throws Exception; } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingServiceAsync.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingServiceAsync.java index 34cbede9770..260546562e1 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingServiceAsync.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingServiceAsync.java @@ -7,6 +7,7 @@ import java.util.Map; import com.google.gwt.user.client.rpc.AsyncCallback; import com.sap.sailing.domain.base.Course; +import com.sap.sailing.domain.leaderboard.Leaderboard; import com.sap.sailing.domain.leaderboard.RaceInLeaderboard; import com.sap.sailing.domain.tracking.WindSource; import com.sap.sailing.gwt.ui.shared.CompetitorDAO; @@ -14,6 +15,7 @@ import com.sap.sailing.gwt.ui.shared.EventDAO; import com.sap.sailing.gwt.ui.shared.GPSFixDAO; import com.sap.sailing.gwt.ui.shared.LeaderboardDAO; import com.sap.sailing.gwt.ui.shared.LeaderboardEntryDAO; +import com.sap.sailing.gwt.ui.shared.LeaderboardRowDAO; import com.sap.sailing.gwt.ui.shared.MarkDAO; import com.sap.sailing.gwt.ui.shared.Pair; import com.sap.sailing.gwt.ui.shared.QuickRankDAO; @@ -183,4 +185,7 @@ public interface SailingServiceAsync { void stressTestLeaderboardByName(String leaderboardName, int times, AsyncCallback callback); void getCountryCodes(AsyncCallback callback); + + void getLeaderboardRowDAOOfRace(String eventName, String raceName, List competitors, int timeStep, + AsyncCallback> callback); } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java index 5ab33876a9b..f61d5883601 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java @@ -52,12 +52,14 @@ import com.sap.sailing.domain.persistence.MongoObjectFactory; import com.sap.sailing.domain.persistence.MongoWindStoreFactory; import com.sap.sailing.domain.swisstimingadapter.SwissTimingConfiguration; import com.sap.sailing.domain.swisstimingadapter.SwissTimingFactory; +import com.sap.sailing.domain.swisstimingadapter.impl.CompetitorImpl; import com.sap.sailing.domain.swisstimingadapter.persistence.SwissTimingAdapterPersistence; import com.sap.sailing.domain.tracking.GPSFix; import com.sap.sailing.domain.tracking.GPSFixMoving; import com.sap.sailing.domain.tracking.GPSFixTrack; import com.sap.sailing.domain.tracking.NoWindException; import com.sap.sailing.domain.tracking.RaceHandle; +import com.sap.sailing.domain.tracking.TrackedLeg; import com.sap.sailing.domain.tracking.TrackedLegOfCompetitor; import com.sap.sailing.domain.tracking.TrackedRace; import com.sap.sailing.domain.tracking.Wind; @@ -1108,4 +1110,37 @@ public class SailingServiceImpl extends RemoteServiceServlet implements SailingS Collections.sort(countryCodes); return countryCodes.toArray(new String[0]); } + + @Override + public List getLeaderboardRowDAOOfRace(String eventName, String raceName, List competitors, int timeStep) throws NoWindException { + List entries = new ArrayList(); + Event event = getService().getEventByName(eventName); + RaceDefinition race = getRaceByName(event, raceName); + TrackedRace trackedRace = getService().getTrackedRace(event, race); + for (long time = trackedRace.getStart().asMillis(); time < trackedRace.getTimePointOfNewestEvent().asMillis(); time += timeStep){ + MillisecondsTimePoint timePoint = new MillisecondsTimePoint(time); + for (CompetitorDAO competitorDAO : competitors){ + Competitor competitor = (Competitor) new CompetitorImpl(competitorDAO.id, competitorDAO.threeLetterIocCountryCode, competitorDAO.name); + LeaderboardRowDAO row = new LeaderboardRowDAO(); + row.competitor = competitorDAO; + row.fieldsByRaceName = new HashMap(); + LeaderboardEntryDAO entryDAO = new LeaderboardEntryDAO(); + entryDAO.legDetails = new ArrayList(); + for (Leg leg : trackedRace.getRace().getCourse().getLegs()) { + TrackedLegOfCompetitor trackedLeg = trackedRace.getTrackedLeg(competitor, leg); + LegEntryDAO legEntry; + if (trackedLeg != null && trackedLeg.hasStartedLeg(timePoint)) { + legEntry = createLegEntry(trackedLeg, timePoint); + } else { + legEntry = null; + } + entryDAO.legDetails.add(legEntry); + } + + row.fieldsByRaceName.put(raceName, entryDAO); + entries.add(row); + } + } + return null; + } } \ No newline at end of file diff --git a/java/com.sap.sailing.gwt.ui/src/main/resources/com/sap/sailing/gwt/ui/AdminConsole.gwt.xml b/java/com.sap.sailing.gwt.ui/src/main/resources/com/sap/sailing/gwt/ui/AdminConsole.gwt.xml index faf3549accc..1334e2cc9bc 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/resources/com/sap/sailing/gwt/ui/AdminConsole.gwt.xml +++ b/java/com.sap.sailing.gwt.ui/src/main/resources/com/sap/sailing/gwt/ui/AdminConsole.gwt.xml @@ -17,6 +17,9 @@ + + + From 13e10da94a3e0788bee9ec26926c1cdb6c40bcfe Mon Sep 17 00:00:00 2001 From: Benjamin Ebling Date: Mon, 28 Nov 2011 16:04:03 +0100 Subject: [PATCH 02/21] First working version of Charts-dialog for comparing competitor data. --- .../gwt/ui/client/LeaderboardPanel.java | 23 ++++------- .../sailing/gwt/ui/client/SailingService.java | 3 +- .../gwt/ui/client/SailingServiceAsync.java | 3 +- .../gwt/ui/server/SailingServiceImpl.java | 41 ++++++++++++------- 4 files changed, 36 insertions(+), 34 deletions(-) diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/LeaderboardPanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/LeaderboardPanel.java index de26a4afa3d..90e541683f3 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/LeaderboardPanel.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/LeaderboardPanel.java @@ -27,7 +27,6 @@ import com.google.gwt.user.cellview.client.TextHeader; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.Anchor; import com.google.gwt.user.client.ui.Button; -import com.google.gwt.user.client.ui.DialogBox; import com.google.gwt.user.client.ui.DockPanel; import com.google.gwt.user.client.ui.FormPanel; import com.google.gwt.user.client.ui.HasHorizontalAlignment; @@ -40,6 +39,7 @@ import com.google.gwt.view.client.ListDataProvider; import com.google.gwt.view.client.MultiSelectionModel; import com.sap.sailing.gwt.ui.client.DataEntryDialog.Validator; import com.sap.sailing.gwt.ui.client.LegDetailColumn.LegDetailField; +import com.sap.sailing.gwt.ui.shared.CompetitorDAO; import com.sap.sailing.gwt.ui.shared.LeaderboardDAO; import com.sap.sailing.gwt.ui.shared.LeaderboardEntryDAO; import com.sap.sailing.gwt.ui.shared.LeaderboardRowDAO; @@ -1294,20 +1294,11 @@ public class LeaderboardPanel extends FormPanel implements TimeListener, PlaySta } private void compareCompetitors(){ - String raceName = this.selectedRaceColumns.get(0); - final DialogBox chartBox = new DialogBox(); - final Runnable close = new Runnable() { - - @Override - public void run() { - chartBox.hide(); - } - }; - //chartBox.setSize("800", "800"); - chartBox.setAnimationEnabled(true); - chartBox.add(new CompareCompetitorsPanel(sailingService, new ArrayList(leaderboardSelectionModel.getSelectedSet()), raceName,close)); - chartBox.setTitle("Compare competitors"); - chartBox.center(); - chartBox.show(); + List competitors = new ArrayList(); + for (LeaderboardRowDAO leaderboardRowDAO : leaderboardSelectionModel.getSelectedSet()) { + competitors.add(leaderboardRowDAO.competitor); + } + new CompareCompetitorsChartDialog(sailingService, competitors, selectedRaceColumns.get(0), leaderboardName); + //compareCompetitorsBox.show(); } } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingService.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingService.java index 84713c9e50f..31484625ac0 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingService.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingService.java @@ -7,7 +7,6 @@ import java.util.Map; import com.google.gwt.user.client.rpc.RemoteService; import com.google.gwt.user.client.rpc.RemoteServiceRelativePath; -import com.sap.sailing.domain.leaderboard.Leaderboard; import com.sap.sailing.gwt.ui.shared.CompetitorDAO; import com.sap.sailing.gwt.ui.shared.EventDAO; import com.sap.sailing.gwt.ui.shared.GPSFixDAO; @@ -123,5 +122,5 @@ public interface SailingService extends RemoteService { String[] getCountryCodes(); - List getLeaderboardRowDAOOfRace(String eventName, String raceName, List competitors, int timeStep) throws Exception; + LeaderboardRowDAO[][] getLeaderboardRowDAOOfRace(String eventName, String raceName, List competitors, int timeStep) throws Exception; } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingServiceAsync.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingServiceAsync.java index 260546562e1..ee200331d3d 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingServiceAsync.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingServiceAsync.java @@ -7,7 +7,6 @@ import java.util.Map; import com.google.gwt.user.client.rpc.AsyncCallback; import com.sap.sailing.domain.base.Course; -import com.sap.sailing.domain.leaderboard.Leaderboard; import com.sap.sailing.domain.leaderboard.RaceInLeaderboard; import com.sap.sailing.domain.tracking.WindSource; import com.sap.sailing.gwt.ui.shared.CompetitorDAO; @@ -187,5 +186,5 @@ public interface SailingServiceAsync { void getCountryCodes(AsyncCallback callback); void getLeaderboardRowDAOOfRace(String eventName, String raceName, List competitors, int timeStep, - AsyncCallback> callback); + AsyncCallback callback); } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java index f61d5883601..a59e02162ab 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java @@ -52,14 +52,12 @@ import com.sap.sailing.domain.persistence.MongoObjectFactory; import com.sap.sailing.domain.persistence.MongoWindStoreFactory; import com.sap.sailing.domain.swisstimingadapter.SwissTimingConfiguration; import com.sap.sailing.domain.swisstimingadapter.SwissTimingFactory; -import com.sap.sailing.domain.swisstimingadapter.impl.CompetitorImpl; import com.sap.sailing.domain.swisstimingadapter.persistence.SwissTimingAdapterPersistence; import com.sap.sailing.domain.tracking.GPSFix; import com.sap.sailing.domain.tracking.GPSFixMoving; import com.sap.sailing.domain.tracking.GPSFixTrack; import com.sap.sailing.domain.tracking.NoWindException; import com.sap.sailing.domain.tracking.RaceHandle; -import com.sap.sailing.domain.tracking.TrackedLeg; import com.sap.sailing.domain.tracking.TrackedLegOfCompetitor; import com.sap.sailing.domain.tracking.TrackedRace; import com.sap.sailing.domain.tracking.Wind; @@ -1112,22 +1110,32 @@ public class SailingServiceImpl extends RemoteServiceServlet implements SailingS } @Override - public List getLeaderboardRowDAOOfRace(String eventName, String raceName, List competitors, int timeStep) throws NoWindException { - List entries = new ArrayList(); - Event event = getService().getEventByName(eventName); - RaceDefinition race = getRaceByName(event, raceName); - TrackedRace trackedRace = getService().getTrackedRace(event, race); - for (long time = trackedRace.getStart().asMillis(); time < trackedRace.getTimePointOfNewestEvent().asMillis(); time += timeStep){ - MillisecondsTimePoint timePoint = new MillisecondsTimePoint(time); - for (CompetitorDAO competitorDAO : competitors){ - Competitor competitor = (Competitor) new CompetitorImpl(competitorDAO.id, competitorDAO.threeLetterIocCountryCode, competitorDAO.name); + public LeaderboardRowDAO[][] getLeaderboardRowDAOOfRace(String leaderboardName, String raceName, List competitorDAOs, int timeStep) throws NoWindException { + LeaderboardRowDAO[][] competitorData; + TrackedRace trackedRace = getService().getLeaderboardByName(leaderboardName).getRaceColumnByName(raceName).getTrackedRace(); + Iterable competitors = trackedRace.getRace().getCompetitors(); + + List selectedCompetitor = new ArrayList(); + for (Competitor c : competitors){ + for (CompetitorDAO cDAO : competitorDAOs){ + if (c.getName().equals(cDAO.name)){ + selectedCompetitor.add(c); + } + } + } + competitorData = new LeaderboardRowDAO[selectedCompetitor.size()][]; + int i = 0; + for (Competitor c : selectedCompetitor){ + List entries = new ArrayList(); + for (long time = trackedRace.getStart().asMillis(); time < trackedRace.getTimePointOfNewestEvent().asMillis(); time += (trackedRace.getTimePointOfNewestEvent().asMillis()-trackedRace.getStart().asMillis())/100){ + MillisecondsTimePoint timePoint = new MillisecondsTimePoint(time); LeaderboardRowDAO row = new LeaderboardRowDAO(); - row.competitor = competitorDAO; + row.competitor = getCompetitorDAO(c); row.fieldsByRaceName = new HashMap(); LeaderboardEntryDAO entryDAO = new LeaderboardEntryDAO(); entryDAO.legDetails = new ArrayList(); for (Leg leg : trackedRace.getRace().getCourse().getLegs()) { - TrackedLegOfCompetitor trackedLeg = trackedRace.getTrackedLeg(competitor, leg); + TrackedLegOfCompetitor trackedLeg = trackedRace.getTrackedLeg(c, leg); LegEntryDAO legEntry; if (trackedLeg != null && trackedLeg.hasStartedLeg(timePoint)) { legEntry = createLegEntry(trackedLeg, timePoint); @@ -1140,7 +1148,12 @@ public class SailingServiceImpl extends RemoteServiceServlet implements SailingS row.fieldsByRaceName.put(raceName, entryDAO); entries.add(row); } + competitorData[i++] = entries.toArray(new LeaderboardRowDAO[0]); } - return null; + + + + + return competitorData; } } \ No newline at end of file From 5ad56c22b2476393d2228c1d6ccaa77b970af741 Mon Sep 17 00:00:00 2001 From: Benjamin Ebling Date: Mon, 28 Nov 2011 16:08:05 +0100 Subject: [PATCH 03/21] Added missing files. --- .../client/CompareCompetitorsChartDialog.java | 44 ++++++ .../ui/client/CompareCompetitorsPanel.java | 140 ++++++++++++++++++ .../gwt/ui/server/SailingServiceImpl.java | 4 +- 3 files changed, 186 insertions(+), 2 deletions(-) create mode 100644 java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/CompareCompetitorsChartDialog.java create mode 100644 java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/CompareCompetitorsPanel.java diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/CompareCompetitorsChartDialog.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/CompareCompetitorsChartDialog.java new file mode 100644 index 00000000000..a19705ae68a --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/CompareCompetitorsChartDialog.java @@ -0,0 +1,44 @@ +package com.sap.sailing.gwt.ui.client; + +import java.util.List; + +import com.google.gwt.event.dom.client.ClickEvent; +import com.google.gwt.event.dom.client.ClickHandler; +import com.google.gwt.user.client.ui.Button; +import com.google.gwt.user.client.ui.DialogBox; +import com.google.gwt.user.client.ui.VerticalPanel; +import com.sap.sailing.gwt.ui.client.CompareCompetitorsPanel.DataLoadedEvent; +import com.sap.sailing.gwt.ui.client.CompareCompetitorsPanel.DataLoadedHandler; +import com.sap.sailing.gwt.ui.shared.CompetitorDAO; + +public class CompareCompetitorsChartDialog extends DialogBox { + + public CompareCompetitorsChartDialog(SailingServiceAsync sailingService, List competitors, String raceName, String leaderboardName){ + super(true); + VerticalPanel mainPanel = new VerticalPanel(); + + //chartBox.setAnimationEnabled(true); + CompareCompetitorsPanel ccp = new CompareCompetitorsPanel(sailingService, competitors, raceName, leaderboardName); + ccp.addDataLoadedHandler(new DataLoadedHandler() { + + @Override + public void onDataLoaded(DataLoadedEvent event) { + CompareCompetitorsChartDialog.this.center(); + CompareCompetitorsChartDialog.this.show(); + } + }); + mainPanel.add(ccp); + Button closeButton = new Button("Close"); + closeButton.addClickHandler(new ClickHandler() { + + @Override + public void onClick(ClickEvent event) { + CompareCompetitorsChartDialog.this.hide(); + } + }); + mainPanel.add(closeButton); + this.add(mainPanel); + this.setTitle("Compare competitors"); + this.center(); + } +} diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/CompareCompetitorsPanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/CompareCompetitorsPanel.java new file mode 100644 index 00000000000..1c734e58e58 --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/CompareCompetitorsPanel.java @@ -0,0 +1,140 @@ +package com.sap.sailing.gwt.ui.client; + +import java.util.List; + +import com.google.gwt.event.shared.GwtEvent; +import com.google.gwt.user.client.Window; +import com.google.gwt.user.client.rpc.AsyncCallback; +import com.google.gwt.user.client.ui.FormPanel; +import com.google.gwt.user.client.ui.VerticalPanel; +import com.google.gwt.visualization.client.AbstractDataTable; +import com.google.gwt.visualization.client.AbstractDataTable.ColumnType; +import com.google.gwt.visualization.client.DataTable; +import com.google.gwt.visualization.client.VisualizationUtils; +import com.google.gwt.visualization.client.visualizations.corechart.LineChart; +import com.google.gwt.visualization.client.visualizations.corechart.Options; +import com.sap.sailing.gwt.ui.shared.CompetitorDAO; +import com.sap.sailing.gwt.ui.shared.LeaderboardRowDAO; +import com.sap.sailing.gwt.ui.shared.LegEntryDAO; + +public class CompareCompetitorsPanel extends FormPanel { + private final List competitors; + private LineChart chart; + private final SailingServiceAsync sailingService; + private VerticalPanel mainPanel; + private String raceName; + + public CompareCompetitorsPanel(SailingServiceAsync sailingService, + final List competitors, String raceName, String leaderboardName) { + this.sailingService = sailingService; + this.competitors = competitors; + this.raceName = raceName; + mainPanel = new VerticalPanel(); + + + final Runnable onLoadCallback = new Runnable() { + + @Override + public void run() { + + chart = new LineChart(prepareTableData(CompareCompetitorsPanel.this.raceName, null), getOptions()); + mainPanel.add(chart); + fireEvent(new DataLoadedEvent()); + // chartLoaded = true; + } + }; + VisualizationUtils.loadVisualizationApi(onLoadCallback, LineChart.PACKAGE); + + this.sailingService.getLeaderboardRowDAOOfRace(leaderboardName, raceName, competitors, 50, + new AsyncCallback() { + + @Override + public void onFailure(Throwable caught) { + Window.alert("Failed to laod race data."); + } + + @Override + public void onSuccess(LeaderboardRowDAO[][] result) { + fireEvent(new DataLoadedEvent()); + insertData(result); + } + }); + // while (!chartLoaded){} + this.add(mainPanel); + } + + private void insertData(LeaderboardRowDAO[][] rows){ + if (chart != null){ + chart.draw(prepareTableData(raceName, rows), getOptions()); + } + } + + private Options getOptions() { + Options opt = Options.create(); + opt.setWidth(800); + opt.setHeight(600); + opt.setTitle("Speed over ground"); + + return opt; + } + + private AbstractDataTable prepareTableData(String raceName, LeaderboardRowDAO[][] competitorData) { + DataTable data = DataTable.create(); + data.addColumn(ColumnType.STRING, "Time"); + for (int i = 0; i < competitors.size(); i++) { + data.addColumn(ColumnType.NUMBER, competitors.get(i).name); + } + + + if (competitorData == null){ + return data; + } + if (competitorData[0] != null){ + data.addRows(competitorData[0].length); + for (int n = 0; n < competitorData[0].length; n++){ + LegEntryDAO leg = competitorData[0][0].fieldsByRaceName.get(raceName).legDetails.get(0); + data.setValue(n, 0, "" + ((leg == null)? 0 : leg.estimatedTimeToNextWaypointInSeconds)); + } + for (int i = 0; i< competitorData.length; i++){ + for (int j = 0; j < competitorData[i].length; j++){ + LegEntryDAO leg = competitorData[i][j].fieldsByRaceName.get(raceName).legDetails.get(0); + data.setValue(j, (i+1), ((leg == null)? 0 : leg.currentSpeedOverGroundInKnots)); + } + } + } + + return data; + } + + //DataLoaded event handling. + public void addDataLoadedHandler(DataLoadedHandler handler){ + this.addHandler(handler, DataLoadedEvent.TYPE); + } + + interface DataLoadedHandler extends com.google.gwt.event.shared.EventHandler { + public void onDataLoaded(DataLoadedEvent event); + } + + public static class DataLoadedEvent extends GwtEvent { + public static Type TYPE = new Type(); + + public DataLoadedEvent() { + super(); + } + + + + @Override + protected void dispatch(DataLoadedHandler handler) { + handler.onDataLoaded(this); + } + + @Override + public com.google.gwt.event.shared.GwtEvent.Type getAssociatedType() { + return TYPE; + } + + } + + +} diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java index a59e02162ab..31433dd75a0 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java @@ -1110,7 +1110,7 @@ public class SailingServiceImpl extends RemoteServiceServlet implements SailingS } @Override - public LeaderboardRowDAO[][] getLeaderboardRowDAOOfRace(String leaderboardName, String raceName, List competitorDAOs, int timeStep) throws NoWindException { + public LeaderboardRowDAO[][] getLeaderboardRowDAOOfRace(String leaderboardName, String raceName, List competitorDAOs, int steps) throws NoWindException { LeaderboardRowDAO[][] competitorData; TrackedRace trackedRace = getService().getLeaderboardByName(leaderboardName).getRaceColumnByName(raceName).getTrackedRace(); Iterable competitors = trackedRace.getRace().getCompetitors(); @@ -1127,7 +1127,7 @@ public class SailingServiceImpl extends RemoteServiceServlet implements SailingS int i = 0; for (Competitor c : selectedCompetitor){ List entries = new ArrayList(); - for (long time = trackedRace.getStart().asMillis(); time < trackedRace.getTimePointOfNewestEvent().asMillis(); time += (trackedRace.getTimePointOfNewestEvent().asMillis()-trackedRace.getStart().asMillis())/100){ + for (long time = trackedRace.getStart().asMillis(); time < trackedRace.getTimePointOfNewestEvent().asMillis(); time += (trackedRace.getTimePointOfNewestEvent().asMillis()-trackedRace.getStart().asMillis())/steps){ MillisecondsTimePoint timePoint = new MillisecondsTimePoint(time); LeaderboardRowDAO row = new LeaderboardRowDAO(); row.competitor = getCompetitorDAO(c); From 55df9448861b05543a18e393fd12e81bcd42fbd4 Mon Sep 17 00:00:00 2001 From: Benjamin Ebling Date: Tue, 29 Nov 2011 15:43:25 +0100 Subject: [PATCH 04/21] Fixed "getCompetitorRaceData" and added ConfigPanel to CompareCompetitorsPanel. --- .../client/CompareCompetitorsChartDialog.java | 7 +- .../ui/client/CompareCompetitorsPanel.java | 221 ++++++++++++++---- .../sailing/gwt/ui/client/SailingService.java | 4 +- .../gwt/ui/client/SailingServiceAsync.java | 6 +- .../gwt/ui/server/SailingServiceImpl.java | 40 ++-- .../gwt/ui/shared/CompetitorWithRaceDAO.java | 62 +++++ 6 files changed, 271 insertions(+), 69 deletions(-) create mode 100644 java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/CompetitorWithRaceDAO.java diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/CompareCompetitorsChartDialog.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/CompareCompetitorsChartDialog.java index a19705ae68a..87315fba62a 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/CompareCompetitorsChartDialog.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/CompareCompetitorsChartDialog.java @@ -6,6 +6,7 @@ import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.user.client.ui.Button; import com.google.gwt.user.client.ui.DialogBox; +import com.google.gwt.user.client.ui.HasHorizontalAlignment; import com.google.gwt.user.client.ui.VerticalPanel; import com.sap.sailing.gwt.ui.client.CompareCompetitorsPanel.DataLoadedEvent; import com.sap.sailing.gwt.ui.client.CompareCompetitorsPanel.DataLoadedHandler; @@ -16,14 +17,15 @@ public class CompareCompetitorsChartDialog extends DialogBox { public CompareCompetitorsChartDialog(SailingServiceAsync sailingService, List competitors, String raceName, String leaderboardName){ super(true); VerticalPanel mainPanel = new VerticalPanel(); - + mainPanel.setSpacing(5); + mainPanel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_LEFT); //chartBox.setAnimationEnabled(true); CompareCompetitorsPanel ccp = new CompareCompetitorsPanel(sailingService, competitors, raceName, leaderboardName); ccp.addDataLoadedHandler(new DataLoadedHandler() { @Override public void onDataLoaded(DataLoadedEvent event) { - CompareCompetitorsChartDialog.this.center(); + CompareCompetitorsChartDialog.this.setPopupPosition(5, 5); CompareCompetitorsChartDialog.this.show(); } }); @@ -38,6 +40,7 @@ public class CompareCompetitorsChartDialog extends DialogBox { }); mainPanel.add(closeButton); this.add(mainPanel); + this.setTitle("Compare competitors"); this.center(); } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/CompareCompetitorsPanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/CompareCompetitorsPanel.java index 1c734e58e58..13769edb74d 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/CompareCompetitorsPanel.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/CompareCompetitorsPanel.java @@ -1,52 +1,145 @@ package com.sap.sailing.gwt.ui.client; +import java.util.Date; import java.util.List; +import com.google.gwt.event.dom.client.ChangeEvent; +import com.google.gwt.event.dom.client.ChangeHandler; +import com.google.gwt.event.dom.client.ClickEvent; +import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.event.shared.GwtEvent; +import com.google.gwt.i18n.client.DateTimeFormat; +import com.google.gwt.safehtml.shared.SafeHtmlBuilder; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.rpc.AsyncCallback; +import com.google.gwt.user.client.ui.Button; +import com.google.gwt.user.client.ui.CaptionPanel; import com.google.gwt.user.client.ui.FormPanel; +import com.google.gwt.user.client.ui.HasHorizontalAlignment; +import com.google.gwt.user.client.ui.Anchor; +import com.google.gwt.user.client.ui.HorizontalPanel; +import com.google.gwt.user.client.ui.Label; +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.visualization.client.AbstractDataTable; import com.google.gwt.visualization.client.AbstractDataTable.ColumnType; import com.google.gwt.visualization.client.DataTable; import com.google.gwt.visualization.client.VisualizationUtils; +import com.google.gwt.visualization.client.visualizations.corechart.AxisOptions; import com.google.gwt.visualization.client.visualizations.corechart.LineChart; import com.google.gwt.visualization.client.visualizations.corechart.Options; import com.sap.sailing.gwt.ui.shared.CompetitorDAO; -import com.sap.sailing.gwt.ui.shared.LeaderboardRowDAO; -import com.sap.sailing.gwt.ui.shared.LegEntryDAO; +import com.sap.sailing.gwt.ui.shared.CompetitorWithRaceDAO; public class CompareCompetitorsPanel extends FormPanel { private final List competitors; + private CompetitorWithRaceDAO[][] chartData = null; private LineChart chart; private final SailingServiceAsync sailingService; - private VerticalPanel mainPanel; + private HorizontalPanel mainPanel; + private VerticalPanel chartPanel; private String raceName; + private DateTimeFormat dateTimeFormat; + public static final int SHOW_CURRENT_SPEED_OVER_GROUND = 0; + public static final int SHOW_VELOCITY_MADE_GOOD = 1; + public static final int SHOW_GAP_TO_LEADER = 2; + public static final int SHOW_WINDWARD_DISTANCE_TO_GO = 3; + private int dataToShow = SHOW_CURRENT_SPEED_OVER_GROUND; - public CompareCompetitorsPanel(SailingServiceAsync sailingService, - final List competitors, String raceName, String leaderboardName) { + public CompareCompetitorsPanel(SailingServiceAsync sailingService, final List competitors, + String raceName, final String leaderboardName) { this.sailingService = sailingService; this.competitors = competitors; this.raceName = raceName; - mainPanel = new VerticalPanel(); - + this.dateTimeFormat = DateTimeFormat.getFormat("HH:mm:ss"); + mainPanel = new HorizontalPanel(); + chartPanel = new VerticalPanel(); + chartPanel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT); + chartPanel.setSpacing(5); + + final CaptionPanel configCaption = new CaptionPanel("Configuration"); + configCaption.setHeight("100%"); + configCaption.setVisible(false); + VerticalPanel configPanel = new VerticalPanel(); + configCaption.setContentWidget(configPanel); + configPanel.setSpacing(7); + Anchor showConfigAnchor = new Anchor(new SafeHtmlBuilder().appendHtmlConstant( + "").toSafeHtml()); + showConfigAnchor.setTitle("Configuration"); + showConfigAnchor.addClickHandler(new ClickHandler() { + + @Override + public void onClick(ClickEvent event) { + configCaption.setVisible(!configCaption.isVisible()); + } + }); + chartPanel.add(showConfigAnchor); + Label lblChart = new Label("Choose chart:"); + configPanel.add(lblChart); + final ListBox dataSelection = new ListBox(); + dataSelection.addItem("Speed over ground", "" + SHOW_CURRENT_SPEED_OVER_GROUND); + dataSelection.addItem("Velocity made good", "" + SHOW_VELOCITY_MADE_GOOD); + dataSelection.addItem("Gap to leader", "" + SHOW_GAP_TO_LEADER); + dataSelection.addItem("Windward distance to go", "" + SHOW_WINDWARD_DISTANCE_TO_GO); + dataSelection.addChangeHandler(new ChangeHandler() { + + @Override + public void onChange(ChangeEvent event) { + dataToShow = Integer.parseInt(dataSelection.getValue(dataSelection.getSelectedIndex())); + if (chart != null) { + chart.draw(prepareTableData(), getOptions()); + } + } + }); + configPanel.add(dataSelection); + Label lblSteps = new Label("Points to load:"); + configPanel.add(lblSteps); + final TextBox txtbSteps = new TextBox(); + configPanel.add(txtbSteps); + Button bttSteps = new Button("Refresh"); + bttSteps.addClickHandler(new ClickHandler() { + + @Override + public void onClick(ClickEvent event) { + CompareCompetitorsPanel.this.sailingService.getCompetitorRaceData(leaderboardName, + CompareCompetitorsPanel.this.raceName, competitors, Integer.parseInt(txtbSteps.getText()), + new AsyncCallback() { + + @Override + public void onFailure(Throwable caught) { + // TODO Auto-generated method stub + + } + + @Override + public void onSuccess(CompetitorWithRaceDAO[][] result) { + fireEvent(new DataLoadedEvent()); + chartData = result; + if (chart != null) { + chart.draw(prepareTableData(), getOptions()); + } + } + }); + } + }); + configPanel.add(bttSteps); final Runnable onLoadCallback = new Runnable() { @Override public void run() { - - chart = new LineChart(prepareTableData(CompareCompetitorsPanel.this.raceName, null), getOptions()); - mainPanel.add(chart); + + chart = new LineChart(prepareTableData(), getOptions()); + chartPanel.add(chart); fireEvent(new DataLoadedEvent()); // chartLoaded = true; } }; VisualizationUtils.loadVisualizationApi(onLoadCallback, LineChart.PACKAGE); - this.sailingService.getLeaderboardRowDAOOfRace(leaderboardName, raceName, competitors, 50, - new AsyncCallback() { + this.sailingService.getCompetitorRaceData(leaderboardName, this.raceName, competitors, 150, + new AsyncCallback() { @Override public void onFailure(Throwable caught) { @@ -54,60 +147,109 @@ public class CompareCompetitorsPanel extends FormPanel { } @Override - public void onSuccess(LeaderboardRowDAO[][] result) { + public void onSuccess(CompetitorWithRaceDAO[][] result) { fireEvent(new DataLoadedEvent()); - insertData(result); + chartData = result; + if (chart != null) { + chart.draw(prepareTableData(), getOptions()); + } } }); // while (!chartLoaded){} + mainPanel.add(chartPanel); + mainPanel.add(configCaption); this.add(mainPanel); } - - private void insertData(LeaderboardRowDAO[][] rows){ - if (chart != null){ - chart.draw(prepareTableData(raceName, rows), getOptions()); - } - } private Options getOptions() { Options opt = Options.create(); opt.setWidth(800); opt.setHeight(600); - opt.setTitle("Speed over ground"); - + switch (dataToShow) { + case SHOW_VELOCITY_MADE_GOOD: + opt.setTitle("Velocity made good"); + break; + case SHOW_GAP_TO_LEADER: + opt.setTitle("Gap to leader"); + break; + case SHOW_WINDWARD_DISTANCE_TO_GO: + opt.setTitle("Windward distance to go"); + break; + default: + opt.setTitle("Speed over ground"); + } + AxisOptions hAxisOptions = AxisOptions.create(); + hAxisOptions.setTitle("time"); + opt.setHAxisOptions(hAxisOptions); + + AxisOptions vAxisOptions = AxisOptions.create(); + switch (dataToShow) { + case SHOW_VELOCITY_MADE_GOOD: + vAxisOptions.setTitle("speed in kts"); + break; + case SHOW_GAP_TO_LEADER: + vAxisOptions.setTitle("time in s"); + break; + case SHOW_WINDWARD_DISTANCE_TO_GO: + vAxisOptions.setTitle("distance in m"); + break; + default: + vAxisOptions.setTitle("speed in kts"); + break; + } + opt.setVAxisOptions(vAxisOptions); return opt; } - private AbstractDataTable prepareTableData(String raceName, LeaderboardRowDAO[][] competitorData) { + private AbstractDataTable prepareTableData() { DataTable data = DataTable.create(); data.addColumn(ColumnType.STRING, "Time"); for (int i = 0; i < competitors.size(); i++) { data.addColumn(ColumnType.NUMBER, competitors.get(i).name); } - - - if (competitorData == null){ + + if (chartData == null) { return data; } - if (competitorData[0] != null){ - data.addRows(competitorData[0].length); - for (int n = 0; n < competitorData[0].length; n++){ - LegEntryDAO leg = competitorData[0][0].fieldsByRaceName.get(raceName).legDetails.get(0); - data.setValue(n, 0, "" + ((leg == null)? 0 : leg.estimatedTimeToNextWaypointInSeconds)); + if (chartData[0] != null) { + int length = 0; + for (int i = 0; i < chartData.length; i++) { + length = (length < chartData[i].length) ? chartData[i].length : length; } - for (int i = 0; i< competitorData.length; i++){ - for (int j = 0; j < competitorData[i].length; j++){ - LegEntryDAO leg = competitorData[i][j].fieldsByRaceName.get(raceName).legDetails.get(0); - data.setValue(j, (i+1), ((leg == null)? 0 : leg.currentSpeedOverGroundInKnots)); + data.addRows(length); + for (int n = 0; n < chartData[0].length; n++) { + Date d = new Date(chartData[0][n].getLegEntry().timeInMilliseconds); + String time = "" + ((chartData[0][n] == null) ? 0 : dateTimeFormat.format(d)); + data.setValue(n, 0, time); + } + for (int i = 0; i < chartData.length; i++) { + for (int j = 0; j < chartData[i].length; j++) { + Double value = null; + switch (dataToShow) { + case SHOW_GAP_TO_LEADER: + value = chartData[i][j].getLegEntry().gapToLeaderInSeconds; + break; + case SHOW_VELOCITY_MADE_GOOD: + value = chartData[i][j].getLegEntry().velocityMadeGoodInKnots; + break; + case SHOW_WINDWARD_DISTANCE_TO_GO: + value = chartData[i][j].getLegEntry().windwardDistanceToGoInMeters; + break; + default: + value = chartData[i][j].getLegEntry().currentSpeedOverGroundInKnots; + } + if (value != null) { + data.setValue(j, (i + 1), value); + } } } } return data; } - - //DataLoaded event handling. - public void addDataLoadedHandler(DataLoadedHandler handler){ + + // DataLoaded event handling. + public void addDataLoadedHandler(DataLoadedHandler handler) { this.addHandler(handler, DataLoadedEvent.TYPE); } @@ -122,8 +264,6 @@ public class CompareCompetitorsPanel extends FormPanel { super(); } - - @Override protected void dispatch(DataLoadedHandler handler) { handler.onDataLoaded(this); @@ -136,5 +276,4 @@ public class CompareCompetitorsPanel extends FormPanel { } - } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingService.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingService.java index 31484625ac0..ea1957c304f 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingService.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingService.java @@ -8,11 +8,11 @@ import java.util.Map; import com.google.gwt.user.client.rpc.RemoteService; import com.google.gwt.user.client.rpc.RemoteServiceRelativePath; import com.sap.sailing.gwt.ui.shared.CompetitorDAO; +import com.sap.sailing.gwt.ui.shared.CompetitorWithRaceDAO; import com.sap.sailing.gwt.ui.shared.EventDAO; import com.sap.sailing.gwt.ui.shared.GPSFixDAO; import com.sap.sailing.gwt.ui.shared.LeaderboardDAO; import com.sap.sailing.gwt.ui.shared.LeaderboardEntryDAO; -import com.sap.sailing.gwt.ui.shared.LeaderboardRowDAO; import com.sap.sailing.gwt.ui.shared.MarkDAO; import com.sap.sailing.gwt.ui.shared.Pair; import com.sap.sailing.gwt.ui.shared.QuickRankDAO; @@ -122,5 +122,5 @@ public interface SailingService extends RemoteService { String[] getCountryCodes(); - LeaderboardRowDAO[][] getLeaderboardRowDAOOfRace(String eventName, String raceName, List competitors, int timeStep) throws Exception; + CompetitorWithRaceDAO[][] getCompetitorRaceData(String eventName, String raceName, List competitors, int timeStep) throws Exception; } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingServiceAsync.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingServiceAsync.java index ee200331d3d..0df1a0f1ed9 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingServiceAsync.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingServiceAsync.java @@ -10,11 +10,11 @@ import com.sap.sailing.domain.base.Course; import com.sap.sailing.domain.leaderboard.RaceInLeaderboard; import com.sap.sailing.domain.tracking.WindSource; import com.sap.sailing.gwt.ui.shared.CompetitorDAO; +import com.sap.sailing.gwt.ui.shared.CompetitorWithRaceDAO; import com.sap.sailing.gwt.ui.shared.EventDAO; import com.sap.sailing.gwt.ui.shared.GPSFixDAO; import com.sap.sailing.gwt.ui.shared.LeaderboardDAO; import com.sap.sailing.gwt.ui.shared.LeaderboardEntryDAO; -import com.sap.sailing.gwt.ui.shared.LeaderboardRowDAO; import com.sap.sailing.gwt.ui.shared.MarkDAO; import com.sap.sailing.gwt.ui.shared.Pair; import com.sap.sailing.gwt.ui.shared.QuickRankDAO; @@ -185,6 +185,6 @@ public interface SailingServiceAsync { void getCountryCodes(AsyncCallback callback); - void getLeaderboardRowDAOOfRace(String eventName, String raceName, List competitors, int timeStep, - AsyncCallback callback); + void getCompetitorRaceData(String eventName, String raceName, List competitors, int timeStep, + AsyncCallback callback); } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java index 31433dd75a0..4fa0acb3b6d 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java @@ -71,6 +71,7 @@ import com.sap.sailing.domain.tractracadapter.TracTracConfiguration; import com.sap.sailing.gwt.ui.client.SailingService; import com.sap.sailing.gwt.ui.shared.BoatClassDAO; import com.sap.sailing.gwt.ui.shared.CompetitorDAO; +import com.sap.sailing.gwt.ui.shared.CompetitorWithRaceDAO; import com.sap.sailing.gwt.ui.shared.EventDAO; import com.sap.sailing.gwt.ui.shared.GPSFixDAO; import com.sap.sailing.gwt.ui.shared.LeaderboardDAO; @@ -1110,8 +1111,8 @@ public class SailingServiceImpl extends RemoteServiceServlet implements SailingS } @Override - public LeaderboardRowDAO[][] getLeaderboardRowDAOOfRace(String leaderboardName, String raceName, List competitorDAOs, int steps) throws NoWindException { - LeaderboardRowDAO[][] competitorData; + public CompetitorWithRaceDAO[][] getCompetitorRaceData(String leaderboardName, String raceName, List competitorDAOs, int steps) throws NoWindException { + CompetitorWithRaceDAO[][] competitorData; TrackedRace trackedRace = getService().getLeaderboardByName(leaderboardName).getRaceColumnByName(raceName).getTrackedRace(); Iterable competitors = trackedRace.getRace().getCompetitors(); @@ -1123,32 +1124,29 @@ public class SailingServiceImpl extends RemoteServiceServlet implements SailingS } } } - competitorData = new LeaderboardRowDAO[selectedCompetitor.size()][]; + competitorData = new CompetitorWithRaceDAO[selectedCompetitor.size()][]; int i = 0; for (Competitor c : selectedCompetitor){ - List entries = new ArrayList(); + List entries = new ArrayList(); for (long time = trackedRace.getStart().asMillis(); time < trackedRace.getTimePointOfNewestEvent().asMillis(); time += (trackedRace.getTimePointOfNewestEvent().asMillis()-trackedRace.getStart().asMillis())/steps){ MillisecondsTimePoint timePoint = new MillisecondsTimePoint(time); - LeaderboardRowDAO row = new LeaderboardRowDAO(); - row.competitor = getCompetitorDAO(c); - row.fieldsByRaceName = new HashMap(); - LeaderboardEntryDAO entryDAO = new LeaderboardEntryDAO(); - entryDAO.legDetails = new ArrayList(); - for (Leg leg : trackedRace.getRace().getCourse().getLegs()) { - TrackedLegOfCompetitor trackedLeg = trackedRace.getTrackedLeg(c, leg); - LegEntryDAO legEntry; - if (trackedLeg != null && trackedLeg.hasStartedLeg(timePoint)) { - legEntry = createLegEntry(trackedLeg, timePoint); - } else { - legEntry = null; + CompetitorWithRaceDAO competitorWithRaceEntry = new CompetitorWithRaceDAO(); + competitorWithRaceEntry.setCompetitor(getCompetitorDAO(c)); + if (trackedRace != null){ + LegEntryDAO legEntry = createLegEntry(trackedRace.getTrackedLeg(c, timePoint), timePoint); + if (legEntry != null){ + legEntry.timeInMilliseconds = time; + if (competitorWithRaceEntry.getLegEntry() == null){ + competitorWithRaceEntry.setLegEntry(legEntry); + entries.add(competitorWithRaceEntry); + } + else { + competitorWithRaceEntry.updateLegEntry(legEntry); + } } - entryDAO.legDetails.add(legEntry); } - - row.fieldsByRaceName.put(raceName, entryDAO); - entries.add(row); } - competitorData[i++] = entries.toArray(new LeaderboardRowDAO[0]); + competitorData[i++] = entries.toArray(new CompetitorWithRaceDAO[0]); } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/CompetitorWithRaceDAO.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/CompetitorWithRaceDAO.java new file mode 100644 index 00000000000..9d061c3d937 --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/CompetitorWithRaceDAO.java @@ -0,0 +1,62 @@ +package com.sap.sailing.gwt.ui.shared; + +import com.google.gwt.user.client.rpc.IsSerializable; + +public class CompetitorWithRaceDAO implements IsSerializable { + private CompetitorDAO competitor; + private LegEntryDAO legEntry; + public CompetitorDAO getCompetitor() { + return competitor; + } + public void setCompetitor(CompetitorDAO competitor) { + this.competitor = competitor; + } + public LegEntryDAO getLegEntry() { + return legEntry; + } + public void setLegEntry(LegEntryDAO legEntry) { + this.legEntry = legEntry; + } + + /* Updates the legEntry. Only updates a value if the value of {@link: legEntry} is not 0. + * + * @param legEntry The LegEntryDAO providing the update information. + */ + public void updateLegEntry(LegEntryDAO legEntry){ + if (!this.legEntry.started & legEntry.started){ + this.legEntry.started = legEntry.started; + } + if (!this.legEntry.finished & legEntry.finished){ + this.legEntry.finished = legEntry.finished; + } + if (legEntry.averageSpeedOverGroundInKnots != 0){ + this.legEntry.averageSpeedOverGroundInKnots = legEntry.averageSpeedOverGroundInKnots; + } + if (legEntry.currentSpeedOverGroundInKnots != 0){ + this.legEntry.currentSpeedOverGroundInKnots = legEntry.currentSpeedOverGroundInKnots; + } + if (legEntry.distanceTraveledInMeters != 0){ + this.legEntry.distanceTraveledInMeters = legEntry.distanceTraveledInMeters; + } + if (legEntry.estimatedTimeToNextWaypointInSeconds != 0){ + this.legEntry.estimatedTimeToNextWaypointInSeconds = legEntry.estimatedTimeToNextWaypointInSeconds; + } + if (legEntry.gapToLeaderInSeconds != 0){ + this.legEntry.gapToLeaderInSeconds = legEntry.gapToLeaderInSeconds; + } + if (legEntry.rank != 0){ + this.legEntry.rank = legEntry.rank; + } + if (legEntry.timeInMilliseconds != 0){ + this.legEntry.timeInMilliseconds = legEntry.timeInMilliseconds; + } + if (legEntry.velocityMadeGoodInKnots != 0){ + this.legEntry.velocityMadeGoodInKnots = legEntry.velocityMadeGoodInKnots; + } + if (legEntry.windwardDistanceToGoInMeters != 0){ + this.legEntry.windwardDistanceToGoInMeters = legEntry.windwardDistanceToGoInMeters; + } + } + + +} From 2901f2104cc5ade453f1fe61ed2484ff7920d553 Mon Sep 17 00:00:00 2001 From: Benjamin Ebling Date: Wed, 30 Nov 2011 15:41:53 +0100 Subject: [PATCH 05/21] Improved "CompareCompetitorPanel" and added inheriting for moduls of visualization.jar. --- .../com.google.gdt.eclipse.core.prefs | 4 +- .../com.google.gwt.eclipse.core.prefs | 4 +- java/com.sap.sailing.gwt.ui/SailingGWT.launch | 2 +- .../client/CompareCompetitorsChartDialog.java | 2 +- .../ui/client/CompareCompetitorsPanel.java | 68 ++++++++++++++---- .../gwt/ui/server/SailingServiceImpl.java | 19 +++-- .../gwt/ui/shared/CompetitorWithRaceDAO.java | 9 +++ .../sap/sailing/gwt/ui/Leaderboard.gwt.xml | 3 + .../sailing/gwt/ui/LeaderboardEditing.gwt.xml | 3 + .../sap/sailing/gwt/ui/UserManagement.gwt.xml | 3 + .../war/images/ajax-loader.gif | Bin 0 -> 3208 bytes 11 files changed, 88 insertions(+), 29 deletions(-) create mode 100644 java/com.sap.sailing.gwt.ui/war/images/ajax-loader.gif diff --git a/java/com.sap.sailing.gwt.ui/.settings/com.google.gdt.eclipse.core.prefs b/java/com.sap.sailing.gwt.ui/.settings/com.google.gdt.eclipse.core.prefs index 00ab6bedb01..266c74f52c3 100644 --- a/java/com.sap.sailing.gwt.ui/.settings/com.google.gdt.eclipse.core.prefs +++ b/java/com.sap.sailing.gwt.ui/.settings/com.google.gdt.eclipse.core.prefs @@ -1,7 +1,7 @@ -#Wed Nov 23 14:14:33 CET 2011 +#Tue Nov 29 17:19:34 CET 2011 eclipse.preferences.version=1 jarsExcludedFromWebInfLib= -lastWarOutDir=C\:/Users/d056995/git/git/java/com.sap.sailing.gwt.ui/war +lastWarOutDir=C\:/Users/d056866/git/git/java/com.sap.sailing.gwt.ui/war launchConfigExternalUrlPrefix= warSrcDir=war warSrcDirIsOutput=false diff --git a/java/com.sap.sailing.gwt.ui/.settings/com.google.gwt.eclipse.core.prefs b/java/com.sap.sailing.gwt.ui/.settings/com.google.gwt.eclipse.core.prefs index ea7accb991a..cb818fe24d9 100755 --- a/java/com.sap.sailing.gwt.ui/.settings/com.google.gwt.eclipse.core.prefs +++ b/java/com.sap.sailing.gwt.ui/.settings/com.google.gwt.eclipse.core.prefs @@ -1,5 +1,5 @@ -#Wed Nov 09 12:43:38 CET 2011 +#Tue Nov 29 17:28:42 CET 2011 eclipse.preferences.version=1 entryPointModules= filesCopiedToWebInfLib=gwt-servlet.jar -gwtCompileSettings=PGd3dC1jb21waWxlLXNldHRpbmdzPjxsb2ctbGV2ZWw+SU5GTzwvbG9nLWxldmVsPjxvdXRwdXQtc3R5bGU+T0JGVVNDQVRFRDwvb3V0cHV0LXN0eWxlPjxleHRyYS1hcmdzPjwhW0NEQVRBW11dPjwvZXh0cmEtYXJncz48dm0tYXJncz48IVtDREFUQVstWG14NTEybV1dPjwvdm0tYXJncz48ZW50cnktcG9pbnQtbW9kdWxlPmNvbS5zYXAuc2FpbGluZy5nd3QudWkuQWRtaW5Db25zb2xlPC9lbnRyeS1wb2ludC1tb2R1bGU+PC9nd3QtY29tcGlsZS1zZXR0aW5ncz4\= +gwtCompileSettings=PGd3dC1jb21waWxlLXNldHRpbmdzPjxsb2ctbGV2ZWw+SU5GTzwvbG9nLWxldmVsPjxvdXRwdXQtc3R5bGU+T0JGVVNDQVRFRDwvb3V0cHV0LXN0eWxlPjxleHRyYS1hcmdzPjwhW0NEQVRBW11dPjwvZXh0cmEtYXJncz48dm0tYXJncz48IVtDREFUQVstWG14NTEybV1dPjwvdm0tYXJncz48ZW50cnktcG9pbnQtbW9kdWxlPmNvbS5zYXAuc2FpbGluZy5nd3QudWkuQWRtaW5Db25zb2xlPC9lbnRyeS1wb2ludC1tb2R1bGU+PGVudHJ5LXBvaW50LW1vZHVsZT5jb20uc2FwLnNhaWxpbmcuZ3d0LnVpLkxlYWRlcmJvYXJkPC9lbnRyeS1wb2ludC1tb2R1bGU+PGVudHJ5LXBvaW50LW1vZHVsZT5jb20uc2FwLnNhaWxpbmcuZ3d0LnVpLkxlYWRlcmJvYXJkRWRpdGluZzwvZW50cnktcG9pbnQtbW9kdWxlPjxlbnRyeS1wb2ludC1tb2R1bGU+Y29tLnNhcC5zYWlsaW5nLmd3dC51aS5Vc2VyTWFuYWdlbWVudDwvZW50cnktcG9pbnQtbW9kdWxlPjwvZ3d0LWNvbXBpbGUtc2V0dGluZ3M+ diff --git a/java/com.sap.sailing.gwt.ui/SailingGWT.launch b/java/com.sap.sailing.gwt.ui/SailingGWT.launch index 0c521c018d6..1710d5f5566 100755 --- a/java/com.sap.sailing.gwt.ui/SailingGWT.launch +++ b/java/com.sap.sailing.gwt.ui/SailingGWT.launch @@ -21,7 +21,7 @@ - + diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/CompareCompetitorsChartDialog.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/CompareCompetitorsChartDialog.java index 87315fba62a..191dff4a29b 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/CompareCompetitorsChartDialog.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/CompareCompetitorsChartDialog.java @@ -42,6 +42,6 @@ public class CompareCompetitorsChartDialog extends DialogBox { this.add(mainPanel); this.setTitle("Compare competitors"); - this.center(); + this.setPopupPosition(5, 5); } } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/CompareCompetitorsPanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/CompareCompetitorsPanel.java index 13769edb74d..d40da38499b 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/CompareCompetitorsPanel.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/CompareCompetitorsPanel.java @@ -1,6 +1,5 @@ package com.sap.sailing.gwt.ui.client; -import java.util.Date; import java.util.List; import com.google.gwt.event.dom.client.ChangeEvent; @@ -8,15 +7,16 @@ import com.google.gwt.event.dom.client.ChangeHandler; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.event.shared.GwtEvent; -import com.google.gwt.i18n.client.DateTimeFormat; import com.google.gwt.safehtml.shared.SafeHtmlBuilder; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.rpc.AsyncCallback; +import com.google.gwt.user.client.ui.AbsolutePanel; +import com.google.gwt.user.client.ui.Anchor; import com.google.gwt.user.client.ui.Button; import com.google.gwt.user.client.ui.CaptionPanel; +import com.google.gwt.user.client.ui.DeckPanel; import com.google.gwt.user.client.ui.FormPanel; import com.google.gwt.user.client.ui.HasHorizontalAlignment; -import com.google.gwt.user.client.ui.Anchor; import com.google.gwt.user.client.ui.HorizontalPanel; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.ListBox; @@ -40,24 +40,35 @@ public class CompareCompetitorsPanel extends FormPanel { private HorizontalPanel mainPanel; private VerticalPanel chartPanel; private String raceName; - private DateTimeFormat dateTimeFormat; + public static final int DECK_PANEL_INDEX_LOADING = 0; + public static final int DECK_PANEL_INDEX_CHART = 1; + public static final int SHOW_CURRENT_SPEED_OVER_GROUND = 0; public static final int SHOW_VELOCITY_MADE_GOOD = 1; public static final int SHOW_GAP_TO_LEADER = 2; public static final int SHOW_WINDWARD_DISTANCE_TO_GO = 3; + public static final int SHOW_DISTANCE_TRAVELED = 4; private int dataToShow = SHOW_CURRENT_SPEED_OVER_GROUND; + private AbsolutePanel loadingPanel; public CompareCompetitorsPanel(SailingServiceAsync sailingService, final List competitors, String raceName, final String leaderboardName) { this.sailingService = sailingService; this.competitors = competitors; this.raceName = raceName; - this.dateTimeFormat = DateTimeFormat.getFormat("HH:mm:ss"); mainPanel = new HorizontalPanel(); chartPanel = new VerticalPanel(); + loadingPanel = new AbsolutePanel (); + loadingPanel.setSize("800px", "600px"); + + Anchor a = new Anchor(new SafeHtmlBuilder().appendHtmlConstant( + "").toSafeHtml()); + loadingPanel.add(a,800/2-32/2,600/2-32-2); chartPanel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT); chartPanel.setSpacing(5); - + final DeckPanel deckPanel = new DeckPanel(); + + deckPanel.add(loadingPanel); final CaptionPanel configCaption = new CaptionPanel("Configuration"); configCaption.setHeight("100%"); configCaption.setVisible(false); @@ -79,6 +90,7 @@ public class CompareCompetitorsPanel extends FormPanel { configPanel.add(lblChart); final ListBox dataSelection = new ListBox(); dataSelection.addItem("Speed over ground", "" + SHOW_CURRENT_SPEED_OVER_GROUND); + dataSelection.addItem("Distance traveled", "" + SHOW_DISTANCE_TRAVELED); dataSelection.addItem("Velocity made good", "" + SHOW_VELOCITY_MADE_GOOD); dataSelection.addItem("Gap to leader", "" + SHOW_GAP_TO_LEADER); dataSelection.addItem("Windward distance to go", "" + SHOW_WINDWARD_DISTANCE_TO_GO); @@ -96,12 +108,14 @@ public class CompareCompetitorsPanel extends FormPanel { Label lblSteps = new Label("Points to load:"); configPanel.add(lblSteps); final TextBox txtbSteps = new TextBox(); + txtbSteps.setText("100"); configPanel.add(txtbSteps); Button bttSteps = new Button("Refresh"); bttSteps.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { + deckPanel.showWidget(DECK_PANEL_INDEX_LOADING); CompareCompetitorsPanel.this.sailingService.getCompetitorRaceData(leaderboardName, CompareCompetitorsPanel.this.raceName, competitors, Integer.parseInt(txtbSteps.getText()), new AsyncCallback() { @@ -117,6 +131,7 @@ public class CompareCompetitorsPanel extends FormPanel { fireEvent(new DataLoadedEvent()); chartData = result; if (chart != null) { + deckPanel.showWidget(DECK_PANEL_INDEX_CHART); chart.draw(prepareTableData(), getOptions()); } } @@ -131,14 +146,15 @@ public class CompareCompetitorsPanel extends FormPanel { public void run() { chart = new LineChart(prepareTableData(), getOptions()); - chartPanel.add(chart); + deckPanel.add(chart); fireEvent(new DataLoadedEvent()); // chartLoaded = true; } }; VisualizationUtils.loadVisualizationApi(onLoadCallback, LineChart.PACKAGE); - this.sailingService.getCompetitorRaceData(leaderboardName, this.raceName, competitors, 150, + deckPanel.showWidget(DECK_PANEL_INDEX_LOADING); + this.sailingService.getCompetitorRaceData(leaderboardName, this.raceName, competitors, 100, new AsyncCallback() { @Override @@ -151,11 +167,12 @@ public class CompareCompetitorsPanel extends FormPanel { fireEvent(new DataLoadedEvent()); chartData = result; if (chart != null) { + deckPanel.showWidget(DECK_PANEL_INDEX_CHART); chart.draw(prepareTableData(), getOptions()); } } }); - // while (!chartLoaded){} + chartPanel.add(deckPanel); mainPanel.add(chartPanel); mainPanel.add(configCaption); this.add(mainPanel); @@ -175,6 +192,9 @@ public class CompareCompetitorsPanel extends FormPanel { case SHOW_WINDWARD_DISTANCE_TO_GO: opt.setTitle("Windward distance to go"); break; + case SHOW_DISTANCE_TRAVELED: + opt.setTitle("Distance Traveled"); + break; default: opt.setTitle("Speed over ground"); } @@ -193,6 +213,9 @@ public class CompareCompetitorsPanel extends FormPanel { case SHOW_WINDWARD_DISTANCE_TO_GO: vAxisOptions.setTitle("distance in m"); break; + case SHOW_DISTANCE_TRAVELED: + vAxisOptions.setTitle("distance in m"); + break; default: vAxisOptions.setTitle("speed in kts"); break; @@ -217,17 +240,28 @@ public class CompareCompetitorsPanel extends FormPanel { length = (length < chartData[i].length) ? chartData[i].length : length; } data.addRows(length); + long startTime = chartData[0][0].getStartTime(); for (int n = 0; n < chartData[0].length; n++) { - Date d = new Date(chartData[0][n].getLegEntry().timeInMilliseconds); - String time = "" + ((chartData[0][n] == null) ? 0 : dateTimeFormat.format(d)); - data.setValue(n, 0, time); + long time = chartData[0][n].getLegEntry().timeInMilliseconds - startTime; + String minutes = "" + Math.abs((time/60000)); + if (minutes.length() < 2){ + minutes = ((time < 0)? "-" : "") +"0" + minutes; + } + String seconds = "" + Math.abs((time/1000)%60); + if (seconds.length() < 2){ + seconds= "0" + seconds; + } + data.setValue(n, 0, minutes + ":" + seconds); } for (int i = 0; i < chartData.length; i++) { + double distanceTraveledOnPreviousLegs = 0; + double lastTraveledDistance = 0; for (int j = 0; j < chartData[i].length; j++) { Double value = null; switch (dataToShow) { case SHOW_GAP_TO_LEADER: value = chartData[i][j].getLegEntry().gapToLeaderInSeconds; + //value = (value != null && value < 1000)?value:null; break; case SHOW_VELOCITY_MADE_GOOD: value = chartData[i][j].getLegEntry().velocityMadeGoodInKnots; @@ -235,6 +269,16 @@ public class CompareCompetitorsPanel extends FormPanel { case SHOW_WINDWARD_DISTANCE_TO_GO: value = chartData[i][j].getLegEntry().windwardDistanceToGoInMeters; break; + case SHOW_DISTANCE_TRAVELED: + value = chartData[i][j].getLegEntry().distanceTraveledInMeters; + if (value != null){ + if (lastTraveledDistance > value){ + distanceTraveledOnPreviousLegs += lastTraveledDistance; + } + lastTraveledDistance = value; + value += distanceTraveledOnPreviousLegs; + } + break; default: value = chartData[i][j].getLegEntry().currentSpeedOverGroundInKnots; } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java index 4fa0acb3b6d..11f4cfde8c5 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java @@ -1119,7 +1119,7 @@ public class SailingServiceImpl extends RemoteServiceServlet implements SailingS List selectedCompetitor = new ArrayList(); for (Competitor c : competitors){ for (CompetitorDAO cDAO : competitorDAOs){ - if (c.getName().equals(cDAO.name)){ + if (c.getId().toString().equals(cDAO.id)){ selectedCompetitor.add(c); } } @@ -1128,23 +1128,20 @@ public class SailingServiceImpl extends RemoteServiceServlet implements SailingS int i = 0; for (Competitor c : selectedCompetitor){ List entries = new ArrayList(); - for (long time = trackedRace.getStart().asMillis(); time < trackedRace.getTimePointOfNewestEvent().asMillis(); time += (trackedRace.getTimePointOfNewestEvent().asMillis()-trackedRace.getStart().asMillis())/steps){ + for (long time = trackedRace.getStart().asMillis()-20000; time < trackedRace.getTimePointOfNewestEvent().asMillis(); time += (trackedRace.getTimePointOfNewestEvent().asMillis()-trackedRace.getStart().asMillis()-20000)/steps){ MillisecondsTimePoint timePoint = new MillisecondsTimePoint(time); CompetitorWithRaceDAO competitorWithRaceEntry = new CompetitorWithRaceDAO(); competitorWithRaceEntry.setCompetitor(getCompetitorDAO(c)); + competitorWithRaceEntry.setStartTime(trackedRace.getStart().asMillis()); if (trackedRace != null){ LegEntryDAO legEntry = createLegEntry(trackedRace.getTrackedLeg(c, timePoint), timePoint); - if (legEntry != null){ - legEntry.timeInMilliseconds = time; - if (competitorWithRaceEntry.getLegEntry() == null){ - competitorWithRaceEntry.setLegEntry(legEntry); - entries.add(competitorWithRaceEntry); - } - else { - competitorWithRaceEntry.updateLegEntry(legEntry); - } + if (legEntry == null){ + legEntry = new LegEntryDAO(); } + legEntry.timeInMilliseconds = time; + competitorWithRaceEntry.setLegEntry(legEntry); } + entries.add(competitorWithRaceEntry); } competitorData[i++] = entries.toArray(new CompetitorWithRaceDAO[0]); } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/CompetitorWithRaceDAO.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/CompetitorWithRaceDAO.java index 9d061c3d937..32f37b7463c 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/CompetitorWithRaceDAO.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/CompetitorWithRaceDAO.java @@ -1,10 +1,19 @@ package com.sap.sailing.gwt.ui.shared; import com.google.gwt.user.client.rpc.IsSerializable; +import com.sap.sailing.domain.base.TimePoint; public class CompetitorWithRaceDAO implements IsSerializable { private CompetitorDAO competitor; private LegEntryDAO legEntry; + private long startTime; + + public long getStartTime() { + return startTime; + } + public void setStartTime(long startTime) { + this.startTime = startTime; + } public CompetitorDAO getCompetitor() { return competitor; } diff --git a/java/com.sap.sailing.gwt.ui/src/main/resources/com/sap/sailing/gwt/ui/Leaderboard.gwt.xml b/java/com.sap.sailing.gwt.ui/src/main/resources/com/sap/sailing/gwt/ui/Leaderboard.gwt.xml index 2c452f4b966..e38052758ef 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/resources/com/sap/sailing/gwt/ui/Leaderboard.gwt.xml +++ b/java/com.sap.sailing.gwt.ui/src/main/resources/com/sap/sailing/gwt/ui/Leaderboard.gwt.xml @@ -17,6 +17,9 @@ + + + diff --git a/java/com.sap.sailing.gwt.ui/src/main/resources/com/sap/sailing/gwt/ui/LeaderboardEditing.gwt.xml b/java/com.sap.sailing.gwt.ui/src/main/resources/com/sap/sailing/gwt/ui/LeaderboardEditing.gwt.xml index 0d9dfc6bda7..11f6975ee79 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/resources/com/sap/sailing/gwt/ui/LeaderboardEditing.gwt.xml +++ b/java/com.sap.sailing.gwt.ui/src/main/resources/com/sap/sailing/gwt/ui/LeaderboardEditing.gwt.xml @@ -17,6 +17,9 @@ + + + diff --git a/java/com.sap.sailing.gwt.ui/src/main/resources/com/sap/sailing/gwt/ui/UserManagement.gwt.xml b/java/com.sap.sailing.gwt.ui/src/main/resources/com/sap/sailing/gwt/ui/UserManagement.gwt.xml index 58a0412467b..9e07bdaab19 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/resources/com/sap/sailing/gwt/ui/UserManagement.gwt.xml +++ b/java/com.sap.sailing.gwt.ui/src/main/resources/com/sap/sailing/gwt/ui/UserManagement.gwt.xml @@ -17,6 +17,9 @@ + + + diff --git a/java/com.sap.sailing.gwt.ui/war/images/ajax-loader.gif b/java/com.sap.sailing.gwt.ui/war/images/ajax-loader.gif new file mode 100644 index 0000000000000000000000000000000000000000..3288d1035d70bb86517e2c233f1a904e41f06b29 GIT binary patch literal 3208 zcmc(iX;4#H9>pJdFE7h`I{IF)0|5<6L}(j=N}5%L009EB2nYfyF)E0PvIqo$u!IC; z4PgyY5|S9AEh38G)(9eq4TbH7_UHg@yWrlIJ$6smIADL7s^P;_O;ykRc9soXl`UC*LwQJXkii*0rx|*7rI2=x7WaRkx_~XZqFJ8R3c=2Kg zf@aSAv8+BJ8+^hyay>(QR@t*blbKzsf0}bscEqRc5Hd3o(-N5RyW=zWB*zQw6Zh>* z2CROCDAbu#D`)S|J_o(lL9Yn3l*+8RdiRD_>iNz$#_IAzCna&Wl5 zSF_(rRCDD!wi#i8oAm&jYtn2_@VB%2-H*G%bN#|(6R6N?wM)3u`PiGzwuX7qmTgyF zpE)h0kuoxQ9?=kW7Y!=R@DmhU9)vwT*EZWzJ zrt+=2tqFts72yIp?|gvdLhs8Hfku^Z(){gmN%Y=K#P|%fkvgUj~HfIp3CuXqCtYGtJ#me+n+-LmP( z*XNuk%!aH8bIE@_Bj46>M*dSro|7<6vZ7WUHh5YQzN$>IJFqCb|CT!wj~R2C2%=q{ zpt8rzY$aw?W?=Ustv{jo?Ow@ZRkLe<)NItY>Cyhle*wR59dTdF6(@{5^ zAQBOB*hNtc3bkY-8{Cm$nFS@elbTtSqrt7MB{h_4y+~`!mVa}?c&N>&?P}GqdMuhQ z&@TD5Czd((DcG_Su~dKKV)Pj$-qi1WHM8_vc^O4?^!oY|tmK~i!{fjd&@_1E(T~r7 z_REZy&hMT^ySJB3W7l$4YhR`M(J7S5S~+4Q&3HPa)z%zPpisOp$^ zTEe99ig2$5_qFr!$;7A6CJ}PJmRhli>w?LC}Y`#HLGy6 zMU4EhL~dKCN5Ut;U2jd*83ShBNiu zcJB0l9>1Modc?-oM<R4?}3g}UJ%@K);kriq>)e*rh%hdqM)5Q)*+O8 zXm;SEbs@koiYS!9YXIclSg+5m_s~yrW#kKMdiRszg(gCP5HPmP7L)vCf8@fxUh6qY z@Z#TmkjzAZX{rwE+q|K~F2v5{_@vt%>yT_a#fF03SFt{0RXvDAiaY~K9CgS1O>frXgAjBCS}mEd4mIWZ$=ovd5| zR?GRdU}d6+Q`+JRW)|=v7$)XNkn3yE`!nAiSCvOB1jKT zG<1aK3s<0b0m==egTD#8i(Of=1pGDTOCho0XpIOMQ&P87cVKY1W=C6kIg z9cH=@a&zbm2+`|{(_?YC9fdm?1TY~-pwlBn?>=(~1pDKbco6jloP;0-cqRiwV1A_S zEyV0Dj8Pwy!nekzaN>{)7rgZ&_QLxK{~1yRe865^yx>}+a!ECd>#MMwddow z@CU{l+Rt$xuXuf}?ga{3IAr?Raql^c@a%sI0U5m}HvJ5O1#I%_MMPt#BH>OqUZ{-k zt>4Xzz=%jT*FVW(uYkWyx}9Gw$HdN*qU?Bit#ji(Wi7p-u|_8?h^%szIS^s^fNM}b zgGy>|=cbEufpguY5_6w~&ZLv=Bo06UF9EYIY;Er-1VK)SyF&!|J{axiE1z^(hXwVq zsFS=K-#zC}CcOs^8W{KAt+kK)jYDgDYbCXv{{rwsgqtIU3<910$CJi)s?? z_t8k{>7*0~4l~LLF7$WXT5OSq5QCTbP_l!SN|{R}3D&eWA8~0ltWh1IL+ZBX4rRSt zWF6Om3WDMu4xK^1(BF`2cL}rUCzhHAB`@j5&R-yk_l*t;mPGY|u2^o|myvcOdrg0W z%=lX;f^Vkqfp?u7*4qQq%A3Mpf!xspWBSKS@O%r*TSM}?dl(@*%{0Jm_8;(h{R__M Bt Date: Wed, 30 Nov 2011 16:04:47 +0100 Subject: [PATCH 06/21] Fixed a bug that no data was shown when SailingService returned before chart was loaded. --- java/com.sap.sailing.gwt.ui/SailingGWT.launch | 2 +- .../ui/client/CompareCompetitorsPanel.java | 69 ++++++++----------- .../gwt/ui/server/SailingServiceImpl.java | 6 +- .../gwt/ui/shared/CompetitorWithRaceDAO.java | 1 - 4 files changed, 33 insertions(+), 45 deletions(-) diff --git a/java/com.sap.sailing.gwt.ui/SailingGWT.launch b/java/com.sap.sailing.gwt.ui/SailingGWT.launch index c95a8aed1dd..1710d5f5566 100755 --- a/java/com.sap.sailing.gwt.ui/SailingGWT.launch +++ b/java/com.sap.sailing.gwt.ui/SailingGWT.launch @@ -21,7 +21,7 @@ - + diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/CompareCompetitorsPanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/CompareCompetitorsPanel.java index d40da38499b..fb83fa0d17d 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/CompareCompetitorsPanel.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/CompareCompetitorsPanel.java @@ -39,7 +39,10 @@ public class CompareCompetitorsPanel extends FormPanel { private final SailingServiceAsync sailingService; private HorizontalPanel mainPanel; private VerticalPanel chartPanel; + private final DeckPanel deckPanel; + private String leaderboardName; private String raceName; + private int stepsToLoad = 100; public static final int DECK_PANEL_INDEX_LOADING = 0; public static final int DECK_PANEL_INDEX_CHART = 1; @@ -55,6 +58,7 @@ public class CompareCompetitorsPanel extends FormPanel { String raceName, final String leaderboardName) { this.sailingService = sailingService; this.competitors = competitors; + this.leaderboardName = leaderboardName; this.raceName = raceName; mainPanel = new HorizontalPanel(); chartPanel = new VerticalPanel(); @@ -66,7 +70,7 @@ public class CompareCompetitorsPanel extends FormPanel { loadingPanel.add(a,800/2-32/2,600/2-32-2); chartPanel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT); chartPanel.setSpacing(5); - final DeckPanel deckPanel = new DeckPanel(); + deckPanel = new DeckPanel(); deckPanel.add(loadingPanel); final CaptionPanel configCaption = new CaptionPanel("Configuration"); @@ -115,27 +119,9 @@ public class CompareCompetitorsPanel extends FormPanel { @Override public void onClick(ClickEvent event) { + stepsToLoad = Integer.parseInt(txtbSteps.getText()); deckPanel.showWidget(DECK_PANEL_INDEX_LOADING); - CompareCompetitorsPanel.this.sailingService.getCompetitorRaceData(leaderboardName, - CompareCompetitorsPanel.this.raceName, competitors, Integer.parseInt(txtbSteps.getText()), - new AsyncCallback() { - - @Override - public void onFailure(Throwable caught) { - // TODO Auto-generated method stub - - } - - @Override - public void onSuccess(CompetitorWithRaceDAO[][] result) { - fireEvent(new DataLoadedEvent()); - chartData = result; - if (chart != null) { - deckPanel.showWidget(DECK_PANEL_INDEX_CHART); - chart.draw(prepareTableData(), getOptions()); - } - } - }); + loadData(); } }); configPanel.add(bttSteps); @@ -148,30 +134,14 @@ public class CompareCompetitorsPanel extends FormPanel { chart = new LineChart(prepareTableData(), getOptions()); deckPanel.add(chart); fireEvent(new DataLoadedEvent()); + loadData(); // chartLoaded = true; } }; VisualizationUtils.loadVisualizationApi(onLoadCallback, LineChart.PACKAGE); deckPanel.showWidget(DECK_PANEL_INDEX_LOADING); - this.sailingService.getCompetitorRaceData(leaderboardName, this.raceName, competitors, 100, - new AsyncCallback() { - - @Override - public void onFailure(Throwable caught) { - Window.alert("Failed to laod race data."); - } - - @Override - public void onSuccess(CompetitorWithRaceDAO[][] result) { - fireEvent(new DataLoadedEvent()); - chartData = result; - if (chart != null) { - deckPanel.showWidget(DECK_PANEL_INDEX_CHART); - chart.draw(prepareTableData(), getOptions()); - } - } - }); + loadData(); chartPanel.add(deckPanel); mainPanel.add(chartPanel); mainPanel.add(configCaption); @@ -223,6 +193,27 @@ public class CompareCompetitorsPanel extends FormPanel { opt.setVAxisOptions(vAxisOptions); return opt; } + + private void loadData(){ + this.sailingService.getCompetitorRaceData(leaderboardName, this.raceName, competitors, stepsToLoad, + new AsyncCallback() { + + @Override + public void onFailure(Throwable caught) { + Window.alert("Failed to laod race data."); + } + + @Override + public void onSuccess(CompetitorWithRaceDAO[][] result) { + fireEvent(new DataLoadedEvent()); + chartData = result; + if (chart != null) { + deckPanel.showWidget(DECK_PANEL_INDEX_CHART); + chart.draw(prepareTableData(), getOptions()); + } + } + }); + } private AbstractDataTable prepareTableData() { DataTable data = DataTable.create(); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java index 68be1c41ff5..20af7f656c9 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java @@ -1159,11 +1159,9 @@ public class SailingServiceImpl extends RemoteServiceServlet implements SailingS } competitorData[i++] = entries.toArray(new CompetitorWithRaceDAO[0]); } - - - - return competitorData; + } + public Map> getDouglasPoints(String eventName, String raceName, Map from, Map to, double meters) { diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/CompetitorWithRaceDAO.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/CompetitorWithRaceDAO.java index 32f37b7463c..f074ab7d662 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/CompetitorWithRaceDAO.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/CompetitorWithRaceDAO.java @@ -1,7 +1,6 @@ package com.sap.sailing.gwt.ui.shared; import com.google.gwt.user.client.rpc.IsSerializable; -import com.sap.sailing.domain.base.TimePoint; public class CompetitorWithRaceDAO implements IsSerializable { private CompetitorDAO competitor; From ca42cefdfb6b1e313d84ae088d169222b377016f Mon Sep 17 00:00:00 2001 From: Benjamin Ebling Date: Wed, 30 Nov 2011 17:22:23 +0100 Subject: [PATCH 07/21] Replaced strings in sourceCode in CompareCompetitorsPanel and CreateSwissTimingRacePanel with stringConstants.*(). --- .../client/CompareCompetitorsChartDialog.java | 9 ++-- .../ui/client/CompareCompetitorsPanel.java | 51 ++++++++++--------- .../ui/client/CreateSwissTimingRacePanel.java | 24 ++++----- .../gwt/ui/client/LeaderboardPanel.java | 2 +- .../gwt/ui/client/StringConstants.java | 21 ++++++++ .../gwt/ui/client/StringConstants.properties | 23 ++++++++- .../ui/client/StringConstants_de.properties | 25 ++++++++- 7 files changed, 109 insertions(+), 46 deletions(-) diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/CompareCompetitorsChartDialog.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/CompareCompetitorsChartDialog.java index 191dff4a29b..115bb90611f 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/CompareCompetitorsChartDialog.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/CompareCompetitorsChartDialog.java @@ -14,13 +14,12 @@ import com.sap.sailing.gwt.ui.shared.CompetitorDAO; public class CompareCompetitorsChartDialog extends DialogBox { - public CompareCompetitorsChartDialog(SailingServiceAsync sailingService, List competitors, String raceName, String leaderboardName){ + public CompareCompetitorsChartDialog(SailingServiceAsync sailingService, List competitors, String raceName, String leaderboardName, StringConstants stringConstants){ super(true); VerticalPanel mainPanel = new VerticalPanel(); mainPanel.setSpacing(5); mainPanel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_LEFT); - //chartBox.setAnimationEnabled(true); - CompareCompetitorsPanel ccp = new CompareCompetitorsPanel(sailingService, competitors, raceName, leaderboardName); + CompareCompetitorsPanel ccp = new CompareCompetitorsPanel(sailingService, competitors, raceName, leaderboardName, stringConstants); ccp.addDataLoadedHandler(new DataLoadedHandler() { @Override @@ -30,7 +29,7 @@ public class CompareCompetitorsChartDialog extends DialogBox { } }); mainPanel.add(ccp); - Button closeButton = new Button("Close"); + Button closeButton = new Button(stringConstants.close()); closeButton.addClickHandler(new ClickHandler() { @Override @@ -41,7 +40,7 @@ public class CompareCompetitorsChartDialog extends DialogBox { mainPanel.add(closeButton); this.add(mainPanel); - this.setTitle("Compare competitors"); + this.setTitle(stringConstants.compareCompetitors()); this.setPopupPosition(5, 5); } } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/CompareCompetitorsPanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/CompareCompetitorsPanel.java index fb83fa0d17d..eaad2c937b0 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/CompareCompetitorsPanel.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/CompareCompetitorsPanel.java @@ -43,6 +43,8 @@ public class CompareCompetitorsPanel extends FormPanel { private String leaderboardName; private String raceName; private int stepsToLoad = 100; + private final StringConstants stringConstants; + public static final int DECK_PANEL_INDEX_LOADING = 0; public static final int DECK_PANEL_INDEX_CHART = 1; @@ -55,11 +57,12 @@ public class CompareCompetitorsPanel extends FormPanel { private AbsolutePanel loadingPanel; public CompareCompetitorsPanel(SailingServiceAsync sailingService, final List competitors, - String raceName, final String leaderboardName) { + String raceName, final String leaderboardName, StringConstants stringConstants) { this.sailingService = sailingService; this.competitors = competitors; this.leaderboardName = leaderboardName; this.raceName = raceName; + this.stringConstants = stringConstants; mainPanel = new HorizontalPanel(); chartPanel = new VerticalPanel(); loadingPanel = new AbsolutePanel (); @@ -73,7 +76,7 @@ public class CompareCompetitorsPanel extends FormPanel { deckPanel = new DeckPanel(); deckPanel.add(loadingPanel); - final CaptionPanel configCaption = new CaptionPanel("Configuration"); + final CaptionPanel configCaption = new CaptionPanel(stringConstants.configuration()); configCaption.setHeight("100%"); configCaption.setVisible(false); VerticalPanel configPanel = new VerticalPanel(); @@ -81,7 +84,7 @@ public class CompareCompetitorsPanel extends FormPanel { configPanel.setSpacing(7); Anchor showConfigAnchor = new Anchor(new SafeHtmlBuilder().appendHtmlConstant( "").toSafeHtml()); - showConfigAnchor.setTitle("Configuration"); + showConfigAnchor.setTitle(stringConstants.configuration()); showConfigAnchor.addClickHandler(new ClickHandler() { @Override @@ -90,14 +93,14 @@ public class CompareCompetitorsPanel extends FormPanel { } }); chartPanel.add(showConfigAnchor); - Label lblChart = new Label("Choose chart:"); + Label lblChart = new Label(stringConstants.chooseChart()); configPanel.add(lblChart); final ListBox dataSelection = new ListBox(); - dataSelection.addItem("Speed over ground", "" + SHOW_CURRENT_SPEED_OVER_GROUND); - dataSelection.addItem("Distance traveled", "" + SHOW_DISTANCE_TRAVELED); - dataSelection.addItem("Velocity made good", "" + SHOW_VELOCITY_MADE_GOOD); - dataSelection.addItem("Gap to leader", "" + SHOW_GAP_TO_LEADER); - dataSelection.addItem("Windward distance to go", "" + SHOW_WINDWARD_DISTANCE_TO_GO); + dataSelection.addItem(stringConstants.speedOverGroundLong(), "" + SHOW_CURRENT_SPEED_OVER_GROUND); + dataSelection.addItem(stringConstants.distanceTraveled(), "" + SHOW_DISTANCE_TRAVELED); + dataSelection.addItem(stringConstants.velocityMadeGoodLong(), "" + SHOW_VELOCITY_MADE_GOOD); + dataSelection.addItem(stringConstants.gapToLeaderLong(), "" + SHOW_GAP_TO_LEADER); + dataSelection.addItem(stringConstants.windwardDistanceToGoInMeters(), "" + SHOW_WINDWARD_DISTANCE_TO_GO); dataSelection.addChangeHandler(new ChangeHandler() { @Override @@ -112,9 +115,9 @@ public class CompareCompetitorsPanel extends FormPanel { Label lblSteps = new Label("Points to load:"); configPanel.add(lblSteps); final TextBox txtbSteps = new TextBox(); - txtbSteps.setText("100"); + txtbSteps.setText("" + stepsToLoad); configPanel.add(txtbSteps); - Button bttSteps = new Button("Refresh"); + Button bttSteps = new Button(stringConstants.refresh()); bttSteps.addClickHandler(new ClickHandler() { @Override @@ -135,7 +138,6 @@ public class CompareCompetitorsPanel extends FormPanel { deckPanel.add(chart); fireEvent(new DataLoadedEvent()); loadData(); - // chartLoaded = true; } }; VisualizationUtils.loadVisualizationApi(onLoadCallback, LineChart.PACKAGE); @@ -154,19 +156,19 @@ public class CompareCompetitorsPanel extends FormPanel { opt.setHeight(600); switch (dataToShow) { case SHOW_VELOCITY_MADE_GOOD: - opt.setTitle("Velocity made good"); + opt.setTitle(stringConstants.velocityMadeGoodLong()); break; case SHOW_GAP_TO_LEADER: - opt.setTitle("Gap to leader"); + opt.setTitle(stringConstants.gapToLeaderLong()); break; case SHOW_WINDWARD_DISTANCE_TO_GO: - opt.setTitle("Windward distance to go"); + opt.setTitle(stringConstants.windwardDistanceToGoInMeters()); break; case SHOW_DISTANCE_TRAVELED: - opt.setTitle("Distance Traveled"); + opt.setTitle(stringConstants.distanceTraveled()); break; default: - opt.setTitle("Speed over ground"); + opt.setTitle(stringConstants.speedOverGroundLong()); } AxisOptions hAxisOptions = AxisOptions.create(); hAxisOptions.setTitle("time"); @@ -175,19 +177,19 @@ public class CompareCompetitorsPanel extends FormPanel { AxisOptions vAxisOptions = AxisOptions.create(); switch (dataToShow) { case SHOW_VELOCITY_MADE_GOOD: - vAxisOptions.setTitle("speed in kts"); + vAxisOptions.setTitle(stringConstants.speed() + " " + stringConstants.in() + " " + stringConstants.velocityMadeGoodInKnotsUnit()); break; case SHOW_GAP_TO_LEADER: - vAxisOptions.setTitle("time in s"); + vAxisOptions.setTitle(stringConstants.time() + " " + stringConstants.in() + " " + stringConstants.secondsUnit()); break; case SHOW_WINDWARD_DISTANCE_TO_GO: - vAxisOptions.setTitle("distance in m"); + vAxisOptions.setTitle(stringConstants.distance() + " " + stringConstants.in() + " " + stringConstants.metersUnit()); break; case SHOW_DISTANCE_TRAVELED: - vAxisOptions.setTitle("distance in m"); + vAxisOptions.setTitle(stringConstants.distance() + " " + stringConstants.in() + " " + stringConstants.metersUnit()); break; default: - vAxisOptions.setTitle("speed in kts"); + vAxisOptions.setTitle(stringConstants.speed() + " " + stringConstants.in() + " " + stringConstants.currentSpeedOverGroundInKnotsUnit()); break; } opt.setVAxisOptions(vAxisOptions); @@ -200,7 +202,7 @@ public class CompareCompetitorsPanel extends FormPanel { @Override public void onFailure(Throwable caught) { - Window.alert("Failed to laod race data."); + Window.alert(stringConstants.failedToLoadRaceData()); } @Override @@ -217,7 +219,7 @@ public class CompareCompetitorsPanel extends FormPanel { private AbstractDataTable prepareTableData() { DataTable data = DataTable.create(); - data.addColumn(ColumnType.STRING, "Time"); + data.addColumn(ColumnType.STRING, stringConstants.time()); for (int i = 0; i < competitors.size(); i++) { data.addColumn(ColumnType.NUMBER, competitors.get(i).name); } @@ -252,7 +254,6 @@ public class CompareCompetitorsPanel extends FormPanel { switch (dataToShow) { case SHOW_GAP_TO_LEADER: value = chartData[i][j].getLegEntry().gapToLeaderInSeconds; - //value = (value != null && value < 1000)?value:null; break; case SHOW_VELOCITY_MADE_GOOD: value = chartData[i][j].getLegEntry().velocityMadeGoodInKnots; diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/CreateSwissTimingRacePanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/CreateSwissTimingRacePanel.java index f84760498e3..dc3e6d80e95 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/CreateSwissTimingRacePanel.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/CreateSwissTimingRacePanel.java @@ -37,7 +37,7 @@ public class CreateSwissTimingRacePanel extends FormPanel { private final SailingServiceAsync service; private ErrorReporter errorReporter; - public CreateSwissTimingRacePanel(final SailingServiceAsync sailingService, ErrorReporter errorReporter, StringConstants stringConstants){ + public CreateSwissTimingRacePanel(final SailingServiceAsync sailingService, ErrorReporter errorReporter, final StringConstants stringConstants){ this.service = sailingService; this.errorReporter = errorReporter; competitors = new ArrayList(); @@ -55,23 +55,23 @@ public class CreateSwissTimingRacePanel extends FormPanel { mainGrid.setWidget(0, 0, raceDataPanel); Grid grid = new Grid(2,2); raceDataPanel.add(grid); - Label lblRaceName = new Label("Race name:"); + Label lblRaceName = new Label(stringConstants.race() + " " + stringConstants.name() + ":"); grid.setWidget(0, 0, lblRaceName); txtbRaceName = new TextBox(); grid.setWidget(0, 1, txtbRaceName); - Label lblRaceDesc = new Label("Race description:"); + Label lblRaceDesc = new Label(stringConstants.race() + " " + stringConstants.description()+":"); grid.setWidget(1, 0, lblRaceDesc); txtbRaceDesc = new TextBox(); grid.setWidget(1, 1, txtbRaceDesc); //Competitor panel - CaptionPanel competitorPanel = new CaptionPanel("Competitors"); + CaptionPanel competitorPanel = new CaptionPanel(stringConstants.competitor()); competitorPanel.setSize("90%", "90%"); mainGrid.setWidget(1, 0, competitorPanel); grid = new Grid(3,3); competitorPanel.add(grid); - Label lblCompetitorListTitle = new Label("Competitors:"); + Label lblCompetitorListTitle = new Label(stringConstants.competitor()); grid.setWidget(0, 0, lblCompetitorListTitle); listbCompetitorList = new ListBox(false); listbCompetitorList.setVisibleItemCount(10); @@ -89,7 +89,7 @@ public class CreateSwissTimingRacePanel extends FormPanel { grid.setWidget(1, 1, compData); Grid subGrid = new Grid(3,2); compData.add(subGrid); - Label lblName = new Label("Name:"); + Label lblName = new Label(stringConstants.name() + ":"); subGrid.setWidget(0, 0, lblName); txtbCompName = new TextBox(); txtbCompName.addValueChangeHandler(new ValueChangeHandler() { @@ -100,7 +100,7 @@ public class CreateSwissTimingRacePanel extends FormPanel { } }); subGrid.setWidget(0, 1, txtbCompName); - Label lblSailNr = new Label("Sail number:"); + Label lblSailNr = new Label(stringConstants.sailNumber()+":"); subGrid.setWidget(1, 0, lblSailNr); txtbCompSailNr = new TextBox(); txtbCompSailNr.addValueChangeHandler(new ValueChangeHandler() { @@ -111,14 +111,14 @@ public class CreateSwissTimingRacePanel extends FormPanel { } }); subGrid.setWidget(1, 1, txtbCompSailNr); - Label lblCountr = new Label("Country:"); + Label lblCountr = new Label(stringConstants.country()+":"); subGrid.setWidget(2, 0, lblCountr); suggestionsCompCountr = new MultiWordSuggestOracle(); service.getCountryCodes(new AsyncCallback() { @Override public void onFailure(Throwable caught) { - CreateSwissTimingRacePanel.this.errorReporter.reportError("Unable to find the IOC 3-letter-codes."); + CreateSwissTimingRacePanel.this.errorReporter.reportError(stringConstants.no3LetterCodes()); } @Override @@ -141,7 +141,7 @@ public class CreateSwissTimingRacePanel extends FormPanel { HorizontalPanel horizontalPanel = new HorizontalPanel(); grid.setWidget(2, 0, horizontalPanel); - Button bttAddCompetitor = new Button("Add"); + Button bttAddCompetitor = new Button(stringConstants.add()); bttAddCompetitor.setWidth("100px"); bttAddCompetitor.addClickHandler(new ClickHandler() { @@ -152,7 +152,7 @@ public class CreateSwissTimingRacePanel extends FormPanel { }); horizontalPanel.add(bttAddCompetitor); - Button bttDeleteCompetitor = new Button("Delete"); + Button bttDeleteCompetitor = new Button(stringConstants.delete()); bttDeleteCompetitor.setWidth("100px"); bttDeleteCompetitor.addClickHandler(new ClickHandler() { @@ -163,7 +163,7 @@ public class CreateSwissTimingRacePanel extends FormPanel { }); horizontalPanel.add(bttDeleteCompetitor); - Button bttAddRace = new Button("Add race"); + Button bttAddRace = new Button(stringConstants.add() + " " + stringConstants.race()); bttAddRace.addClickHandler(new ClickHandler() { @Override diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/LeaderboardPanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/LeaderboardPanel.java index 532bc0e1329..0e3c798e74f 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/LeaderboardPanel.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/LeaderboardPanel.java @@ -1305,7 +1305,7 @@ public class LeaderboardPanel extends FormPanel implements TimeListener, PlaySta for (LeaderboardRowDAO leaderboardRowDAO : leaderboardSelectionModel.getSelectedSet()) { competitors.add(leaderboardRowDAO.competitor); } - new CompareCompetitorsChartDialog(sailingService, competitors, selectedRaceColumns.get(0), leaderboardName); + new CompareCompetitorsChartDialog(sailingService, competitors, selectedRaceColumns.get(0), leaderboardName, stringConstants); //compareCompetitorsBox.show(); } } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringConstants.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringConstants.java index a1f64f18957..603ebca9aaf 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringConstants.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringConstants.java @@ -125,4 +125,25 @@ public interface StringConstants extends Constants { String tacks(); String jibes(); String penaltyCircles(); + String configuration(); + String chooseChart(); + String distanceTraveled(); + String velocityMadeGoodLong(); + String speedOverGroundLong(); + String gapToLeaderLong(); + String pointsToLoad(); + String speed(); + String distance(); + String in(); + String secondsUnit(); + String metersUnit(); + String failedToLoadRaceData(); + String close(); + String compareCompetitors(); + String description(); + String sailNumber(); + String country(); + String no3LetterCodes(); + String add(); + String delete(); } \ No newline at end of file diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringConstants.properties b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringConstants.properties index 0e742c1d952..236d73e00d4 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringConstants.properties +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringConstants.properties @@ -119,4 +119,25 @@ stressTest=Stress Test numberOfManeuvers=Maneuvers tacks=Tacks jibes=Jibes -penaltyCircles=Penalty Circles \ No newline at end of file +penaltyCircles=Penalty Circles +configuration=Configuration +chooseChart=Choose chart +distanceTraveled=Distance Traveled +velocityMadeGoodLong=Velocity Made Good +speedOverGroundLong=Speed Over Ground +gapToLeaderLong=Gap To Leader +pointsToLoad=Points to load +speed=Speed +distance=Distance +in=in +secondsUnit=[s] +metersUnit=[m] +failedToLoadRaceData=Failed to laod race data. +close=Close +compareCompetitors=Compare competitors +description=description +sailNumber=Sail number +country=Country +no3LetterCodes=Unable to find the IOC 3-letter-codes. +add=Add +delete=Delete \ No newline at end of file diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringConstants_de.properties b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringConstants_de.properties index 4881e17e85a..a6b4c1520ea 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringConstants_de.properties +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringConstants_de.properties @@ -15,7 +15,7 @@ map=Map race=Race races=Races tracked=tracked -time=Time +time=Zeit acceleration=Acceleration accelerationHelp=Use "1" for regular play-back speed, "2" for double-speed playback and so on delay=Delay (s) @@ -119,4 +119,25 @@ stressTest=Stresstest numberOfManeuvers=Manöver tacks=Wenden jibes=Halsen -penaltyCircles=Strafkringel \ No newline at end of file +penaltyCircles=Strafkringel +configuration=Konfiguration +chooseChart=Diagramm wählen +distanceTraveled=Zurückgelegte Strecke +velocityMadeGoodLong=Velocity Made Good +speedOverGroundLong=Speed Over Ground +gapToLeaderLong=Abstand zum führenden Boot +pointsToLoad=Points to load +speed=Geschwindigkeit +distance=Strecke +in=in +secondsUnit=[s] +metersUnit=[m] +failedToLoadRaceData=Failed to laod race data. +close=Close +compareCompetitors=Kompetitoren vergleichen +description=Beschreibung +sailNumber=Segelnummer +country=Land +no3LetterCodes=IOC 3-Buchstaben-Codes können nicht gefunden werden. +add=Hinzufügen +delete=Löschen \ No newline at end of file From 792aa850a6f4ead79698f58d5051ebfa78ad5d92 Mon Sep 17 00:00:00 2001 From: Benjamin Ebling Date: Thu, 1 Dec 2011 12:48:55 +0100 Subject: [PATCH 08/21] Added RaceInLeaderboardDAO. --- .../client/CompareCompetitorsChartDialog.java | 3 +- .../ui/client/CompareCompetitorsPanel.java | 31 ++-- .../gwt/ui/client/LeaderboardConfigPanel.java | 2 +- .../gwt/ui/client/LeaderboardPanel.java | 44 +++--- .../sailing/gwt/ui/shared/LeaderboardDAO.java | 134 ++++++++++-------- .../war/images/chart_small.png | Bin 0 -> 296 bytes 6 files changed, 120 insertions(+), 94 deletions(-) create mode 100644 java/com.sap.sailing.gwt.ui/war/images/chart_small.png diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/CompareCompetitorsChartDialog.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/CompareCompetitorsChartDialog.java index 115bb90611f..76eaf19b1ce 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/CompareCompetitorsChartDialog.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/CompareCompetitorsChartDialog.java @@ -4,6 +4,7 @@ import java.util.List; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; +import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.Button; import com.google.gwt.user.client.ui.DialogBox; import com.google.gwt.user.client.ui.HasHorizontalAlignment; @@ -19,7 +20,7 @@ public class CompareCompetitorsChartDialog extends DialogBox { VerticalPanel mainPanel = new VerticalPanel(); mainPanel.setSpacing(5); mainPanel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_LEFT); - CompareCompetitorsPanel ccp = new CompareCompetitorsPanel(sailingService, competitors, raceName, leaderboardName, stringConstants); + CompareCompetitorsPanel ccp = new CompareCompetitorsPanel(sailingService, competitors, raceName, leaderboardName, stringConstants, (int) (Window.getClientWidth()*0.8), (int) (Window.getClientHeight()*0.8)); ccp.addDataLoadedHandler(new DataLoadedHandler() { @Override diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/CompareCompetitorsPanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/CompareCompetitorsPanel.java index eaad2c937b0..673a2e2dba1 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/CompareCompetitorsPanel.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/CompareCompetitorsPanel.java @@ -44,6 +44,10 @@ public class CompareCompetitorsPanel extends FormPanel { private String raceName; private int stepsToLoad = 100; private final StringConstants stringConstants; + private boolean chartLoaded = false; + private boolean dataLoaded = false; + private int chartWidth; + private int chartHeight; public static final int DECK_PANEL_INDEX_LOADING = 0; public static final int DECK_PANEL_INDEX_CHART = 1; @@ -57,20 +61,22 @@ public class CompareCompetitorsPanel extends FormPanel { private AbsolutePanel loadingPanel; public CompareCompetitorsPanel(SailingServiceAsync sailingService, final List competitors, - String raceName, final String leaderboardName, StringConstants stringConstants) { + String raceName, final String leaderboardName, StringConstants stringConstants, int chartWidth, int chartHeight) { this.sailingService = sailingService; this.competitors = competitors; this.leaderboardName = leaderboardName; this.raceName = raceName; this.stringConstants = stringConstants; + this.chartWidth = chartWidth; + this.chartHeight = chartHeight; mainPanel = new HorizontalPanel(); chartPanel = new VerticalPanel(); loadingPanel = new AbsolutePanel (); - loadingPanel.setSize("800px", "600px"); + loadingPanel.setSize(chartWidth + "px", chartHeight + "px"); Anchor a = new Anchor(new SafeHtmlBuilder().appendHtmlConstant( "").toSafeHtml()); - loadingPanel.add(a,800/2-32/2,600/2-32-2); + loadingPanel.add(a,chartWidth/2-32/2,chartHeight/2-32-2); chartPanel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT); chartPanel.setSpacing(5); deckPanel = new DeckPanel(); @@ -123,7 +129,6 @@ public class CompareCompetitorsPanel extends FormPanel { @Override public void onClick(ClickEvent event) { stepsToLoad = Integer.parseInt(txtbSteps.getText()); - deckPanel.showWidget(DECK_PANEL_INDEX_LOADING); loadData(); } }); @@ -133,16 +138,17 @@ public class CompareCompetitorsPanel extends FormPanel { @Override public void run() { - chart = new LineChart(prepareTableData(), getOptions()); deckPanel.add(chart); + if (chartLoaded && dataLoaded){ + deckPanel.showWidget(DECK_PANEL_INDEX_CHART); + } + chartLoaded = true; fireEvent(new DataLoadedEvent()); - loadData(); + } }; VisualizationUtils.loadVisualizationApi(onLoadCallback, LineChart.PACKAGE); - - deckPanel.showWidget(DECK_PANEL_INDEX_LOADING); loadData(); chartPanel.add(deckPanel); mainPanel.add(chartPanel); @@ -152,8 +158,8 @@ public class CompareCompetitorsPanel extends FormPanel { private Options getOptions() { Options opt = Options.create(); - opt.setWidth(800); - opt.setHeight(600); + opt.setWidth(chartWidth); + opt.setHeight(chartHeight); switch (dataToShow) { case SHOW_VELOCITY_MADE_GOOD: opt.setTitle(stringConstants.velocityMadeGoodLong()); @@ -197,6 +203,8 @@ public class CompareCompetitorsPanel extends FormPanel { } private void loadData(){ + deckPanel.showWidget(DECK_PANEL_INDEX_LOADING); + dataLoaded = false; this.sailingService.getCompetitorRaceData(leaderboardName, this.raceName, competitors, stepsToLoad, new AsyncCallback() { @@ -209,7 +217,8 @@ public class CompareCompetitorsPanel extends FormPanel { public void onSuccess(CompetitorWithRaceDAO[][] result) { fireEvent(new DataLoadedEvent()); chartData = result; - if (chart != null) { + dataLoaded = true; + if (chartLoaded && dataLoaded){ deckPanel.showWidget(DECK_PANEL_INDEX_CHART); chart.draw(prepareTableData(), getOptions()); } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/LeaderboardConfigPanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/LeaderboardConfigPanel.java index 1083d68381b..81658f93562 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/LeaderboardConfigPanel.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/LeaderboardConfigPanel.java @@ -650,7 +650,7 @@ public class LeaderboardConfigPanel extends FormPanel implements EventDisplayer, discardThresholdLabelsForSelectedLeaderboard[i++].setText(""); } columnNamesInSelectedLeaderboardListBox.clear(); - for (String columnName : selectedLeaderboard.getRaceList()) { + for (String columnName : selectedLeaderboard.getRaceColumnNameList()) { columnNamesInSelectedLeaderboardListBox.addItem(columnName); } leaderboardRaceColumnSelectionChanged(); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/LeaderboardPanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/LeaderboardPanel.java index 0e3c798e74f..f66eabb2306 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/LeaderboardPanel.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/LeaderboardPanel.java @@ -26,7 +26,6 @@ import com.google.gwt.user.cellview.client.Header; import com.google.gwt.user.cellview.client.TextHeader; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.Anchor; -import com.google.gwt.user.client.ui.Button; import com.google.gwt.user.client.ui.DockPanel; import com.google.gwt.user.client.ui.FormPanel; import com.google.gwt.user.client.ui.HasHorizontalAlignment; @@ -125,7 +124,7 @@ public class LeaderboardPanel extends FormPanel implements TimeListener, PlaySta public void onClick(ClickEvent event) { new LeaderboardSettingsPanel(Collections.unmodifiableList(selectedLegDetails), Collections.unmodifiableList(selectedRaceDetails), /* All races to select */ - leaderboard.getRaceList(), selectedRaceColumns, timer.getDelayBetweenAutoAdvancesInMilliseconds(), + leaderboard.getRaceColumnNameList(), selectedRaceColumns, timer.getDelayBetweenAutoAdvancesInMilliseconds(), stringConstants.leaderboardSettings(), stringConstants.selectLegDetails(), stringConstants.ok(), stringConstants.cancel(), new Validator() { @Override @@ -778,25 +777,27 @@ public class LeaderboardPanel extends FormPanel implements TimeListener, PlaySta playPause.addClickHandler(playPauseHandler); playStateChanged(timer.isPlaying()); refreshPanel.add(playPause); + Anchor chartsAnchor = new Anchor(new SafeHtmlBuilder().appendHtmlConstant( + "").toSafeHtml()); + chartsAnchor.setTitle("Show charts"); + chartsAnchor.addClickHandler(new ClickHandler() { + + @Override + public void onClick(ClickEvent event) { + compareCompetitors(); + } + }); Anchor settingsAnchor = new Anchor(new SafeHtmlBuilder().appendHtmlConstant( "").toSafeHtml()); settingsAnchor.setTitle(stringConstants.settings()); settingsAnchor.addClickHandler(new SettingsClickHandler(stringConstants)); + refreshAndSettingsPanel.add(chartsAnchor); refreshAndSettingsPanel.add(refreshPanel); refreshAndSettingsPanel.add(settingsAnchor); dockPanel02.add(refreshAndSettingsPanel, DockPanel.EAST); vp.add(dockPanel); vp.add(dockPanel02); vp.add(getLeaderboardTable()); - Button chartButton = new Button("Compare competitors"); - chartButton.addClickHandler(new ClickHandler() { - - @Override - public void onClick(ClickEvent event) { - compareCompetitors(); - } - }); - vp.add(chartButton); setWidget(vp); } @@ -993,8 +994,8 @@ public class LeaderboardPanel extends FormPanel implements TimeListener, PlaySta private List getRacesAddedNew(LeaderboardDAO oldLeaderboard, LeaderboardDAO newLeaderboard){ List result = new ArrayList(); - for (String s : newLeaderboard.getRaceList()) { - if (oldLeaderboard == null || !oldLeaderboard.getRaceList().contains(s)) { + for (String s : newLeaderboard.getRaceColumnNameList()) { + if (oldLeaderboard == null || !oldLeaderboard.getRaceColumnNameList().contains(s)) { result.add(s); } } @@ -1128,7 +1129,7 @@ public class LeaderboardPanel extends FormPanel implements TimeListener, PlaySta private void createMissingAndAdjustExistingRaceColumns(LeaderboardDAO leaderboard) { // Correct order of races in selectedRaceColum List correctedOrderSelectedRaces = new ArrayList(); - for (String string : leaderboard.getRaceList()) { + for (String string : leaderboard.getRaceColumnNameList()) { if (selectedRaceColumns.contains(string)) { correctedOrderSelectedRaces.add(string); } @@ -1302,10 +1303,17 @@ public class LeaderboardPanel extends FormPanel implements TimeListener, PlaySta private void compareCompetitors(){ List competitors = new ArrayList(); - for (LeaderboardRowDAO leaderboardRowDAO : leaderboardSelectionModel.getSelectedSet()) { - competitors.add(leaderboardRowDAO.competitor); + String raceColumnName = getLeaderboard().getRaceList().get(0).getRaceColumnName(); + if (leaderboardSelectionModel.getSelectedSet().size() > 0){ + for (LeaderboardRowDAO leaderboardRowDAO : leaderboardSelectionModel.getSelectedSet()) { + competitors.add(leaderboardRowDAO.competitor); + } } - new CompareCompetitorsChartDialog(sailingService, competitors, selectedRaceColumns.get(0), leaderboardName, stringConstants); - //compareCompetitorsBox.show(); + else { + for (LeaderboardRowDAO leaderboardRowDAO : leaderboardTable.getVisibleItems()){ + competitors.add(leaderboardRowDAO.competitor); + } + } + new CompareCompetitorsChartDialog(sailingService, competitors, raceColumnName, leaderboardName, stringConstants); } } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/LeaderboardDAO.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/LeaderboardDAO.java index 36b1cf3fb32..cffeb5f7111 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/LeaderboardDAO.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/LeaderboardDAO.java @@ -3,7 +3,6 @@ package com.sap.sailing.gwt.ui.shared; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; -import java.util.HashMap; import java.util.List; import java.util.Map; @@ -20,9 +19,7 @@ import com.google.gwt.user.client.rpc.IsSerializable; public class LeaderboardDAO implements IsSerializable { public String name; public List competitors; - private List raceNames; - private Map racesMedalRace; - private Map racesTracked; + private List races; public Map displayNames; public Map rows; public boolean hasCarriedPoints; @@ -35,9 +32,7 @@ public class LeaderboardDAO implements IsSerializable { public LeaderboardDAO() { totalRankingComparator = new TotalRankingComparator(); competitorsOrderedAccordingToTotalRank = false; - raceNames = new ArrayList(); - racesMedalRace = new HashMap(); - racesTracked = new HashMap(); + races = new ArrayList(); } public String getDisplayName(CompetitorDAO competitor) { @@ -76,8 +71,8 @@ public class LeaderboardDAO implements IsSerializable { */ public boolean scoredInMedalRace(CompetitorDAO competitor) { LeaderboardRowDAO row = rows.get(competitor); - for (String race : raceNames) { - if (raceIsMedalRace(race) && row.fieldsByRaceName.get(race).totalPoints > 0) { + for (RaceInLeaderboardDAO race : races) { + if (race.isMedalRace() && row.fieldsByRaceName.get(race.getRaceColumnName()).totalPoints > 0) { return true; } } @@ -189,9 +184,9 @@ public class LeaderboardDAO implements IsSerializable { private int getMedalRaceScore(CompetitorDAO competitor) { int result = 0; LeaderboardRowDAO row = rows.get(competitor); - for (String race : raceNames) { - if (raceIsMedalRace(race) && row.fieldsByRaceName.containsKey(race)) { - result += row.fieldsByRaceName.get(race).netPoints; + for (RaceInLeaderboardDAO race : races) { + if (race.isMedalRace() && row.fieldsByRaceName.containsKey(race.getRaceColumnName())) { + result += row.fieldsByRaceName.get(race.getRaceColumnName()).netPoints; } } return result; @@ -215,12 +210,12 @@ public class LeaderboardDAO implements IsSerializable { */ private String getNameOfLastRaceSoFar(CompetitorDAO c1, CompetitorDAO c2) { String nameOfLastRaceSoFar = null; - for (String race : raceNames) { + for (RaceInLeaderboardDAO race : races) { for (LeaderboardRowDAO row : rows.values()) { if (row.competitor.equals(c1) || row.competitor.equals(c2)) { - LeaderboardEntryDAO leaderboardEntryDAO = row.fieldsByRaceName.get(race); + LeaderboardEntryDAO leaderboardEntryDAO = row.fieldsByRaceName.get(race.getRaceColumnName()); if (leaderboardEntryDAO != null && leaderboardEntryDAO.netPoints != 0) { - nameOfLastRaceSoFar = race; + nameOfLastRaceSoFar = race.getRaceColumnName(); break; } } @@ -233,8 +228,8 @@ public class LeaderboardDAO implements IsSerializable { int result = 0; LeaderboardRowDAO row = rows.get(competitor); if (row != null) { - for (String race : raceNames) { - LeaderboardEntryDAO field = row.fieldsByRaceName.get(race); + for (RaceInLeaderboardDAO race : races) { + LeaderboardEntryDAO field = row.fieldsByRaceName.get(race.getRaceColumnName()); if (field != null && field.netPoints == 1) { result++; } @@ -256,81 +251,94 @@ public class LeaderboardDAO implements IsSerializable { return competitors.indexOf(competitor)+1; }; - public boolean raceIsTracked(String raceName){ - return racesTracked.get(raceName); + public boolean raceIsTracked(String raceColumnName){ + for (RaceInLeaderboardDAO race : races){ + if (race.getRaceColumnName().equals(raceColumnName)){ + return race.isTrackedRace(); + } + } + return false; } - public boolean raceIsMedalRace(String raceName){ - return racesMedalRace.get(raceName); + public boolean raceIsMedalRace(String raceColumnName){ + return getRaceInLeaderboardByName(raceColumnName).isMedalRace(); } - public void addRace(String name, boolean isMedalRace, boolean isTracked){ - raceNames.add(name); - racesMedalRace.put(name, isMedalRace); - racesTracked.put(name, isTracked); + public void addRace(String raceColumnName, boolean medalRace, boolean trackedRace){ + RaceInLeaderboardDAO raceInLeaderboardDAO = new RaceInLeaderboardDAO(); + raceInLeaderboardDAO.setRaceColumnName(raceColumnName); + raceInLeaderboardDAO.setMedalRace(medalRace); + raceInLeaderboardDAO.setTrackedRace(trackedRace); + races.add(raceInLeaderboardDAO); } - public void addRaceAt(String name, boolean isMedalRace, boolean isTracked, int index){ - raceNames.add(index, name); - racesMedalRace.put(name, isMedalRace); - racesTracked.put(name, isTracked); + public void addRaceAt(String raceColumnName, boolean medalRace, boolean trackedRace, int index){ + RaceInLeaderboardDAO raceInLeaderboardDAO = new RaceInLeaderboardDAO(); + raceInLeaderboardDAO.setRaceColumnName(raceColumnName); + raceInLeaderboardDAO.setMedalRace(medalRace); + raceInLeaderboardDAO.setTrackedRace(trackedRace); + races.add(index, raceInLeaderboardDAO); } - public void removeRace(String name){ - racesMedalRace.remove(name); - racesTracked.remove(name); - raceNames.remove(getRaceIdByName(name)); + public void removeRace(String raceColumnName){ + races.remove(getRaceInLeaderboardByName(raceColumnName)); } public void renameRace(String oldName, String newName){ - int index = getRaceIdByName(oldName); - racesMedalRace.put(newName, racesMedalRace.get(oldName)); - racesTracked.put(newName, racesTracked.get(oldName)); - racesMedalRace.remove(oldName); - racesTracked.remove(oldName); - raceNames.set(index, newName); + RaceInLeaderboardDAO race = getRaceInLeaderboardByName(oldName); + race.setRaceColumnName(newName); } - public List getRaceList(){ - return raceNames; - } - - public boolean raceListContains(String raceName) { - return getRaceIdByName(raceName) != -1; - } - - public int getRaceIdByName(String raceName) { - for (int i = 0; i < raceNames.size(); i++) { - if (raceNames.get(i).equals(raceName)) { - return i; + private RaceInLeaderboardDAO getRaceInLeaderboardByName(String raceColumnName) { + for (RaceInLeaderboardDAO race : races){ + if (race.getRaceColumnName().equals(raceColumnName)){ + return race; } } - return -1; + return null; } - public void moveRaceUp(String raceName) { - int index = getRaceIdByName(raceName); + public List getRaceColumnNameList(){ + List raceColumnNames = new ArrayList(); + for (RaceInLeaderboardDAO raceInLeaderboardDAO : races){ + raceColumnNames.add(raceInLeaderboardDAO.getRaceColumnName()); + } + return raceColumnNames; + } + + public List getRaceList(){ + return races; + } + + public boolean raceListContains(String raceColumnName) { + return getRaceInLeaderboardByName(raceColumnName) != null; + } + + public void moveRaceUp(String raceColumnName) { + RaceInLeaderboardDAO race = getRaceInLeaderboardByName(raceColumnName); + int index = races.indexOf(race); index--; if (index >= 0) { - raceNames.remove(index + 1); - raceNames.add(index, raceName); + races.remove(index + 1); + races.add(index, race); } } - public void moveRaceDown(String raceName) { - int index = getRaceIdByName(raceName); + public void moveRaceDown(String raceColumnName) { + RaceInLeaderboardDAO race = getRaceInLeaderboardByName(raceColumnName); + int index = races.indexOf(race); if (index != -1) { index++; - if (index < raceNames.size()) { - raceNames.remove(index - 1); - raceNames.add(index, raceName); + if (index < races.size()) { + races.remove(index - 1); + races.add(index, race); } } } - public void setIsMedalRace(String raceName, boolean isMedalRace){ - racesMedalRace.put(raceName, isMedalRace); + public void setIsMedalRace(String raceColumnName, boolean medalRace){ + getRaceInLeaderboardByName(raceColumnName).setMedalRace(medalRace); } } diff --git a/java/com.sap.sailing.gwt.ui/war/images/chart_small.png b/java/com.sap.sailing.gwt.ui/war/images/chart_small.png new file mode 100644 index 0000000000000000000000000000000000000000..ca61a429bee1f06b5c86aad8af55dd1361205c75 GIT binary patch literal 296 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1quc!M&a?jv*HQ$$$R;w`bOD;9N0d;>3v+x*SW} z`Q?wTKYQ#L+Y*LHDhiw|4z?_k3hEPCBpThA{x;mVjhfi$;M^*AU+t7S6J29RG_&+K5Er|X2A(fsM#||A0K7~34 zDdvf*GoP{;U5o8(@L+$rroo^=O5q^aRfa2UhWvaAUJqY2h%L%ckjQp8Ytm;C9UZ+Q m+tX|90s*BUW&;&PEykFGFA|T1UE=|Igu&C*&t;ucLK6V;Kw`lF literal 0 HcmV?d00001 From 0584aa61818334b96f46ddb20e438e5e37f41d8b Mon Sep 17 00:00:00 2001 From: Benjamin Ebling Date: Thu, 1 Dec 2011 14:23:58 +0100 Subject: [PATCH 09/21] Added funtionalaty for more then 1 race in CompareCompetitorsPanel. --- .../gwt/ui/test/TestColumnSwapping.java | 4 +- .../client/CompareCompetitorsChartDialog.java | 5 +- .../ui/client/CompareCompetitorsPanel.java | 60 +++++++++++++------ .../gwt/ui/client/LeaderboardPanel.java | 10 +++- .../sailing/gwt/ui/client/SailingService.java | 2 +- .../gwt/ui/client/SailingServiceAsync.java | 3 +- .../gwt/ui/server/SailingServiceImpl.java | 21 ++----- .../gwt/ui/shared/EventNameAndRaceName.java | 7 +++ .../LeaderboardNameAndRaceColumnName.java | 7 +++ 9 files changed, 77 insertions(+), 42 deletions(-) diff --git a/java/com.sap.sailing.gwt.ui.test/src/com/sap/sailing/gwt/ui/test/TestColumnSwapping.java b/java/com.sap.sailing.gwt.ui.test/src/com/sap/sailing/gwt/ui/test/TestColumnSwapping.java index 644250f9d31..cf5ee2cd3d4 100755 --- a/java/com.sap.sailing.gwt.ui.test/src/com/sap/sailing/gwt/ui/test/TestColumnSwapping.java +++ b/java/com.sap.sailing.gwt.ui.test/src/com/sap/sailing/gwt/ui/test/TestColumnSwapping.java @@ -119,8 +119,8 @@ public class TestColumnSwapping { } // check if leaderboardDAO an dleaderboardOriginalDAO same - List leaderboardList = leaderboardDAO.getRaceList(); - List leaderboardOriginalList = leaderboardOriginalDAO.getRaceList(); + List leaderboardList = leaderboardDAO.getRaceColumnNameList(); + List leaderboardOriginalList = leaderboardOriginalDAO.getRaceColumnNameList(); // ??????? assert races in list assertArrayEquals(leaderboardList.toArray(), leaderboardOriginalList.toArray()); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/CompareCompetitorsChartDialog.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/CompareCompetitorsChartDialog.java index 76eaf19b1ce..997b862e4ce 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/CompareCompetitorsChartDialog.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/CompareCompetitorsChartDialog.java @@ -12,15 +12,16 @@ import com.google.gwt.user.client.ui.VerticalPanel; import com.sap.sailing.gwt.ui.client.CompareCompetitorsPanel.DataLoadedEvent; import com.sap.sailing.gwt.ui.client.CompareCompetitorsPanel.DataLoadedHandler; import com.sap.sailing.gwt.ui.shared.CompetitorDAO; +import com.sap.sailing.gwt.ui.shared.RaceIdentifier; public class CompareCompetitorsChartDialog extends DialogBox { - public CompareCompetitorsChartDialog(SailingServiceAsync sailingService, List competitors, String raceName, String leaderboardName, StringConstants stringConstants){ + public CompareCompetitorsChartDialog(SailingServiceAsync sailingService, List competitors, RaceIdentifier[] races, StringConstants stringConstants){ super(true); VerticalPanel mainPanel = new VerticalPanel(); mainPanel.setSpacing(5); mainPanel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_LEFT); - CompareCompetitorsPanel ccp = new CompareCompetitorsPanel(sailingService, competitors, raceName, leaderboardName, stringConstants, (int) (Window.getClientWidth()*0.8), (int) (Window.getClientHeight()*0.8)); + CompareCompetitorsPanel ccp = new CompareCompetitorsPanel(sailingService, competitors, races, stringConstants, (int) (Window.getClientWidth()*0.8), (int) (Window.getClientHeight()*0.8)); ccp.addDataLoadedHandler(new DataLoadedHandler() { @Override diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/CompareCompetitorsPanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/CompareCompetitorsPanel.java index 673a2e2dba1..91365136d15 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/CompareCompetitorsPanel.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/CompareCompetitorsPanel.java @@ -20,6 +20,7 @@ import com.google.gwt.user.client.ui.HasHorizontalAlignment; import com.google.gwt.user.client.ui.HorizontalPanel; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.ListBox; +import com.google.gwt.user.client.ui.RadioButton; import com.google.gwt.user.client.ui.TextBox; import com.google.gwt.user.client.ui.VerticalPanel; import com.google.gwt.visualization.client.AbstractDataTable; @@ -31,6 +32,7 @@ import com.google.gwt.visualization.client.visualizations.corechart.LineChart; import com.google.gwt.visualization.client.visualizations.corechart.Options; import com.sap.sailing.gwt.ui.shared.CompetitorDAO; import com.sap.sailing.gwt.ui.shared.CompetitorWithRaceDAO; +import com.sap.sailing.gwt.ui.shared.RaceIdentifier; public class CompareCompetitorsPanel extends FormPanel { private final List competitors; @@ -40,8 +42,8 @@ public class CompareCompetitorsPanel extends FormPanel { private HorizontalPanel mainPanel; private VerticalPanel chartPanel; private final DeckPanel deckPanel; - private String leaderboardName; - private String raceName; + private final RaceIdentifier[] races; + private int selectedRace = 0; private int stepsToLoad = 100; private final StringConstants stringConstants; private boolean chartLoaded = false; @@ -61,16 +63,37 @@ public class CompareCompetitorsPanel extends FormPanel { private AbsolutePanel loadingPanel; public CompareCompetitorsPanel(SailingServiceAsync sailingService, final List competitors, - String raceName, final String leaderboardName, StringConstants stringConstants, int chartWidth, int chartHeight) { + RaceIdentifier[] races, StringConstants stringConstants, int chartWidth, int chartHeight) { this.sailingService = sailingService; this.competitors = competitors; - this.leaderboardName = leaderboardName; - this.raceName = raceName; + this.races = races; this.stringConstants = stringConstants; this.chartWidth = chartWidth; this.chartHeight = chartHeight; mainPanel = new HorizontalPanel(); + mainPanel.setSpacing(5); chartPanel = new VerticalPanel(); + HorizontalPanel raceChooserPanel = new HorizontalPanel(); + raceChooserPanel.setSpacing(5); + for (int i = 0; i < races.length; i++){ + RadioButton r = new RadioButton("chooseRace"); + r.setText(races[i].toString()); + raceChooserPanel.add(r); + if (i == 0){ + r.setValue(true); + } + final int index = i; + r.addClickHandler(new ClickHandler() { + + @Override + public void onClick(ClickEvent event) { + selectedRace = index; + loadData(); + } + }); + } + chartPanel.add(raceChooserPanel); + loadingPanel = new AbsolutePanel (); loadingPanel.setSize(chartWidth + "px", chartHeight + "px"); @@ -87,18 +110,8 @@ public class CompareCompetitorsPanel extends FormPanel { configCaption.setVisible(false); VerticalPanel configPanel = new VerticalPanel(); configCaption.setContentWidget(configPanel); - configPanel.setSpacing(7); - Anchor showConfigAnchor = new Anchor(new SafeHtmlBuilder().appendHtmlConstant( - "").toSafeHtml()); - showConfigAnchor.setTitle(stringConstants.configuration()); - showConfigAnchor.addClickHandler(new ClickHandler() { - - @Override - public void onClick(ClickEvent event) { - configCaption.setVisible(!configCaption.isVisible()); - } - }); - chartPanel.add(showConfigAnchor); + configPanel.setSpacing(5); + Label lblChart = new Label(stringConstants.chooseChart()); configPanel.add(lblChart); final ListBox dataSelection = new ListBox(); @@ -152,6 +165,17 @@ public class CompareCompetitorsPanel extends FormPanel { loadData(); chartPanel.add(deckPanel); mainPanel.add(chartPanel); + Anchor showConfigAnchor = new Anchor(new SafeHtmlBuilder().appendHtmlConstant( + "").toSafeHtml()); + showConfigAnchor.setTitle(stringConstants.configuration()); + showConfigAnchor.addClickHandler(new ClickHandler() { + + @Override + public void onClick(ClickEvent event) { + configCaption.setVisible(!configCaption.isVisible()); + } + }); + mainPanel.add(showConfigAnchor); mainPanel.add(configCaption); this.add(mainPanel); } @@ -205,7 +229,7 @@ public class CompareCompetitorsPanel extends FormPanel { private void loadData(){ deckPanel.showWidget(DECK_PANEL_INDEX_LOADING); dataLoaded = false; - this.sailingService.getCompetitorRaceData(leaderboardName, this.raceName, competitors, stepsToLoad, + this.sailingService.getCompetitorRaceData(races[selectedRace], stepsToLoad, new AsyncCallback() { @Override diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/LeaderboardPanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/LeaderboardPanel.java index aae22646eb0..2e0ff244f6c 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/LeaderboardPanel.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/LeaderboardPanel.java @@ -40,8 +40,11 @@ import com.sap.sailing.gwt.ui.client.LegDetailColumn.LegDetailField; import com.sap.sailing.gwt.ui.shared.CompetitorDAO; import com.sap.sailing.gwt.ui.shared.LeaderboardDAO; import com.sap.sailing.gwt.ui.shared.LeaderboardEntryDAO; +import com.sap.sailing.gwt.ui.shared.LeaderboardNameAndRaceColumnName; import com.sap.sailing.gwt.ui.shared.LeaderboardRowDAO; import com.sap.sailing.gwt.ui.shared.LegEntryDAO; +import com.sap.sailing.gwt.ui.shared.RaceIdentifier; +import com.sap.sailing.gwt.ui.shared.RaceInLeaderboardDAO; /** * A leaderboard essentially consists of a table widget that in its columns displays the entries. @@ -1303,7 +1306,10 @@ public class LeaderboardPanel extends FormPanel implements TimeListener, PlaySta private void compareCompetitors(){ List competitors = new ArrayList(); - String raceColumnName = getLeaderboard().getRaceList().get(0).getRaceColumnName(); + List races = new ArrayList(); + for (RaceInLeaderboardDAO race : getLeaderboard().getRaceList()) { + races.add(new LeaderboardNameAndRaceColumnName(leaderboardName, race.getRaceColumnName())); + } if (leaderboardSelectionModel.getSelectedSet().size() > 0){ for (LeaderboardRowDAO leaderboardRowDAO : leaderboardSelectionModel.getSelectedSet()) { competitors.add(leaderboardRowDAO.competitor); @@ -1314,6 +1320,6 @@ public class LeaderboardPanel extends FormPanel implements TimeListener, PlaySta competitors.add(leaderboardRowDAO.competitor); } } - new CompareCompetitorsChartDialog(sailingService, competitors, raceColumnName, leaderboardName, stringConstants); + new CompareCompetitorsChartDialog(sailingService, competitors, races.toArray(new LeaderboardNameAndRaceColumnName[0]), stringConstants); } } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingService.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingService.java index f419240c283..1d9ce4d4803 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingService.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingService.java @@ -126,7 +126,7 @@ public interface SailingService extends RemoteService { String[] getCountryCodes(); - CompetitorWithRaceDAO[][] getCompetitorRaceData(String eventName, String raceName, List competitors, int timeStep) throws Exception; + CompetitorWithRaceDAO[][] getCompetitorRaceData(RaceIdentifier race, int steps) throws Exception; Map> getDouglasPoints(RaceIdentifier raceIdentifier, Map from, Map to, double meters); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingServiceAsync.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingServiceAsync.java index 057f85c36a3..8fe053108b6 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingServiceAsync.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingServiceAsync.java @@ -172,8 +172,7 @@ public interface SailingServiceAsync { void getCountryCodes(AsyncCallback callback); - void getCompetitorRaceData(String eventName, String raceName, List competitors, int timeStep, - AsyncCallback callback); + void getCompetitorRaceData(RaceIdentifier race, int steps, AsyncCallback callback); void getDouglasPoints(RaceIdentifier raceIdentifier, Map from, Map to, double meters, AsyncCallback>> callback); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java index 468d54e34c5..18838c0a1de 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java @@ -1129,22 +1129,13 @@ public class SailingServiceImpl extends RemoteServiceServlet implements SailingS } @Override - public CompetitorWithRaceDAO[][] getCompetitorRaceData(String leaderboardName, String raceName, List competitorDAOs, int steps) throws NoWindException { - CompetitorWithRaceDAO[][] competitorData; - TrackedRace trackedRace = getService().getLeaderboardByName(leaderboardName).getRaceColumnByName(raceName).getTrackedRace(); + public CompetitorWithRaceDAO[][] getCompetitorRaceData(RaceIdentifier race, int steps) throws NoWindException { + List competitorData; + TrackedRace trackedRace = getTrackedRace(race); Iterable competitors = trackedRace.getRace().getCompetitors(); - List selectedCompetitor = new ArrayList(); + competitorData = new ArrayList(); for (Competitor c : competitors){ - for (CompetitorDAO cDAO : competitorDAOs){ - if (c.getId().toString().equals(cDAO.id)){ - selectedCompetitor.add(c); - } - } - } - competitorData = new CompetitorWithRaceDAO[selectedCompetitor.size()][]; - int i = 0; - for (Competitor c : selectedCompetitor){ List entries = new ArrayList(); for (long time = trackedRace.getStart().asMillis()-20000; time < trackedRace.getTimePointOfNewestEvent().asMillis(); time += (trackedRace.getTimePointOfNewestEvent().asMillis()-trackedRace.getStart().asMillis()-20000)/steps){ MillisecondsTimePoint timePoint = new MillisecondsTimePoint(time); @@ -1161,9 +1152,9 @@ public class SailingServiceImpl extends RemoteServiceServlet implements SailingS } entries.add(competitorWithRaceEntry); } - competitorData[i++] = entries.toArray(new CompetitorWithRaceDAO[0]); + competitorData.add(entries.toArray(new CompetitorWithRaceDAO[0])); } - return competitorData; + return competitorData.toArray(new CompetitorWithRaceDAO[0][0]); } public Map> getDouglasPoints(RaceIdentifier raceIdentifier, diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/EventNameAndRaceName.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/EventNameAndRaceName.java index b9272b52b74..5fe93cf0ec9 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/EventNameAndRaceName.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/EventNameAndRaceName.java @@ -34,4 +34,11 @@ public class EventNameAndRaceName implements EventAndRaceIdentifier { public Object getEvent(EventFetcher eventFetcher) { return eventFetcher.getEvent(this); } + + @Override + public String toString() { + return raceName; + } + + } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/LeaderboardNameAndRaceColumnName.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/LeaderboardNameAndRaceColumnName.java index a7b368f8d92..816aeb307c8 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/LeaderboardNameAndRaceColumnName.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/LeaderboardNameAndRaceColumnName.java @@ -32,4 +32,11 @@ public class LeaderboardNameAndRaceColumnName implements RaceIdentifier { public Object getExistingTrackedRace(RaceFetcher raceFetcher) { return raceFetcher.getExistingTrackedRace(this); } + + @Override + public String toString() { + return raceColumnName; + } + + } From edd51bb95acd5410dc75dedbcd250136c4a09a13 Mon Sep 17 00:00:00 2001 From: Benjamin Ebling Date: Thu, 1 Dec 2011 15:41:48 +0100 Subject: [PATCH 10/21] Corrrect list of competitors in chart when more then 1 race is loaded. --- .../sap/sailing/gwt/ui/client/CompareCompetitorsPanel.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/CompareCompetitorsPanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/CompareCompetitorsPanel.java index 91365136d15..8dc035581fd 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/CompareCompetitorsPanel.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/CompareCompetitorsPanel.java @@ -253,14 +253,15 @@ public class CompareCompetitorsPanel extends FormPanel { private AbstractDataTable prepareTableData() { DataTable data = DataTable.create(); data.addColumn(ColumnType.STRING, stringConstants.time()); - for (int i = 0; i < competitors.size(); i++) { - data.addColumn(ColumnType.NUMBER, competitors.get(i).name); - } + if (chartData == null) { return data; } if (chartData[0] != null) { + for (int i = 0; i < chartData.length; i++) { + data.addColumn(ColumnType.NUMBER, chartData[i][0].getCompetitor().name); + } int length = 0; for (int i = 0; i < chartData.length; i++) { length = (length < chartData[i].length) ? chartData[i].length : length; From 08052b486d887a0e115e891c65df68887921c5d6 Mon Sep 17 00:00:00 2001 From: Benjamin Ebling Date: Thu, 1 Dec 2011 16:53:03 +0100 Subject: [PATCH 11/21] Added new close button in title bar. --- .../client/CompareCompetitorsChartDialog.java | 55 ++++++++++++++----- 1 file changed, 40 insertions(+), 15 deletions(-) diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/CompareCompetitorsChartDialog.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/CompareCompetitorsChartDialog.java index 997b862e4ce..de85d24a023 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/CompareCompetitorsChartDialog.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/CompareCompetitorsChartDialog.java @@ -2,47 +2,72 @@ package com.sap.sailing.gwt.ui.client; import java.util.List; +import com.google.gwt.dom.client.EventTarget; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; +import com.google.gwt.user.client.Element; import com.google.gwt.user.client.Window; -import com.google.gwt.user.client.ui.Button; +import com.google.gwt.user.client.ui.Anchor; import com.google.gwt.user.client.ui.DialogBox; +import com.google.gwt.user.client.ui.FlexTable; +import com.google.gwt.user.client.ui.HTML; import com.google.gwt.user.client.ui.HasHorizontalAlignment; -import com.google.gwt.user.client.ui.VerticalPanel; import com.sap.sailing.gwt.ui.client.CompareCompetitorsPanel.DataLoadedEvent; import com.sap.sailing.gwt.ui.client.CompareCompetitorsPanel.DataLoadedHandler; import com.sap.sailing.gwt.ui.shared.CompetitorDAO; import com.sap.sailing.gwt.ui.shared.RaceIdentifier; public class CompareCompetitorsChartDialog extends DialogBox { + private Anchor closeAnchor; public CompareCompetitorsChartDialog(SailingServiceAsync sailingService, List competitors, RaceIdentifier[] races, StringConstants stringConstants){ super(true); - VerticalPanel mainPanel = new VerticalPanel(); - mainPanel.setSpacing(5); - mainPanel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_LEFT); - CompareCompetitorsPanel ccp = new CompareCompetitorsPanel(sailingService, competitors, races, stringConstants, (int) (Window.getClientWidth()*0.8), (int) (Window.getClientHeight()*0.8)); + CompareCompetitorsPanel ccp = new CompareCompetitorsPanel(sailingService, competitors, races, stringConstants, (int) (Window.getClientWidth()-300), (int) (Window.getClientHeight()-200)); ccp.addDataLoadedHandler(new DataLoadedHandler() { @Override public void onDataLoaded(DataLoadedEvent event) { CompareCompetitorsChartDialog.this.setPopupPosition(5, 5); + CompareCompetitorsChartDialog.this.setSize(Window.getClientWidth() + "px",Window.getClientHeight() + "px"); CompareCompetitorsChartDialog.this.show(); } }); - mainPanel.add(ccp); - Button closeButton = new Button(stringConstants.close()); - closeButton.addClickHandler(new ClickHandler() { - + this.add(ccp); + + this.setPopupPosition(5, 5); + this.setSize(Window.getClientWidth() + "px",Window.getClientHeight() + "px"); + closeAnchor = new Anchor("x"); + + FlexTable captionLayoutTable = new FlexTable(); + captionLayoutTable.setWidth("100%"); + captionLayoutTable.setText(0, 0, stringConstants.compareCompetitors()); + captionLayoutTable.setWidget(0, 1, closeAnchor); + captionLayoutTable.getCellFormatter().setHorizontalAlignment(0, 1,HasHorizontalAlignment.ALIGN_RIGHT); + + HTML caption = (HTML) getCaption(); + caption.getElement().appendChild(captionLayoutTable.getElement()); + + caption.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { - CompareCompetitorsChartDialog.this.hide(); + EventTarget target = event.getNativeEvent().getEventTarget(); + Element targetElement = (Element) target.cast(); + + if (targetElement == closeAnchor.getElement()) { + closeAnchor.fireEvent(event); + } + } + }); + addCloseHandler(new ClickHandler() { + @Override + public void onClick(ClickEvent event) { + hide(); } }); - mainPanel.add(closeButton); - this.add(mainPanel); - this.setTitle(stringConstants.compareCompetitors()); - this.setPopupPosition(5, 5); + } + + public void addCloseHandler(ClickHandler handler) { + closeAnchor.addClickHandler(handler); } } From d9ca10495bee8f2b0e083241055dbad58881bba1 Mon Sep 17 00:00:00 2001 From: Benjamin Ebling Date: Thu, 1 Dec 2011 17:06:56 +0100 Subject: [PATCH 12/21] Fixed a bug that happend while merging. --- .../com/sap/sailing/gwt/ui/client/LeaderboardConfigPanel.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/LeaderboardConfigPanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/LeaderboardConfigPanel.java index 54c922854d2..e76e6b32db7 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/LeaderboardConfigPanel.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/LeaderboardConfigPanel.java @@ -562,7 +562,7 @@ public class LeaderboardConfigPanel extends FormPanel implements EventDisplayer, selectedLeaderboard = result; raceColumnList.getList().clear(); - for(String race: result.getRaceList()) + for(String race: result.getRaceColumnNameList()) raceColumnList.getList().add(race); selectedLeaderBoardPanel.setVisible(true); From f6116455d06fb603b8ce9e6d10732b56de854211 Mon Sep 17 00:00:00 2001 From: Benjamin Ebling Date: Thu, 1 Dec 2011 17:18:51 +0100 Subject: [PATCH 13/21] Added missing file. --- .../gwt/ui/shared/RaceInLeaderboardDAO.java | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/RaceInLeaderboardDAO.java diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/RaceInLeaderboardDAO.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/RaceInLeaderboardDAO.java new file mode 100644 index 00000000000..6c74dfbc0d3 --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/RaceInLeaderboardDAO.java @@ -0,0 +1,27 @@ +package com.sap.sailing.gwt.ui.shared; + +public class RaceInLeaderboardDAO { + private String raceColumnName; + private boolean medalRace; + private boolean trackedRace; + public String getRaceColumnName() { + return raceColumnName; + } + public void setRaceColumnName(String raceColumnName) { + this.raceColumnName = raceColumnName; + } + public boolean isMedalRace() { + return medalRace; + } + public void setMedalRace(boolean medalRace) { + this.medalRace = medalRace; + } + public boolean isTrackedRace() { + return trackedRace; + } + public void setTrackedRace(boolean trackedRace) { + this.trackedRace = trackedRace; + } + + +} From 4748bd9a6893b9c41bd84e54c710b11306e14e32 Mon Sep 17 00:00:00 2001 From: Benjamin Ebling Date: Thu, 1 Dec 2011 17:28:17 +0100 Subject: [PATCH 14/21] Made RaceInLeaderboardDAO serializable and fixed Chart-Dialog size. --- .../sailing/gwt/ui/client/CompareCompetitorsChartDialog.java | 4 ++-- .../com/sap/sailing/gwt/ui/shared/RaceInLeaderboardDAO.java | 4 +++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/CompareCompetitorsChartDialog.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/CompareCompetitorsChartDialog.java index de85d24a023..ddab0bb76d5 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/CompareCompetitorsChartDialog.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/CompareCompetitorsChartDialog.java @@ -28,14 +28,14 @@ public class CompareCompetitorsChartDialog extends DialogBox { @Override public void onDataLoaded(DataLoadedEvent event) { CompareCompetitorsChartDialog.this.setPopupPosition(5, 5); - CompareCompetitorsChartDialog.this.setSize(Window.getClientWidth() + "px",Window.getClientHeight() + "px"); + //CompareCompetitorsChartDialog.this.setSize((int) (Window.getClientWidth()*0.9) + "px", (int) (Window.getClientHeight() * 0.9) + "px"); CompareCompetitorsChartDialog.this.show(); } }); this.add(ccp); this.setPopupPosition(5, 5); - this.setSize(Window.getClientWidth() + "px",Window.getClientHeight() + "px"); + //this.setSize((int) (Window.getClientWidth()*0.9) + "px", (int) (Window.getClientHeight() * 0.9) + "px"); closeAnchor = new Anchor("x"); FlexTable captionLayoutTable = new FlexTable(); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/RaceInLeaderboardDAO.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/RaceInLeaderboardDAO.java index 6c74dfbc0d3..ba12c412b21 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/RaceInLeaderboardDAO.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/RaceInLeaderboardDAO.java @@ -1,6 +1,8 @@ package com.sap.sailing.gwt.ui.shared; -public class RaceInLeaderboardDAO { +import com.google.gwt.user.client.rpc.IsSerializable; + +public class RaceInLeaderboardDAO implements IsSerializable { private String raceColumnName; private boolean medalRace; private boolean trackedRace; From 6732287d6bb6d89df84273410cbbdbe223247073 Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Thu, 1 Dec 2011 17:30:36 +0100 Subject: [PATCH 15/21] use project_loc variable in GWT launch config again --- java/com.sap.sailing.gwt.ui/SailingGWT.launch | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/java/com.sap.sailing.gwt.ui/SailingGWT.launch b/java/com.sap.sailing.gwt.ui/SailingGWT.launch index 1710d5f5566..593290c76f9 100755 --- a/java/com.sap.sailing.gwt.ui/SailingGWT.launch +++ b/java/com.sap.sailing.gwt.ui/SailingGWT.launch @@ -3,12 +3,6 @@ - - - - - - @@ -21,7 +15,7 @@ - + From e3c0a30ca6ad0557bc47c9b07bc3ca641f6231a7 Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Thu, 1 Dec 2011 17:51:16 +0100 Subject: [PATCH 16/21] fixed after merge --- .../main/java/com/sap/sailing/gwt/ui/client/RaceDialog.java | 3 --- .../java/com/sap/sailing/gwt/ui/client/StringConstants.java | 2 ++ .../com/sap/sailing/gwt/ui/client/StringConstants.properties | 1 + .../sap/sailing/gwt/ui/client/StringConstants_de.properties | 2 ++ 4 files changed, 5 insertions(+), 3 deletions(-) diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/RaceDialog.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/RaceDialog.java index 751da75ce7c..d5cba3e03ca 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/RaceDialog.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/RaceDialog.java @@ -12,8 +12,6 @@ public class RaceDialog extends DataEntryDialog>{ private final TextBox raceNameBox; private final CheckBox isMedalRace; - private final StringConstants stringConstants; - private Pair raceDaoAndIsMedalRace; private static class RaceDialogValidator implements Validator>{ @@ -52,7 +50,6 @@ public class RaceDialog extends DataEntryDialog>{ raceNameBox = createTextBox(raceDaoAndIsMedalRace.getA()); isMedalRace = createCheckbox(stringConstants.medalRace()); isMedalRace.setValue(raceDaoAndIsMedalRace.getB().booleanValue()); - this.stringConstants = stringConstants; } @Override diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringConstants.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringConstants.java index 4fb6e8fce0f..61a86b8ca78 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringConstants.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringConstants.java @@ -127,6 +127,8 @@ public interface StringConstants extends Constants { String penaltyCircles(); String medalRaceIsNull(); String maneuverTypes(); + String raceNameEmpty(); + String configuration(); String chooseChart(); String distanceTraveled(); String velocityMadeGoodLong(); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringConstants.properties b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringConstants.properties index da744efc449..aa9055320b8 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringConstants.properties +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringConstants.properties @@ -121,6 +121,7 @@ tacks=Tacks jibes=Jibes penaltyCircles=Penalty Circles medalRaceIsNull=Medalrace value not allowed +configuration=Configuration maneuverTypes=Maneuver types raceNameEmpty=Racename empty chooseChart=Choose chart diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringConstants_de.properties b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringConstants_de.properties index 5322700bb35..a0f09d8d77e 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringConstants_de.properties +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringConstants_de.properties @@ -122,6 +122,8 @@ jibes=Halsen penaltyCircles=Strafkringel medalRaceIsNull=Medialienwert nicht erlaubt maneuverTypes=Manövertypen +raceNameEmpty=Rennname leer +configuration=Konfiguration chooseChart=Diagramm wählen raceNameEmpty=Rennname leer distanceTraveled=Zurückgelegte Strecke From fcc20b4a6cbdf6d80dac332344cb98c2112a4f4e Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Thu, 1 Dec 2011 17:51:45 +0100 Subject: [PATCH 17/21] added a launch config using a proxy (however, the test doesn't yet use the system properties) --- .../GwtTestCaseColumnToggling (proxy).launch | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100755 java/com.sap.sailing.gwt.ui.test/GwtTestCaseColumnToggling (proxy).launch diff --git a/java/com.sap.sailing.gwt.ui.test/GwtTestCaseColumnToggling (proxy).launch b/java/com.sap.sailing.gwt.ui.test/GwtTestCaseColumnToggling (proxy).launch new file mode 100755 index 00000000000..e7af0c187ca --- /dev/null +++ b/java/com.sap.sailing.gwt.ui.test/GwtTestCaseColumnToggling (proxy).launch @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + From ee8e75095760e1348687f633940befc2e49486e4 Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Thu, 1 Dec 2011 18:00:35 +0100 Subject: [PATCH 18/21] moved boat class cache and creation to base domain factory --- .../impl/DomainFactoryImpl.java | 16 ++++++++-------- .../tractracadapter/impl/DomainFactoryImpl.java | 12 +----------- .../sap/sailing/domain/base/DomainFactory.java | 2 ++ .../domain/base/impl/DomainFactoryImpl.java | 16 ++++++++++++++++ 4 files changed, 27 insertions(+), 19 deletions(-) diff --git a/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/impl/DomainFactoryImpl.java b/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/impl/DomainFactoryImpl.java index 9b7e4b3eae0..f9ce8195384 100755 --- a/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/impl/DomainFactoryImpl.java +++ b/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/impl/DomainFactoryImpl.java @@ -76,14 +76,14 @@ public class DomainFactoryImpl implements DomainFactory { SAM007000 Men's Keelboat = Starboot Männer SAW010000 Women's Match Racing = Matchrace Damen Elliott 6M (modified) */ - olympicClassesByID.put("102", new BoatClassImpl("RS:X")); - olympicClassesByID.put("004", new BoatClassImpl("Laser")); - olympicClassesByID.put("103", new BoatClassImpl("Laser Radial")); - olympicClassesByID.put("002", new BoatClassImpl("Finn")); - olympicClassesByID.put("005", new BoatClassImpl("470")); - olympicClassesByID.put("009", new BoatClassImpl("49er")); - olympicClassesByID.put("007", new BoatClassImpl("Star")); - olympicClassesByID.put("010", new BoatClassImpl("Elliott 6M")); + olympicClassesByID.put("102", baseDomainFactory.getOrCreateBoatClass("RS:X")); + olympicClassesByID.put("004", baseDomainFactory.getOrCreateBoatClass("Laser")); + olympicClassesByID.put("103", baseDomainFactory.getOrCreateBoatClass("Laser Radial")); + olympicClassesByID.put("002", baseDomainFactory.getOrCreateBoatClass("Finn")); + olympicClassesByID.put("005", baseDomainFactory.getOrCreateBoatClass("470")); + olympicClassesByID.put("009", baseDomainFactory.getOrCreateBoatClass("49er")); + olympicClassesByID.put("007", baseDomainFactory.getOrCreateBoatClass("Star")); + olympicClassesByID.put("010", baseDomainFactory.getOrCreateBoatClass("Elliott 6M")); unknownBoatClass = new BoatClassImpl("Unknown"); } diff --git a/java/com.sap.sailing.domain.tractracadapter/src/com/sap/sailing/domain/tractracadapter/impl/DomainFactoryImpl.java b/java/com.sap.sailing.domain.tractracadapter/src/com/sap/sailing/domain/tractracadapter/impl/DomainFactoryImpl.java index 1a3da0be561..596d1726db7 100644 --- a/java/com.sap.sailing.domain.tractracadapter/src/com/sap/sailing/domain/tractracadapter/impl/DomainFactoryImpl.java +++ b/java/com.sap.sailing.domain.tractracadapter/src/com/sap/sailing/domain/tractracadapter/impl/DomainFactoryImpl.java @@ -27,7 +27,6 @@ import com.sap.sailing.domain.base.RaceDefinition; import com.sap.sailing.domain.base.Team; import com.sap.sailing.domain.base.TimePoint; import com.sap.sailing.domain.base.Waypoint; -import com.sap.sailing.domain.base.impl.BoatClassImpl; import com.sap.sailing.domain.base.impl.BoatImpl; import com.sap.sailing.domain.base.impl.CompetitorImpl; import com.sap.sailing.domain.base.impl.CourseImpl; @@ -79,8 +78,6 @@ public class DomainFactoryImpl implements DomainFactory { private final Map teamCache = new HashMap(); - private final Map boatClassCache = new HashMap(); - /** * Caches events by their name and their boat class's name */ @@ -195,14 +192,7 @@ public class DomainFactoryImpl implements DomainFactory { @Override public BoatClass getOrCreateBoatClass(CompetitorClass competitorClass) { - synchronized (boatClassCache) { - BoatClass result = boatClassCache.get(competitorClass); - if (result == null) { - result = new BoatClassImpl(competitorClass == null ? "" : competitorClass.getName()); - boatClassCache.put(competitorClass, result); - } - return result; - } + return baseDomainFactory.getOrCreateBoatClass(competitorClass == null ? "" : competitorClass.getName()); } @Override diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/base/DomainFactory.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/base/DomainFactory.java index 3ac6ad87806..367fed0512c 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/base/DomainFactory.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/base/DomainFactory.java @@ -19,4 +19,6 @@ public interface DomainFactory { Waypoint createWaypoint(ControlPoint controlPoint); MarkPassing createMarkPassing(TimePoint timePoint, Waypoint waypoint, Competitor competitor); + + BoatClass getOrCreateBoatClass(String name); } diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/base/impl/DomainFactoryImpl.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/base/impl/DomainFactoryImpl.java index b94e2ea29a3..82822a63b27 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/base/impl/DomainFactoryImpl.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/base/impl/DomainFactoryImpl.java @@ -4,6 +4,7 @@ import java.awt.TrayIcon.MessageType; import java.util.HashMap; import java.util.Map; +import com.sap.sailing.domain.base.BoatClass; import com.sap.sailing.domain.base.Buoy; import com.sap.sailing.domain.base.Competitor; import com.sap.sailing.domain.base.ControlPoint; @@ -23,10 +24,13 @@ public class DomainFactoryImpl implements DomainFactory { private final Map nationalityCache; private final Map buoyCache; + + private final Map boatClassCache; public DomainFactoryImpl() { nationalityCache = new HashMap(); buoyCache = new HashMap(); + boatClassCache = new HashMap(); } @Override @@ -71,4 +75,16 @@ public class DomainFactoryImpl implements DomainFactory { return new MarkPassingImpl(timePoint, waypoint, competitor); } + @Override + public BoatClass getOrCreateBoatClass(String name) { + synchronized (boatClassCache) { + BoatClass result = boatClassCache.get(name); + if (result == null) { + result = new BoatClassImpl(name); + boatClassCache.put(name, result); + } + return result; + } + } + } From 07a48647dedbc9010f2316bc5b5a5c8cca0eb819 Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Thu, 1 Dec 2011 18:07:10 +0100 Subject: [PATCH 19/21] avoid warning --- .../com/sap/sailing/gwt/ui/client/CompareCompetitorsPanel.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/CompareCompetitorsPanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/CompareCompetitorsPanel.java index 8dc035581fd..26ad9a324ec 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/CompareCompetitorsPanel.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/CompareCompetitorsPanel.java @@ -35,7 +35,6 @@ import com.sap.sailing.gwt.ui.shared.CompetitorWithRaceDAO; import com.sap.sailing.gwt.ui.shared.RaceIdentifier; public class CompareCompetitorsPanel extends FormPanel { - private final List competitors; private CompetitorWithRaceDAO[][] chartData = null; private LineChart chart; private final SailingServiceAsync sailingService; @@ -65,7 +64,6 @@ public class CompareCompetitorsPanel extends FormPanel { public CompareCompetitorsPanel(SailingServiceAsync sailingService, final List competitors, RaceIdentifier[] races, StringConstants stringConstants, int chartWidth, int chartHeight) { this.sailingService = sailingService; - this.competitors = competitors; this.races = races; this.stringConstants = stringConstants; this.chartWidth = chartWidth; From 4109f99c504b8e76bd638bb5c46d3a49df438539 Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Thu, 1 Dec 2011 18:13:50 +0100 Subject: [PATCH 20/21] added gwt-visualization dependency to pom.xml to make gwt maven plugin find it --- java/com.sap.sailing.gwt.ui/pom.xml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/java/com.sap.sailing.gwt.ui/pom.xml b/java/com.sap.sailing.gwt.ui/pom.xml index e81416c4aca..5b373f3bd3e 100644 --- a/java/com.sap.sailing.gwt.ui/pom.xml +++ b/java/com.sap.sailing.gwt.ui/pom.xml @@ -39,6 +39,13 @@ 1.1.0 provided + + + com.google.code + gwt-visualization + 1.1.0 + provided + From c8417989a071b8abeb9d6a84cefd7638882aeeb5 Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Thu, 1 Dec 2011 20:38:43 +0100 Subject: [PATCH 21/21] made "show charts" i18n-able --- .../java/com/sap/sailing/gwt/ui/client/LeaderboardPanel.java | 2 +- .../java/com/sap/sailing/gwt/ui/client/StringConstants.java | 1 + .../com/sap/sailing/gwt/ui/client/StringConstants.properties | 3 ++- .../sap/sailing/gwt/ui/client/StringConstants_de.properties | 3 ++- 4 files changed, 6 insertions(+), 3 deletions(-) diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/LeaderboardPanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/LeaderboardPanel.java index 2e0ff244f6c..b6d1ac429ec 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/LeaderboardPanel.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/LeaderboardPanel.java @@ -782,7 +782,7 @@ public class LeaderboardPanel extends FormPanel implements TimeListener, PlaySta refreshPanel.add(playPause); Anchor chartsAnchor = new Anchor(new SafeHtmlBuilder().appendHtmlConstant( "").toSafeHtml()); - chartsAnchor.setTitle("Show charts"); + chartsAnchor.setTitle(stringConstants.showCharts()); chartsAnchor.addClickHandler(new ClickHandler() { @Override diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringConstants.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringConstants.java index 61a86b8ca78..e9dac237199 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringConstants.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringConstants.java @@ -149,4 +149,5 @@ public interface StringConstants extends Constants { String no3LetterCodes(); String add(); String delete(); + String showCharts(); } \ No newline at end of file diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringConstants.properties b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringConstants.properties index aa9055320b8..5e1b18c72e8 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringConstants.properties +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringConstants.properties @@ -143,4 +143,5 @@ sailNumber=Sail number country=Country no3LetterCodes=Unable to find the IOC 3-letter-codes. add=Add -delete=Delete \ No newline at end of file +delete=Delete +showCharts=Show charts \ No newline at end of file diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringConstants_de.properties b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringConstants_de.properties index a0f09d8d77e..cf1d21b7bff 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringConstants_de.properties +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringConstants_de.properties @@ -144,4 +144,5 @@ sailNumber=Segelnummer country=Land no3LetterCodes=IOC 3-Buchstaben-Codes können nicht gefunden werden. add=Hinzufügen -delete=Löschen \ No newline at end of file +delete=Löschen +showCharts=Grafische Ansicht \ No newline at end of file