diff --git a/java/com.sap.sailing.dashboards.gwt/.classpath b/java/com.sap.sailing.dashboards.gwt/.classpath index 3c32839e434..34d9ee0253f 100644 --- a/java/com.sap.sailing.dashboards.gwt/.classpath +++ b/java/com.sap.sailing.dashboards.gwt/.classpath @@ -1,12 +1,12 @@ - - - - - - - - - - - - + + + + + + + + + + + + diff --git a/java/com.sap.sailing.dashboards.gwt/META-INF/MANIFEST.MF b/java/com.sap.sailing.dashboards.gwt/META-INF/MANIFEST.MF index 7af263e912b..53b9b480d53 100644 --- a/java/com.sap.sailing.dashboards.gwt/META-INF/MANIFEST.MF +++ b/java/com.sap.sailing.dashboards.gwt/META-INF/MANIFEST.MF @@ -25,10 +25,12 @@ Require-Bundle: com.sap.sailing.domain, com.sap.sse.gwt.adminconsole, org.apache.commons.math;bundle-version="2.1.0" Bundle-ActivationPolicy: lazy -Import-Package: com.sap.sse.util, +Import-Package: com.google.gwt.core.ext.linker, + com.sap.sse.util, javax.servlet;version="3.1.0", javax.servlet.descriptor;version="3.1.0", javax.servlet.http;version="3.1.0", + org.apache.commons.io, org.osgi.framework;version="1.5.0", org.osgi.util.tracker Web-ContextPath: /dashboards diff --git a/java/com.sap.sailing.dashboards.gwt/RibDashboard.css b/java/com.sap.sailing.dashboards.gwt/RibDashboard.css index 12a90199883..f256d2a1b33 100644 --- a/java/com.sap.sailing.dashboards.gwt/RibDashboard.css +++ b/java/com.sap.sailing.dashboards.gwt/RibDashboard.css @@ -1,10 +1,11 @@ + .mgwt-Carousel-Indicator { - width: 12.5pt; - height: 12.5pt; + width: 10px; + height: 10px; background-color: #666666; - border-radius: 0pt; - margin: 5pt; - margin-bottom: 12.5pt; + border-radius: 5px; + margin: 5px; + margin-bottom: 20px; } .mgwt-Carousel-Indicator-active { @@ -25,12 +26,4 @@ position: absolute !important; width: 100% !important; height: 100% !important; -} - -.eventLogo { - position: absolute; - right: 12.5px; - bottom: 10px; - height: 22.5pt; - z-index: 1; -} +} \ No newline at end of file diff --git a/java/com.sap.sailing.dashboards.gwt/RibDashboard.html b/java/com.sap.sailing.dashboards.gwt/RibDashboard.html index d1f7fa68c2b..44d3171f5e4 100644 --- a/java/com.sap.sailing.dashboards.gwt/RibDashboard.html +++ b/java/com.sap.sailing.dashboards.gwt/RibDashboard.html @@ -5,7 +5,7 @@ - + diff --git a/java/com.sap.sailing.dashboards.gwt/SailingDashboardsGWT sdm.launch b/java/com.sap.sailing.dashboards.gwt/SailingDashboardsGWT sdm.launch index e6230b9950b..aefd1e3ffb6 100755 --- a/java/com.sap.sailing.dashboards.gwt/SailingDashboardsGWT sdm.launch +++ b/java/com.sap.sailing.dashboards.gwt/SailingDashboardsGWT sdm.launch @@ -1,47 +1,47 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/java/com.sap.sailing.dashboards.gwt/SailingDashboardsGWT.launch b/java/com.sap.sailing.dashboards.gwt/SailingDashboardsGWT.launch index 20731950d47..463a6cf721f 100755 --- a/java/com.sap.sailing.dashboards.gwt/SailingDashboardsGWT.launch +++ b/java/com.sap.sailing.dashboards.gwt/SailingDashboardsGWT.launch @@ -1,47 +1,47 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/java/com.sap.sailing.dashboards.gwt/WEB-INF/web.xml b/java/com.sap.sailing.dashboards.gwt/WEB-INF/web.xml index f79f8d5f9e6..ad6c4ff7907 100644 --- a/java/com.sap.sailing.dashboards.gwt/WEB-INF/web.xml +++ b/java/com.sap.sailing.dashboards.gwt/WEB-INF/web.xml @@ -48,4 +48,9 @@ /com.sap.sailing.dashboards.gwt.RibDashboard/remote_logging + + manifest + text/cache-manifest + + diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/RibDashboardEntryPoint.java b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/RibDashboardEntryPoint.java index d1ca55aa36a..82aabb4338f 100644 --- a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/RibDashboardEntryPoint.java +++ b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/RibDashboardEntryPoint.java @@ -3,7 +3,6 @@ package com.sap.sailing.dashboards.gwt.client; import com.google.gwt.user.client.ui.RootLayoutPanel; import com.googlecode.mgwt.ui.client.MGWT; import com.googlecode.mgwt.ui.client.MGWTSettings; -import com.googlecode.mgwt.ui.client.MGWTSettings.StatusBarStyle; import com.googlecode.mgwt.ui.client.MGWTSettings.ViewPort; import com.googlecode.mgwt.ui.client.MGWTStyle; import com.sap.sailing.dashboards.gwt.client.dashboardpanel.DashboardPanel; @@ -34,9 +33,6 @@ public class RibDashboardEntryPoint extends AbstractEntryPoint { viewPort.setUserScaleAble(false).setMinimumScale(1.0).setMinimumScale(1.0).setMaximumScale(1.0); MGWTSettings settings = new MGWTSettings(); settings.setViewPort(viewPort); - settings.setFullscreen(true); - settings.setPreventScrolling(true); - settings.setStatusBarStyle(StatusBarStyle.BLACK_TRANSLUCENT); MGWT.applySettings(settings); } diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/actions/GetStartAnalysesAction.java b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/actions/GetStartAnalysesAction.java index 3b557754a9a..ada80912458 100644 --- a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/actions/GetStartAnalysesAction.java +++ b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/actions/GetStartAnalysesAction.java @@ -2,6 +2,8 @@ package com.sap.sailing.dashboards.gwt.client.actions; import java.util.ArrayList; import java.util.List; +import java.util.logging.Level; +import java.util.logging.Logger; import com.google.gwt.core.shared.GwtIncompatible; import com.sap.sailing.dashboards.gwt.server.util.actions.startanalysis.StartAnalysisCreationController; @@ -24,6 +26,8 @@ public class GetStartAnalysesAction implements DashboardAction private String leaderboarName; private String competitorIdAsString; + + private static final Logger logger = Logger.getLogger(GetStartAnalysesAction.class.getName()); @SuppressWarnings("unused") private GetStartAnalysesAction() { @@ -39,10 +43,12 @@ public class GetStartAnalysesAction implements DashboardAction public StartAnalysesDTO execute(DashboardDispatchContext dashboardDispatchContext) throws DispatchException { StartAnalysesDTO result = new StartAnalysesDTO(); List startanalyses = new ArrayList(); - if (competitorIdAsString != null && leaderboarName != null) { + if (leaderboarName != null) { try { - Competitor competitor = dashboardDispatchContext.getRacingEventService().getBaseDomainFactory().getCompetitorStore().getExistingCompetitorByIdAsString( - competitorIdAsString); + Competitor competitor = null; + if(competitorIdAsString != null) { + competitor = dashboardDispatchContext.getRacingEventService().getBaseDomainFactory().getCompetitorStore().getExistingCompetitorByIdAsString(competitorIdAsString); + } Leaderboard leaderboard = dashboardDispatchContext.getRacingEventService().getLeaderboardByName(this.leaderboarName); if (leaderboard != null) { for (RaceColumn column : leaderboard.getRaceColumns()) { @@ -59,7 +65,7 @@ public class GetStartAnalysesAction implements DashboardAction } } catch (NullPointerException e) { - // logger.log(Level.INFO, "", e); + logger.log(Level.INFO, "", e); } } result.setStartAnalyses(startanalyses); diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/actions/GetStartlineAdvantageByGeometryAction.java b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/actions/GetStartlineAdvantageByGeometryAction.java index a3d7de27f48..d1a4d0629c1 100644 --- a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/actions/GetStartlineAdvantageByGeometryAction.java +++ b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/actions/GetStartlineAdvantageByGeometryAction.java @@ -1,5 +1,7 @@ package com.sap.sailing.dashboards.gwt.client.actions; +import java.util.UUID; + import com.google.gwt.core.shared.GwtIncompatible; import com.sap.sailing.dashboards.gwt.server.util.actions.startlineadvantage.StartlineAdvantageByGeometryCalculator; import com.sap.sailing.dashboards.gwt.shared.StartlineAdvantageType; @@ -20,6 +22,8 @@ public class GetStartlineAdvantageByGeometryAction extends RequiresLiveRaceAndCa public GetStartlineAdvantageByGeometryAction(String leaderboardName) { super(leaderboardName); } + + private static final String MOVING_AVERAGE_CACHE_KEY = UUID.randomUUID().toString(); @Override @GwtIncompatible @@ -35,14 +39,14 @@ public class GetStartlineAdvantageByGeometryAction extends RequiresLiveRaceAndCa Double average = null; if (startlineAdvantageByGeometry != null) { super.addValueToMovingAverage(startlineAdvantageByGeometry.doubleValue(), dashboardDispatchContext.getMovingAveragesCache()); - average = dashboardDispatchContext.getMovingAveragesCache().getValueForKey(getKeyForMovingAverage()); + average = dashboardDispatchContext.getMovingAveragesCache().getValueForKey(uniqueMovingAverageCacheKey()); } result.average = average; return result; } @Override - protected String getKeyForMovingAverage() { - return super.getLeaderboardName(); + protected String uniqueMovingAverageCacheKey() { + return MOVING_AVERAGE_CACHE_KEY; } } diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/actions/GetStartlineAdvantagesByWindAction.java b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/actions/GetStartlineAdvantagesByWindAction.java index de3bb83d006..1d8776f81e2 100644 --- a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/actions/GetStartlineAdvantagesByWindAction.java +++ b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/actions/GetStartlineAdvantagesByWindAction.java @@ -5,16 +5,19 @@ package com.sap.sailing.dashboards.gwt.client.actions; * */ +import java.util.UUID; + import com.google.gwt.core.shared.GwtIncompatible; import com.sap.sailing.dashboards.gwt.server.util.actions.startlineadvantage.StartlineAdvantagesByWindCalculator; import com.sap.sailing.dashboards.gwt.shared.dispatch.DashboardDispatchContext; import com.sap.sailing.dashboards.gwt.shared.dispatch.RequiresLiveRaceAndCachesMovingAverageAction; import com.sap.sailing.dashboards.gwt.shared.dto.StartlineAdvantagesWithMaxAndAverageDTO; +import com.sap.sailing.domain.base.DomainFactory; import com.sap.sailing.domain.tracking.TrackedRace; import com.sap.sse.common.impl.MillisecondsTimePoint; import com.sap.sse.gwt.dispatch.shared.exceptions.DispatchException; -public class GetStartlineAdvantagesByWindAction extends RequiresLiveRaceAndCachesMovingAverageAction { +public class GetStartlineAdvantagesByWindAction extends RequiresLiveRaceAndCachesMovingAverageAction { public GetStartlineAdvantagesByWindAction() {} @@ -22,24 +25,27 @@ public class GetStartlineAdvantagesByWindAction extends RequiresLiveRaceAndCach super(leaderboardName); } + private static final String MOVING_AVERAGE_CACHE_KEY = UUID.randomUUID().toString(); + @Override @GwtIncompatible public StartlineAdvantagesWithMaxAndAverageDTO execute(DashboardDispatchContext dashboardDispatchContext) throws DispatchException { StartlineAdvantagesWithMaxAndAverageDTO result = new StartlineAdvantagesWithMaxAndAverageDTO(); TrackedRace liveRace = super.getLiveRace(dashboardDispatchContext); if (liveRace != null) { - StartlineAdvantagesByWindCalculator startlineAdvantagesByWindCalculator = new StartlineAdvantagesByWindCalculator(dashboardDispatchContext); + final DomainFactory domainFactory = dashboardDispatchContext.getRacingEventService().getBaseDomainFactory(); + StartlineAdvantagesByWindCalculator startlineAdvantagesByWindCalculator = new StartlineAdvantagesByWindCalculator(dashboardDispatchContext, domainFactory); result = startlineAdvantagesByWindCalculator.getStartLineAdvantagesAccrossLineFromTrackedRaceAtTimePoint(liveRace, MillisecondsTimePoint.now()); } if(result != null && result.maximum != null) { super.addValueToMovingAverage(result.maximum, dashboardDispatchContext.getMovingAveragesCache()); - result.average = dashboardDispatchContext.getMovingAveragesCache().getValueForKey(getKeyForMovingAverage()); + result.average = dashboardDispatchContext.getMovingAveragesCache().getValueForKey(uniqueMovingAverageCacheKey()); } return result; } - + @Override - protected String getKeyForMovingAverage() { - return super.getLeaderboardName(); + protected String uniqueMovingAverageCacheKey() { + return MOVING_AVERAGE_CACHE_KEY; } } \ No newline at end of file diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/dashboardpanel/DashboardPanel.gss b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/dashboardpanel/DashboardPanel.gss index 14b3eef2b2f..e7151291ce6 100644 --- a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/dashboardpanel/DashboardPanel.gss +++ b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/dashboardpanel/DashboardPanel.gss @@ -1,18 +1,5 @@ @require 'theme'; -.bar { - height: 100%; - margin-top: 20pt; - line-height: 15pt; - vertical-align: middle; - font-size: 15pt; - font-family: DASHBOARD_FONT_FAMILY; - width: 100%; - text-align: center; - font-weight: bold; - overflow: visible; -} - .page { position: absolute; border: none; @@ -22,15 +9,12 @@ top: 0; bottom: 30pt; margin: 5pt; + margin-top: 0px; } -.logo { - position: absolute; - width: 48pt; - height: 23.5pt; - margin-top: 17.5pt; +.header { + margin-top:20px; margin-left: 10pt; - z-index: 1; } .collumn { @@ -47,72 +31,52 @@ .collumnthree { left: 66.8%; - right: 0pt; + right: 0px; } .left { - left: 0pt; + left: 0px; right: 50%; } .right { left: 50%; - right: 0pt; + right: 0px; } .startline_advantage_by_wind_container { position: absolute; - background-color: white; - top: 27%; - right: 0pt; - left: 0pt; + top: 160px; + right: 0px; + left: 0px; bottom: 0%; } .startline_advantage_by_geometry_container { position: absolute; - background-color: white; - top: 0%; - right: 0pt; - left: 0pt; - bottom: 73%; - margin-bottom: 10pt; + top: 0px; + right: 0px; + left: 0px; + height: 145px } .windcharthint { position: absolute; - bottom: 0pt; - height: 15pt; - line-height: 15pt; - margin-top: 0pt; + height: DASHBOARD_FONT_SIZE_SMALL; + line-height: DASHBOARD_FONT_SIZE_SMALL; + bottom: 3px; vertical-align: middle; - font-size: 12pt; + font-size: DASHBOARD_FONT_SIZE_MEDIUM; font-family: DASHBOARD_FONT_FAMILY; width: 100%; text-align: center; } -.windloadinghint { +.event_logo { position: absolute; - background-color: white; - opacity: 0.4; - width: 100%; - height: 100%; - vertical-align: middle; - text-align: center; - z-index: 0; -} - -.windloadinghinttext { - position: absolute; - bottom: 0pt; - height: 15pt; - line-height: 15pt; - margin-top: 0pt; - vertical-align: middle; - font-size: 12pt; - font-family: DASHBOARD_FONT_FAMILY; - width: 100%; - text-align: center; - top: 50%; + height: DASHBOARD_SPACE_MEDIUM; + width: auto; + right: 10pt; + bottom: 10pt; + z-index: 1; } diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/dashboardpanel/DashboardPanel.java b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/dashboardpanel/DashboardPanel.java index bde0b1d2608..56c672e0951 100644 --- a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/dashboardpanel/DashboardPanel.java +++ b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/dashboardpanel/DashboardPanel.java @@ -1,16 +1,18 @@ package com.sap.sailing.dashboards.gwt.client.dashboardpanel; -import java.util.ArrayList; import java.util.Date; import java.util.List; +import java.util.UUID; import java.util.logging.Level; import java.util.logging.Logger; import com.google.gwt.core.client.GWT; -import com.google.gwt.dom.client.DivElement; import com.google.gwt.dom.client.Document; +import com.google.gwt.dom.client.Style.Visibility; +import com.google.gwt.safehtml.shared.UriUtils; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; +import com.google.gwt.user.client.Window; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.HTMLPanel; @@ -22,17 +24,19 @@ import com.sap.sailing.dashboards.gwt.client.DashboardClientFactory; import com.sap.sailing.dashboards.gwt.client.actions.GetIDFromRaceThatIsLiveAction; import com.sap.sailing.dashboards.gwt.client.dataretriever.NumberOfWindBotsChangeListener; import com.sap.sailing.dashboards.gwt.client.dataretriever.WindBotDataRetrieverProvider; -import com.sap.sailing.dashboards.gwt.client.eventlogo.EventLogo; +import com.sap.sailing.dashboards.gwt.client.header.DashboardHeader; import com.sap.sailing.dashboards.gwt.client.notifications.orientation.WrongDeviceOrientationNotification; import com.sap.sailing.dashboards.gwt.client.widgets.PollsLiveDataEvery5Seconds; import com.sap.sailing.dashboards.gwt.client.widgets.startanalysis.StartAnalysisWidget; -import com.sap.sailing.dashboards.gwt.client.widgets.startlineadvantage.course.StartLineAdvantageByGeometryWidget; +import com.sap.sailing.dashboards.gwt.client.widgets.startlineadvantage.course.StartlineAdvantageByGeometryWidget; import com.sap.sailing.dashboards.gwt.client.widgets.startlineadvantage.wind.StartlineAdvantagesByWindWidget; import com.sap.sailing.dashboards.gwt.client.widgets.windbot.WindBotWidget; import com.sap.sailing.dashboards.gwt.shared.DashboardURLParameters; import com.sap.sailing.dashboards.gwt.shared.dto.RaceIdDTO; import com.sap.sailing.gwt.ui.client.SailingServiceAsync; import com.sap.sailing.gwt.ui.client.StringMessages; +import com.sap.sailing.gwt.ui.shared.EventDTO; +import com.sap.sse.gwt.client.media.ImageDTO; /** * This class contains all components of the Dashboard and the basic UI Elements of the Dashboard, like top and bottom @@ -49,41 +53,37 @@ public class DashboardPanel extends Composite implements NumberOfWindBotsChangeL @UiField LayoutPanel root; - + @UiField - HTMLPanel header; + DashboardHeader header; @UiField Carousel carousel; - @UiField - HTMLPanel leftwindbotcontainer; - - @UiField - HTMLPanel rightwindbotcontainer; + @UiField(provided = true) + WindBotWidget leftWindBotWidget; + + @UiField(provided = true) + WindBotWidget rightWindBotWidget; @UiField(provided = true) StartlineAdvantagesByWindWidget startlineAdvantagesByWindComponent; - @UiField - public DivElement windloadinghintleft; - - @UiField - public DivElement windloadinghintright; - @UiField public HTMLPanel bottombar; @UiField public HTMLPanel windcharthint; + @UiField + public Image eventLogo; + @UiField(provided = true) public StartAnalysisWidget startanalysisComponent; @UiField(provided = true) - public StartLineAdvantageByGeometryWidget startlineAdvantageByGeometryComponent; + public StartlineAdvantageByGeometryWidget startlineAdvantageByGeometryWidget; - private List windBotComponents; private StringMessages stringConstants; DashboardClientFactory dashboardClientFactory; private static final Logger logger = Logger.getLogger(DashboardPanel.class.getName()); @@ -91,34 +91,53 @@ public class DashboardPanel extends Composite implements NumberOfWindBotsChangeL public DashboardPanel(DashboardClientFactory dashboardClientFactory) { DashboardPanelResources.INSTANCE.style().ensureInjected(); this.dashboardClientFactory = dashboardClientFactory; - windBotComponents = new ArrayList(); + leftWindBotWidget = new WindBotWidget(dashboardClientFactory); + rightWindBotWidget = new WindBotWidget(dashboardClientFactory); startanalysisComponent = new StartAnalysisWidget(this.dashboardClientFactory); startlineAdvantagesByWindComponent = new StartlineAdvantagesByWindWidget(this.dashboardClientFactory); - startlineAdvantageByGeometryComponent = new StartLineAdvantageByGeometryWidget(this.dashboardClientFactory); + startlineAdvantageByGeometryWidget = new StartlineAdvantageByGeometryWidget(this.dashboardClientFactory); stringConstants = StringMessages.INSTANCE; initWidget(uiBinder.createAndBindUi(this)); - initLogos(); windcharthint.getElement().setInnerText(stringConstants.dashboardWindChartHint()); - windloadinghintleft.setInnerHTML(stringConstants.dashboardWindBotLoadingText()+"
"+stringConstants.dashboardWindBotLoadingMessage()); - windloadinghintright.setInnerHTML(stringConstants.dashboardWindBotLoadingText()+"
"+stringConstants.dashboardWindBotLoadingMessage()); - loadAndAddEventLogo(dashboardClientFactory.getSailingService()); + loadEventLogoAndName(dashboardClientFactory.getSailingService()); initAndAddWrongOrientationNotification(); registerForDashboardFiveSecondsTimer(dashboardClientFactory); } - - private void initLogos() { - Image logo = new Image(); - logo.setResource(DashboardPanelResources.INSTANCE.logo_sap()); - logo.getElement().addClassName(DashboardPanelResources.INSTANCE.style().logo()); - Document.get().getBody().appendChild(logo.getElement()); - } - private void loadAndAddEventLogo(SailingServiceAsync sailingServiceAsync){ + private void loadEventLogoAndName(SailingServiceAsync sailingServiceAsync){ String eventId = DashboardURLParameters.EVENT_ID.getValue(); if (eventId != null) { - EventLogo eventLogo = EventLogo.getEventLogoFromEventId(sailingServiceAsync, eventId); - if (eventLogo != null) { - Document.get().getBody().appendChild(eventLogo.getElement()); + try { + final UUID eventUUID = UUID.fromString(eventId); + logger.log(Level.INFO, "Loading EventDTO for id " + eventId); + sailingServiceAsync.getEventById(eventUUID, true, new AsyncCallback() { + @Override + public void onSuccess(final EventDTO event) { + logger.log(Level.INFO, "Received EventDTO"); + if (event != null) { + final ImageDTO logo = event.getLogoImage(); + if (logo != null) { + eventLogo.getElement().setAttribute("src", UriUtils.fromString(logo.getSourceRef()).asString()); + } else { + eventLogo.getElement().getStyle().setVisibility(Visibility.HIDDEN); + } + if (event.getName() != null) { + header.setEventName(event.getName()); + Window.setTitle("Dashboard - "+event.getName()); + } + } else { + logger.log(Level.INFO, "Received EventDTO is null"); + } + } + + @Override + public void onFailure(Throwable caught) { + logger.log(Level.INFO, "Failed to received EventDTO, "+caught.getMessage()); + eventLogo.getElement().getStyle().setVisibility(Visibility.HIDDEN); + } + }); + } catch (IllegalArgumentException e) { + eventLogo.getElement().getStyle().setVisibility(Visibility.HIDDEN); } } } @@ -127,52 +146,6 @@ public class DashboardPanel extends Composite implements NumberOfWindBotsChangeL WrongDeviceOrientationNotification wrongDeviceOrientationNotification = new WrongDeviceOrientationNotification(); Document.get().getBody().appendChild(wrongDeviceOrientationNotification.getElement()); } - - private void initWindBotComponents(List windBotIDs, - WindBotDataRetrieverProvider windBotDataRetrieverProvider) { - int windBotAddedCounterTOConsiderForPanels = 0; - leftwindbotcontainer.clear(); - removeWindBotComponentsAsDataRetrieverListener(windBotDataRetrieverProvider); - windBotComponents.clear(); - for (String windBotID : windBotIDs) { - if (windBotAddedCounterTOConsiderForPanels == 0) { - WindBotWidget leftwindBotComponent = new WindBotWidget(windBotID); - leftwindbotcontainer.add(leftwindBotComponent); - windBotComponents.add(leftwindBotComponent); - windloadinghintleft.getStyle().setOpacity(0.0); - } else if (windBotAddedCounterTOConsiderForPanels == 1) { - WindBotWidget rightwindBotComponent = new WindBotWidget(windBotID); - rightwindbotcontainer.add(rightwindBotComponent); - windBotComponents.add(rightwindBotComponent); - windloadinghintright.getStyle().setOpacity(0.0); - } - windBotAddedCounterTOConsiderForPanels++; - if (windloadinghintleft.getStyle().getOpacity() != "0.0" - || windloadinghintright.getStyle().getOpacity() != "0.0") { - windloadinghintleft.setInnerHTML(stringConstants.dashboardWindBotNotAvailable()); - windloadinghintright.setInnerHTML(stringConstants.dashboardWindBotNotAvailable()); - } - } - addWindBotComponentsAsDataRetrieverListener(windBotDataRetrieverProvider); - } - - private void addWindBotComponentsAsDataRetrieverListener(WindBotDataRetrieverProvider windBotDataRetrieverProvider) { - for (WindBotWidget windBotComponent : windBotComponents) { - logger.log(Level.INFO, "Registering WindBotDataRetrieverListener"); - windBotDataRetrieverProvider.addWindBotDataRetrieverListener(windBotComponent); - } - } - - private void removeWindBotComponentsAsDataRetrieverListener( - WindBotDataRetrieverProvider windBotDataRetrieverProvider) { - for (WindBotWidget windBotComponent : windBotComponents) { - windBotDataRetrieverProvider.removeWindBotDataRetrieverListener(windBotComponent); - } - } - - private void setHeaderText(String raceName) { - this.header.getElement().setInnerText(raceName); - } @Override public void timeChanged(Date newTime, Date oldTime) { @@ -185,7 +158,7 @@ public class DashboardPanel extends Composite implements NumberOfWindBotsChangeL public void onSuccess(RaceIdDTO result) { if (result != null && result.getRaceId() != null) { logger.log(Level.INFO, "Updating UI with live race id"); - setHeaderText(result.getRaceId().getRaceName()); + header.setRaceName(result.getRaceId().getRaceName()); } else { logger.log(Level.INFO, "Received null for live race id"); } @@ -207,19 +180,21 @@ public class DashboardPanel extends Composite implements NumberOfWindBotsChangeL } @Override - public void numberOfWindBotsReceivedChanged(List windBotIDs, - WindBotDataRetrieverProvider windBotDataRetrieverProvider) { - if(windBotIDs != null) { - logger.log(Level.INFO, "Number of available windbots changed to "+windBotIDs.size()); + public void numberOfWindBotsReceivedChanged(List windBotIDs, WindBotDataRetrieverProvider windBotDataRetrieverProvider) { + if (windBotIDs != null) { + logger.log(Level.INFO, "Number of available windbots changed to " + windBotIDs.size()); + for (int i = 0; i < windBotIDs.size(); i++) { + if (i == 0) { + leftWindBotWidget.setWindBotId(windBotIDs.get(i)); + windBotDataRetrieverProvider.addWindBotDataRetrieverListener(leftWindBotWidget); + } + if (i == 1) { + rightWindBotWidget.setWindBotId(windBotIDs.get(i)); + windBotDataRetrieverProvider.addWindBotDataRetrieverListener(rightWindBotWidget); + } + } } else { logger.log(Level.INFO, "Number of available windbots changed. WindBots List is null"); } - initWindBotComponents(windBotIDs, windBotDataRetrieverProvider); - } - - @Override - public void numberOfWindBotsReceivedIsZero() { - windloadinghintleft.setInnerText(stringConstants.dashboardWindBotNotAvailable()); - windloadinghintright.setInnerText(stringConstants.dashboardWindBotNotAvailable()); } } diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/dashboardpanel/DashboardPanel.ui.xml b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/dashboardpanel/DashboardPanel.ui.xml index 9016ead477b..94eb1010e74 100644 --- a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/dashboardpanel/DashboardPanel.ui.xml +++ b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/dashboardpanel/DashboardPanel.ui.xml @@ -1,6 +1,8 @@ - - + + - + -
-
-
+
- -
-
-
+ +
- + - + - +
- - + + +
diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/dashboardpanel/DashboardPanelResources.java b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/dashboardpanel/DashboardPanelResources.java index e3b7a8dddc4..c7e147925a4 100644 --- a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/dashboardpanel/DashboardPanelResources.java +++ b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/dashboardpanel/DashboardPanelResources.java @@ -7,34 +7,25 @@ package com.sap.sailing.dashboards.gwt.client.dashboardpanel; import com.google.gwt.core.client.GWT; import com.google.gwt.resources.client.ClientBundle; import com.google.gwt.resources.client.CssResource; -import com.google.gwt.resources.client.ImageResource; public interface DashboardPanelResources extends ClientBundle { public static final DashboardPanelResources INSTANCE = GWT.create(DashboardPanelResources.class); - @Source("com/sap/sailing/dashboards/gwt/client/images/logo_sap.png") - ImageResource logo_sap(); - - @Source("com/sap/sailing/dashboards/gwt/client/images/settings.png") - ImageResource settings(); - @Source({"com/sap/sailing/dashboards/gwt/client/theme/theme.gss", "DashboardPanel.gss"}) DashboardGSS style(); public interface DashboardGSS extends CssResource { - String bar(); String page(); + String header(); String collumn(); String startanalysiscollumn(); String collumnthree(); - String logo(); String right(); String left(); String startline_advantage_by_wind_container(); String startline_advantage_by_geometry_container(); String windcharthint(); - String windloadinghint(); - String windloadinghinttext(); + String event_logo(); } } diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/dataretriever/NumberOfWindBotsChangeListener.java b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/dataretriever/NumberOfWindBotsChangeListener.java index e85672afaaf..17b803da303 100644 --- a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/dataretriever/NumberOfWindBotsChangeListener.java +++ b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/dataretriever/NumberOfWindBotsChangeListener.java @@ -4,5 +4,4 @@ import java.util.List; public interface NumberOfWindBotsChangeListener { public void numberOfWindBotsReceivedChanged(List windBotIDs, WindBotDataRetrieverProvider windBotDataRetrieverProvider); - public void numberOfWindBotsReceivedIsZero(); } diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/dataretriever/WindBotDataRetriever.java b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/dataretriever/WindBotDataRetriever.java index 440951f64b8..f7827b0725e 100644 --- a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/dataretriever/WindBotDataRetriever.java +++ b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/dataretriever/WindBotDataRetriever.java @@ -76,7 +76,6 @@ public class WindBotDataRetriever implements PollsLiveDataEvery5Seconds, WindBot } notifyWindBotDataRetrieverListeners(result); } else { - notifyListenersAboutNumberOfWindBotsReceivedIsZero(); logger.log(Level.INFO, "WindInfoForRaceDTO is not containing wind from windbots"); } } else { @@ -115,12 +114,6 @@ public class WindBotDataRetriever implements PollsLiveDataEvery5Seconds, WindBot } } - private void notifyListenersAboutNumberOfWindBotsReceivedIsZero() { - for (NumberOfWindBotsChangeListener numberOfWindBotsChangeListener : numberOfWindBotsChangeListeners) { - numberOfWindBotsChangeListener.numberOfWindBotsReceivedIsZero(); - } - } - @Override public void addWindBotDataRetrieverListener(WindBotDataRetrieverListener windBotDataRetrieverListener) { windBotDataRetrieverListeners.add(windBotDataRetrieverListener); @@ -156,7 +149,6 @@ public class WindBotDataRetriever implements PollsLiveDataEvery5Seconds, WindBot logger.log(Level.INFO, "Received RegattaAndRaceIdentifier from race that takes wind fixes now"); loadWindBotData(finaloldTime, finalNewTime, raceId); } else { - notifyListenersAboutNumberOfWindBotsReceivedIsZero(); logger.log(Level.INFO, "Can´t load wind data because RegattaAndRaceIdentifier for race which takes wind is null"); } } @@ -164,7 +156,6 @@ public class WindBotDataRetriever implements PollsLiveDataEvery5Seconds, WindBot @Override public void onFailure(Throwable caught) { - notifyListenersAboutNumberOfWindBotsReceivedIsZero(); logger.log(Level.INFO, "Failed to received RegattaAndRaceIdentifier from race that takes wind fixes now"); logger.log(Level.INFO, caught.getMessage()); } diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/eventlogo/EventLogo.java b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/eventlogo/EventLogo.java deleted file mode 100644 index bf051376afb..00000000000 --- a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/eventlogo/EventLogo.java +++ /dev/null @@ -1,60 +0,0 @@ -package com.sap.sailing.dashboards.gwt.client.eventlogo; - -import java.util.UUID; -import java.util.logging.Level; -import java.util.logging.Logger; - -import com.google.gwt.dom.client.Style.Visibility; -import com.google.gwt.safehtml.shared.UriUtils; -import com.google.gwt.user.client.Window; -import com.google.gwt.user.client.rpc.AsyncCallback; -import com.google.gwt.user.client.ui.Image; -import com.sap.sailing.gwt.ui.client.SailingServiceAsync; -import com.sap.sailing.gwt.ui.shared.EventDTO; -import com.sap.sse.gwt.client.media.ImageDTO; - -public class EventLogo extends Image { - - private static final Logger logger = Logger.getLogger(EventLogo.class.getName()); - - protected EventLogo() { - super(); - this.getElement().addClassName("eventLogo"); - } - - public static EventLogo getEventLogoFromEventId(SailingServiceAsync sailingServiceAsync, String eventId) { - final EventLogo eventLogo = new EventLogo(); - try { - final UUID eventUUID = UUID.fromString(eventId); - logger.log(Level.INFO, "Loading EventDTO for id " + eventId); - sailingServiceAsync.getEventById(eventUUID, true, new AsyncCallback() { - @Override - public void onSuccess(final EventDTO event) { - logger.log(Level.INFO, "Received EventDTO"); - if (event != null) { - final ImageDTO logo = event.getLogoImage(); - if (logo != null) { - eventLogo.getElement().setAttribute("src", UriUtils.fromString(logo.getSourceRef()).asString()); - } else { - eventLogo.getElement().getStyle().setVisibility(Visibility.HIDDEN); - } - if (event.getName() != null) { - Window.setTitle(event.getName() + " Dashboard"); - } - } else { - logger.log(Level.INFO, "Received EventDTO is null"); - } - } - - @Override - public void onFailure(Throwable caught) { - logger.log(Level.INFO, "Failed to received EventDTO, "+caught.getMessage()); - eventLogo.getElement().getStyle().setVisibility(Visibility.HIDDEN); - } - }); - } catch (IllegalArgumentException e) { - eventLogo.getElement().getStyle().setVisibility(Visibility.HIDDEN); - } - return eventLogo; - } -} diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/header/DashboardHeader.gss b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/header/DashboardHeader.gss new file mode 100644 index 00000000000..59f5401a5e7 --- /dev/null +++ b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/header/DashboardHeader.gss @@ -0,0 +1,49 @@ +@require 'theme'; + +.sap_logo { + position: absolute; + height: DASHBOARD_SPACE_MEDIUM; + width: auto; + top: 0px; + left: 0px; + z-index: 1; +} + +.event_race_container { + position: absolute; + height: DASHBOARD_SPACE_MEDIUM; + width: 100%; + top: 0px; + color: LIGHT_TEXT_COLOR; +} + +.event { + width: 100%; + height: DASHBOARD_SPACE_MEDIUM; + top: 0px; + line-height: DASHBOARD_SPACE_MEDIUM; + vertical-align: middle; + font-size: DASHBOARD_FONT_SIZE_MEDIUM; + font-family: DASHBOARD_FONT_FAMILY; + text-align: center; + font-weight: bold; + overflow: visible; +} + +.event_shared_space { + height: DASHBOARD_FONT_SIZE_MEDIUM; + top: DASHBOARD_SPACE_VERY_SMALL; + line-height: DASHBOARD_FONT_SIZE_MEDIUM; +} + +.race { + width: 100%; + height: DASHBOARD_FONT_SIZE_SMALL; + margin-top: 5px; + line-height: DASHBOARD_FONT_SIZE_SMALL; + vertical-align: middle; + font-size: DASHBOARD_FONT_SIZE_SMALL; + font-family: DASHBOARD_FONT_FAMILY; + text-align: center; + overflow: visible; +} diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/header/DashboardHeader.java b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/header/DashboardHeader.java new file mode 100644 index 00000000000..3f641a2b5b3 --- /dev/null +++ b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/header/DashboardHeader.java @@ -0,0 +1,72 @@ +package com.sap.sailing.dashboards.gwt.client.header; + +import java.util.Iterator; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.dom.client.DivElement; +import com.google.gwt.resources.client.CssResource; +import com.google.gwt.uibinder.client.UiBinder; +import com.google.gwt.uibinder.client.UiField; +import com.google.gwt.user.client.ui.Composite; +import com.google.gwt.user.client.ui.HasWidgets; +import com.google.gwt.user.client.ui.Image; +import com.google.gwt.user.client.ui.Widget; +import com.sap.sailing.gwt.ui.client.StringMessages; + +public class DashboardHeader extends Composite implements HasWidgets { + + private static DashboardHeaderUiBinder uiBinder = GWT.create(DashboardHeaderUiBinder.class); + + interface DashboardHeaderUiBinder extends UiBinder { + } + + interface SettingsButtonWithSelectionIndicationLabelStyle extends CssResource { + } + + @UiField + Image sapLogo; + + @UiField + DivElement event; + + @UiField + DivElement race; + + private DashboardHeaderResources dashboardHeaderResources = DashboardHeaderResources.INSTANCE; + + public DashboardHeader() { + dashboardHeaderResources.gss().ensureInjected(); + initWidget(uiBinder.createAndBindUi(this)); + sapLogo.setResource(DashboardHeaderResources.INSTANCE.sapLogo()); + event.setInnerHTML(StringMessages.INSTANCE.dashboardHeader()); + } + + public void setEventName(String eventName) { + event.setInnerHTML(eventName); + } + + public void setRaceName(String raceName) { + this.event.addClassName(dashboardHeaderResources.gss().event_shared_space()); + race.setInnerHTML(raceName); + } + + @Override + public void add(Widget w) { + throw new UnsupportedOperationException("The method add(Widget w) is not supported."); + } + + @Override + public void clear() { + throw new UnsupportedOperationException("The method clear() is not supported."); + } + + @Override + public Iterator iterator() { + return null; + } + + @Override + public boolean remove(Widget w) { + return false; + } +} diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/header/DashboardHeader.ui.xml b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/header/DashboardHeader.ui.xml new file mode 100644 index 00000000000..cd7a0ab64d9 --- /dev/null +++ b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/header/DashboardHeader.ui.xml @@ -0,0 +1,14 @@ + + + + + + + +
+
+
+
+
+
\ No newline at end of file diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/header/DashboardHeaderResources.java b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/header/DashboardHeaderResources.java new file mode 100644 index 00000000000..ff75072020a --- /dev/null +++ b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/header/DashboardHeaderResources.java @@ -0,0 +1,29 @@ +package com.sap.sailing.dashboards.gwt.client.header; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.resources.client.ClientBundle; +import com.google.gwt.resources.client.CssResource; +import com.google.gwt.resources.client.ImageResource; + +/** + * @author Alexander Ries (D062114) + * + */ +public interface DashboardHeaderResources extends ClientBundle { + + public static final DashboardHeaderResources INSTANCE = GWT.create(DashboardHeaderResources.class); + + @Source("com/sap/sailing/dashboards/gwt/client/images/logo_sap.png") + ImageResource sapLogo(); + + @Source({"com/sap/sailing/dashboards/gwt/client/theme/theme.gss", "DashboardHeader.gss"}) + DashboardHeaderGSS gss(); + + public interface DashboardHeaderGSS extends CssResource { + String sap_logo(); + String event_race_container(); + String event(); + String event_shared_space(); + String race(); + } +} diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/linker/DashboardManifestLinker.java b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/linker/DashboardManifestLinker.java new file mode 100644 index 00000000000..a630e5cbe1b --- /dev/null +++ b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/linker/DashboardManifestLinker.java @@ -0,0 +1,22 @@ +package com.sap.sailing.dashboards.gwt.client.linker; + +import com.google.gwt.core.ext.linker.Shardable; +import com.sap.sse.gwt.client.linker.ManifestLinker; + +/** + * @author Alexander Ries (D062114) + * + */ + +@Shardable +public class DashboardManifestLinker extends ManifestLinker { + + @Override + protected String[] staticCachedFiles() { + return new String[] { "/dashboards/RibDashboard.html", + "/dashboards/RibDashboard.css", + "/dashboards/images/dashboardicon.png", + "/dashboards/js/jquery-1.5.2.min.js", + "/sailing-fontface-1.0.cache.css"}; + } +} diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/linker/cache.manifest.template b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/linker/cache.manifest.template new file mode 100644 index 00000000000..dd838fa13be --- /dev/null +++ b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/linker/cache.manifest.template @@ -0,0 +1,14 @@ +CACHE MANIFEST +# Unique id #$UNIQUEID$ +# Build version $BUILDVERSION$ +# Change this every time for cache to invalidate. +# Do not delete the sections, as safari requires this file structure!!! + +NETWORK: +* + +CACHE: +$STATICAPPFILES$ +$GENAPPFILES$ + +FALLBACK: \ No newline at end of file diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/notifications/bottom/BottomNotification.gss b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/notifications/bottom/BottomNotification.gss index 627f472867f..656cd57794a 100644 --- a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/notifications/bottom/BottomNotification.gss +++ b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/notifications/bottom/BottomNotification.gss @@ -4,12 +4,12 @@ position: absolute !important; opacity: 0.9; background-color: #F0AB00; - height: 0pt; + height: 0px; width: 100%; - bottom: 0pt; + bottom: 0px; text-align: center; - font-size: 15pt; - line-height: 30pt; + font-size: DASHBOARD_FONT_SIZE_LARGE; + line-height: DASHBOARD_SPACE_MEDIUM; color: black; font-family: DASHBOARD_FONT_FAMILY; z-index: 2; @@ -20,8 +20,8 @@ -moz-transition: all 700ms cubic-bezier(0.480, -0.035, 0.000, 2.650); -o-transition: all 700ms cubic-bezier(0.480, -0.035, 0.000, 2.650); transition: all 700ms cubic-bezier(0.480, -0.035, 0.000, 2.650); - height: 30pt; - line-height: 30pt; + height: DASHBOARD_SPACE_MEDIUM; + line-height: DASHBOARD_SPACE_MEDIUM; } .hidden { @@ -29,6 +29,6 @@ -moz-transition: all 700ms cubic-bezier(0.480, -0.035, 0.000, 1.650); -o-transition: all 700ms cubic-bezier(0.480, -0.035, 0.000, 1.650); transition: all 700ms cubic-bezier(0.480, -0.035, 0.000, 1.650); - height: 0pt; - line-height: 0pt; + height: 0px; + line-height: 0px; } \ No newline at end of file diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/notifications/orientation/WrongDeviceOrientationNotification.gss b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/notifications/orientation/WrongDeviceOrientationNotification.gss index 948368c90ee..a6b8e377386 100644 --- a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/notifications/orientation/WrongDeviceOrientationNotification.gss +++ b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/notifications/orientation/WrongDeviceOrientationNotification.gss @@ -1,11 +1,31 @@ @require 'theme'; +.notification_background { + position: absolute !important; + top: 0px; + left: 0px; + background-color: DARK_GREY; + z-index: 7; +} + +.notification_background_shown { + width: 100%; + height: 100%; + opacity: 1.0; +} + +.notification_background_hidden { + width: 0px; + height: 0px; + opacity: 0.0; +} + .notification { position: absolute !important; top: 50%; right: 50%; - background-color: white; - z-index: 2; + background-color: WHITE; + z-index: 8; } .shown { diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/notifications/orientation/WrongDeviceOrientationNotification.java b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/notifications/orientation/WrongDeviceOrientationNotification.java index 6ae4e7f05d4..c4944053911 100644 --- a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/notifications/orientation/WrongDeviceOrientationNotification.java +++ b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/notifications/orientation/WrongDeviceOrientationNotification.java @@ -3,47 +3,53 @@ package com.sap.sailing.dashboards.gwt.client.notifications.orientation; import com.google.gwt.user.client.ui.AbsolutePanel; import com.google.gwt.user.client.ui.Image; import com.google.gwt.user.client.ui.Label; -import com.google.gwt.user.client.ui.RootLayoutPanel; import com.sap.sailing.dashboards.gwt.client.device.Orientation; import com.sap.sailing.dashboards.gwt.client.device.OrientationListener; import com.sap.sailing.dashboards.gwt.client.device.OrientationType; -import com.sap.sailing.dashboards.gwt.client.visualeffects.BlurEffect; import com.sap.sse.common.Util.Pair; public class WrongDeviceOrientationNotification extends AbsolutePanel implements OrientationListener { private Label rotateDeviceLabel; + private AbsolutePanel notification; public WrongDeviceOrientationNotification() { super(); WrongDeviceOrientationNotificationResources.INSTANCE.gss().ensureInjected(); - this.addStyleName(WrongDeviceOrientationNotificationResources.INSTANCE.gss().notification()); - this.addStyleName(WrongDeviceOrientationNotificationResources.INSTANCE.gss().hidden()); + this.addStyleName(WrongDeviceOrientationNotificationResources.INSTANCE.gss().notification_background()); + this.addStyleName(WrongDeviceOrientationNotificationResources.INSTANCE.gss().notification_background_hidden()); + notification = new AbsolutePanel(); + notification.addStyleName(WrongDeviceOrientationNotificationResources.INSTANCE.gss().notification()); + notification.addStyleName(WrongDeviceOrientationNotificationResources.INSTANCE.gss().hidden()); Image rotateDeviceIcon = new Image(); rotateDeviceIcon.setResource(WrongDeviceOrientationNotificationResources.INSTANCE.rotatedevice()); rotateDeviceIcon.getElement().addClassName(WrongDeviceOrientationNotificationResources.INSTANCE.gss().logo()); - add(rotateDeviceIcon); + notification.add(rotateDeviceIcon); rotateDeviceLabel = new Label(); rotateDeviceLabel.getElement().addClassName(WrongDeviceOrientationNotificationResources.INSTANCE.gss().text()); rotateDeviceLabel.setText("Rotate Device"); - add(rotateDeviceLabel); + notification.add(rotateDeviceLabel); + + this.add(notification); Orientation.getInstance().addListener(this); Orientation.getInstance().triggerDeviceOrientationRead(); } public void show() { - this.removeStyleName(WrongDeviceOrientationNotificationResources.INSTANCE.gss().hidden()); - this.addStyleName(WrongDeviceOrientationNotificationResources.INSTANCE.gss().shown()); - BlurEffect.getInstance().addToView(RootLayoutPanel.get()); + this.removeStyleName(WrongDeviceOrientationNotificationResources.INSTANCE.gss().notification_background_hidden()); + this.addStyleName(WrongDeviceOrientationNotificationResources.INSTANCE.gss().notification_background_shown()); + notification.removeStyleName(WrongDeviceOrientationNotificationResources.INSTANCE.gss().hidden()); + notification.addStyleName(WrongDeviceOrientationNotificationResources.INSTANCE.gss().shown()); } public void hide() { - this.removeStyleName(WrongDeviceOrientationNotificationResources.INSTANCE.gss().shown()); - this.addStyleName(WrongDeviceOrientationNotificationResources.INSTANCE.gss().hidden()); - BlurEffect.getInstance().removeFromView(RootLayoutPanel.get()); + this.removeStyleName(WrongDeviceOrientationNotificationResources.INSTANCE.gss().notification_background_shown()); + this.addStyleName(WrongDeviceOrientationNotificationResources.INSTANCE.gss().notification_background_hidden()); + notification.removeStyleName(WrongDeviceOrientationNotificationResources.INSTANCE.gss().shown()); + notification.addStyleName(WrongDeviceOrientationNotificationResources.INSTANCE.gss().hidden()); } @Override diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/notifications/orientation/WrongDeviceOrientationNotificationResources.java b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/notifications/orientation/WrongDeviceOrientationNotificationResources.java index 43b88ebcfed..b341950f9ab 100644 --- a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/notifications/orientation/WrongDeviceOrientationNotificationResources.java +++ b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/notifications/orientation/WrongDeviceOrientationNotificationResources.java @@ -20,6 +20,9 @@ public interface WrongDeviceOrientationNotificationResources extends ClientBundl WrongDeviceNotificationGSS gss(); public interface WrongDeviceNotificationGSS extends CssResource { + public String notification_background(); + public String notification_background_shown(); + public String notification_background_hidden(); public String notification(); public String shown(); public String hidden(); diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/popups/competitorselection/CompetitorSelectionPopup.css b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/popups/competitorselection/CompetitorSelectionPopup.css deleted file mode 100644 index 665596c0f8d..00000000000 --- a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/popups/competitorselection/CompetitorSelectionPopup.css +++ /dev/null @@ -1,85 +0,0 @@ -@CHARSET "UTF-8"; - -.competitorselectionbackground { - position: absolute; - background-color: rgba(0, 0, 0, 0.6); - width: 100%; - height: 100%; - z-index: 1; -} - -.competitorselectionpopup { - position: absolute; - left: 50%; - top: 50%; - width: 200pt; - height: 200pt; - margin-top: -600pt; - margin-left: -100pt; - background-color: rgba(255, 255, 255, 1); - border-radius: 0px; - z-index: 2; -} - -.header { - position: absolute; - color: black; - font-size: 12pt; - background-color: white; - height: 30pt; - line-height: 30pt; - vertical-align: middle; - text-align: center; - font-weight: bold; - text-shadow: 0 1px 1px rgba(255, 255, 255, 0.7); - width: 100%; - z-index: 3; -} - -.scrollpanel { - position: absolute; - top: 30pt; - width: 100%; - bottom: 6pt; - overflow: hidden; - z-index: 2; -} - -.button { - position: absolute; - background-color: #2AB3E8; - box-shadow: none; - outline: none; - border-width: 0; - font-size: 12pt; - font-color: white; - color: white; - height: 0pt; - width: 100%; - top: 100%; - left: 0pt; -} - -.button:active { - background-color: #4192D9; -} - -.buttonshow { - transition: all ease-in-out 200ms; - height: 30pt; -} - -.popuphide { - transition: all ease-in-out 500ms; - height: 0pt; -} - -.popupshow { - transition: margin-top ease-in-out 500ms; - margin-top: -100pt; -} - -.popuphide { - transition: margin-top ease-in-out 500ms; - margin-top: -600pt; -} diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/popups/competitorselection/CompetitorSelectionPopup.gss b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/popups/competitorselection/CompetitorSelectionPopup.gss new file mode 100644 index 00000000000..7ddd775d473 --- /dev/null +++ b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/popups/competitorselection/CompetitorSelectionPopup.gss @@ -0,0 +1,91 @@ +@require 'theme'; + +.competitorselectionbackground { + position: absolute; + background-color: rgba(0, 0, 0, 0.4); + width: 100%; + height: 100%; + z-index: 4; +} + +.competitorselectionpopup { + position: absolute; + left: 50%; + top: 50%; + width: 250px; + height: 300px; + margin-top: -150px; + margin-left: -125px; + background-color: WHITE; + border-radius: 5px; + overflow: hidden; + z-index: 7; +} + +.header { + position: absolute; + color: BLACK; + font-size: DASHBOARD_FONT_SIZE_MEDIUM; + background-color: WHITE; + height: DASHBOARD_SPACE_MEDIUM; + line-height: DASHBOARD_SPACE_MEDIUM; + vertical-align: middle; + text-align: center; + font-weight: bold; + text-shadow: 0 1px 1px rgba(255, 255, 255, 0.7); + width: 100%; + z-index: 3; +} + +.scrollpanel { + position: absolute; + top: DASHBOARD_SPACE_MEDIUM; + width: 100%; + bottom: 42px; + overflow: hidden; + z-index: 2; +} + +.buttonSeparator { + position: absolute; + height: DASHBOARD_SPACE_MEDIUM; + width: 1px; + left: 49%; + bottom: 0px; + background-color: WHITE; +} + +.button { + position: absolute; + bottom: 0px; + background-color: BUTTON_BACKGROUND; + box-shadow: none; + outline: none; + border-width: 0; + font-size: DASHBOARD_FONT_SIZE_MEDIUM; + line-height: DASHBOARD_SPACE_MEDIUM; + text-align: center; + color: WHITE; + height: DASHBOARD_SPACE_MEDIUM; + width: 50%; +} + +.button:active { + background-color: BUTTON_BACKGROUND_ACTIVE; +} + +.cancelButton { + left:0px; +} + +.okButton { + right: 0px; +} + +.popupshow { +/* margin-top: -150pt; */ +} + +.popuphide { +/* margin-top: -600pt; */ +} diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/popups/competitorselection/CompetitorSelectionPopup.java b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/popups/competitorselection/CompetitorSelectionPopup.java index a41d2825551..743eb998187 100644 --- a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/popups/competitorselection/CompetitorSelectionPopup.java +++ b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/popups/competitorselection/CompetitorSelectionPopup.java @@ -5,48 +5,42 @@ import java.util.Iterator; import java.util.List; import com.google.gwt.core.client.GWT; -import com.google.gwt.event.dom.client.ClickEvent; -import com.google.gwt.resources.client.CssResource; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; -import com.google.gwt.uibinder.client.UiHandler; -import com.google.gwt.user.client.ui.Button; +import com.google.gwt.user.client.Event; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.HTMLPanel; import com.google.gwt.user.client.ui.HasWidgets; import com.google.gwt.user.client.ui.RootLayoutPanel; -import com.google.gwt.user.client.ui.VerticalPanel; import com.google.gwt.user.client.ui.Widget; +import com.sap.sailing.dashboards.gwt.client.popups.competitorselection.table.CompetitorTable; +import com.sap.sailing.dashboards.gwt.client.popups.competitorselection.table.CompetitorTableRowSelectionListener; +import com.sap.sailing.dashboards.gwt.client.widgets.ActionPanel; import com.sap.sailing.domain.common.dto.CompetitorDTO; public class CompetitorSelectionPopup extends Composite implements HasWidgets, CompetitorTableRowSelectionListener { - interface CompetitorSelectionPopupStyle extends CssResource { - String popupshow(); - String popuphide(); - String buttonshow(); - } + @UiField(provided = true) + ActionPanel competitorselectionbackground; @UiField - CompetitorSelectionPopupStyle style; + HTMLPanel competitorselectionpopup; - @UiField - HTMLPanel competitorselectionbackground; - - @UiField - VerticalPanel competitorselectionpopup; - @UiField HTMLPanel header; @UiField(provided = true) CompetitorTable competitortable; - @UiField - Button button; + @UiField(provided = true) + ActionPanel cancelButton; + + @UiField(provided = true) + ActionPanel okButton; private CompetitorDTO currentCompetitorSelected; private boolean isVisible; + private CompetitorSelectionPopupResources competitorSelectionPopupResources = CompetitorSelectionPopupResources.INSTANCE; private List competitorSelectionPopupListener; @@ -56,28 +50,34 @@ public class CompetitorSelectionPopup extends Composite implements HasWidgets, C } public CompetitorSelectionPopup() { + competitorSelectionPopupResources.gss().ensureInjected(); competitorSelectionPopupListener = new ArrayList(); competitortable = new CompetitorTable(this); isVisible = false; + competitorselectionbackground = new ActionPanel(Event.TOUCHEVENTS, Event.ONCLICK); + cancelButton = new ActionPanel(Event.TOUCHEVENTS, Event.ONCLICK); + okButton = new ActionPanel(Event.TOUCHEVENTS, Event.ONCLICK); + addActionListenerToActionPanels(); initWidget(uiBinder.createAndBindUi(this)); + cancelButton.getElement().setInnerText("CANCEL"); + okButton.getElement().setInnerText("OK"); } public void show(List competitorList) { competitortable.setTableContent(competitorList); RootLayoutPanel.get().add(this); - this.button.setText("OK"); - competitorselectionpopup.addStyleName(style.popupshow()); - competitorselectionpopup.removeStyleName(style.popuphide()); + competitorselectionpopup.addStyleName(competitorSelectionPopupResources.gss().popupshow()); + competitorselectionpopup.removeStyleName(competitorSelectionPopupResources.gss().popuphide()); isVisible = true; } public void hide() { - competitorselectionpopup.addStyleName(style.popuphide()); - competitorselectionpopup.removeStyleName(style.popupshow()); + competitorselectionpopup.addStyleName(competitorSelectionPopupResources.gss().popuphide()); + competitorselectionpopup.removeStyleName(competitorSelectionPopupResources.gss().popupshow()); RootLayoutPanel.get().remove(this); isVisible = false; } - + public void addListener(CompetitorSelectionListener o) { if (o != null && !competitorSelectionPopupListener.contains(o)) { this.competitorSelectionPopupListener.add(o); @@ -94,25 +94,42 @@ public class CompetitorSelectionPopup extends Composite implements HasWidgets, C } hide(); } - - public boolean isShown(){ + + public boolean isShown() { return isVisible; } - @UiHandler("button") - void handleClick(ClickEvent e) { - hide(); - if (currentCompetitorSelected != null) { - notifyListenerAboutOKButtonClickedWithSelectedCompetitorName(currentCompetitorSelected); - } - } - - @Override - public void didSelectedRowWithCompetitorName(CompetitorDTO competitor) { - button.getElement().addClassName(style.buttonshow()); - currentCompetitorSelected = competitor; + private void addActionListenerToActionPanels() { + competitorselectionbackground.addActionPanelListener(new ActionPanel.ActionPanelListener() { + + @Override + public void eventTriggered() { + hide(); + } + }); + cancelButton.addActionPanelListener(new ActionPanel.ActionPanelListener() { + + @Override + public void eventTriggered() { + hide(); + } + }); + okButton.addActionPanelListener(new ActionPanel.ActionPanelListener() { + + @Override + public void eventTriggered() { + hide(); + if (currentCompetitorSelected != null) { + notifyListenerAboutOKButtonClickedWithSelectedCompetitorName(currentCompetitorSelected); + } + } + }); } + @Override + public void didSelectedRowWithCompetitorName(CompetitorDTO competitor) { + currentCompetitorSelected = competitor; + } @Override public void add(Widget w) { diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/popups/competitorselection/CompetitorSelectionPopup.ui.xml b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/popups/competitorselection/CompetitorSelectionPopup.ui.xml index 9c762ce1e0e..8980164e04d 100644 --- a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/popups/competitorselection/CompetitorSelectionPopup.ui.xml +++ b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/popups/competitorselection/CompetitorSelectionPopup.ui.xml @@ -1,25 +1,25 @@ + xmlns:table="urn:import:com.sap.sailing.dashboards.gwt.client.popups.competitorselection.table" + xmlns:mgwts="urn:import:com.googlecode.mgwt.ui.client.widget.panel.scroll" + xmlns:action="urn:import:com.sap.sailing.dashboards.gwt.client.widgets"> - - - - Select your Team - - - - - - - + + + + + + Select your Team + + + + + + +
+ +
\ No newline at end of file diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/popups/competitorselection/CompetitorSelectionPopupResources.java b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/popups/competitorselection/CompetitorSelectionPopupResources.java new file mode 100644 index 00000000000..79330d81dd2 --- /dev/null +++ b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/popups/competitorselection/CompetitorSelectionPopupResources.java @@ -0,0 +1,30 @@ +package com.sap.sailing.dashboards.gwt.client.popups.competitorselection; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.resources.client.ClientBundle; +import com.google.gwt.resources.client.CssResource; + +/** + * @author Alexander Ries (D062114) + * + */ +public interface CompetitorSelectionPopupResources extends ClientBundle { + + public static final CompetitorSelectionPopupResources INSTANCE = GWT.create(CompetitorSelectionPopupResources.class); + + @Source({"com/sap/sailing/dashboards/gwt/client/theme/theme.gss", "CompetitorSelectionPopup.gss"}) + CompetitorSelectionPopupGss gss(); + + public interface CompetitorSelectionPopupGss extends CssResource { + String competitorselectionbackground(); + String competitorselectionpopup(); + String header(); + String scrollpanel(); + String buttonSeparator(); + String button(); + String cancelButton(); + String okButton(); + String popuphide(); + String popupshow(); + } +} \ No newline at end of file diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/popups/competitorselection/SettingsButtonWithSelectionIndicationLabel.css b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/popups/competitorselection/SettingsButtonWithSelectionIndicationLabel.css deleted file mode 100644 index 3231255779b..00000000000 --- a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/popups/competitorselection/SettingsButtonWithSelectionIndicationLabel.css +++ /dev/null @@ -1,27 +0,0 @@ -@CHARSET "UTF-8"; - -.settings_button { - position: absolute !important; - height: 23.5pt; - width: 23.5pt; - right: 10pt; - top: 17.5pt; - z-index: 2; -} - -.settings_button_image { - height: 23.5pt; - width: 23.5pt; -} - -.settings_indication_label { - position: absolute; - width: 200pt; - height: 23.5pt; - margin-top: 17.5pt; - right: 43.5pt; - font-size: 12pt; - font-color: black; - text-align: right; - line-height: 23.5pt; -} \ No newline at end of file diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/popups/competitorselection/SettingsButtonWithSelectionIndicationLabel.java b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/popups/competitorselection/SettingsButtonWithSelectionIndicationLabel.java deleted file mode 100644 index 05a92598d1c..00000000000 --- a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/popups/competitorselection/SettingsButtonWithSelectionIndicationLabel.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.sap.sailing.dashboards.gwt.client.popups.competitorselection; - -import com.google.gwt.core.client.GWT; -import com.google.gwt.event.dom.client.ClickHandler; -import com.google.gwt.resources.client.CssResource; -import com.google.gwt.uibinder.client.UiBinder; -import com.google.gwt.uibinder.client.UiField; -import com.google.gwt.user.client.ui.Composite; -import com.google.gwt.user.client.ui.FocusPanel; -import com.google.gwt.user.client.ui.Image; -import com.google.gwt.user.client.ui.Label; -import com.google.gwt.user.client.ui.Widget; -import com.sap.sailing.dashboards.gwt.client.dashboardpanel.DashboardPanelResources; - -public class SettingsButtonWithSelectionIndicationLabel extends Composite { - - private static SettingsButtonWithSelectionIndicationLabelUiBinder uiBinder = GWT - .create(SettingsButtonWithSelectionIndicationLabelUiBinder.class); - - interface SettingsButtonWithSelectionIndicationLabelUiBinder extends - UiBinder { - } - - interface SettingsButtonWithSelectionIndicationLabelStyle extends CssResource { - } - - @UiField - SettingsButtonWithSelectionIndicationLabelStyle style; - - @UiField - FocusPanel settingsButton; - - @UiField - Image settingsButtonImage; - - @UiField - Label settingsIndicationLabel; - - public SettingsButtonWithSelectionIndicationLabel() { - initWidget(uiBinder.createAndBindUi(this)); - settingsButtonImage.setResource(DashboardPanelResources.INSTANCE.settings()); - } - - public void addClickHandlerToSettingsButton(ClickHandler clickHandler){ - settingsButton.addClickHandler(clickHandler); - } - - public void setSelectionIndicationTextOnLabel(String selectionIndicationText) { - settingsIndicationLabel.setText(selectionIndicationText); - } -} diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/popups/competitorselection/SettingsButtonWithSelectionIndicationLabel.ui.xml b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/popups/competitorselection/SettingsButtonWithSelectionIndicationLabel.ui.xml deleted file mode 100644 index 865b2a2a998..00000000000 --- a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/popups/competitorselection/SettingsButtonWithSelectionIndicationLabel.ui.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/popups/competitorselection/CompetitorTable.java b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/popups/competitorselection/table/CompetitorTable.java similarity index 99% rename from java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/popups/competitorselection/CompetitorTable.java rename to java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/popups/competitorselection/table/CompetitorTable.java index 7190699bafb..56ae2e648c1 100644 --- a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/popups/competitorselection/CompetitorTable.java +++ b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/popups/competitorselection/table/CompetitorTable.java @@ -1,4 +1,4 @@ -package com.sap.sailing.dashboards.gwt.client.popups.competitorselection; +package com.sap.sailing.dashboards.gwt.client.popups.competitorselection.table; import java.util.List; diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/popups/competitorselection/CompetitorTableRowSelectionListener.java b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/popups/competitorselection/table/CompetitorTableRowSelectionListener.java similarity index 94% rename from java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/popups/competitorselection/CompetitorTableRowSelectionListener.java rename to java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/popups/competitorselection/table/CompetitorTableRowSelectionListener.java index 32bae21b54c..3087d8745b4 100644 --- a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/popups/competitorselection/CompetitorTableRowSelectionListener.java +++ b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/popups/competitorselection/table/CompetitorTableRowSelectionListener.java @@ -1,4 +1,4 @@ -package com.sap.sailing.dashboards.gwt.client.popups.competitorselection; +package com.sap.sailing.dashboards.gwt.client.popups.competitorselection.table; import com.sap.sailing.domain.common.dto.CompetitorDTO; diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/popups/competitorselection/CompetitorTableStyle.css b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/popups/competitorselection/table/CompetitorTableStyle.css similarity index 53% rename from java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/popups/competitorselection/CompetitorTableStyle.css rename to java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/popups/competitorselection/table/CompetitorTableStyle.css index dbad0efc14d..62fa6469b9f 100644 --- a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/popups/competitorselection/CompetitorTableStyle.css +++ b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/popups/competitorselection/table/CompetitorTableStyle.css @@ -1,4 +1,3 @@ -@CHARSET "UTF-8"; .cellTableHeader { height: 0pt; @@ -10,25 +9,25 @@ .cellTableCell { padding: 10px; overflow: hidden; - font-size: 12pt; + font-size: 14px; color: black; - background-color: #d3d3d3; - border-width: 4px 8px 4px 8px; + background-color: #E0E0E0; + border-width: 0px 8px 8px 8px; border-color: white; } .cellTableSelectedRow { - background: grey !important; - backrgound-color: #d3d3d3 !important; + background: #848484 !important; + backrgound-color: #848484 !important; color: white !important; - border-width: 3pt 6pt 3pt 6pt; + border-width: 0px 8px 8px 8px; border-color: white; } .cellTableSelectedRowCell { - background: grey !important; - backrgound-color: #d3d3d3 !important; + background: #848484 !important; + backrgound-color: #848484 !important; color: white !important; - border-width: 3pt 6pt 3pt 6pt; + border-width: 0px 8px 8px 8px; border-color: white; } \ No newline at end of file diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/popups/competitorselection/CompetitorTableStyleResource.java b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/popups/competitorselection/table/CompetitorTableStyleResource.java similarity index 95% rename from java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/popups/competitorselection/CompetitorTableStyleResource.java rename to java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/popups/competitorselection/table/CompetitorTableStyleResource.java index e9cb0af6c7b..d1a5fe46776 100644 --- a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/popups/competitorselection/CompetitorTableStyleResource.java +++ b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/popups/competitorselection/table/CompetitorTableStyleResource.java @@ -1,11 +1,10 @@ -package com.sap.sailing.dashboards.gwt.client.popups.competitorselection; +package com.sap.sailing.dashboards.gwt.client.popups.competitorselection.table; import com.google.gwt.user.cellview.client.CellTable; public interface CompetitorTableStyleResource extends CellTable.Resources { @Source({CellTable.Style.DEFAULT_CSS, "CompetitorTableStyle.css"}) - TableStyle cellTableStyle(); interface TableStyle extends CellTable.Style { diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/popups/competitorselection/util/SettingsButtonWithSelectionIndicationLabel.gss b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/popups/competitorselection/util/SettingsButtonWithSelectionIndicationLabel.gss new file mode 100644 index 00000000000..f7c5fdf100a --- /dev/null +++ b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/popups/competitorselection/util/SettingsButtonWithSelectionIndicationLabel.gss @@ -0,0 +1,35 @@ +@require 'theme'; + +.settings_button { + position: absolute !important; + height: DASHBOARD_SPACE_MEDIUM; + right: 0px; + top: 0px; + width: 300px; + z-index: 5; +} + +.settings_button_image { + position: absolute; + height: 20px; + width: 20px; + top: 7.5px; + right: DASHBOARD_SPACE_VERY_SMALL; +} + +.settings_indication_label { + position: absolute; + width: 300px; + height: DASHBOARD_SPACE_MEDIUM; + top: 0px; + right: DASHBOARD_SPACE_MEDIUM; + font-size: DASHBOARD_FONT_SIZE_MEDIUM; + color: black; + text-align: right; + line-height: DASHBOARD_SPACE_MEDIUM; + z-index: 3; +} + +.settings_indication_label_disabled { + color: DARK_GREY; +} \ No newline at end of file diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/popups/competitorselection/util/SettingsButtonWithSelectionIndicationLabel.java b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/popups/competitorselection/util/SettingsButtonWithSelectionIndicationLabel.java new file mode 100644 index 00000000000..04b6001a7ea --- /dev/null +++ b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/popups/competitorselection/util/SettingsButtonWithSelectionIndicationLabel.java @@ -0,0 +1,85 @@ +package com.sap.sailing.dashboards.gwt.client.popups.competitorselection.util; + +import java.util.Iterator; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.resources.client.CssResource; +import com.google.gwt.uibinder.client.UiBinder; +import com.google.gwt.uibinder.client.UiField; +import com.google.gwt.user.client.Event; +import com.google.gwt.user.client.ui.Composite; +import com.google.gwt.user.client.ui.HTMLPanel; +import com.google.gwt.user.client.ui.HasWidgets; +import com.google.gwt.user.client.ui.Image; +import com.google.gwt.user.client.ui.Widget; +import com.sap.sailing.dashboards.gwt.client.widgets.ActionPanel; +import com.sap.sailing.dashboards.gwt.client.widgets.ActionPanel.ActionPanelListener; + +public class SettingsButtonWithSelectionIndicationLabel extends Composite implements HasWidgets { + + private static SettingsButtonWithSelectionIndicationLabelUiBinder uiBinder = GWT + .create(SettingsButtonWithSelectionIndicationLabelUiBinder.class); + + interface SettingsButtonWithSelectionIndicationLabelUiBinder extends + UiBinder { + } + + interface SettingsButtonWithSelectionIndicationLabelStyle extends CssResource { + } + + @UiField(provided = true) + ActionPanel settingsButton; + + @UiField + Image settingsButtonImage; + + @UiField + HTMLPanel settingsIndicationLabel; + + public SettingsButtonWithSelectionIndicationLabel() { + SettingsButtonWithSelectionIndicationLabelResources.INSTANCE.gss().ensureInjected(); + settingsButton = new ActionPanel(Event.TOUCHEVENTS, Event.ONCLICK); + initWidget(uiBinder.createAndBindUi(this)); + settingsButtonImage.setResource(SettingsButtonWithSelectionIndicationLabelResources.INSTANCE.settings()); + } + + public void addActionListener(ActionPanelListener actionPanelListener) { + settingsButton.addActionPanelListener(actionPanelListener); + } + + public void setSelectionIndicationTextOnLabel(String selectionIndicationText) { + settingsIndicationLabel.getElement().setInnerHTML("" + selectionIndicationText); + } + + public void disable() { + settingsButton.disable(); + settingsButtonImage.setResource(SettingsButtonWithSelectionIndicationLabelResources.INSTANCE.settingsDisabled()); + settingsIndicationLabel.getElement().addClassName(SettingsButtonWithSelectionIndicationLabelResources.INSTANCE.gss().settings_indication_label_disabled()); + } + + public void enable() { + settingsButton.enable(); + settingsButtonImage.setResource(SettingsButtonWithSelectionIndicationLabelResources.INSTANCE.settings()); + settingsIndicationLabel.getElement().removeClassName(SettingsButtonWithSelectionIndicationLabelResources.INSTANCE.gss().settings_indication_label_disabled()); + } + + @Override + public void add(Widget w) { + throw new UnsupportedOperationException("The method add(Widget w) is not supported."); + } + + @Override + public void clear() { + throw new UnsupportedOperationException("The method clear() is not supported."); + } + + @Override + public Iterator iterator() { + return null; + } + + @Override + public boolean remove(Widget w) { + return false; + } +} diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/popups/competitorselection/util/SettingsButtonWithSelectionIndicationLabel.ui.xml b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/popups/competitorselection/util/SettingsButtonWithSelectionIndicationLabel.ui.xml new file mode 100644 index 00000000000..a3b023bd9b8 --- /dev/null +++ b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/popups/competitorselection/util/SettingsButtonWithSelectionIndicationLabel.ui.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/popups/competitorselection/util/SettingsButtonWithSelectionIndicationLabelResources.java b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/popups/competitorselection/util/SettingsButtonWithSelectionIndicationLabelResources.java new file mode 100644 index 00000000000..11e7703e8a6 --- /dev/null +++ b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/popups/competitorselection/util/SettingsButtonWithSelectionIndicationLabelResources.java @@ -0,0 +1,31 @@ +package com.sap.sailing.dashboards.gwt.client.popups.competitorselection.util; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.resources.client.ClientBundle; +import com.google.gwt.resources.client.CssResource; +import com.google.gwt.resources.client.ImageResource; + +/** + * @author Alexander Ries (D062114) + * + */ +public interface SettingsButtonWithSelectionIndicationLabelResources extends ClientBundle { + + public static final SettingsButtonWithSelectionIndicationLabelResources INSTANCE = GWT.create(SettingsButtonWithSelectionIndicationLabelResources.class); + + @Source("com/sap/sailing/dashboards/gwt/client/images/settings.png") + ImageResource settings(); + + @Source("com/sap/sailing/dashboards/gwt/client/images/settings_disabled.png") + ImageResource settingsDisabled(); + + @Source({"com/sap/sailing/dashboards/gwt/client/theme/theme.gss", "SettingsButtonWithSelectionIndicationLabel.gss"}) + StartlineAdvantagesOnLineChartGSS gss(); + + public interface StartlineAdvantagesOnLineChartGSS extends CssResource { + String settings_button(); + String settings_button_image(); + String settings_indication_label(); + String settings_indication_label_disabled(); + } +} diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/theme/Colors.java b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/theme/Colors.java index e74d80c2ed6..649f9a65987 100644 --- a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/theme/Colors.java +++ b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/theme/Colors.java @@ -6,11 +6,14 @@ package com.sap.sailing.dashboards.gwt.client.theme; */ public class Colors { public static final String WHITE = "#FFFFFF"; - public static final String LIGHT_GREY = "#FFFFFF"; - public static final String DARK_GREY = "#FFFFFF"; - public static final String LIGHT_TEXT_COLOR = "#FFFFFF"; - public static final String DARK_TEXT_COLOR = "#FFFFFF"; - public static final String DARK_BLUE = "#FFFFFF"; - public static final String LIGHT_BLUE = "#FFFFFF"; - public static final String YELLOW = "#FFFFFF"; + public static final String BLACK = "#000000"; + public static final String LIGHT_GREY = "#F3F2F4"; + public static final String DARK_GREY = "#E0E0E0"; + public static final String LIGHT_TEXT_COLOR = "#848484"; + public static final String DARK_TEXT_COLOR = "#000000"; + public static final String BUTTON_BACKGROUND = "#008FFF"; + public static final String BUTTON_BACKGROUND_ACTIVE = "#4192D9"; + public static final String DARK_BLUE = "#008FFF"; + public static final String LIGHT_BLUE = "#6ADBFF"; + public static final String YELLOW = "#F0AB00"; } \ No newline at end of file diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/theme/Sizes.java b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/theme/Sizes.java index a539e9021a4..9a43a5c9824 100644 --- a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/theme/Sizes.java +++ b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/theme/Sizes.java @@ -1,13 +1,21 @@ package com.sap.sailing.dashboards.gwt.client.theme; + /** * @author Alexander Ries (D062114) * */ public class Sizes { - public static final String DASHBOARD_FONT_SIZE_VERY_SMALL = "12px"; - public static final String DASHBOARD_FONT_SIZE_SMALL = "12px"; - public static final String DASHBOARD_FONT_SIZE_MEDIUM = "12px"; - public static final String DASHBOARD_FONT_SIZE_BIG = "12px"; - public static final String DASHBOARD_FONT_SIZE_VERY_BIG = "12px"; + public static final String DASHBOARD_FONT_SIZE_VERY_SMALL = "10px"; + public static final String DASHBOARD_FONT_SIZE_SMALL = "13px"; + public static final String DASHBOARD_FONT_SIZE_MEDIUM = "14px"; + public static final String DASHBOARD_FONT_SIZE_LARGE = "16px"; + public static final String DASHBOARD_FONT_SIZE_VERY_LARGE = "33px"; + public static final String DASHBOARD_SPACE_VERY_SMALL = "10px"; + public static final String DASHBOARD_SPACE_SMALL = "30px"; + public static final String DASHBOARD_SPACE_MEDIUM = "35px"; + public static final String DASHBOARD_SPACE_LARGE = "50px"; + public static final String DASHBOARD_SPACE_VERY_LARGE = "70px"; + public static final String DASHBOARD_LINE_HEIGHT = "20px"; + public static final String DASHBOARD_BORDER_RADIUS = "5px"; } diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/theme/theme.gss b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/theme/theme.gss index 168c9ab59aa..66eb9d3e990 100644 --- a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/theme/theme.gss +++ b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/theme/theme.gss @@ -2,6 +2,33 @@ /*Colors*/ @def WHITE eval("com.sap.sailing.dashboards.gwt.client.theme.Colors.WHITE"); +@def BLACK eval("com.sap.sailing.dashboards.gwt.client.theme.Colors.BLACK"); +@def LIGHT_GREY eval("com.sap.sailing.dashboards.gwt.client.theme.Colors.LIGHT_GREY"); +@def DARK_GREY eval("com.sap.sailing.dashboards.gwt.client.theme.Colors.DARK_GREY"); +@def LIGHT_TEXT_COLOR eval("com.sap.sailing.dashboards.gwt.client.theme.Colors.LIGHT_TEXT_COLOR"); +@def DARK_TEXT_COLOR eval("com.sap.sailing.dashboards.gwt.client.theme.Colors.DARK_TEXT_COLOR"); +@def DARK_BLUE eval("com.sap.sailing.dashboards.gwt.client.theme.Colors.DARK_BLUE"); +@def BUTTON_BACKGROUND eval("com.sap.sailing.dashboards.gwt.client.theme.Colors.BUTTON_BACKGROUND"); +@def BUTTON_BACKGROUND_ACTIVE eval("com.sap.sailing.dashboards.gwt.client.theme.Colors.BUTTON_BACKGROUND_ACTIVE"); +@def LIGHT_BLUE eval("com.sap.sailing.dashboards.gwt.client.theme.Colors.LIGHT_GREY"); +@def YELLOW eval("com.sap.sailing.dashboards.gwt.client.theme.Colors.YELLOW"); /*Fonts*/ @def DASHBOARD_FONT_FAMILY eval("com.sap.sailing.dashboards.gwt.client.theme.Fonts.DASHBOARD_FONT_FAMILY"); + +/*Sizes*/ +@def DASHBOARD_FONT_SIZE_VERY_SMALL eval("com.sap.sailing.dashboards.gwt.client.theme.Sizes.DASHBOARD_FONT_SIZE_VERY_SMALL"); +@def DASHBOARD_FONT_SIZE_SMALL eval("com.sap.sailing.dashboards.gwt.client.theme.Sizes.DASHBOARD_FONT_SIZE_SMALL"); +@def DASHBOARD_FONT_SIZE_MEDIUM eval("com.sap.sailing.dashboards.gwt.client.theme.Sizes.DASHBOARD_FONT_SIZE_MEDIUM"); +@def DASHBOARD_FONT_SIZE_LARGE eval("com.sap.sailing.dashboards.gwt.client.theme.Sizes.DASHBOARD_FONT_SIZE_LARGE"); +@def DASHBOARD_FONT_SIZE_VERY_LARGE eval("com.sap.sailing.dashboards.gwt.client.theme.Sizes.DASHBOARD_FONT_SIZE_VERY_LARGE"); + +@def DASHBOARD_SPACE_VERY_SMALL eval("com.sap.sailing.dashboards.gwt.client.theme.Sizes.DASHBOARD_SPACE_VERY_SMALL"); +@def DASHBOARD_SPACE_SMALL eval("com.sap.sailing.dashboards.gwt.client.theme.Sizes.DASHBOARD_SPACE_SMALL"); +@def DASHBOARD_SPACE_MEDIUM eval("com.sap.sailing.dashboards.gwt.client.theme.Sizes.DASHBOARD_SPACE_MEDIUM"); +@def DASHBOARD_SPACE_LARGE eval("com.sap.sailing.dashboards.gwt.client.theme.Sizes.DASHBOARD_SPACE_LARGE"); +@def DASHBOARD_SPACE_VERY_LARGE eval("com.sap.sailing.dashboards.gwt.client.theme.Sizes.DASHBOARD_SPACE_VERY_LARGE"); + +@def DASHBOARD_LINE_HEIGHT eval("com.sap.sailing.dashboards.gwt.client.theme.Sizes.DASHBOARD_LINE_HEIGHT"); + +@def DASHBOARD_BORDER_RADIUS eval("com.sap.sailing.dashboards.gwt.client.theme.Sizes.DASHBOARD_BORDER_RADIUS"); \ No newline at end of file diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/visualeffects/BlurEffect.java b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/visualeffects/BlurEffect.java deleted file mode 100644 index 17dbdb55da4..00000000000 --- a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/visualeffects/BlurEffect.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.sap.sailing.dashboards.gwt.client.visualeffects; - -import com.google.gwt.core.shared.GWT; -import com.google.gwt.user.client.ui.Widget; - - -public class BlurEffect { - - private static BlurEffect INSTANCE = null; - private VisualEffectsResources visualEffectsResources = GWT.create(VisualEffectsResources.class); - - private BlurEffect() { - visualEffectsResources.blurEffectStyle().ensureInjected(); - } - - public static BlurEffect getInstance() { - synchronized (BlurEffect.class) { - if (INSTANCE == null) { - INSTANCE = new BlurEffect(); - } - } - return INSTANCE; - } - - public void addToView(Widget widget){ - widget.removeStyleName(visualEffectsResources.blurEffectStyle().not_blurred()); - widget.addStyleName(visualEffectsResources.blurEffectStyle().blurred()); - } - - public void removeFromView(Widget widget){ - widget.removeStyleName(visualEffectsResources.blurEffectStyle().blurred()); - widget.addStyleName(visualEffectsResources.blurEffectStyle().not_blurred()); - } -} diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/visualeffects/BlurEffect.css b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/visualeffects/DarkeningEffect.css similarity index 83% rename from java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/visualeffects/BlurEffect.css rename to java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/visualeffects/DarkeningEffect.css index 7e1020ab331..8ac04b47d18 100644 --- a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/visualeffects/BlurEffect.css +++ b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/visualeffects/DarkeningEffect.css @@ -1,11 +1,11 @@ @CHARSET "UTF-8"; -.blurred { +.darkened { -webkit-filter: brightness(0.7); filter: brightness(0.7); } -.not_blurred { +.not_darkened { -webkit-filter: brightness(1); filter: brightness(1); } \ No newline at end of file diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/visualeffects/DarkeningEffect.java b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/visualeffects/DarkeningEffect.java new file mode 100644 index 00000000000..5e04ce0f60c --- /dev/null +++ b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/visualeffects/DarkeningEffect.java @@ -0,0 +1,34 @@ +package com.sap.sailing.dashboards.gwt.client.visualeffects; + +import com.google.gwt.core.shared.GWT; +import com.google.gwt.user.client.ui.Widget; + + +public class DarkeningEffect { + + private static DarkeningEffect INSTANCE = null; + private VisualEffectsResources visualEffectsResources = GWT.create(VisualEffectsResources.class); + + private DarkeningEffect() { + visualEffectsResources.darkeningEffectStyle().ensureInjected(); + } + + public static DarkeningEffect getInstance() { + synchronized (DarkeningEffect.class) { + if (INSTANCE == null) { + INSTANCE = new DarkeningEffect(); + } + } + return INSTANCE; + } + + public void addToView(Widget widget){ + widget.removeStyleName(visualEffectsResources.darkeningEffectStyle().not_darkened()); + widget.addStyleName(visualEffectsResources.darkeningEffectStyle().darkened()); + } + + public void removeFromView(Widget widget){ + widget.removeStyleName(visualEffectsResources.darkeningEffectStyle().darkened()); + widget.addStyleName(visualEffectsResources.darkeningEffectStyle().not_darkened()); + } +} diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/visualeffects/BlurEffectStyle.java b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/visualeffects/DarkeningEffectStyle.java similarity index 61% rename from java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/visualeffects/BlurEffectStyle.java rename to java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/visualeffects/DarkeningEffectStyle.java index ec1306d820f..2d3709361d3 100644 --- a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/visualeffects/BlurEffectStyle.java +++ b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/visualeffects/DarkeningEffectStyle.java @@ -4,10 +4,10 @@ import com.google.gwt.resources.client.CssResource; import com.google.gwt.resources.client.CssResource.Shared; @Shared -public interface BlurEffectStyle extends CssResource{ +public interface DarkeningEffectStyle extends CssResource{ - public String blurred(); + public String darkened(); - public String not_blurred(); + public String not_darkened(); } diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/visualeffects/VisualEffectsResources.java b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/visualeffects/VisualEffectsResources.java index f87efb9d50c..84c29f0f843 100644 --- a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/visualeffects/VisualEffectsResources.java +++ b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/visualeffects/VisualEffectsResources.java @@ -4,6 +4,6 @@ import com.google.gwt.resources.client.ClientBundle; public interface VisualEffectsResources extends ClientBundle{ - @Source("BlurEffect.css") - BlurEffectStyle blurEffectStyle(); + @Source("DarkeningEffect.css") + DarkeningEffectStyle darkeningEffectStyle(); } diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/ActionPanel.java b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/ActionPanel.java new file mode 100644 index 00000000000..7b87a2d7117 --- /dev/null +++ b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/ActionPanel.java @@ -0,0 +1,65 @@ +package com.sap.sailing.dashboards.gwt.client.widgets; + +import java.util.ArrayList; +import java.util.List; + +import com.google.gwt.user.client.Event; +import com.google.gwt.user.client.ui.AbsolutePanel; + +/** + * @author Alexander Ries (D062114) + * + */ +public class ActionPanel extends AbsolutePanel { + + private List listeners; + private List eventsList; + + public ActionPanel(int... events) { + super(); + listeners = new ArrayList(); + eventsList = new ArrayList(); + for (int event : events) { + sinkEvents(event); + eventsList.add(Integer.valueOf(event)); + } + this.getElement().setAttribute("style", "-webkit-tap-highlight-color: rgba(0,0,0,0);"); + } + + public void enable() { + for(Integer eventAsInteger : eventsList) { + sinkEvents(eventAsInteger.intValue()); + } + } + + public void disable() { + for(Integer eventAsInteger : eventsList) { + unsinkEvents(eventAsInteger.intValue()); + } + } + + public void addActionPanelListener(ActionPanelListener actionPanelListener) { + listeners.add(actionPanelListener); + } + + public void removeActionPanelListener(ActionPanelListener actionPanelListener) { + listeners.remove(actionPanelListener); + } + + private void notifyActionPanelListenerAboutTriggeredEvent() { + for (ActionPanelListener actionPanelListener : listeners) { + actionPanelListener.eventTriggered(); + } + } + + @Override + public void onBrowserEvent(Event event) { + if (this.eventsList.contains(event.getTypeInt())) { + notifyActionPanelListenerAboutTriggeredEvent(); + } + } + + public interface ActionPanelListener { + public void eventTriggered(); + } +} diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/header/DashboardWidgetHeaderAndNoDataMessage.gss b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/header/DashboardWidgetHeaderAndNoDataMessage.gss new file mode 100644 index 00000000000..adb86fb010e --- /dev/null +++ b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/header/DashboardWidgetHeaderAndNoDataMessage.gss @@ -0,0 +1,44 @@ +@require 'theme'; + +.dashboard_widget_header { + position: absolute; + width: 100%; + height: DASHBOARD_SPACE_MEDIUM; + top: 0; + line-height: DASHBOARD_SPACE_MEDIUM; + vertical-align: middle; + font-size: DASHBOARD_FONT_SIZE_LARGE; + font-family: DASHBOARD_FONT_FAMILY; + text-align: center; + font-weight: bold; + overflow: visible; + background-color: WHITE; + border-bottom:solid LIGHT_GREY 1px; + z-index: 4; +} + +.dashboard_widget_no_data_message_container { + position: absolute; + top: DASHBOARD_SPACE_MEDIUM; + bottom: 0px; + width: 100%; + font-size: DASHBOARD_FONT_SIZE_MEDIUM; + font-family: DASHBOARD_FONT_FAMILY; + display: flex; + align-items: center; + justify-content: center; + text-align: center; + line-height: DASHBOARD_LINE_HEIGHT; +} + +.dashboard_widget_no_data_message_header { + color: DARK_TEXT_COLOR; + font-weight: bold; + text-align: center; + display: inline-block; +} + +.dashboard_widget_no_data_message { + color: LIGHT_TEXT_COLOR; + font-weight: normal; +} \ No newline at end of file diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/header/DashboardWidgetHeaderAndNoDataMessage.java b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/header/DashboardWidgetHeaderAndNoDataMessage.java new file mode 100644 index 00000000000..7fc95e6c677 --- /dev/null +++ b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/header/DashboardWidgetHeaderAndNoDataMessage.java @@ -0,0 +1,83 @@ +package com.sap.sailing.dashboards.gwt.client.widgets.header; + +import java.util.Iterator; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.core.client.Scheduler; +import com.google.gwt.dom.client.DivElement; +import com.google.gwt.dom.client.Style.Unit; +import com.google.gwt.uibinder.client.UiBinder; +import com.google.gwt.uibinder.client.UiField; +import com.google.gwt.user.client.Command; +import com.google.gwt.user.client.ui.Composite; +import com.google.gwt.user.client.ui.HTMLPanel; +import com.google.gwt.user.client.ui.HasWidgets; +import com.google.gwt.user.client.ui.Widget; + +/** + * @author Alexander Ries (D062114) + * + */ +public class DashboardWidgetHeaderAndNoDataMessage extends Composite implements HasWidgets { + + private static DashboardWidgetHeaderAndNoDataMessageUiBinder uiBinder = GWT.create(DashboardWidgetHeaderAndNoDataMessageUiBinder.class); + private static final int EXTRA_WIDTH_MESSAGE = 10; + + interface DashboardWidgetHeaderAndNoDataMessageUiBinder extends + UiBinder { + } + + @UiField + HTMLPanel header; + + @UiField + DivElement noDataMessageHeader; + + @UiField + DivElement noDataMessage; + + public DashboardWidgetHeaderAndNoDataMessage() { + DashboardWidgetHeaderAndNoDataMessageResources.INSTANCE.gss().ensureInjected(); + initWidget(uiBinder.createAndBindUi(this)); + } + + public void setHeaderText(String headerText) { + this.header.getElement().setInnerHTML(headerText); + } + + public void showNoDataMessageWithHeaderAndMessage(final String header, final String message) { + Scheduler.get().scheduleDeferred(new Command() { + public void execute() { + noDataMessageHeader.setInnerText(header); + noDataMessage.setInnerText(message); + noDataMessage.getStyle().setWidth(noDataMessageHeader.getClientWidth() + EXTRA_WIDTH_MESSAGE, Unit.PX); + } + }); + + } + + public void hideNoDataMessage() { + noDataMessageHeader.setInnerHTML(""); + noDataMessage.setInnerHTML(""); + } + + @Override + public void add(Widget w) { + throw new UnsupportedOperationException("The method add(Widget w) is not supported."); + } + + @Override + public void clear() { + throw new UnsupportedOperationException("The method clear() is not supported."); + } + + @Override + public Iterator iterator() { + return null; + } + + @Override + public boolean remove(Widget w) { + return false; + } +} diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/header/DashboardWidgetHeaderAndNoDataMessage.ui.xml b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/header/DashboardWidgetHeaderAndNoDataMessage.ui.xml new file mode 100644 index 00000000000..293102124f9 --- /dev/null +++ b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/header/DashboardWidgetHeaderAndNoDataMessage.ui.xml @@ -0,0 +1,17 @@ + + + + + + + + +
+
+
+
+
+
+
+
\ No newline at end of file diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/header/DashboardWidgetHeaderAndNoDataMessageResources.java b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/header/DashboardWidgetHeaderAndNoDataMessageResources.java new file mode 100644 index 00000000000..b5032dbfecc --- /dev/null +++ b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/header/DashboardWidgetHeaderAndNoDataMessageResources.java @@ -0,0 +1,24 @@ +package com.sap.sailing.dashboards.gwt.client.widgets.header; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.resources.client.ClientBundle; +import com.google.gwt.resources.client.CssResource; + +/** + * @author Alexander Ries (D062114) + * + */ +public interface DashboardWidgetHeaderAndNoDataMessageResources extends ClientBundle { + + public static final DashboardWidgetHeaderAndNoDataMessageResources INSTANCE = GWT.create(DashboardWidgetHeaderAndNoDataMessageResources.class); + + @Source({"com/sap/sailing/dashboards/gwt/client/theme/theme.gss", "DashboardWidgetHeaderAndNoDataMessage.gss"}) + DashboardWidgetHeaderAndNoDataMessageGSS gss(); + + public interface DashboardWidgetHeaderAndNoDataMessageGSS extends CssResource { + String dashboard_widget_header(); + String dashboard_widget_no_data_message_container(); + String dashboard_widget_no_data_message_header(); + String dashboard_widget_no_data_message(); + } +} \ No newline at end of file diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startanalysis/DashboardRaceMapResources.java b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startanalysis/DashboardRaceMapResources.java new file mode 100644 index 00000000000..ceaf0392cb6 --- /dev/null +++ b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startanalysis/DashboardRaceMapResources.java @@ -0,0 +1,18 @@ +package com.sap.sailing.dashboards.gwt.client.widgets.startanalysis; + +import com.google.gwt.resources.client.ImageResource; +import com.sap.sailing.gwt.ui.client.shared.racemap.RaceMapStyle; +import com.sap.sailing.gwt.ui.client.shared.racemap.RaceMapResources; + +/** + * @author Alexander Ries (D062114) + * + */ +public interface DashboardRaceMapResources extends RaceMapResources { + + @Source("com/sap/sailing/dashboards/gwt/client/images/windarrow.png") + ImageResource combinedWindIcon(); + + @Source({"com/sap/sailing/dashboards/gwt/client/theme/theme.gss", "StartAnalysisRaceMap.gss"}) + RaceMapStyle raceMapStyle(); +} diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startanalysis/StartAnalysisCombinedWindPanel.gss b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startanalysis/StartAnalysisCombinedWindPanel.gss deleted file mode 100644 index d4843d25e1b..00000000000 --- a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startanalysis/StartAnalysisCombinedWindPanel.gss +++ /dev/null @@ -1,30 +0,0 @@ -@require 'theme'; - -.combinedWindPanel { - margin-top: 10pt; - margin-left: 10pt; - right: 0pt; - width: 45pt; - height: 45pt; - border-radius: 22.5pt; - background-color: white; -} - -.combinedWindPanelTextLabel { - margin-top: 15pt; - width: 45pt; - height: 25pt; - background-color: white; - line-height: 25pt; - vertical-align: middle; - font-size: 11pt; - font-family: DASHBOARD_FONT_FAMILY; - text-align: center; -} - -.combinedWindPanelCanvas { - width: 35pt; - height: 35pt; - margin-top: 5pt; - margin-left: 5pt; -} \ No newline at end of file diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startanalysis/StartAnalysisRaceMap.gss b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startanalysis/StartAnalysisRaceMap.gss new file mode 100644 index 00000000000..73ed5bf03fd --- /dev/null +++ b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startanalysis/StartAnalysisRaceMap.gss @@ -0,0 +1,37 @@ +@require 'theme'; + +.raceMapIndicatorPanel { + margin-top: DASHBOARD_SPACE_VERY_SMALL; + margin-left: DASHBOARD_SPACE_VERY_SMALL; + right: 0px; + width: 50px; + height: 50px; + border-radius: 50px; + background-color: white; +} + +.raceMapIndicatorPanelTextLabel { + margin-top: DASHBOARD_SPACE_VERY_SMALL; + width: 50px; + height: DASHBOARD_SPACE_SMALL; + line-height: DASHBOARD_SPACE_SMALL; + vertical-align: middle; + font-size: DASHBOARD_FONT_SIZE_SMALL; + font-weight: bold; + font-family: DASHBOARD_FONT_FAMILY; + text-align: center; + color: white; +} + +.raceMapIndicatorPanelCanvas { + width: 30px !important; + height: 30px !important; + margin-top: 10px; + margin-left: 10px; +} + +.combinedWindPanel {} + +.trueNorthIndicator { + opacity: 0.0; +} \ No newline at end of file diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startanalysis/StartAnalysisWidget.gss b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startanalysis/StartAnalysisWidget.gss index 4e60c3bae9d..f91e0140c02 100644 --- a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startanalysis/StartAnalysisWidget.gss +++ b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startanalysis/StartAnalysisWidget.gss @@ -2,64 +2,102 @@ .startanalysis { position: absolute; - overflow: hidden; - background-color: white; + background-color: LIGHT_GREY; left: 0pt; right: 0pt; top: 0pt; bottom: 0pt; + border-radius: DASHBOARD_BORDER_RADIUS; + overflow: hidden; + z-index: 5; } -.panel_header { - height: 100%; - margin-top: 0; - line-height: 30pt; +.current_start_panel { + position: absolute; + height: DASHBOARD_SPACE_MEDIUM; + top: DASHBOARD_SPACE_MEDIUM; + line-height: DASHBOARD_SPACE_MEDIUM; vertical-align: middle; - font-size: 14pt; + font-size: DASHBOARD_FONT_SIZE_MEDIUM; font-family: DASHBOARD_FONT_FAMILY; width: 100%; text-align: center; font-weight: bold; - overflow: visible; - background-color: white; + z-index: 4; } .controll_header_button { position: absolute; - top: 10pt; - height: 17.5pt; - width: 17.5pt; + height: DASHBOARD_SPACE_VERY_LARGE; + width: DASHBOARD_SPACE_VERY_LARGE; + top: 50%; + background-color: WHITE; + z-index: 1; + opacity: 0.0; + border-radius: DASHBOARD_BORDER_RADIUS; +} + +.controll_header_button_visible { + opacity: 0.9; +} + +.controll_header_button:active { + background-color: LIGHT_GREY; +} + +.controll_header_button_image { + position: absolute; + width: 18px; + height: DASHBOARD_SPACE_SMALL; + top: 20px; + left: 27px; } .controll_header_button_left { - left: 10%; + left: 31px; } .controll_header_button_right { - right: 10%; + right: 31px; } .card_container { position: absolute; overflow: visible; - top: 33.5pt; - bottom: 10pt; + top: DASHBOARD_SPACE_MEDIUM; + bottom: 70px; + padding-top: DASHBOARD_SPACE_MEDIUM; + padding-bottom: DASHBOARD_SPACE_SMALL; width: 100%; left: 0%; - background-color: white; -webkit-transition: left 0.7s ease-in-out; /* For Safari 3.1 to 6.0 */ transition: left 0.7s ease-in-out; } .card { position: absolute; - display: inline; - width: 80%; + width: 75%; height: 100%; - /*#4293DB old water color*/ + border-radius: DASHBOARD_BORDER_RADIUS !important; + overflow: hidden !important; + /* + Chrome and Safari are having problems with border radius and animation. + http://stackoverflow.com/questions/14383632/webkit-border-radius-and-overflow-bug-when-using-any-animation-transition + Do not remove these 4 lines + */ + -webkit-backface-visibility: hidden; + -moz-backface-visibility: hidden; + -webkit-transform: translate3d(0, 0, 0); + -moz-transform: translate3d(0, 0, 0) +} + +.card_map_container { + position: absolute; + margin-top: 29px; + /*#4293DB old water color*/ background-color: #004384; - margin-top: 1px; /*Shows otherwise small line at top edge*/ - overflow: hidden; + width: 100%; + height: 100%; } .card_table { @@ -67,54 +105,49 @@ bottom: 0pt; right: 0pt; left: 0pt; - padding-left:10pt; - padding-right:10pt; - padding-bottom: 10pt; - background-color: #004384;; + background-color: WHITE; z-index: 2; } .card_wind_line_data_container { position: absolute; - top: 10pt; - left: 10pt; - width: 45pt; - height: 80pt; + top: 0pt; + left: 0; + width: 100%; + height: 30px; z-index: 1; + background-color: WHITE; + color: LIGHT_TEXT_COLOR; } .card_data { position: absolute; right: 0pt; width: 45pt; - height: 25pt; - line-height: 25pt; + height: DASHBOARD_SPACE_SMALL; + line-height: DASHBOARD_SPACE_SMALL; vertical-align: middle; - font-size: 11pt; + font-size: DASHBOARD_FONT_SIZE_SMALL; font-family: DASHBOARD_FONT_FAMILY; + font-weight: bold; text-align: center; } .card_line_advantage { top: 0pt; - left: 55pt; + left: 10px; width: 215pt; text-align: left; - padding-left: 7pt; - background-color: white; } .card_race_time{ position: absolute; - top: 10pt; - right: 10pt; + right: 10px; width: 200px; text-align: right; - color: white; - line-height: 25pt; - font-size: 11pt; + line-height: DASHBOARD_SPACE_SMALL; + font-size: DASHBOARD_FONT_SIZE_SMALL; font-family: DASHBOARD_FONT_FAMILY; - z-index: 1; } .card_line_data_geo { @@ -141,4 +174,4 @@ width: 50%; height: 100%; z-index: 2; -} \ No newline at end of file +} diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startanalysis/StartAnalysisWidget.java b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startanalysis/StartAnalysisWidget.java index 29a7dc12220..b808797b761 100644 --- a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startanalysis/StartAnalysisWidget.java +++ b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startanalysis/StartAnalysisWidget.java @@ -12,7 +12,6 @@ import com.google.gwt.dom.client.Style.Unit; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.resources.client.CssResource; -import com.google.gwt.safehtml.shared.SafeHtmlUtils; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.user.client.Cookies; @@ -32,21 +31,24 @@ import com.sap.sailing.dashboards.gwt.client.notifications.bottom.BottomNotifica import com.sap.sailing.dashboards.gwt.client.notifications.bottom.BottomNotificationType; import com.sap.sailing.dashboards.gwt.client.popups.competitorselection.CompetitorSelectionListener; import com.sap.sailing.dashboards.gwt.client.popups.competitorselection.CompetitorSelectionPopup; -import com.sap.sailing.dashboards.gwt.client.popups.competitorselection.SettingsButtonWithSelectionIndicationLabel; +import com.sap.sailing.dashboards.gwt.client.popups.competitorselection.util.SettingsButtonWithSelectionIndicationLabel; +import com.sap.sailing.dashboards.gwt.client.widgets.ActionPanel; import com.sap.sailing.dashboards.gwt.client.widgets.PollsLiveDataEvery5Seconds; +import com.sap.sailing.dashboards.gwt.client.widgets.header.DashboardWidgetHeaderAndNoDataMessage; import com.sap.sailing.dashboards.gwt.client.widgets.startanalysis.card.StartAnalysisCard; import com.sap.sailing.dashboards.gwt.shared.DashboardURLParameters; import com.sap.sailing.dashboards.gwt.shared.dto.LeaderboardCompetitorsDTO; import com.sap.sailing.dashboards.gwt.shared.dto.StartAnalysesDTO; import com.sap.sailing.dashboards.gwt.shared.dto.StartAnalysisDTO; import com.sap.sailing.domain.common.dto.CompetitorDTO; +import com.sap.sailing.gwt.ui.client.StringMessages; +import com.sap.sailing.gwt.ui.client.shared.racemap.RaceMapResources; /** * The class contains an collection of {@link StartAnalysisCard}s that are displayed in horizontal aligned pages. It - * shows only one {@link StartAnalysisCard} at a time and enables the user to switch between - * {@link StartAnalysisCard}s with left and right buttons represented by {@link #left_focus_panel} and - * {@link #right_focus_panel}. When a new {@link StartAnalysisCard} gets added to the component it shows a - * {@link BottomNotification}. + * shows only one {@link StartAnalysisCard} at a time and enables the user to switch between {@link StartAnalysisCard}s + * with left and right buttons represented by {@link #left_focus_panel} and {@link #right_focus_panel}. When a new + * {@link StartAnalysisCard} gets added to the component it shows a {@link BottomNotification}. * * @author Alexander Ries (D062114) * @@ -61,14 +63,26 @@ public class StartAnalysisWidget extends Composite implements HasWidgets, PollsL interface StartlineAnalysis extends CssResource { } - @UiField - HTMLPanel header; + @UiField(provided = true) + DashboardWidgetHeaderAndNoDataMessage dashboardWidgetHeaderAndNoDataMessage; + + @UiField(provided = true) + SettingsButtonWithSelectionIndicationLabel selectedCompetitorWithSettingsButton; @UiField - Image rightButton; + HTMLPanel currentStartPanel; @UiField - Image leftButton; + HTMLPanel rightButton; + + @UiField + HTMLPanel leftButton; + + @UiField + Image rightButtonImage; + + @UiField + Image leftButtonImage; @UiField FocusPanel left_focus_panel; @@ -97,49 +111,71 @@ public class StartAnalysisWidget extends Composite implements HasWidgets, PollsL * Amount of {@link StartAnalysisCard}s in {@link #startanalysis_card_container}. * */ private int numberOfStartAnalysisCards = 0; - private boolean displaysCards; private List starts; private List pageChangeListener; private BottomNotification bottomNotification; - private CompetitorSelectionPopup competitorSelectionPopup; - private SettingsButtonWithSelectionIndicationLabel settingsButtonWithSelectionIndicationLabel; - private DashboardClientFactory dashboardClientFactory; - private static final String SELECTED_COMPETITOR_ID_COOKIE_KEY = "selectedCompetitorId"; + private final String cookieKeyForSelectedCompetitorInLeaderboard; + + private static final String SELECTED_COMPETITOR_IN_LEADERBOARD_COOKIE_KEY_FIRST_PART = "competitorId"; private static final int SELECTED_COMPETITOR_ID_COOKIE_KEY_EXPIRE_TIME_IN_MILLIS = 60 * 1000 * 60 * 5; - private static final int SCROLL_OFFSET_STARTANALYSIS_CARDS = 83; + private static final int SCROLL_OFFSET_STARTANALYSIS_CARDS = 80; + private static final double MARGIN_LEFT_STARTANALYSIS_CARD = 12.5; private static final Logger logger = Logger.getLogger(StartAnalysisWidget.class.getName()); + private static final RaceMapResources raceMapResources = GWT.create(DashboardRaceMapResources.class); + /** * Component that contains handles, displays and loads startanalysis cards. * */ public StartAnalysisWidget(DashboardClientFactory dashboardClientFactory) { StartAnalysisWidgetResources.INSTANCE.gss().ensureInjected(); - StartAnalysisWidgetResources.INSTANCE.combinedWindPanelStyle().ensureInjected(); + dashboardWidgetHeaderAndNoDataMessage = new DashboardWidgetHeaderAndNoDataMessage(); + selectedCompetitorWithSettingsButton = new SettingsButtonWithSelectionIndicationLabel(); + selectedCompetitorWithSettingsButton.disable(); + selectedCompetitorWithSettingsButton.setSelectionIndicationTextOnLabel(StringMessages.INSTANCE.dashboardSelectCompetitor()); + addClickListenerToSettingsButtonAndLabel(); + raceMapResources.raceMapStyle().ensureInjected(); this.dashboardClientFactory = dashboardClientFactory; pageChangeListener = new ArrayList(); starts = new ArrayList(); + cookieKeyForSelectedCompetitorInLeaderboard = computeCookieKeyForSelectedCompetitorInLeaderboard(); initWidget(uiBinder.createAndBindUi(this)); + dashboardWidgetHeaderAndNoDataMessage.setHeaderText(StringMessages.INSTANCE.dashboardStartAnalysesHeader()); initCompetitorSelectionPopupAndAddCompetitorSelectionListener(); initLeftRightButtons(); initAndAddBottomNotification(); - getCachedSelectedCompetitorOrAskForWithPopup(); - initAndAddSettingsButtonWithSelectionIndicationLabel(); registerForDashboardFiveSecondsTimer(dashboardClientFactory); } + private String computeCookieKeyForSelectedCompetitorInLeaderboard() { + String result = SELECTED_COMPETITOR_IN_LEADERBOARD_COOKIE_KEY_FIRST_PART+DashboardURLParameters.LEADERBOARD_NAME.getValue(); + return result; + } + + private String getCachedSelectedCompetitorId() { + String result = null; + String selectedCompetitorId = Cookies.getCookie(cookieKeyForSelectedCompetitorInLeaderboard); + if (selectedCompetitorId == null || "undefined".equals(selectedCompetitorId)) { + result = null; + } else { + result = selectedCompetitorId; + } + return result; + } + private void initLeftRightButtons() { - leftButton.setResource(StartAnalysisWidgetResources.INSTANCE.leftdisabled()); + leftButtonImage.setResource(StartAnalysisWidgetResources.INSTANCE.leftdisabled()); left_focus_panel.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { clickedArrowButton(false); } }); - rightButton.setResource(StartAnalysisWidgetResources.INSTANCE.rightdisabled()); + rightButtonImage.setResource(StartAnalysisWidgetResources.INSTANCE.rightdisabled()); right_focus_panel.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { @@ -148,33 +184,43 @@ public class StartAnalysisWidget extends Composite implements HasWidgets, PollsL }); } - private void loadStartAnalysisDTOsForCompetitorID(String competitorIdAsString){ + private void loadStartAnalysisDTOsForCompetitorID(String competitorIdAsString) { logger.log(Level.INFO, "Loading startanalysis for competitor id " + competitorIdAsString); - dashboardClientFactory.getDispatch().execute(new GetStartAnalysesAction(DashboardURLParameters.LEADERBOARD_NAME.getValue(), competitorIdAsString), new AsyncCallback() { + dashboardClientFactory.getDispatch().execute( + new GetStartAnalysesAction(DashboardURLParameters.LEADERBOARD_NAME.getValue(), competitorIdAsString), + new AsyncCallback() { - @Override - public void onFailure(Throwable caught) { - logger.log(Level.INFO, "Failed to received startanalysis list, "+caught.getMessage()); - } + @Override + public void onFailure(Throwable caught) { + logger.log(Level.INFO, "Failed to received startanalysis list, "+caught.getMessage()); + dashboardWidgetHeaderAndNoDataMessage.showNoDataMessageWithHeaderAndMessage(StringMessages.INSTANCE.dashboardNoStartAnalysesAvailableHeader(), StringMessages.INSTANCE.dashboardNoStartAnalysesAvailableMessage()); + selectedCompetitorWithSettingsButton.disable(); + } - @Override - public void onSuccess(StartAnalysesDTO result) { - logger.log(Level.INFO, "Received startanalysis list"); - if (result != null && !result.getStartAnalyses().isEmpty()) { - if (displayedStartAnalysisCompetitorDifferentToRequestedOne()) { - removeAllStartAnalysisCards(); - } - if (result.getStartAnalyses().size() != starts.size()) { - showNotificationForNewStartAnalysis(); - } - logger.log(Level.INFO, "Updating UI with startanalysis list"); - addNewStartAnalysisCards(result.getStartAnalyses()); - settingsButtonWithSelectionIndicationLabel.setSelectionIndicationTextOnLabel(result.getStartAnalyses().get(0).competitor.getName()); - } else { - logger.log(Level.INFO, "Received startanalysis list is null or empty"); - } - } - }); + @Override + public void onSuccess(StartAnalysesDTO result) { + logger.log(Level.INFO, "Received startanalysis list"); + if (result != null && !result.getStartAnalyses().isEmpty() && result.getStartAnalyses().size() > 0) { + dashboardWidgetHeaderAndNoDataMessage.hideNoDataMessage(); + if (displayedStartAnalysisForDifferentCompetitorToRequestedOne()) { + removeAllStartAnalysisCards(); + } + if (result.getStartAnalyses().size() != starts.size()) { + showNotificationForNewStartAnalysis(); + } + logger.log(Level.INFO, "Updating UI with startanalysis list"); + addNewStartAnalysisCards(result.getStartAnalyses()); + showControllHeaderButtons(); + if (result.getStartAnalyses().get(0).competitor != null) { + selectedCompetitorWithSettingsButton.setSelectionIndicationTextOnLabel(result.getStartAnalyses().get(0).competitor.getName()); + } + selectedCompetitorWithSettingsButton.enable(); + } else { + logger.log(Level.INFO, "Received startanalysis list is null or empty"); + dashboardWidgetHeaderAndNoDataMessage.showNoDataMessageWithHeaderAndMessage(StringMessages.INSTANCE.dashboardNoStartAnalysesAvailableHeader(), StringMessages.INSTANCE.dashboardNoStartAnalysesAvailableMessage()); + } + } + }); } private void initAndAddBottomNotification() { @@ -196,12 +242,10 @@ public class StartAnalysisWidget extends Composite implements HasWidgets, PollsL @Override public void didClickOKWithSelectedCompetitor(CompetitorDTO competitor) { if (competitor != null) { - Cookies.removeCookie(SELECTED_COMPETITOR_ID_COOKIE_KEY); - Cookies.setCookie(SELECTED_COMPETITOR_ID_COOKIE_KEY, competitor.getIdAsString(), new Date( - new Date().getTime() + SELECTED_COMPETITOR_ID_COOKIE_KEY_EXPIRE_TIME_IN_MILLIS)); - if (settingsButtonWithSelectionIndicationLabel != null) { - settingsButtonWithSelectionIndicationLabel.setSelectionIndicationTextOnLabel(competitor - .getName()); + Cookies.removeCookie(cookieKeyForSelectedCompetitorInLeaderboard); + Cookies.setCookie(cookieKeyForSelectedCompetitorInLeaderboard, competitor.getIdAsString(), new Date(new Date().getTime()+SELECTED_COMPETITOR_ID_COOKIE_KEY_EXPIRE_TIME_IN_MILLIS)); + if (selectedCompetitorWithSettingsButton != null) { + selectedCompetitorWithSettingsButton.setSelectionIndicationTextOnLabel(competitor.getName()); } loadStartAnalysisDTOsForCompetitorID(competitor.getIdAsString()); } @@ -209,21 +253,17 @@ public class StartAnalysisWidget extends Composite implements HasWidgets, PollsL }); } - private void getCachedSelectedCompetitorOrAskForWithPopup() { - String selectedCompetitorIdFromCookie = Cookies.getCookie(SELECTED_COMPETITOR_ID_COOKIE_KEY); - if (selectedCompetitorIdFromCookie == null) { - loadCompetitorsAndShowCompetitorSelectionPopup(); - } - } - private void loadCompetitorsAndShowCompetitorSelectionPopup() { logger.log(Level.INFO, "Requesting Competitors in Leaderboard"); - dashboardClientFactory.getDispatch().execute(new GetCompetitorInLeaderboardAction(DashboardURLParameters.LEADERBOARD_NAME.getValue()), new AsyncCallback() { + dashboardClientFactory.getDispatch().execute( + new GetCompetitorInLeaderboardAction(DashboardURLParameters.LEADERBOARD_NAME.getValue()), + new AsyncCallback() { @Override public void onSuccess(LeaderboardCompetitorsDTO result) { logger.log(Level.INFO, "Received competitors for leaderboard name"); if (result.getCompetitors() != null && result.getCompetitors().size() > 0) { + selectedCompetitorWithSettingsButton.enable(); if (!competitorSelectionPopup.isShown()) { logger.log(Level.INFO, "Showing CompetitorSelectionPopup with competitors"); competitorSelectionPopup.show(result.getCompetitors()); @@ -232,26 +272,33 @@ public class StartAnalysisWidget extends Composite implements HasWidgets, PollsL } } else { logger.log(Level.INFO, "Received competitors are null or empty"); + dashboardWidgetHeaderAndNoDataMessage.showNoDataMessageWithHeaderAndMessage( + StringMessages.INSTANCE.dashboardNoStartAnalysesAvailableHeader(), + StringMessages.INSTANCE.dashboardNoStartAnalysesAvailableMessage()); + selectedCompetitorWithSettingsButton.disable(); } } - + @Override public void onFailure(Throwable caught) { - logger.log(Level.INFO, "Failed to received competitors for leaderboard name, "+caught.getMessage()); + logger.log(Level.INFO, + "Failed to received competitors for leaderboard name, " + caught.getMessage()); + dashboardWidgetHeaderAndNoDataMessage.showNoDataMessageWithHeaderAndMessage( + StringMessages.INSTANCE.dashboardNoStartAnalysesAvailableHeader(), + StringMessages.INSTANCE.dashboardNoStartAnalysesAvailableMessage()); + selectedCompetitorWithSettingsButton.disable(); } }); } - private void initAndAddSettingsButtonWithSelectionIndicationLabel() { - settingsButtonWithSelectionIndicationLabel = new SettingsButtonWithSelectionIndicationLabel(); - settingsButtonWithSelectionIndicationLabel.addClickHandlerToSettingsButton(new ClickHandler() { + private void addClickListenerToSettingsButtonAndLabel() { + selectedCompetitorWithSettingsButton.addActionListener(new ActionPanel.ActionPanelListener() { @Override - public void onClick(ClickEvent event) { + public void eventTriggered() { loadCompetitorsAndShowCompetitorSelectionPopup(); } }); - RootPanel.get().add(settingsButtonWithSelectionIndicationLabel); } /** @@ -268,14 +315,14 @@ public class StartAnalysisWidget extends Composite implements HasWidgets, PollsL startanalysis_card_container.getElement().getStyle().setLeft(currentScrollPosition, Unit.PCT); notifyStartAnalysisPageChangeListener(page); int displayPage = page + 1; - header.getElement().setInnerHTML("Start " + starts.get(displayPage - 1).raceName); + currentStartPanel.getElement().setInnerHTML(starts.get(displayPage - 1).raceName); if (page != numberOfStartAnalysisCards - 1) { - rightButton.setResource(StartAnalysisWidgetResources.INSTANCE.right()); + rightButtonImage.setResource(StartAnalysisWidgetResources.INSTANCE.right()); rightButton.getElement().getStyle().setProperty("disabled", "false"); } if (page == 0) { - leftButton.setResource(StartAnalysisWidgetResources.INSTANCE.leftdisabled()); - leftButton.getElement().getStyle().setProperty("disabled", "true"); + leftButtonImage.setResource(StartAnalysisWidgetResources.INSTANCE.leftdisabled()); + leftButtonImage.getElement().getStyle().setProperty("disabled", "true"); } } } else { @@ -285,13 +332,13 @@ public class StartAnalysisWidget extends Composite implements HasWidgets, PollsL startanalysis_card_container.getElement().getStyle().setLeft(currentScrollPosition, Unit.PCT); notifyStartAnalysisPageChangeListener(page); int displayPage = page + 1; - header.getElement().setInnerHTML("Start " + starts.get(displayPage - 1).raceName); + currentStartPanel.getElement().setInnerHTML(starts.get(displayPage - 1).raceName); if (page >= 0) { - leftButton.setResource(StartAnalysisWidgetResources.INSTANCE.left()); + leftButtonImage.setResource(StartAnalysisWidgetResources.INSTANCE.left()); leftButton.getElement().getStyle().setProperty("disabled", "false"); } if (page == numberOfStartAnalysisCards - 1) { - rightButton.setResource(StartAnalysisWidgetResources.INSTANCE.rightdisabled()); + rightButtonImage.setResource(StartAnalysisWidgetResources.INSTANCE.rightdisabled()); rightButton.getElement().getStyle().setProperty("disabled", "true"); } } @@ -299,17 +346,24 @@ public class StartAnalysisWidget extends Composite implements HasWidgets, PollsL } } + private void showControllHeaderButtons() { + leftButton.getElement().addClassName( + StartAnalysisWidgetResources.INSTANCE.gss().controll_header_button_visible()); + rightButton.getElement().addClassName( + StartAnalysisWidgetResources.INSTANCE.gss().controll_header_button_visible()); + } + private void scrollToLast() { if (numberOfStartAnalysisCards > 1) { currentScrollPosition = currentScrollPosition - (numberOfStartAnalysisCards - page - 1) * SCROLL_OFFSET_STARTANALYSIS_CARDS; page = numberOfStartAnalysisCards - 1; startanalysis_card_container.getElement().getStyle().setLeft(currentScrollPosition, Unit.PCT); - header.getElement().setInnerHTML("Start " + starts.get(page).raceName); + currentStartPanel.getElement().setInnerHTML(starts.get(page).raceName); notifyStartAnalysisPageChangeListener(page); - rightButton.setResource(StartAnalysisWidgetResources.INSTANCE.rightdisabled()); + rightButtonImage.setResource(StartAnalysisWidgetResources.INSTANCE.rightdisabled()); rightButton.getElement().getStyle().setProperty("disabled", "true"); - leftButton.setResource(StartAnalysisWidgetResources.INSTANCE.left()); + leftButtonImage.setResource(StartAnalysisWidgetResources.INSTANCE.left()); leftButton.getElement().getStyle().setProperty("disabled", "false"); } } @@ -318,14 +372,14 @@ public class StartAnalysisWidget extends Composite implements HasWidgets, PollsL logger.log(Level.INFO, "Adding Startanalysis Card"); if (displaysCards == false) { displaysCards = true; - header.getElement().setInnerHTML("Start " + SafeHtmlUtils.fromString(startAnalysisDTO.raceName)); + currentStartPanel.getElement().setInnerHTML(startAnalysisDTO.raceName); } if (numberOfStartAnalysisCards > 0) { - rightButton.setResource(StartAnalysisWidgetResources.INSTANCE.right()); + rightButtonImage.setResource(StartAnalysisWidgetResources.INSTANCE.right()); } final StartAnalysisCard startlineAnalysisCard = new StartAnalysisCard(numberOfStartAnalysisCards - * SCROLL_OFFSET_STARTANALYSIS_CARDS + 10, numberOfStartAnalysisCards, startAnalysisDTO, - dashboardClientFactory.getSailingService()); + * SCROLL_OFFSET_STARTANALYSIS_CARDS + MARGIN_LEFT_STARTANALYSIS_CARD, numberOfStartAnalysisCards, + startAnalysisDTO, dashboardClientFactory.getSailingService(), raceMapResources); startanalysis_card_container.add(startlineAnalysisCard); startlineAnalysisCard.startAnalysisComponentPageChangedToIndexAndStartAnalysis(page, startAnalysisDTO); registerPageChangeListener(startlineAnalysisCard); @@ -352,8 +406,8 @@ public class StartAnalysisWidget extends Composite implements HasWidgets, PollsL public void notifyStartAnalysisPageChangeListener(int newPageIndex) { for (StartAnalysisPageChangeListener sO : pageChangeListener) { - if(starts.get(newPageIndex) != null) - sO.startAnalysisComponentPageChangedToIndexAndStartAnalysis(newPageIndex, starts.get(newPageIndex)); + if (starts.get(newPageIndex) != null) + sO.startAnalysisComponentPageChangedToIndexAndStartAnalysis(newPageIndex, starts.get(newPageIndex)); } } @@ -364,8 +418,8 @@ public class StartAnalysisWidget extends Composite implements HasWidgets, PollsL } } - private String getCompetitorIdAsStringFromDisplayedStartAnalysisDTOs() { - String result = ""; + private String getCompetitorIdAsStringFromFirstDisplayedStartAnalysis() { + String result = null; if (starts != null && starts.size() > 0) { CompetitorDTO competitor = starts.get(0).competitor; if (competitor != null) @@ -374,27 +428,20 @@ public class StartAnalysisWidget extends Composite implements HasWidgets, PollsL return result; } - private boolean displayedStartAnalysisCompetitorDifferentToRequestedOne() { - String competitorIDFromDispalyedStartAnalysisDTOs = getCompetitorIdAsStringFromDisplayedStartAnalysisDTOs(); - if (competitorIDFromDispalyedStartAnalysisDTOs != null - && !(competitorIDFromDispalyedStartAnalysisDTOs.equals(Cookies - .getCookie(SELECTED_COMPETITOR_ID_COOKIE_KEY)))) { + private boolean displayedStartAnalysisForDifferentCompetitorToRequestedOne() { + String competitorIDFromDispalyedStartAnalysisDTOs = getCompetitorIdAsStringFromFirstDisplayedStartAnalysis(); + if ((competitorIDFromDispalyedStartAnalysisDTOs != getCachedSelectedCompetitorId()) || (competitorIDFromDispalyedStartAnalysisDTOs == null && getCachedSelectedCompetitorId() != null)) { return true; } else { return false; } } - + @Override public void timeChanged(Date newTime, Date oldTime) { - String selectedCompetitorId = Cookies.getCookie(SELECTED_COMPETITOR_ID_COOKIE_KEY); - if (selectedCompetitorId != null) { - loadStartAnalysisDTOsForCompetitorID(selectedCompetitorId); - } else { - loadCompetitorsAndShowCompetitorSelectionPopup(); - } + loadStartAnalysisDTOsForCompetitorID(getCachedSelectedCompetitorId()); } - + @Override public void registerForDashboardFiveSecondsTimer(DashboardClientFactory dashboardClientFactory) { if (dashboardClientFactory != null) { diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startanalysis/StartAnalysisWidget.ui.xml b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startanalysis/StartAnalysisWidget.ui.xml index 3ede34ebdf6..d2893aa1d9e 100644 --- a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startanalysis/StartAnalysisWidget.ui.xml +++ b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startanalysis/StartAnalysisWidget.ui.xml @@ -1,21 +1,27 @@ - - + xmlns:g="urn:import:com.google.gwt.user.client.ui" + xmlns:header="urn:import:com.sap.sailing.dashboards.gwt.client.widgets.header" + xmlns:competitorselection="urn:import:com.sap.sailing.dashboards.gwt.client.popups.competitorselection.util"> + + - - No Starts Available + + + + + + + + + + + - - - + diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startanalysis/StartAnalysisWidgetResources.java b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startanalysis/StartAnalysisWidgetResources.java index 7a0aab98c25..3ca58a41b8a 100644 --- a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startanalysis/StartAnalysisWidgetResources.java +++ b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startanalysis/StartAnalysisWidgetResources.java @@ -4,41 +4,37 @@ import com.google.gwt.core.client.GWT; import com.google.gwt.resources.client.ClientBundle; import com.google.gwt.resources.client.CssResource; import com.google.gwt.resources.client.ImageResource; -import com.sap.sailing.gwt.ui.client.shared.racemap.CombinedWindPanelStyle; public interface StartAnalysisWidgetResources extends ClientBundle { public static final StartAnalysisWidgetResources INSTANCE = GWT.create(StartAnalysisWidgetResources.class); - @Source("com/sap/sailing/dashboards/gwt/client/images/leftarrow.png") + @Source("com/sap/sailing/dashboards/gwt/client/images/left.png") ImageResource left(); - @Source("com/sap/sailing/dashboards/gwt/client/images/rightarrow.png") + @Source("com/sap/sailing/dashboards/gwt/client/images/right.png") ImageResource right(); - @Source("com/sap/sailing/dashboards/gwt/client/images/leftarrow_disabled.png") + @Source("com/sap/sailing/dashboards/gwt/client/images/left_disabled.png") ImageResource leftdisabled(); - @Source("com/sap/sailing/dashboards/gwt/client/images/rightarrow_disabled.png") + @Source("com/sap/sailing/dashboards/gwt/client/images/right_disabled.png") ImageResource rightdisabled(); - - @Source("com/sap/sailing/dashboards/gwt/client/images/windarrow.png") - ImageResource combinedWindIcon(); @Source({"com/sap/sailing/dashboards/gwt/client/theme/theme.gss", "StartAnalysisWidget.gss"}) StartAnalysisGSS gss(); - - @Source({"com/sap/sailing/dashboards/gwt/client/theme/theme.gss", "StartAnalysisCombinedWindPanel.gss"}) - CombinedWindPanelStyle combinedWindPanelStyle(); public interface StartAnalysisGSS extends CssResource { String startanalysis(); - String panel_header(); + String current_start_panel(); String controll_header_button(); + String controll_header_button_visible(); + String controll_header_button_image(); String controll_header_button_left(); String controll_header_button_right(); String card_container(); String card(); + String card_map_container(); String card_table(); String card_wind_line_data_container(); String card_data(); diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startanalysis/card/StartAnalysisCard.java b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startanalysis/card/StartAnalysisCard.java index 8d997ca6d63..23d40016256 100644 --- a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startanalysis/card/StartAnalysisCard.java +++ b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startanalysis/card/StartAnalysisCard.java @@ -20,7 +20,6 @@ import com.google.gwt.user.client.ui.HTMLPanel; import com.google.gwt.user.client.ui.HasWidgets; import com.google.gwt.user.client.ui.Widget; import com.sap.sailing.dashboards.gwt.client.widgets.startanalysis.StartAnalysisPageChangeListener; -import com.sap.sailing.dashboards.gwt.client.widgets.startanalysis.StartAnalysisWidgetResources; import com.sap.sailing.dashboards.gwt.client.widgets.startanalysis.rankingtable.StartAnalysisStartRankTable; import com.sap.sailing.dashboards.gwt.shared.StartlineAdvantageType; import com.sap.sailing.dashboards.gwt.shared.dto.StartAnalysisDTO; @@ -34,6 +33,7 @@ import com.sap.sailing.gwt.ui.client.StringMessages; import com.sap.sailing.gwt.ui.client.shared.racemap.RaceMap; import com.sap.sailing.gwt.ui.client.shared.racemap.RaceMapHelpLinesSettings; import com.sap.sailing.gwt.ui.client.shared.racemap.RaceMapHelpLinesSettings.HelpLineTypes; +import com.sap.sailing.gwt.ui.client.shared.racemap.RaceMapResources; import com.sap.sailing.gwt.ui.client.shared.racemap.RaceMapZoomSettings; import com.sap.sailing.gwt.ui.client.shared.racemap.RaceMapZoomSettings.ZoomTypes; import com.sap.sse.gwt.client.async.AsyncActionsExecutor; @@ -52,6 +52,9 @@ public class StartAnalysisCard extends Composite implements HasWidgets, StartAna @UiField HTMLPanel startanalysis_card; + @UiField + HTMLPanel card_map_container; + @UiField HTMLPanel startanalysis_card_table; @@ -72,12 +75,14 @@ public class StartAnalysisCard extends Composite implements HasWidgets, StartAna private final double WIND_LINE_ADVANTAGE_DIV_WIDTH_IN_PT = 185; private final double GEOMETRIC_LINE_ADVANTAGE_DIV_WIDTH_IN_PT = 210; - private final int TABLE_MARGIN_IN_PT = 10; private final String RACE_TIME_START = "00:00:00"; - public StartAnalysisCard(double leftCSSProperty, int cardId, StartAnalysisDTO startAnalysisDTO, SailingServiceAsync sailingServiceAsync) { + private RaceMapResources raceMapResources; + + public StartAnalysisCard(double leftCSSProperty, int cardId, StartAnalysisDTO startAnalysisDTO, SailingServiceAsync sailingServiceAsync, RaceMapResources raceMapResources) { stringMessages = StringMessages.INSTANCE; this.sailingServiceAsync = sailingServiceAsync; + this.raceMapResources = raceMapResources; colorProvider = new CompetitorColorProviderImpl(); competitorSelectionModel = new CompetitorSelectionModel(/* hasMultiSelection */true, colorProvider); competitorSelectionModel.setCompetitors(startAnalysisDTO.getCompetitorDTOsFromStartAnaylsisCompetitorDTOs(), @@ -96,9 +101,9 @@ public class StartAnalysisCard extends Composite implements HasWidgets, StartAna final String startLineAdvantageType; if (startAnalysisDTO.startAnalysisWindLineInfoDTO.startLineAdvantage.startLineAdvatageType .equals(StartlineAdvantageType.GEOMETRIC)) { - startLineAdvantageType = stringMessages.dashboardStartlineAdvantageByGeometry(); + startLineAdvantageType = stringMessages.dashboardStartlineAdvantageByGeometryHeader(); } else { - startLineAdvantageType = stringMessages.dashboardStartlineAdvantagesByWind(); + startLineAdvantageType = stringMessages.dashboardStartlineAdvantagesByWindHeader(); } startanalysis_card_line_advantage .setInnerHTML(SafeHtmlUtils.fromString(startLineAdvantageType @@ -133,7 +138,7 @@ public class StartAnalysisCard extends Composite implements HasWidgets, StartAna } } - private void addMap(final int cardID, final StartAnalysisDTO startAnalysisDTO) { + private void addMap(final int cardID, final StartAnalysisDTO startAnalysisDTO, RaceMapResources raceMapResources) { com.sap.sse.gwt.client.player.Timer timer = new com.sap.sse.gwt.client.player.Timer(PlayModes.Live, 1000l); timer.pause(); ArrayList zoomTypes = new ArrayList(); @@ -149,13 +154,14 @@ public class StartAnalysisCard extends Composite implements HasWidgets, StartAna asyncActionsExecutor, null, Collections.singletonList(startAnalysisDTO.regattaAndRaceIdentifier), 5000l /* requestInterval */); raceMap = new RaceMap(sailingServiceAsync, asyncActionsExecutor, null, timer, competitorSelectionModel, StringMessages.INSTANCE, false, false, false, false, startAnalysisDTO.regattaAndRaceIdentifier, - StartAnalysisWidgetResources.INSTANCE.combinedWindPanelStyle(), /* showHeaderPanel */ true); + raceMapResources, /* showHeaderPanel */ true); raceMap.getSettings().setZoomSettings(new RaceMapZoomSettings(zoomTypes, false)); raceMap.getSettings().setHelpLinesSettings(getHelpLineSettings()); raceMap.getSettings().setTailLengthInMilliseconds(startAnalysisDTO.tailLenghtInMilliseconds); raceTimesInfoProvider.addRaceTimesInfoProviderListener(raceMap); - raceMap.setSize("100%", getHeightForRaceMapInPixels()+"px"); - startanalysis_card.add(raceMap); + raceMap.setSize("100%", "100%"); + card_map_container.getElement().getStyle().setHeight(getHeightForRaceMapInPixels(), Unit.PX); + card_map_container.add(raceMap); /** * Executes onResize() after the reflow of the DOM. Otherwise it has no effect. * Needs to resize the map because google maps are not shown loaded fully when they are hidden. @@ -169,8 +175,8 @@ public class StartAnalysisCard extends Composite implements HasWidgets, StartAna }); } - private int getHeightForRaceMapInPixels(){ - return this.getElement().getOffsetHeight() - startanalysis_card_table.getElement().getOffsetHeight() + (TABLE_MARGIN_IN_PT*3); + private double getHeightForRaceMapInPixels(){ + return this.getElement().getOffsetHeight() - startanalysis_card_table.getElement().getOffsetHeight() - 30; } private RaceMapHelpLinesSettings getHelpLineSettings() { @@ -184,7 +190,7 @@ public class StartAnalysisCard extends Composite implements HasWidgets, StartAna private void removeMap() { if (raceMap != null && raceMap.isAttached() == true) { - startanalysis_card.remove(raceMap); + card_map_container.remove(raceMap); } } @@ -201,7 +207,7 @@ public class StartAnalysisCard extends Composite implements HasWidgets, StartAna @Override public void execute() { - addMap(newPageIndex, startAnalysisDTO); + addMap(newPageIndex, startAnalysisDTO, raceMapResources); } }); } diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startanalysis/card/StartAnalysisCard.ui.xml b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startanalysis/card/StartAnalysisCard.ui.xml index fbb57deff27..5c90d570e6c 100644 --- a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startanalysis/card/StartAnalysisCard.ui.xml +++ b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startanalysis/card/StartAnalysisCard.ui.xml @@ -5,11 +5,12 @@ -
+
+
Time: 00:05:00
-
Time: 00:05:00
+ diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startanalysis/rankingtable/StartAnalysisStartRankTable.java b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startanalysis/rankingtable/StartAnalysisStartRankTable.java index 198e638da0c..3295a5d25c4 100644 --- a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startanalysis/rankingtable/StartAnalysisStartRankTable.java +++ b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startanalysis/rankingtable/StartAnalysisStartRankTable.java @@ -7,7 +7,6 @@ import com.google.gwt.dom.client.Style.Unit; import com.google.gwt.i18n.client.NumberFormat; import com.google.gwt.user.cellview.client.CellTable; import com.google.gwt.user.cellview.client.HasKeyboardSelectionPolicy.KeyboardSelectionPolicy; -import com.google.gwt.user.cellview.client.TextColumn; import com.google.gwt.user.client.ui.AbsolutePanel; import com.sap.sailing.dashboards.gwt.shared.dto.StartAnalysisCompetitorDTO; import com.sap.sailing.gwt.ui.client.CompetitorSelectionModel; @@ -48,31 +47,27 @@ public class StartAnalysisStartRankTable extends AbsolutePanel { } }; - StartAnalysisStartRankTableTeamCollumn teamColumn = new StartAnalysisStartRankTableTeamCollumn() { + StartAnalysisStartRankTableTextColumn teamColumn = new StartAnalysisStartRankTableTextColumn() { @Override - public Pair getValue(StartAnalysisCompetitorDTO saCompetitor) { - String competitorColorAsHTML = competitorSelectionModel.getColor(saCompetitor.competitorDTO).getAsHtml(); - if(competitorColorAsHTML == null){ - competitorColorAsHTML = "#121212"; - } - return new Pair(saCompetitor.rankingTableEntryDTO.teamName, competitorColorAsHTML); + public String getValue(StartAnalysisCompetitorDTO saCompetitor) { + return saCompetitor.rankingTableEntryDTO.teamName; } }; - TextColumn speedColumn = new TextColumn() { + StartAnalysisStartRankTableTextColumn speedColumn = new StartAnalysisStartRankTableTextColumn() { @Override public String getValue(StartAnalysisCompetitorDTO saCompetitor) { return "" + NumberFormat.getFormat("#0.0").format(saCompetitor.rankingTableEntryDTO.speedAtStartTime); } }; - TextColumn distanceColumn = new TextColumn() { + StartAnalysisStartRankTableTextColumn distanceColumn = new StartAnalysisStartRankTableTextColumn() { @Override public String getValue(StartAnalysisCompetitorDTO saCompetitor) { return "" + NumberFormat.getFormat("#0.0").format(saCompetitor.rankingTableEntryDTO.distanceToLineAtStartTime); } }; - + table.addColumn(rankColumn, stringConstants.dashboardRankAtFirstMark()); table.setColumnWidth(rankColumn, 18.0, Unit.PCT); table.addColumn(teamColumn, stringConstants.dashboardTeam()); diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startanalysis/rankingtable/StartAnalysisStartRankTableRankAtFirstMarkCell.java b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startanalysis/rankingtable/StartAnalysisStartRankTableRankAtFirstMarkCell.java index 3169789147f..9b9f3cdbf7f 100644 --- a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startanalysis/rankingtable/StartAnalysisStartRankTableRankAtFirstMarkCell.java +++ b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startanalysis/rankingtable/StartAnalysisStartRankTableRankAtFirstMarkCell.java @@ -3,6 +3,7 @@ package com.sap.sailing.dashboards.gwt.client.widgets.startanalysis.rankingtable import com.google.gwt.cell.client.AbstractCell; import com.google.gwt.cell.client.Cell; import com.google.gwt.safehtml.shared.SafeHtmlBuilder; +import com.sap.sailing.dashboards.gwt.client.theme.Fonts; import com.sap.sse.common.Util.Pair; public class StartAnalysisStartRankTableRankAtFirstMarkCell extends AbstractCell> implements Cell> { @@ -12,19 +13,18 @@ public class StartAnalysisStartRankTableRankAtFirstMarkCell extends AbstractCell @Override public void render(com.google.gwt.cell.client.Cell.Context context, Pair value, SafeHtmlBuilder sb) { - String borderColor = "white"; String textColor = "white"; - String width = "20pt"; - String height = "20pt"; + String width = "22px"; + String height = "22px"; + String fontFamily = Fonts.DASHBOARD_FONT_FAMILY; if(value.getB().equals("#FFFFFF")){ borderColor = "black"; textColor = "black"; - width = "19pt"; - height = "19pt"; + width = "22px"; + height = "22px"; } - - sb.appendHtmlConstant("
"); + sb.appendHtmlConstant("
"); if (value != null) { sb.appendHtmlConstant(value.getA()); } diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startanalysis/rankingtable/StartAnalysisStartRankTableStyle.css b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startanalysis/rankingtable/StartAnalysisStartRankTableStyle.css index beddf87f241..6fa2b7a3807 100644 --- a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startanalysis/rankingtable/StartAnalysisStartRankTableStyle.css +++ b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startanalysis/rankingtable/StartAnalysisStartRankTableStyle.css @@ -1,37 +1,52 @@ @CHARSET "UTF-8"; .cellTableHeader { -padding-left: 10px; -color: black; -font-size: 9pt; -background-image: none; -background-color: white; -height: 30px; -vertical-align: middle; -font-weight: bold; -text-shadow: 0 1px 1px rgba(255,255,255,.7); + padding: 7px; + padding-left: 10px; + color: black; + background-image: none; + background-color: white; + font-family: 'Open Sans' !important; + font-size: 13px; + font-weight: bold; + text-shadow: 0 1px 1px rgba(255, 255, 255, .7); + border-bottom-color: lightgrey !important; + border: none !important; + vertical-align: bottom; } .cellTableCell { -padding: 5px; -overflow: hidden; -font-size: 10pt; -height: 20px; -color: black; -background-color: white; -border:none; + padding-bottom: 8px; + padding-left: 10px; + overflow: hidden; + font-family: 'Open Sans' !important; + font-size: 13px; + color: #848484; + background-color: white; + border: none !important; + margin: 100px !important; + border-spacing: 0px !important; } -.cellTableEvenRow { -background-color: white; -border:none; +.cellTableOddRowCell { + background-color: white; + border: none !important; + padding: 0px; + padding-left: 10px; + padding-bottom: 10px; + margin: 0px !important; + border-spacing: 0px !important; + font-family: 'Open Sans' !important; } -.cellTableOddRow { -background-color: white; -border:none; + +.cellTableEvenRowCell { + background-color: white; + border: none !important; + padding: 0px; + padding-left: 10px; + padding-bottom: 10px; + maring: 0px !important; + border-spacing: 0px !important; + font-family: 'Open Sans' !important; } -cellTableOddRowCell{ -background-color: white; -border:none; -} \ No newline at end of file diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startanalysis/rankingtable/StartAnalysisStartRankTableTeamCell.java b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startanalysis/rankingtable/StartAnalysisStartRankTableTeamCell.java deleted file mode 100644 index 20baef7dfe9..00000000000 --- a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startanalysis/rankingtable/StartAnalysisStartRankTableTeamCell.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.sap.sailing.dashboards.gwt.client.widgets.startanalysis.rankingtable; - -import com.google.gwt.cell.client.AbstractCell; -import com.google.gwt.cell.client.Cell; -import com.google.gwt.safehtml.shared.SafeHtmlBuilder; -import com.sap.sse.common.Util.Pair; - -public class StartAnalysisStartRankTableTeamCell extends AbstractCell> implements Cell> { - - public StartAnalysisStartRankTableTeamCell() { - } - - @Override - public void render(com.google.gwt.cell.client.Cell.Context context, Pair value, SafeHtmlBuilder sb) { - - sb.appendHtmlConstant("
"); - if (value != null) { - sb.appendHtmlConstant(value.getA()); - sb.appendHtmlConstant("
"); - } - sb.appendHtmlConstant("
"); - } -} diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startanalysis/rankingtable/StartAnalysisStartRankTableTeamCollumn.java b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startanalysis/rankingtable/StartAnalysisStartRankTableTeamCollumn.java deleted file mode 100644 index 9ad2d1c776f..00000000000 --- a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startanalysis/rankingtable/StartAnalysisStartRankTableTeamCollumn.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.sap.sailing.dashboards.gwt.client.widgets.startanalysis.rankingtable; - -import com.google.gwt.user.cellview.client.Column; -import com.sap.sse.common.Util.Pair; - -public abstract class StartAnalysisStartRankTableTeamCollumn extends Column> { - - public StartAnalysisStartRankTableTeamCollumn() { - super(new StartAnalysisStartRankTableTeamCell()); - } - - @Override - public Pair getValue(T object) { - return null; - } -} \ No newline at end of file diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startanalysis/rankingtable/StartAnalysisStartRankTableTextCell.java b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startanalysis/rankingtable/StartAnalysisStartRankTableTextCell.java new file mode 100644 index 00000000000..67644eb9686 --- /dev/null +++ b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startanalysis/rankingtable/StartAnalysisStartRankTableTextCell.java @@ -0,0 +1,22 @@ +package com.sap.sailing.dashboards.gwt.client.widgets.startanalysis.rankingtable; + +import com.google.gwt.cell.client.AbstractCell; +import com.google.gwt.cell.client.Cell; +import com.google.gwt.safehtml.shared.SafeHtmlBuilder; +import com.sap.sailing.dashboards.gwt.client.theme.Fonts; + +public class StartAnalysisStartRankTableTextCell extends AbstractCell implements Cell { + + public StartAnalysisStartRankTableTextCell() { + } + + @Override + public void render(com.google.gwt.cell.client.Cell.Context context, String value, SafeHtmlBuilder sb) { + String fontFamily = Fonts.DASHBOARD_FONT_FAMILY; + sb.appendHtmlConstant("
"); + if (value != null) { + sb.appendHtmlConstant(value); + } + sb.appendHtmlConstant("
"); + } +} diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startanalysis/rankingtable/StartAnalysisStartRankTableTextColumn.java b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startanalysis/rankingtable/StartAnalysisStartRankTableTextColumn.java new file mode 100644 index 00000000000..d585946773a --- /dev/null +++ b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startanalysis/rankingtable/StartAnalysisStartRankTableTextColumn.java @@ -0,0 +1,21 @@ +package com.sap.sailing.dashboards.gwt.client.widgets.startanalysis.rankingtable; + +import com.google.gwt.user.cellview.client.Column; + +/** + * @author Alexander Ries (D062114) + * + */ + +public abstract class StartAnalysisStartRankTableTextColumn extends Column { + + public StartAnalysisStartRankTableTextColumn() { + super(new StartAnalysisStartRankTableTextCell()); + } + + @Override + public String getValue(T object) { + return null; + } +} + diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startlineadvantage/course/StartLineAdvantageByGeometryWidget.gss b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startlineadvantage/course/StartLineAdvantageByGeometryWidget.gss deleted file mode 100644 index 77918068ae3..00000000000 --- a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startlineadvantage/course/StartLineAdvantageByGeometryWidget.gss +++ /dev/null @@ -1,31 +0,0 @@ -@require 'theme'; - -.startLineAdvantageComponent_liveAveragePanel { - bottom: 5pt; - margin-top: 4pt; -} - -.startLineAdvantageComponent_header { - font-size: 14pt; -} - -.startLineAdvantageComponent_livePanel { - top: 35%; - bottom: 20%; -} - -.startLineAdvantageComponent_averagePanel { - top: 35%; - bottom: 20%; -} - -.startLineAdvantageComponent_middleLine { - top: 35%; - bottom: 20%; -} - -.startLineAdvantageComponent_wrapper { - position: absolute; - width: 100%; - height: 100%; -} \ No newline at end of file diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startlineadvantage/course/StartLineAdvantageByGeometryWidget.java b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startlineadvantage/course/StartLineAdvantageByGeometryWidget.java deleted file mode 100644 index e930a70fa76..00000000000 --- a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startlineadvantage/course/StartLineAdvantageByGeometryWidget.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.sap.sailing.dashboards.gwt.client.widgets.startlineadvantage.course; - -import java.util.Date; -import java.util.logging.Level; -import java.util.logging.Logger; - -import com.google.gwt.i18n.client.NumberFormat; -import com.google.gwt.user.client.rpc.AsyncCallback; -import com.sap.sailing.dashboards.gwt.client.DashboardClientFactory; -import com.sap.sailing.dashboards.gwt.client.actions.GetStartlineAdvantageByGeometryAction; -import com.sap.sailing.dashboards.gwt.client.widgets.PollsLiveDataEvery5Seconds; -import com.sap.sailing.dashboards.gwt.client.widgets.startlineadvantage.util.LiveAverageComponent; -import com.sap.sailing.dashboards.gwt.shared.DashboardURLParameters; -import com.sap.sailing.dashboards.gwt.shared.dto.StartLineAdvantageDTO; -import com.sap.sailing.gwt.ui.client.StringMessages; - -/** - * The purpose of the class is to display the live and average start line advantage either by wind or by geometry. There - * is only one advantage display at once, so the user can switch between these following two - * {@link StartLineAdvantageComponentState}s {@link StartLineAdvantageComponentStateShowsAdvantageByWind} and - * {@link StartLineAdvantageComponentStateShowsAdvantageByGeometry} by tabing somewhere at the widget. The class extends - * from {@link LiveAverageComponent} to get necessary Ui Elements but customizes these with own CSS. - * - * @author Alexander Ries (D062114) - * - */ -public class StartLineAdvantageByGeometryWidget extends LiveAverageComponent implements PollsLiveDataEvery5Seconds { - - private DashboardClientFactory dashboardClientFactory; - - private static StringMessages stringConstants = StringMessages.INSTANCE; - private static final Logger logger = Logger.getLogger(StartLineAdvantageByGeometryWidget.class.getName()); - - public StartLineAdvantageByGeometryWidget(DashboardClientFactory dashboardClientFactory) { - super(stringConstants.dashboardStartlineAdvantageByGeometry(), "m"); - this.dashboardClientFactory = dashboardClientFactory; - StartLineAdvantageByGeometryWidgetRessources.INSTANCE.gss().ensureInjected(); - this.header.setInnerText(stringConstants.dashboardStartlineAdvantageByGeometry()); - this.header.addClassName(StartLineAdvantageByGeometryWidgetRessources.INSTANCE.gss().startLineAdvantageComponent_header()); - liveAveragePanel.getElement().addClassName(StartLineAdvantageByGeometryWidgetRessources.INSTANCE.gss().startLineAdvantageComponent_liveAveragePanel()); - livePanel.getElement().addClassName(StartLineAdvantageByGeometryWidgetRessources.INSTANCE.gss().startLineAdvantageComponent_livePanel()); - middleLine.getElement().addClassName(StartLineAdvantageByGeometryWidgetRessources.INSTANCE.gss().startLineAdvantageComponent_middleLine()); - averagePanel.getElement().addClassName(StartLineAdvantageByGeometryWidgetRessources.INSTANCE.gss().startLineAdvantageComponent_averagePanel()); - this.liveLabel.setInnerHTML(stringConstants.dashboardLiveWind()); - this.averageLabel.setInnerHTML(stringConstants.dashboardAverageWind()+"
"+stringConstants.dashboardAverageWindMinutes(15)); - registerForDashboardFiveSecondsTimer(dashboardClientFactory); - } - - @Override - public void timeChanged(Date newTime, Date oldTime) { - String leaderboardNameParameterValue = DashboardURLParameters.LEADERBOARD_NAME.getValue(); - if (leaderboardNameParameterValue != null) { - dashboardClientFactory.getDispatch().execute( - new GetStartlineAdvantageByGeometryAction(leaderboardNameParameterValue), - new AsyncCallback() { - - @Override - public void onFailure(Throwable caught) { - logger.log(Level.INFO, "Failed to received startline advantage by geometry"); - } - - @Override - public void onSuccess(StartLineAdvantageDTO result) { - if (result.startLineAdvantage != null) { - logger.log(Level.INFO, "Updating UI with RibDashboardRaceInfoDTO.startLineAdvantageDTO"); - setLiveValue(NumberFormat.getFormat("#0.0").format(result.startLineAdvantage.doubleValue())); - setAverageValue(NumberFormat.getFormat("#0.0").format(result.average.doubleValue())); - } else { - logger.log(Level.INFO, "RibDashboardRaceInfoDTO.startLineAdvantageDTO is 0"); - } - } - }); - } - } - - @Override - public void registerForDashboardFiveSecondsTimer(DashboardClientFactory dashboardClientFactory) { - if (dashboardClientFactory != null) { - dashboardClientFactory.getDashboardFiveSecondsTimer().addTimeListener(this); - } - } -} diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startlineadvantage/course/StartlineAdvantageByGeometryWidget.gss b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startlineadvantage/course/StartlineAdvantageByGeometryWidget.gss new file mode 100644 index 00000000000..b8fccaeba4b --- /dev/null +++ b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startlineadvantage/course/StartlineAdvantageByGeometryWidget.gss @@ -0,0 +1,17 @@ +@require 'theme'; + +.start_line_advantage_by_geometry_widget { + position: absolute; + height: 100%; + width: 100%; + background-color: LIGHT_GREY; + border-radius: DASHBOARD_BORDER_RADIUS; + overflow: hidden; +} + +.advantage_maximum_live_average { + position: absolute; + width: 100%; + top: DASHBOARD_SPACE_MEDIUM; + height: auto; +} \ No newline at end of file diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startlineadvantage/course/StartlineAdvantageByGeometryWidget.java b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startlineadvantage/course/StartlineAdvantageByGeometryWidget.java new file mode 100644 index 00000000000..c9b027fee99 --- /dev/null +++ b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startlineadvantage/course/StartlineAdvantageByGeometryWidget.java @@ -0,0 +1,148 @@ +package com.sap.sailing.dashboards.gwt.client.widgets.startlineadvantage.course; + +import java.util.Date; +import java.util.Iterator; +import java.util.logging.Level; +import java.util.logging.Logger; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.i18n.client.NumberFormat; +import com.google.gwt.uibinder.client.UiBinder; +import com.google.gwt.uibinder.client.UiField; +import com.google.gwt.user.client.rpc.AsyncCallback; +import com.google.gwt.user.client.ui.Composite; +import com.google.gwt.user.client.ui.HTMLPanel; +import com.google.gwt.user.client.ui.HasWidgets; +import com.google.gwt.user.client.ui.Widget; +import com.sap.sailing.dashboards.gwt.client.DashboardClientFactory; +import com.sap.sailing.dashboards.gwt.client.actions.GetStartlineAdvantageByGeometryAction; +import com.sap.sailing.dashboards.gwt.client.widgets.PollsLiveDataEvery5Seconds; +import com.sap.sailing.dashboards.gwt.client.widgets.header.DashboardWidgetHeaderAndNoDataMessage; +import com.sap.sailing.dashboards.gwt.client.widgets.startlineadvantage.util.LiveAverageComponent; +import com.sap.sailing.dashboards.gwt.client.widgets.startlineadvantage.wind.StartlineAdvantagesByWindWidget; +import com.sap.sailing.dashboards.gwt.shared.DashboardURLParameters; +import com.sap.sailing.dashboards.gwt.shared.dto.StartLineAdvantageDTO; +import com.sap.sailing.gwt.ui.client.StringMessages; + +/** + * @author Alexander Ries (D062114) + * + */ +public class StartlineAdvantageByGeometryWidget extends Composite implements HasWidgets, PollsLiveDataEvery5Seconds { + + private static StartlineAdvantageByGeometryWidgetUiBinder uiBinder = GWT + .create(StartlineAdvantageByGeometryWidgetUiBinder.class); + + interface StartlineAdvantageByGeometryWidgetUiBinder extends UiBinder { + } + + @UiField(provided = true) + DashboardWidgetHeaderAndNoDataMessage dashboardWidgetHeaderAndNoDataMessage; + + @UiField(provided = true) + LiveAverageComponent advantageMaximumLiveAverage; + + @UiField + HTMLPanel contentContainer; + + private DashboardClientFactory dashboardClientFactory; + private GetStartlineAdvantageByGeometryAction getStartlineAdvantageByGeometryAction; + private static final Logger logger = Logger.getLogger(StartlineAdvantagesByWindWidget.class.getName()); + + public StartlineAdvantageByGeometryWidget(DashboardClientFactory dashboardClientFactory) { + StartlineAdvantageByGeometryWidgetRessources.INSTANCE.gss().ensureInjected(); + String leaderboardNameParameterValue = DashboardURLParameters.LEADERBOARD_NAME.getValue(); + if (leaderboardNameParameterValue != null) { + this.getStartlineAdvantageByGeometryAction = new GetStartlineAdvantageByGeometryAction(leaderboardNameParameterValue); + } + this.dashboardClientFactory = dashboardClientFactory; + dashboardWidgetHeaderAndNoDataMessage = new DashboardWidgetHeaderAndNoDataMessage(); + advantageMaximumLiveAverage = new LiveAverageComponent(StringMessages.INSTANCE.metersUnit()); + advantageMaximumLiveAverage.liveLabel.setInnerHTML(StringMessages.INSTANCE.dashboardLiveWind()); + advantageMaximumLiveAverage.averageLabel.setInnerHTML("

" + StringMessages.INSTANCE.dashboardAverageWind() + + "

" + StringMessages.INSTANCE.dashboardAverageWindMinutes(15) + "

"); + initWidget(uiBinder.createAndBindUi(this)); + hideDataDisplayContainer(); + dashboardWidgetHeaderAndNoDataMessage.setHeaderText(StringMessages.INSTANCE + .dashboardStartlineAdvantageByGeometryHeader()); + dashboardWidgetHeaderAndNoDataMessage.showNoDataMessageWithHeaderAndMessage( + StringMessages.INSTANCE.dashboardNoStartlineAdvantagesByGeometryAvailableHeader(), + StringMessages.INSTANCE.dashboardNoStartlineAdvantagesByGeometryAvailableMessage()); + registerForDashboardFiveSecondsTimer(dashboardClientFactory); + } + + private void showDataDisplayContainer() { + contentContainer.getElement().getStyle().setOpacity(1.0); + } + + private void hideDataDisplayContainer() { + contentContainer.getElement().getStyle().setOpacity(0.0); + } + + @Override + public void timeChanged(Date newTime, Date oldTime) { + if (getStartlineAdvantageByGeometryAction != null) { + dashboardClientFactory.getDispatch().execute(getStartlineAdvantageByGeometryAction, + new AsyncCallback() { + + @Override + public void onFailure(Throwable caught) { + logger.log(Level.INFO, "Failed to received startline advantage by geometry"); + hideDataDisplayContainer(); + dashboardWidgetHeaderAndNoDataMessage.showNoDataMessageWithHeaderAndMessage( + StringMessages.INSTANCE.dashboardNoStartlineAdvantagesByGeometryAvailableHeader(), + StringMessages.INSTANCE.dashboardNoStartlineAdvantagesByGeometryAvailableMessage()); + } + + @Override + public void onSuccess(StartLineAdvantageDTO result) { + if (result.startLineAdvantage != null) { + logger.log(Level.INFO, + "Updating UI with RibDashboardRaceInfoDTO.startLineAdvantageDTO"); + advantageMaximumLiveAverage.setLiveValue(NumberFormat.getFormat("#0.0").format( + result.startLineAdvantage.doubleValue())); + advantageMaximumLiveAverage.setAverageValue(NumberFormat.getFormat("#0.0").format( + result.average.doubleValue())); + showDataDisplayContainer(); + dashboardWidgetHeaderAndNoDataMessage.hideNoDataMessage(); + } else { + logger.log(Level.INFO, "RibDashboardRaceInfoDTO.startLineAdvantageDTO is 0"); + hideDataDisplayContainer(); + dashboardWidgetHeaderAndNoDataMessage.showNoDataMessageWithHeaderAndMessage( + StringMessages.INSTANCE + .dashboardNoStartlineAdvantagesByGeometryAvailableHeader(), + StringMessages.INSTANCE + .dashboardNoStartlineAdvantagesByGeometryAvailableMessage()); + } + } + }); + } + } + + @Override + public void registerForDashboardFiveSecondsTimer(DashboardClientFactory dashboardClientFactory) { + if (dashboardClientFactory != null) { + dashboardClientFactory.getDashboardFiveSecondsTimer().addTimeListener(this); + } + } + + @Override + public void add(Widget w) { + throw new UnsupportedOperationException("The method add(Widget w) is not supported."); + } + + @Override + public void clear() { + throw new UnsupportedOperationException("The method clear() is not supported."); + } + + @Override + public Iterator iterator() { + return null; + } + + @Override + public boolean remove(Widget w) { + return false; + } +} \ No newline at end of file diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startlineadvantage/course/StartlineAdvantageByGeometryWidget.ui.xml b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startlineadvantage/course/StartlineAdvantageByGeometryWidget.ui.xml new file mode 100644 index 00000000000..ae191af9880 --- /dev/null +++ b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startlineadvantage/course/StartlineAdvantageByGeometryWidget.ui.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startlineadvantage/course/StartLineAdvantageByGeometryWidgetRessources.java b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startlineadvantage/course/StartlineAdvantageByGeometryWidgetRessources.java similarity index 51% rename from java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startlineadvantage/course/StartLineAdvantageByGeometryWidgetRessources.java rename to java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startlineadvantage/course/StartlineAdvantageByGeometryWidgetRessources.java index ccbc0fe1578..f45bb80527e 100644 --- a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startlineadvantage/course/StartLineAdvantageByGeometryWidgetRessources.java +++ b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startlineadvantage/course/StartlineAdvantageByGeometryWidgetRessources.java @@ -5,25 +5,16 @@ import com.google.gwt.resources.client.ClientBundle; import com.google.gwt.resources.client.CssResource; import com.google.gwt.resources.client.CssResource.Shared; -public interface StartLineAdvantageByGeometryWidgetRessources extends ClientBundle { +public interface StartlineAdvantageByGeometryWidgetRessources extends ClientBundle { - public static final StartLineAdvantageByGeometryWidgetRessources INSTANCE = GWT.create(StartLineAdvantageByGeometryWidgetRessources.class); + public static final StartlineAdvantageByGeometryWidgetRessources INSTANCE = GWT.create(StartlineAdvantageByGeometryWidgetRessources.class); - @Source({"com/sap/sailing/dashboards/gwt/client/theme/theme.gss", "StartLineAdvantageByGeometryWidget.gss"}) + @Source({"com/sap/sailing/dashboards/gwt/client/theme/theme.gss", "StartlineAdvantageByGeometryWidget.gss"}) StartLineAdvantageByGeometryGss gss(); @Shared public interface StartLineAdvantageByGeometryGss extends CssResource { - public String startLineAdvantageComponent_liveAveragePanel(); - - public String startLineAdvantageComponent_header(); - - public String startLineAdvantageComponent_livePanel(); - - public String startLineAdvantageComponent_averagePanel(); - - public String startLineAdvantageComponent_middleLine(); - - public String startLineAdvantageComponent_wrapper(); + String start_line_advantage_by_geometry_widget(); + String advantage_maximum_live_average(); } } diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startlineadvantage/util/LiveAverageComponent.gss b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startlineadvantage/util/LiveAverageComponent.gss index cdeb1373791..4a26d8200e3 100644 --- a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startlineadvantage/util/LiveAverageComponent.gss +++ b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startlineadvantage/util/LiveAverageComponent.gss @@ -5,33 +5,14 @@ left: 0px; right: 0px; top: 0px; - bottom: 0px; -} - -.header_container { - position: absolute; - left: 0px; - right: 0px; - top: 0px; - height: 35%; -} - -.header { - height: 100%; - margin-top: 5pt; - line-height: 15pt; - vertical-align: middle; - font-size: 13pt; - font-family: DASHBOARD_FONT_FAMILY; - width: 100%; - text-align: center; - overflow: visible; - font-weight: bold; + height: 110px; + background-color: WHITE; + z-index: 2; } .live_container { position: absolute; - top: 35%; + top: DASHBOARD_SPACE_VERY_SMALL; bottom: 30%; right: 52%; left: 0%; @@ -39,7 +20,7 @@ .average_container { position: absolute; - top: 35%; + top: DASHBOARD_SPACE_VERY_SMALL; bottom: 30%; right: 0%; left: 52%; @@ -47,7 +28,7 @@ .middle_line { position: absolute; - top: 35%; + top: 13px; height: 30pt; width: 1px; left: 50%; @@ -57,12 +38,13 @@ .panel_value_number { font-family: DASHBOARD_FONT_FAMILY; - font-size: 26pt; + font-size: DASHBOARD_FONT_SIZE_VERY_LARGE; + height: DASHBOARD_FONT_SIZE_VERY_LARGE; } .panel_value_unit { font-family: DASHBOARD_FONT_FAMILY; - font-size: 15pt; + font-size: DASHBOARD_FONT_SIZE_MEDIUM; } .panel_value_unit_degrees { @@ -74,7 +56,6 @@ .value_panel { margin: 0px; width: 100%; - height: 90%; text-align: center; font-family: DASHBOARD_FONT_FAMILY; font-weight: bolder; @@ -85,23 +66,27 @@ width: 100%; height: 100%; text-align: center; - font-size: 11pt; - color: grey; + font-size: DASHBOARD_FONT_SIZE_MEDIUM; + color: LIGHT_TEXT_COLOR; font-family: DASHBOARD_FONT_FAMILY; } .live_label_container { position: absolute; - bottom: 0px; + top: 56px; left: 0px; right: 50%; - height: 35%; + height: 14px; + padding-left: DASHBOARD_SPACE_VERY_SMALL; + padding-right: DASHBOARD_SPACE_VERY_SMALL; } .average_label_container { position: absolute; - bottom: 0px; - right: 0px; + top: 56px; left: 50%; - height: 35%; + right: 0px; + height: 14px; + padding-left: DASHBOARD_SPACE_VERY_SMALL; + padding-right: DASHBOARD_SPACE_VERY_SMALL; } \ No newline at end of file diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startlineadvantage/util/LiveAverageComponent.java b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startlineadvantage/util/LiveAverageComponent.java index dd976dc9f0a..5ec96b8befc 100644 --- a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startlineadvantage/util/LiveAverageComponent.java +++ b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startlineadvantage/util/LiveAverageComponent.java @@ -11,7 +11,6 @@ import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.HTMLPanel; import com.google.gwt.user.client.ui.HasWidgets; import com.google.gwt.user.client.ui.Widget; -import com.sap.sailing.dashboards.gwt.client.widgets.startlineadvantage.course.StartLineAdvantageByGeometryWidget; import com.sap.sailing.dashboards.gwt.client.widgets.windbot.WindBotWidget; import com.sap.sailing.dashboards.gwt.client.widgets.windbot.charts.VerticalWindChartClickListener; import com.sap.sailing.gwt.ui.client.StringMessages; @@ -34,9 +33,6 @@ public class LiveAverageComponent extends Composite implements HasWidgets, Verti @UiField public HTMLPanel liveAveragePanel; - @UiField - public DivElement header; - @UiField SpanElement liveNumber; @@ -78,12 +74,11 @@ public class LiveAverageComponent extends Composite implements HasWidgets, Verti * sets a special size * * */ - public LiveAverageComponent(String header, String unit) { + public LiveAverageComponent(String unit) { LiveAverageComponentResources.INSTANCE.gss().ensureInjected(); stringConstants = StringMessages.INSTANCE; initWidget(uiBinder.createAndBindUi(this)); liveAveragePanel.getElement().getStyle().setProperty("backgroundColor", "white"); - this.header.setInnerText(header); this.liveUnit.setInnerText(unit); this.averageUnit.setInnerText(unit); // Lifts the degrees unit string "°". Otherwise it would be too small. diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startlineadvantage/util/LiveAverageComponent.ui.xml b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startlineadvantage/util/LiveAverageComponent.ui.xml index 907458fd311..4780e7128cb 100644 --- a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startlineadvantage/util/LiveAverageComponent.ui.xml +++ b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startlineadvantage/util/LiveAverageComponent.ui.xml @@ -2,40 +2,29 @@ - - + + - - -
-
- -
- - -
+
+ + +
- - - -
- - -
+
+ + +
- -
+
- -
+
-
-
\ No newline at end of file diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startlineadvantage/util/LiveAverageComponentResources.java b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startlineadvantage/util/LiveAverageComponentResources.java index 2809a676b98..16f81f74f6b 100644 --- a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startlineadvantage/util/LiveAverageComponentResources.java +++ b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startlineadvantage/util/LiveAverageComponentResources.java @@ -17,8 +17,6 @@ public interface LiveAverageComponentResources extends ClientBundle { interface LiveAverageComponentGss extends CssResource { String live_average_component(); - String header(); - String header_container(); String live_container(); String average_container(); String middle_line(); diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startlineadvantage/wind/StartlineAdvantagesByWindWidget.gss b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startlineadvantage/wind/StartlineAdvantagesByWindWidget.gss index 3d15fb8ff12..0a0fe674631 100644 --- a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startlineadvantage/wind/StartlineAdvantagesByWindWidget.gss +++ b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startlineadvantage/wind/StartlineAdvantagesByWindWidget.gss @@ -1,21 +1,24 @@ @require 'theme'; -.start_line_advantages_by_wind_component{ +.start_line_advantages_by_wind_component { position: absolute; height: 100%; width: 100%; + background-color: LIGHT_GREY; + border-radius: DASHBOARD_BORDER_RADIUS; + overflow: hidden; } -.advantage_maximum_live_average{ +.advantage_maximum_live_average { position: absolute; - height: 30%; width: 100%; - top: 4pt; + top: DASHBOARD_SPACE_MEDIUM; + height: auto; } -.advantages_on_line_chart_container{ - position: absolute; - height: 70%; - top: 30%; +.advantages_on_line_chart_container { + position: absolute; + top: 145px; width: 100%; + bottom: 0px; } \ No newline at end of file diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startlineadvantage/wind/StartlineAdvantagesByWindWidget.java b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startlineadvantage/wind/StartlineAdvantagesByWindWidget.java index c54b0cc2482..2c9eb3aea66 100644 --- a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startlineadvantage/wind/StartlineAdvantagesByWindWidget.java +++ b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startlineadvantage/wind/StartlineAdvantagesByWindWidget.java @@ -6,18 +6,19 @@ import java.util.logging.Level; import java.util.logging.Logger; import com.google.gwt.core.client.GWT; -import com.google.gwt.dom.client.Style.Unit; import com.google.gwt.i18n.client.NumberFormat; import com.google.gwt.resources.client.CssResource; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.Composite; +import com.google.gwt.user.client.ui.HTMLPanel; import com.google.gwt.user.client.ui.HasWidgets; import com.google.gwt.user.client.ui.Widget; import com.sap.sailing.dashboards.gwt.client.DashboardClientFactory; import com.sap.sailing.dashboards.gwt.client.actions.GetStartlineAdvantagesByWindAction; import com.sap.sailing.dashboards.gwt.client.widgets.PollsLiveDataEvery5Seconds; +import com.sap.sailing.dashboards.gwt.client.widgets.header.DashboardWidgetHeaderAndNoDataMessage; import com.sap.sailing.dashboards.gwt.client.widgets.startlineadvantage.util.LiveAverageComponent; import com.sap.sailing.dashboards.gwt.client.widgets.startlineadvantage.wind.charts.StartlineAdvantagesOnLineChart; import com.sap.sailing.dashboards.gwt.shared.DashboardURLParameters; @@ -40,47 +41,63 @@ public class StartlineAdvantagesByWindWidget extends Composite implements HasWid } + @UiField(provided = true) + DashboardWidgetHeaderAndNoDataMessage dashboardWidgetHeaderAndNoDataMessage; + @UiField(provided = true) LiveAverageComponent advantageMaximumLiveAverage; @UiField(provided = true) StartlineAdvantagesOnLineChart startlineAdvantagesOnLineChart; - public DashboardClientFactory dashboardClientFactory; + @UiField + HTMLPanel dataDisplayContainer; + + private GetStartlineAdvantagesByWindAction getStartlineAdvantagesByWindAction; + private DashboardClientFactory dashboardClientFactory; private static final Logger logger = Logger.getLogger(StartlineAdvantagesByWindWidget.class.getName()); public StartlineAdvantagesByWindWidget(DashboardClientFactory dashboardClientFactory) { StartlineAdvantagesByWindWidgetResources.INSTANCE.gss().ensureInjected(); + String leaderboardNameParameterValue = DashboardURLParameters.LEADERBOARD_NAME.getValue(); + if (leaderboardNameParameterValue != null) { + getStartlineAdvantagesByWindAction = new GetStartlineAdvantagesByWindAction(leaderboardNameParameterValue); + } this.dashboardClientFactory = dashboardClientFactory; + dashboardWidgetHeaderAndNoDataMessage = new DashboardWidgetHeaderAndNoDataMessage(); + advantageMaximumLiveAverage = new LiveAverageComponent(StringMessages.INSTANCE.metersUnit()); startlineAdvantagesOnLineChart = new StartlineAdvantagesOnLineChart(); - advantageMaximumLiveAverage = new LiveAverageComponent(StringMessages.INSTANCE.dashboardStartlineAdvantagesByWind(), "m"); - advantageMaximumLiveAverage.header.getStyle().setFontSize(14, Unit.PT); advantageMaximumLiveAverage.liveLabel.setInnerHTML("advantage max."); advantageMaximumLiveAverage.averageLabel.setInnerHTML("advantage max. average "+StringMessages.INSTANCE.dashboardAverageWindMinutes(15)); initWidget(uiBinder.createAndBindUi(this)); + hideDataDisplayContainer(); + dashboardWidgetHeaderAndNoDataMessage.setHeaderText(StringMessages.INSTANCE.dashboardStartlineAdvantagesByWindHeader()); + dashboardWidgetHeaderAndNoDataMessage.showNoDataMessageWithHeaderAndMessage(StringMessages.INSTANCE.dashboardNoStartlineAdvantagesByWindAvailableHeader(), StringMessages.INSTANCE.dashboardNoStartlineAdvantagesByWindAvailableMessage()); + dataDisplayContainer.getElement().getStyle().setOpacity(0.0); registerForDashboardFiveSecondsTimer(dashboardClientFactory); } private void loadData() { logger.log(Level.INFO, "Executing GetStartlineAdvantagesAction"); - String leaderboardNameParameterValue = DashboardURLParameters.LEADERBOARD_NAME.getValue(); - if (leaderboardNameParameterValue != null) { - dashboardClientFactory.getDispatch().execute( - new GetStartlineAdvantagesByWindAction(leaderboardNameParameterValue), + if (getStartlineAdvantagesByWindAction != null) { + dashboardClientFactory.getDispatch().execute(getStartlineAdvantagesByWindAction, new AsyncCallback() { @Override public void onSuccess(StartlineAdvantagesWithMaxAndAverageDTO result) { logger.log(Level.INFO, "Received StartlineAdvantagesWithMaxAndAverageDTO"); if (result != null && result.maximum != null && result.average != null) { + dashboardWidgetHeaderAndNoDataMessage.hideNoDataMessage(); logger.log(Level.INFO, "Updating UI with StartlineAdvantagesWithMaxAndAverageDTO"); startlineAdvantagesOnLineChart.setStartlineAdvantagesAndConfidences(result.distanceToRCBoatToStartlineAdvantage, result.distanceToRCBoatToConfidence); advantageMaximumLiveAverage.setLiveValue(NumberFormat.getFormat("#0.0").format( result.maximum.doubleValue())); advantageMaximumLiveAverage.setAverageValue(NumberFormat.getFormat("#0.0").format( result.average.doubleValue())); + showDataDisplayContainer(); } else { logger.log(Level.INFO, "StartlineAdvantagesWithMaxAndAverageDTO is null"); + dashboardWidgetHeaderAndNoDataMessage.showNoDataMessageWithHeaderAndMessage(StringMessages.INSTANCE.dashboardNoStartlineAdvantagesByWindAvailableHeader(), StringMessages.INSTANCE.dashboardNoStartlineAdvantagesByWindAvailableMessage()); } } @@ -88,11 +105,20 @@ public class StartlineAdvantagesByWindWidget extends Composite implements HasWid public void onFailure(Throwable caught) { logger.log(Level.INFO, "Failed to received StartlineAdvantagesWithMaxAndAverageDTO, " + caught.getMessage()); + dashboardWidgetHeaderAndNoDataMessage.showNoDataMessageWithHeaderAndMessage(StringMessages.INSTANCE.dashboardNoStartlineAdvantagesByWindAvailableHeader(), StringMessages.INSTANCE.dashboardNoStartlineAdvantagesByWindAvailableMessage()); } }); } } + private void showDataDisplayContainer(){ + dataDisplayContainer.getElement().getStyle().setOpacity(1.0); + } + + private void hideDataDisplayContainer(){ + dataDisplayContainer.getElement().getStyle().setOpacity(0.0); + } + @Override public void timeChanged(Date newTime, Date oldTime) { loadData(); diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startlineadvantage/wind/StartlineAdvantagesByWindWidget.ui.xml b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startlineadvantage/wind/StartlineAdvantagesByWindWidget.ui.xml index 4b8cd97fb6b..2a7f23688ce 100644 --- a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startlineadvantage/wind/StartlineAdvantagesByWindWidget.ui.xml +++ b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/startlineadvantage/wind/StartlineAdvantagesByWindWidget.ui.xml @@ -2,16 +2,21 @@ + xmlns:chart="urn:import:com.sap.sailing.dashboards.gwt.client.widgets.startlineadvantage.wind.charts" + xmlns:header="urn:import:com.sap.sailing.dashboards.gwt.client.widgets.header"> - + - - - - - + + + + + + + + \ No newline at end of file diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/windbot/WindBotWidget.gss b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/windbot/WindBotWidget.gss index 3443715463a..12939789ba7 100644 --- a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/windbot/WindBotWidget.gss +++ b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/windbot/WindBotWidget.gss @@ -1,23 +1,27 @@ @require 'theme'; -.wind_bot_component{ +.wind_bot_widget{ position: absolute; height: 100%; width: 100%; + background-color: LIGHT_GREY; z-index: 5; + border-radius: DASHBOARD_BORDER_RADIUS; + overflow: hidden; } -.name_panel { - height: 45pt; - line-height: 45pt; +.live_average_header { + position: absolute; + height: 60px; + top: DASHBOARD_SPACE_MEDIUM; + line-height: 60px; vertical-align: middle; - font-size: 14pt; + font-size: DASHBOARD_FONT_SIZE_LARGE; font-family: DASHBOARD_FONT_FAMILY; - width: 100%; text-align: center; font-weight: bold; overflow: visible; - background-color: white; + background-color: WHITE; } .live_average_container { @@ -25,41 +29,34 @@ border: none; border-radius: 0pt; background-color: white; - top: 45pt; - bottom: 65%; + top: 90px; } .left { - left: 0pt; + left: 0px; right: 50%; } .right { left: 50%; - right: 0pt; + right: 0px; } .windchart_container { position: absolute; border: none; - border-radius: 0pt; + border-radius: 0px; background-color: white; - top: 35%; - bottom: 0pt; + top: 190px; + bottom: 0px; + padding-bottom: 10px; } .windchart{ - position: absolute; - left: 0pt; - right: 0pt; - top: 0pt; - bottom: 0pt; -} - -.compass_container{ position: absolute; - height: 45pt; - width: 45pt; - top: 5pt; - right: 5pt; -} \ No newline at end of file + left: 0px; + right: 0px; + top: 0px; + bottom: 0px; + padding-bottom: 10px; +} diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/windbot/WindBotWidget.java b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/windbot/WindBotWidget.java index 8e2b66b977e..6d79fe56bc4 100644 --- a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/windbot/WindBotWidget.java +++ b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/windbot/WindBotWidget.java @@ -7,15 +7,17 @@ import java.util.logging.Logger; import com.google.gwt.core.client.GWT; import com.google.gwt.core.client.Scheduler.ScheduledCommand; +import com.google.gwt.dom.client.DivElement; import com.google.gwt.i18n.client.NumberFormat; -import com.google.gwt.resources.client.CssResource; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.HTMLPanel; import com.google.gwt.user.client.ui.HasWidgets; import com.google.gwt.user.client.ui.Widget; +import com.sap.sailing.dashboards.gwt.client.DashboardClientFactory; import com.sap.sailing.dashboards.gwt.client.dataretriever.WindBotDataRetrieverListener; +import com.sap.sailing.dashboards.gwt.client.widgets.header.DashboardWidgetHeaderAndNoDataMessage; import com.sap.sailing.dashboards.gwt.client.widgets.startlineadvantage.util.LiveAverageComponent; import com.sap.sailing.dashboards.gwt.client.widgets.windbot.charts.VerticalWindChart; import com.sap.sailing.dashboards.gwt.client.widgets.windbot.compass.LocationPointerCompass; @@ -49,18 +51,18 @@ public class WindBotWidget extends Composite implements HasWidgets, WindBotDataR interface WindBotWidgetUiBinder extends UiBinder { } - - interface WindBotComponentStyle extends CssResource { - } @UiField - public HTMLPanel windBotComponent; - - /** - * The header of the widget displaying the name of the wind bot. - * */ + HTMLPanel contentContainer; + + @UiField(provided = true) + DashboardWidgetHeaderAndNoDataMessage dashboardWidgetHeaderAndNoDataMessage; + @UiField - public HTMLPanel windBotNamePanel; + DivElement totalWindSpeedHeader; + + @UiField + DivElement totalWindDirectionHeader; /** * One of two {@link LiveAverageComponent}s that display in big font the live and the average value of the measured @@ -97,27 +99,45 @@ public class WindBotWidget extends Composite implements HasWidgets, WindBotDataR @UiField public LocationPointerCompass locationPointerCompass; + public DashboardClientFactory dashboardClientFactory; private String windBotId; private StringMessages stringConstants; - private final static String UNIT_WIND_DIRECTION = "°"; - public WindBotWidget(String windBotId) { + public WindBotWidget(DashboardClientFactory dashboardClientFactory) { WindBotWidgetResources.INSTANCE.gss().ensureInjected(); - this.windBotId = windBotId; + this.dashboardClientFactory = dashboardClientFactory; + dashboardWidgetHeaderAndNoDataMessage = new DashboardWidgetHeaderAndNoDataMessage(); stringConstants = StringMessages.INSTANCE; movingAverageSpeed = new MovingAverage(500); movingAverageDirection = new MovingAverage(500); - trueWindSpeedLiveAverageComponent = new LiveAverageComponent(stringConstants.dashboardTrueWindSpeed(), stringConstants.dashboardTrueWindSpeedUnit()); - trueWindDirectionLiveAverageComponent = new LiveAverageComponent(stringConstants.dashboardTrueWindDirection(), UNIT_WIND_DIRECTION); + trueWindSpeedLiveAverageComponent = new LiveAverageComponent(stringConstants.dashboardTrueWindSpeedUnit()); + trueWindDirectionLiveAverageComponent = new LiveAverageComponent(stringConstants.degreesUnit()); trueWindSpeedVerticalWindChart = new VerticalWindChart("#008FFF", "#6ADBFF"); trueWindDirectionVerticalWindChart = new VerticalWindChart("#008FFF", "#6ADBFF"); initWidget(uiBinder.createAndBindUi(this)); - windBotNamePanel.getElement().setInnerText(stringConstants.dashboardWindBot()+" "+ windBotId); + hideContentContainer(); + dashboardWidgetHeaderAndNoDataMessage.setHeaderText(stringConstants.dashboardWindBot()); + dashboardWidgetHeaderAndNoDataMessage.showNoDataMessageWithHeaderAndMessage(stringConstants.dashboardNoWindBotAvailableHeader(), stringConstants.dashboardNoWindBotAvailableMessage()); + totalWindSpeedHeader.setInnerHTML(stringConstants.dashboardTrueWindSpeed()); + totalWindDirectionHeader.setInnerHTML(stringConstants.dashboardTrueWindDirection()); trueWindSpeedVerticalWindChart.addVerticalWindChartClickListener(trueWindSpeedLiveAverageComponent); trueWindDirectionVerticalWindChart.addVerticalWindChartClickListener(trueWindDirectionLiveAverageComponent); } - - public WindTrackInfoDTO getWindTrackInfoDTOFromAndWindBotID(WindInfoForRaceDTO windInfoForRaceDTO, String id) { + + public void setWindBotId(String windBotId) { + this.windBotId = windBotId; + dashboardWidgetHeaderAndNoDataMessage.setHeaderText(stringConstants.dashboardWindBot() + " " + windBotId); + } + + private void showContentContainer(){ + contentContainer.getElement().getStyle().setOpacity(1.0); + } + + private void hideContentContainer(){ + contentContainer.getElement().getStyle().setOpacity(0.0); + } + + private WindTrackInfoDTO getWindTrackInfoDTOFromAndWindBotID(WindInfoForRaceDTO windInfoForRaceDTO, String id) { WindTrackInfoDTO windTrackInfo = null; for (WindSource windSource : windInfoForRaceDTO.windTrackInfoByWindSource.keySet()) { if (windSource.getType().equals(WindSourceType.EXPEDITION) && windSource.getId() != null) { @@ -128,26 +148,6 @@ public class WindBotWidget extends Composite implements HasWidgets, WindBotDataR return windTrackInfo; } - @Override - public void add(Widget w) { - throw new UnsupportedOperationException("The method add(Widget w) is not supported."); - } - - @Override - public void clear() { - throw new UnsupportedOperationException("The method clear() is not supported."); - } - - @Override - public Iterator iterator() { - return null; - } - - @Override - public boolean remove(Widget w) { - return false; - } - /** * Updates the classes {@link LiveAverageComponent}s and {@link VerticalWindChart}s with data AND updates the * {@link #locationPointerCompass} with a new wind bot position !!! @@ -161,6 +161,7 @@ public class WindBotWidget extends Composite implements HasWidgets, WindBotDataR logger.log(Level.INFO, "WindInfoForRaceDTO contains WindTrackInfoDTO for Windbot id " + windBotId); if (windTrackInfoDTO.windFixes != null) { if (windTrackInfoDTO.windFixes.size() > 0) { + dashboardWidgetHeaderAndNoDataMessage.hideNoDataMessage(); logger.log(Level.INFO, "Upating UI with Wind Fixes for WindBot id " + windBotId); SplitScheduler.get().schedule(new ScheduledCommand() { @@ -190,6 +191,7 @@ public class WindBotWidget extends Composite implements HasWidgets, WindBotDataR updateLocationPointerCompass(windTrackInfoDTO); } }); + showContentContainer(); } else { logger.log(Level.INFO, "WindTrackInfoDTO.windFixes is empty"); } @@ -220,8 +222,7 @@ public class WindBotWidget extends Composite implements HasWidgets, WindBotDataR } private void updateLocationPointerCompass(final WindTrackInfoDTO windTrackInfoDTO) { - locationPointerCompass.windBotPositionChanged(windTrackInfoDTO.windFixes - .get(windTrackInfoDTO.windFixes.size() - 1).position); + locationPointerCompass.windBotPositionChanged(windTrackInfoDTO.windFixes.get(windTrackInfoDTO.windFixes.size() - 1).position); } private void updateMovingAverages(List windFixes) { @@ -230,4 +231,24 @@ public class WindBotWidget extends Composite implements HasWidgets, WindBotDataR movingAverageDirection.add(windDTO.trueWindFromDeg); } } + + @Override + public void add(Widget w) { + throw new UnsupportedOperationException("The method add(Widget w) is not supported."); + } + + @Override + public void clear() { + throw new UnsupportedOperationException("The method clear() is not supported."); + } + + @Override + public Iterator iterator() { + return null; + } + + @Override + public boolean remove(Widget w) { + return false; + } } \ No newline at end of file diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/windbot/WindBotWidget.ui.xml b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/windbot/WindBotWidget.ui.xml index 7a9d59ee719..be7b9f0b8ec 100644 --- a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/windbot/WindBotWidget.ui.xml +++ b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/windbot/WindBotWidget.ui.xml @@ -3,12 +3,17 @@ xmlns:g="urn:import:com.google.gwt.user.client.ui" xmlns:client="urn:import:com.sap.sailing.dashboards.gwt.client" xmlns:util="urn:import:com.sap.sailing.dashboards.gwt.client.widgets.startlineadvantage.util" xmlns:windchart="urn:import:com.sap.sailing.dashboards.gwt.client.widgets.windbot.charts" - xmlns:compass="urn:import:com.sap.sailing.dashboards.gwt.client.widgets.windbot.compass"> + xmlns:compass="urn:import:com.sap.sailing.dashboards.gwt.client.widgets.windbot.compass" + xmlns:header="urn:import:com.sap.sailing.dashboards.gwt.client.widgets.header"> - - + + + + +
+
@@ -27,9 +32,6 @@ - -
\ No newline at end of file diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/windbot/WindBotWidgetResources.java b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/windbot/WindBotWidgetResources.java index c4e600796ba..fe2c852ec8a 100644 --- a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/windbot/WindBotWidgetResources.java +++ b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/windbot/WindBotWidgetResources.java @@ -16,13 +16,12 @@ public interface WindBotWidgetResources extends ClientBundle { WindBotComponentGss gss(); public interface WindBotComponentGss extends CssResource { - String wind_bot_component(); - String name_panel(); + String wind_bot_widget(); + String live_average_header(); String live_average_container(); String left(); String right(); String windchart_container(); String windchart(); - String compass_container(); } } \ No newline at end of file diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/windbot/charts/VerticalWindChart.java b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/windbot/charts/VerticalWindChart.java index 01ea5d824aa..6fb1e99d8b3 100644 --- a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/windbot/charts/VerticalWindChart.java +++ b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/windbot/charts/VerticalWindChart.java @@ -37,6 +37,9 @@ import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.FocusPanel; import com.google.gwt.user.client.ui.HasWidgets; import com.google.gwt.user.client.ui.Widget; +import com.sap.sailing.dashboards.gwt.client.theme.Colors; +import com.sap.sailing.dashboards.gwt.client.theme.Fonts; +import com.sap.sailing.dashboards.gwt.client.theme.Sizes; import com.sap.sailing.dashboards.gwt.client.util.HighchartsUtil; import com.sap.sailing.dashboards.gwt.shared.WindType; import com.sap.sailing.gwt.ui.client.shared.charts.ChartPointRecalculator; @@ -138,9 +141,8 @@ public class VerticalWindChart extends Composite implements HasWidgets { .setType(Type.DATE_TIME) .setReversed(false) .setLabels( - new XAxisLabels().setStyle(new Style().setFontFamily("Arial").setFontSize("12") - .setColor("grey"))).setLineColor("grey").setTickWidth(0.5).setLineWidth(1) - .setTickWidth(1).setTickColor("grey").setOffset(0).setMinPadding(20).setGridLineColor("white") + new XAxisLabels().setStyle(new Style().setFontFamily(Fonts.DASHBOARD_FONT_FAMILY).setFontSize(Sizes.DASHBOARD_FONT_SIZE_SMALL).setColor(Colors.LIGHT_TEXT_COLOR))).setLineColor(Colors.LIGHT_TEXT_COLOR).setTickWidth(0.5).setLineWidth(1) + .setTickWidth(1).setTickColor(Colors.LIGHT_TEXT_COLOR).setOffset(0).setMinPadding(20).setGridLineColor(Colors.LIGHT_GREY) .setGridLineWidth(0) .setDateTimeLabelFormats(new DateTimeLabelFormats().setMonth("%e. %b").setYear("%b")); } @@ -148,12 +150,12 @@ public class VerticalWindChart extends Composite implements HasWidgets { private void setYAxisOptions() { verticalWindChart .getYAxis() - .setLineColor("grey") + .setLineColor(Colors.LIGHT_TEXT_COLOR) .setTickWidth(1) - .setTickColor("grey") + .setTickColor(Colors.LIGHT_TEXT_COLOR) .setAxisTitleText(null) .setGridLineWidth(0) - .setAlternateGridColor("#d4d4d4") + .setAlternateGridColor(Colors.LIGHT_GREY) .setLineWidth(1) .setEndOnTick(true) .setStartOnTick(true) @@ -163,7 +165,7 @@ public class VerticalWindChart extends Composite implements HasWidgets { .setMaxPadding(0) .setLabels( new YAxisLabels().setStyle( - new Style().setFontFamily("Arial").setFontSize("12").setColor("grey")).setFormatter( + new Style().setFontFamily(Fonts.DASHBOARD_FONT_FAMILY).setFontSize(Sizes.DASHBOARD_FONT_SIZE_SMALL).setColor(Colors.LIGHT_TEXT_COLOR)).setFormatter( new AxisLabelsFormatter() { @Override public String format(AxisLabelsData axisLabelsData) { @@ -276,13 +278,15 @@ public class VerticalWindChart extends Composite implements HasWidgets { * */ @UiHandler("verticalWindChartClickArea") public void verticalWindChartClickAreaClicked(ClickEvent e) { - if (chartIntervallinMinutes == SMALL_DISPLAY_INTERVALL_IN_MINUTES) { - chartIntervallinMinutes = LARGE_DISPLAY_INTERVALL_IN_MINUTES; - } else { - chartIntervallinMinutes = SMALL_DISPLAY_INTERVALL_IN_MINUTES; + if (lastPoint != null) { + if (chartIntervallinMinutes == SMALL_DISPLAY_INTERVALL_IN_MINUTES) { + chartIntervallinMinutes = LARGE_DISPLAY_INTERVALL_IN_MINUTES; + } else { + chartIntervallinMinutes = SMALL_DISPLAY_INTERVALL_IN_MINUTES; + } + adaptVerticalWindChartExtemes(lastPoint.getX().longValue()); + notifyVerticalWindChartClickListeners(chartIntervallinMinutes); } - adaptVerticalWindChartExtemes(lastPoint.getX().longValue()); - notifyVerticalWindChartClickListeners(chartIntervallinMinutes); } @Override diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/windbot/compass/LocationPointerCompass.gss b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/windbot/compass/LocationPointerCompass.gss index adbcad59e81..c75ec51b3cb 100644 --- a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/windbot/compass/LocationPointerCompass.gss +++ b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/windbot/compass/LocationPointerCompass.gss @@ -1,5 +1,18 @@ @require 'theme'; +.location_pointer_compass { + position: absolute; + width: 70px; + height: 85px; + background-color: LIGHT_GREY; + top: 0px; + right: 13px; + z-index: 5; + border-bottom-left-radius: DASHBOARD_BORDER_RADIUS; + border-bottom-right-radius: DASHBOARD_BORDER_RADIUS; + overflow:hidden; +} + .compass{ height: 100%; width: 100%; @@ -8,13 +21,13 @@ .needle{ position: absolute; - height: 100%; - width: 100%; - top: 0%; - left: 0%; + top: 10px; + left: 10px; + width: 50px; + height: 50px; } -.angleToLocationLabel{ +.angle_to_location { position: absolute; height: 10pt; width: 100%; @@ -23,22 +36,22 @@ text-align: center; vertical-align: middle; font-family: DASHBOARD_FONT_FAMILY; - font-size: 9pt; + font-size: DASHBOARD_FONT_SIZE_VERY_SMALL; font-weight: bold; color: white; } -.distanceToLocationLabel{ +.distance_to_location { position: absolute; - height: 15pt; + height: DASHBOARD_FONT_SIZE_SMALL; width: 100%; - bottom: -17pt; + top: 65px; text-align: center; vertical-align: middle; font-family: DASHBOARD_FONT_FAMILY; - line-height: 10pt; + line-height: DASHBOARD_FONT_SIZE_SMALL; font-weight: bold; - font-size: 9pt; + font-size: DASHBOARD_FONT_SIZE_SMALL; color: black; z-index: 10; } diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/windbot/compass/LocationPointerCompass.java b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/windbot/compass/LocationPointerCompass.java index f92b6b3a1b9..a6a3a21c52f 100644 --- a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/windbot/compass/LocationPointerCompass.java +++ b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/windbot/compass/LocationPointerCompass.java @@ -1,38 +1,45 @@ package com.sap.sailing.dashboards.gwt.client.widgets.windbot.compass; +import java.util.Iterator; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.dom.client.DivElement; import com.google.gwt.i18n.client.NumberFormat; -import com.google.gwt.user.client.ui.AbsolutePanel; +import com.google.gwt.uibinder.client.UiBinder; +import com.google.gwt.uibinder.client.UiField; +import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.HasWidgets; import com.google.gwt.user.client.ui.Image; -import com.google.gwt.user.client.ui.Label; +import com.google.gwt.user.client.ui.Widget; import com.sap.sailing.domain.common.Position; /** - * The class is an UI component that should be used to display the direction and the distance from the users device to a - * certain pointed GPS location. The class needs an {@link LocationPointerCompassAngleDistance} instance and registers - * as an listener to it. It furthermore notifies its {@link LocationPointerCompassAngleDistance} instance about wind bot - * GPS location changes. - * * @author Alexander Ries (D062114) * */ -public class LocationPointerCompass extends AbsolutePanel implements HasWidgets, - LocationPointerCompassAngleDistanceListener { +public class LocationPointerCompass extends Composite implements HasWidgets, LocationPointerCompassAngleDistanceListener { - private double angleOffset; + private static LocationPointerCompasssUiBinder uiBinder = GWT.create(LocationPointerCompasssUiBinder.class); + + interface LocationPointerCompasssUiBinder extends UiBinder { + } - private Image compassNeedle; + @UiField + Image compassNeedle; /** * The Label shows the distance the users device is away from the location it points to. * */ - private Label distanceToPointetLocationLabel; + @UiField + DivElement distanceToPointetLocation; /** * The Label shows the direction in degrees from north the users device is away from the location it points to. * */ - private Label angleToPointetLocationLabel; + @UiField + DivElement angleToPointetLocation; + private double angleOffset; /** * The {@link LocationPointerCompassAngleDistance} notifies the class about updates about angle and distance * changes. @@ -41,57 +48,34 @@ public class LocationPointerCompass extends AbsolutePanel implements HasWidgets, public LocationPointerCompass() { LocationPointerCompassRessources.INSTANCE.gss().ensureInjected(); - this.getElement().addClassName(LocationPointerCompassRessources.INSTANCE.gss().compass()); - initCompassNeedle(); - initAngleToPointetLocationLabel(); - initDistanceToPointedLocationLabel(); + initWidget(uiBinder.createAndBindUi(this)); + compassNeedle.setResource(LocationPointerCompassRessources.INSTANCE.compass()); locationPointerCompassAngleDistance = new LocationPointerCompassAngleDistance(); locationPointerCompassAngleDistance.addListener(this); - locationPointerCompassAngleDistance.triggerOrientationRead(); - } - - private void initCompassNeedle() { - compassNeedle = new Image(); - compassNeedle.setResource(LocationPointerCompassRessources.INSTANCE.compass()); - compassNeedle.getElement().addClassName(LocationPointerCompassRessources.INSTANCE.gss().needle()); - LocationPointerCompass.this.add(compassNeedle); - } - - private void initAngleToPointetLocationLabel() { - angleToPointetLocationLabel = new Label(); - angleToPointetLocationLabel.getElement().addClassName(LocationPointerCompassRessources.INSTANCE.gss().angleToLocationLabel()); - this.add(angleToPointetLocationLabel); - } - - private void initDistanceToPointedLocationLabel() { - distanceToPointetLocationLabel = new Label(); - distanceToPointetLocationLabel.getElement().addClassName(LocationPointerCompassRessources.INSTANCE.gss().distanceToLocationLabel()); - distanceToPointetLocationLabel.setText("m"); - this.add(distanceToPointetLocationLabel); } private void updateNeedleAngle(double newDirection) { // Adapt degrees to image angle synchronized (this) { - double newAngle = newDirection-angleOffset; + double newAngle = (newDirection-angleOffset)%360; String winddirectionformatted = NumberFormat.getFormat("#0").format(newAngle); compassNeedle.getElement().getStyle().setProperty("transform", "rotate(" + winddirectionformatted + "deg)"); compassNeedle.getElement().getStyle() .setProperty("webkitTransform", "rotate(" + winddirectionformatted + "deg)"); String winddirectionFormattedForLabel = NumberFormat.getFormat("#0").format((newAngle < 0) ? 360+newAngle : newAngle); - angleToPointetLocationLabel.setText(winddirectionFormattedForLabel+"°"); + angleToPointetLocation.setInnerHTML(winddirectionFormattedForLabel+"°"); } } private void updateDistanceToPointedLocationLabel(double distance, double angle) { String distanceFormatted = NumberFormat.getFormat("#0").format(distance); - distanceToPointetLocationLabel.setText(distanceFormatted + " m"); + distanceToPointetLocation.setInnerHTML(distanceFormatted + " m"); } public void windBotPositionChanged(Position positionDTO) { locationPointerCompassAngleDistance.windBotPositionChanged(positionDTO); } - + @Override public void angleChanged(double angle) { updateNeedleAngle(angle); @@ -107,4 +91,24 @@ public class LocationPointerCompass extends AbsolutePanel implements HasWidgets, public void setAngleOffset(double offset) { angleOffset = offset; } + + @Override + public void add(Widget w) { + throw new UnsupportedOperationException("The method add(Widget w) is not supported."); + } + + @Override + public void clear() { + throw new UnsupportedOperationException("The method clear() is not supported."); + } + + @Override + public Iterator iterator() { + return null; + } + + @Override + public boolean remove(Widget w) { + return false; + } } diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/windbot/compass/LocationPointerCompass.ui.xml b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/windbot/compass/LocationPointerCompass.ui.xml new file mode 100644 index 00000000000..9b84f404930 --- /dev/null +++ b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/windbot/compass/LocationPointerCompass.ui.xml @@ -0,0 +1,12 @@ + + + + + + + +
+
+
+
\ No newline at end of file diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/windbot/compass/LocationPointerCompassAngleDistance.java b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/windbot/compass/LocationPointerCompassAngleDistance.java index 11d2d0020c7..9aa0f802e6f 100644 --- a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/windbot/compass/LocationPointerCompassAngleDistance.java +++ b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/windbot/compass/LocationPointerCompassAngleDistance.java @@ -55,18 +55,17 @@ public class LocationPointerCompassAngleDistance implements LocationListener, Co Double phi2 = lat2 * degreesToRadiansFactor; Double lam1 = lng1 * degreesToRadiansFactor; Double lam2 = lng2 * degreesToRadiansFactor; - double angle = Math.atan2(Math.sin(lam2 - lam1) * Math.cos(phi2), Math.cos(phi1) * Math.sin(phi2) - Math.sin(phi1) * Math.cos(phi2) * Math.cos(lam2 - lam1)) * 180 / Math.PI; if (angle < 0) { angle = 360 + angle; } - return angle; + return Math.abs(angle); } private float getDistanceBetweenGPSPoints(double lat1, double lng1, double lat2, double lng2) { - double earthRadius = 6371000; // kilometers + double earthRadius = 6371000; //kilometers double dLat = Math.toRadians(lat2 - lat1); double dLng = Math.toRadians(lng2 - lng1); double a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + Math.cos(Math.toRadians(lat1)) diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/windbot/compass/LocationPointerCompassRessources.java b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/windbot/compass/LocationPointerCompassRessources.java index b38b91e3b57..2b6ae32897f 100644 --- a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/windbot/compass/LocationPointerCompassRessources.java +++ b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/widgets/windbot/compass/LocationPointerCompassRessources.java @@ -18,9 +18,10 @@ public interface LocationPointerCompassRessources extends ClientBundle { @Shared public interface LocationPointerCompassGSS extends CssResource { + public String location_pointer_compass(); public String compass(); public String needle(); - public String angleToLocationLabel(); - public String distanceToLocationLabel(); + public String angle_to_location(); + public String distance_to_location(); } } diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/server/util/actions/startanalysis/StartAnalysisCreationController.java b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/server/util/actions/startanalysis/StartAnalysisCreationController.java index c424e122404..cf6dc65b73a 100644 --- a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/server/util/actions/startanalysis/StartAnalysisCreationController.java +++ b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/server/util/actions/startanalysis/StartAnalysisCreationController.java @@ -14,20 +14,20 @@ public final class StartAnalysisCreationController extends AbstractStartAnalysis private static final Logger logger = Logger.getLogger(StartAnalysisCreationController.class.getName()); - private StartAnalysisCreationController(DashboardDispatchContext ctx) { - - } - public static StartAnalysisDTO checkStartAnalysisForCompetitorInTrackedRace(DashboardDispatchContext dashboardDispatchContext, Competitor competitor, TrackedRace trackedRace) { StartAnalysisDTO result = null; - if (competitor != null && trackedRace != null) { - if (threeCompetitorsPassedSecondWayPoint(trackedRace) && raceProgressedFarEnough(competitor, trackedRace)) { - logger.log(Level.INFO, "Creating startanalysis for race " + trackedRace.getRace().getName() + " and competitor: " + competitor.getName()); - result = StartAnalysisDTOFactory.createStartAnalysisForCompetitorAndTrackedRace(dashboardDispatchContext, competitor, trackedRace); + if(trackedRace != null) { + if (competitor != null) { + if (threeCompetitorsPassedSecondWayPoint(trackedRace) && raceProgressedFarEnough(competitor, trackedRace)) { + logger.log(Level.INFO, "Creating startanalysis for race " + trackedRace.getRace().getName() + " and competitor: " + competitor.getName()); + result = StartAnalysisDTOFactory.createStartAnalysisForCompetitorAndTrackedRace(dashboardDispatchContext, competitor, trackedRace); + } else { + logger.log(Level.INFO, "Waiting to create startanalysis for race " + trackedRace.getRace().getName() + " and competitor: " + competitor.getName()); + } } else { - logger.log(Level.INFO, "Waiting to create startanalysis for race " + trackedRace.getRace().getName() + " and competitor: " + competitor.getName()); + result = StartAnalysisDTOFactory.createStartAnalysisForCompetitorAndTrackedRace(dashboardDispatchContext, competitor, trackedRace); } - } + } return result; } } diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/server/util/actions/startanalysis/StartAnalysisDTOFactory.java b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/server/util/actions/startanalysis/StartAnalysisDTOFactory.java index a2de29ccd6d..13dbb033026 100644 --- a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/server/util/actions/startanalysis/StartAnalysisDTOFactory.java +++ b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/server/util/actions/startanalysis/StartAnalysisDTOFactory.java @@ -45,19 +45,22 @@ public final class StartAnalysisDTOFactory extends AbstractStartAnalysisCreation List competitors = new ArrayList(); Waypoint secondWaypoint = trackedRace.getRace().getCourse().getFirstLeg().getTo(); List markPassingsInOrder = convertMarkpPassingsIteratorToList(trackedRace.getMarkPassingsInOrder(secondWaypoint).iterator()); - boolean isCompetitorOneOfFirstThree = false; + boolean isCompetitorNullOrOneOfFirstThreeCompetitors = false; for (int i = 0; i < MINIMUM_MARKPASSIINGS_AT_FIRST_MARK; i++) { competitors.add(createStartAnalysisCompetitorDTO(dashboardDispatchContext, trackedRace, i + 1, markPassingsInOrder.get(i).getCompetitor())); - if (markPassingsInOrder.get(i).getCompetitor().equals(competitor)) { - isCompetitorOneOfFirstThree = true; + if (competitor == null || markPassingsInOrder.get(i).getCompetitor().equals(competitor)) { + isCompetitorNullOrOneOfFirstThreeCompetitors = true; } } - if (!isCompetitorOneOfFirstThree) { + if (competitor != null && !isCompetitorNullOrOneOfFirstThreeCompetitors) { int rankOfCompetitorWhilePassingSecondWaypoint = getRankOfCompetitorWhilePassingSecondWaypoint(competitor, trackedRace); competitors.add(createStartAnalysisCompetitorDTO(dashboardDispatchContext, trackedRace, rankOfCompetitorWhilePassingSecondWaypoint, competitor)); } - startAnalysisDTO.competitor = dashboardDispatchContext.getRacingEventService().getBaseDomainFactory().getCompetitorStore().convertToCompetitorDTO(competitor); + if (competitor != null) { + startAnalysisDTO.competitor = dashboardDispatchContext.getRacingEventService().getBaseDomainFactory().getCompetitorStore().convertToCompetitorDTO(competitor); + logger.log(Level.INFO, "Created startanalysis for competitor"+competitor); + } startAnalysisDTO.startAnalysisCompetitorDTOs = competitors; final Boolean isGateStart = trackedRace.isGateStart(); if(isGateStart == Boolean.TRUE){ @@ -77,7 +80,7 @@ public final class StartAnalysisDTOFactory extends AbstractStartAnalysisCreation startAnalysisDTO.tailLenghtInMilliseconds = ONE_MINUTE_INTERVALL_IN_MILLISECONDS; } startAnalysisDTO.regattaAndRaceIdentifier = trackedRace.getRaceIdentifier(); - logger.log(Level.INFO, "Created startanalysis for competitor " + competitor.getName() + " and "+ trackedRace.getRace().getName()); + logger.log(Level.INFO, "Created startanalysis for "+ trackedRace.getRace().getName()); return startAnalysisDTO; } @@ -185,8 +188,7 @@ public final class StartAnalysisDTOFactory extends AbstractStartAnalysisCreation } } - private static StartAnalysisCompetitorDTO createStartAnalysisCompetitorDTO(DashboardDispatchContext dashboardDispatchContext, TrackedRace trackedRace, int rank, - Competitor competitor) { + private static StartAnalysisCompetitorDTO createStartAnalysisCompetitorDTO(DashboardDispatchContext dashboardDispatchContext, TrackedRace trackedRace, int rank, Competitor competitor) { StartAnalysisCompetitorDTO startAnalysisCompetitorDTOsForRace = new StartAnalysisCompetitorDTO(); startAnalysisCompetitorDTOsForRace.competitorDTO = dashboardDispatchContext.getRacingEventService().getBaseDomainFactory().getCompetitorStore() .convertToCompetitorDTO(competitor); diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/server/util/actions/startlineadvantage/DefaultPolarWindAngleBoatSpeedFunction.java b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/server/util/actions/startlineadvantage/DefaultPolarWindAngleBoatSpeedFunction.java index 7b16e26be3d..e2365db78ec 100644 --- a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/server/util/actions/startlineadvantage/DefaultPolarWindAngleBoatSpeedFunction.java +++ b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/server/util/actions/startlineadvantage/DefaultPolarWindAngleBoatSpeedFunction.java @@ -4,6 +4,9 @@ import org.apache.commons.math.ArgumentOutsideDomainException; import org.apache.commons.math.analysis.interpolation.SplineInterpolator; import org.apache.commons.math.analysis.polynomials.PolynomialSplineFunction; +import com.sap.sailing.domain.base.SpeedWithConfidence; +import com.sap.sailing.domain.base.impl.SpeedWithConfidenceImpl; +import com.sap.sailing.domain.common.Bearing; import com.sap.sailing.domain.common.Speed; import com.sap.sailing.domain.common.impl.KnotSpeedImpl; @@ -27,11 +30,11 @@ public class DefaultPolarWindAngleBoatSpeedFunction { windAngleBoatBearingSpeedFunction = splineInterpolator.interpolate(windAngleXValues, boatBearingYValues); } - public Speed getBoatSpeedForWindAngleAndSpeed(double angle, double speed) { - Speed result = null; + public SpeedWithConfidence getBoatSpeedForWindAngleAndSpeed(Bearing angleToWind, Speed speed) { + SpeedWithConfidence result = null; try { - double boatSpeed = windAngleBoatBearingSpeedFunction.value(convert360AngleTo180RangeAngle(angle)); - result = new KnotSpeedImpl(boatSpeed); + KnotSpeedImpl boatSpeed = new KnotSpeedImpl(windAngleBoatBearingSpeedFunction.value(convert360AngleTo180RangeAngle(angleToWind.getDegrees()))); + result = new SpeedWithConfidenceImpl(boatSpeed, 0.5 , null); } catch (ArgumentOutsideDomainException e) { e.printStackTrace(); } diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/server/util/actions/startlineadvantage/StartlineAdvantagesByWindCalculator.java b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/server/util/actions/startlineadvantage/StartlineAdvantagesByWindCalculator.java index 806bd4bbf3c..a04a9ed9e65 100644 --- a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/server/util/actions/startlineadvantage/StartlineAdvantagesByWindCalculator.java +++ b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/server/util/actions/startlineadvantage/StartlineAdvantagesByWindCalculator.java @@ -10,12 +10,16 @@ import com.sap.sailing.dashboards.gwt.server.util.actions.startlineadvantage.pre import com.sap.sailing.dashboards.gwt.shared.dispatch.DashboardDispatchContext; import com.sap.sailing.dashboards.gwt.shared.dto.StartLineAdvantageDTO; import com.sap.sailing.dashboards.gwt.shared.dto.StartlineAdvantagesWithMaxAndAverageDTO; +import com.sap.sailing.domain.base.DomainFactory; +import com.sap.sailing.domain.base.SpeedWithConfidence; import com.sap.sailing.domain.common.Bearing; import com.sap.sailing.domain.common.Distance; import com.sap.sailing.domain.common.Position; import com.sap.sailing.domain.common.Speed; import com.sap.sailing.domain.common.impl.DegreeBearingImpl; +import com.sap.sailing.domain.common.impl.KnotSpeedImpl; import com.sap.sailing.domain.common.impl.MeterDistance; +import com.sap.sailing.domain.polars.NotEnoughDataHasBeenAddedException; import com.sap.sailing.domain.tracking.TrackedRace; import com.sap.sse.common.TimePoint; import com.sap.sse.common.Util.Pair; @@ -24,34 +28,38 @@ import com.sap.sse.common.Util.Pair; * @author Alexander Ries (D062114) * */ -public class StartlineAdvantagesByWindCalculator extends AbstracPreCalculationDataRetriever { +public class StartlineAdvantagesByWindCalculator extends AbstracPreCalculationDataRetriever { private DashboardDispatchContext dashboardDispatchContext; + private DomainFactory domainFactory; private DefaultPolarWindAngleBoatSpeedFunction defaultPolarSpeedWindAngleFunction; - - private final Logger logger = Logger.getLogger(StartlineAdvantagesByWindCalculator.class.getName()); - - public StartlineAdvantagesByWindCalculator(DashboardDispatchContext dashboardDispatchContext){ + + private final Logger logger = Logger.getLogger(StartlineAdvantagesByWindCalculator.class.getName()); + + public StartlineAdvantagesByWindCalculator(DashboardDispatchContext dashboardDispatchContext, DomainFactory domainFactory) { + super(domainFactory); this.dashboardDispatchContext = dashboardDispatchContext; + this.domainFactory = domainFactory; this.defaultPolarSpeedWindAngleFunction = new DefaultPolarWindAngleBoatSpeedFunction(); } - - public StartlineAdvantagesWithMaxAndAverageDTO getStartLineAdvantagesAccrossLineFromTrackedRaceAtTimePoint(TrackedRace trackedRace,TimePoint timepoint) { + + public StartlineAdvantagesWithMaxAndAverageDTO getStartLineAdvantagesAccrossLineFromTrackedRaceAtTimePoint( + TrackedRace trackedRace, TimePoint timepoint) { StartlineAdvantagesWithMaxAndAverageDTO result = new StartlineAdvantagesWithMaxAndAverageDTO(); if (trackedRace != null) { retrieveDataForCalculation(trackedRace, dashboardDispatchContext.getPolarDataService()); - if (wind != null) { + if (getWind() != null) { Pair startlineAdvantagesAndConfidencesAsArray = null; if (isStartlineCompletelyUnderneathLaylines()) { logger.log(Level.INFO, "Startline is completely underneath laylines"); - Pair advantagesRange = new Pair(0.0, startlineLenghtInMeters); + Pair advantagesRange = new Pair(0.0, getStartlineLenghtInMeters()); List startlineAdvantages = calculateStartlineAdvantagesUnderneathLaylinesInRange(advantagesRange); double maximum = getMaximumAdvantageOfStartlineAdvantageDTOs(startlineAdvantages); result.maximum = maximum; startlineAdvantagesAndConfidencesAsArray = convertStartLineAdvantageDTOListToPointAndConfidenceArrays(startlineAdvantages); } else if (isStartlineCompletelyAboveLaylines()) { logger.log(Level.INFO, "Startline is completely above laylines"); - Pair advantagesRange = new Pair(0.0, startlineLenghtInMeters); + Pair advantagesRange = new Pair(0.0, getStartlineLenghtInMeters()); List startlineAdvantages = calculatePolarBasedStartlineAdvantagesInRange(advantagesRange); subtractMinimumOfAllStartlineAdvantages(startlineAdvantages); double maximum = getMaximumAdvantageOfStartlineAdvantageDTOs(startlineAdvantages); @@ -83,105 +91,112 @@ public class StartlineAdvantagesByWindCalculator extends AbstracPreCalculationD } return result; } - - private boolean isBearingAboveAdvantageLines(Bearing bearing){ + + private boolean isBearingAboveAdvantageLines(Bearing bearing) { boolean result = false; - Bearing bearingOfRightLaylineInDeg = new DegreeBearingImpl(wind.getBearing().getDegrees() - meouvreAngle / 2); - Bearing bearingOfLeftLaylineInDeg = new DegreeBearingImpl(wind.getBearing().getDegrees() + meouvreAngle / 2); - if (bearing.getDegrees() < bearingOfRightLaylineInDeg.getDegrees() && bearing.getDegrees() > 0 || - bearing.getDegrees() > bearingOfLeftLaylineInDeg.getDegrees() && bearing.getDegrees() < 360) { + Bearing bearingOfRightLaylineInDeg = new DegreeBearingImpl(getWind().getBearing().getDegrees() + - getManeuverAngle() / 2); + Bearing bearingOfLeftLaylineInDeg = new DegreeBearingImpl(getWind().getBearing().getDegrees() + + getManeuverAngle() / 2); + if (bearing.getDegrees() < bearingOfRightLaylineInDeg.getDegrees() && bearing.getDegrees() > 0 + || bearing.getDegrees() > bearingOfLeftLaylineInDeg.getDegrees() && bearing.getDegrees() < 360) { result = true; } return result; } - - private boolean isBearingUnderneathAdvantageLines(Bearing bearing){ + + private boolean isBearingUnderneathAdvantageLines(Bearing bearing) { boolean result = false; - Bearing bearingOfRightLaylineInDeg = new DegreeBearingImpl(wind.getBearing().getDegrees() - meouvreAngle / 2); - Bearing bearingOfLeftLaylineInDeg = new DegreeBearingImpl(wind.getBearing().getDegrees() + meouvreAngle / 2); - logger.log(Level.INFO, "Underneath bearingOfRightLaylineInDeg?"+bearingOfRightLaylineInDeg); - logger.log(Level.INFO, "Underneath bearingOfLeftLaylineInDeg?"+bearingOfLeftLaylineInDeg); - if (bearing.getDegrees() > bearingOfRightLaylineInDeg.getDegrees() && bearing.getDegrees() < bearingOfLeftLaylineInDeg.getDegrees()) { + Bearing bearingOfRightLaylineInDeg = new DegreeBearingImpl(getWind().getBearing().getDegrees() + - getManeuverAngle() / 2); + Bearing bearingOfLeftLaylineInDeg = new DegreeBearingImpl(getWind().getBearing().getDegrees() + + getManeuverAngle() / 2); + logger.log(Level.INFO, "Underneath bearingOfRightLaylineInDeg?" + bearingOfRightLaylineInDeg); + logger.log(Level.INFO, "Underneath bearingOfLeftLaylineInDeg?" + bearingOfLeftLaylineInDeg); + if (bearing.getDegrees() > bearingOfRightLaylineInDeg.getDegrees() + && bearing.getDegrees() < bearingOfLeftLaylineInDeg.getDegrees()) { result = true; } return result; } - + private boolean isStartlineCompletelyAboveLaylines() { boolean result = false; - Bearing bearingRCBoatToFirstMark = new DegreeBearingImpl( - startlineAndFirstMarkPositions.firstMarkPosition.getBearingGreatCircle( - startlineAndFirstMarkPositions.startBoatPosition).getDegrees()); - Bearing bearingPinEndToFirstMark = new DegreeBearingImpl( - startlineAndFirstMarkPositions.firstMarkPosition.getBearingGreatCircle( - startlineAndFirstMarkPositions.pinEndPosition).getDegrees()); - if (isBearingAboveAdvantageLines(bearingRCBoatToFirstMark) && isBearingAboveAdvantageLines(bearingPinEndToFirstMark)) { + Bearing bearingRCBoatToFirstMark = new DegreeBearingImpl(getStartlineAndFirstMarkPositions().firstMarkPosition + .getBearingGreatCircle(getStartlineAndFirstMarkPositions().startBoatPosition).getDegrees()); + Bearing bearingPinEndToFirstMark = new DegreeBearingImpl(getStartlineAndFirstMarkPositions().firstMarkPosition + .getBearingGreatCircle(getStartlineAndFirstMarkPositions().pinEndPosition).getDegrees()); + if (isBearingAboveAdvantageLines(bearingRCBoatToFirstMark) + && isBearingAboveAdvantageLines(bearingPinEndToFirstMark)) { result = true; } return result; } - + private boolean isStartlineCompletelyUnderneathLaylines() { boolean result = false; - Bearing bearingFirstMarkToRCBoat = new DegreeBearingImpl( - startlineAndFirstMarkPositions.firstMarkPosition.getBearingGreatCircle( - startlineAndFirstMarkPositions.startBoatPosition).getDegrees()); - Bearing bearingFirstMarkToPinEnd = new DegreeBearingImpl( - startlineAndFirstMarkPositions.firstMarkPosition.getBearingGreatCircle( - startlineAndFirstMarkPositions.pinEndPosition).getDegrees()); - logger.log(Level.INFO, "Underneath RC?"+bearingFirstMarkToRCBoat); - logger.log(Level.INFO, "Underneath PIN?"+bearingFirstMarkToPinEnd); - if (isBearingUnderneathAdvantageLines(bearingFirstMarkToRCBoat) && isBearingUnderneathAdvantageLines(bearingFirstMarkToPinEnd)) { + Bearing bearingFirstMarkToRCBoat = new DegreeBearingImpl(getStartlineAndFirstMarkPositions().firstMarkPosition + .getBearingGreatCircle(getStartlineAndFirstMarkPositions().startBoatPosition).getDegrees()); + Bearing bearingFirstMarkToPinEnd = new DegreeBearingImpl(getStartlineAndFirstMarkPositions().firstMarkPosition + .getBearingGreatCircle(getStartlineAndFirstMarkPositions().pinEndPosition).getDegrees()); + logger.log(Level.INFO, "Underneath RC?" + bearingFirstMarkToRCBoat); + logger.log(Level.INFO, "Underneath PIN?" + bearingFirstMarkToPinEnd); + if (isBearingUnderneathAdvantageLines(bearingFirstMarkToRCBoat) + && isBearingUnderneathAdvantageLines(bearingFirstMarkToPinEnd)) { result = true; } return result; } - - private Pair getStartAndEndPointOfPolarBasedStartlineAdvatagesInDistancesToRCBoat(Position rightIntersection, Position leftIntersection) { + + private Pair getStartAndEndPointOfPolarBasedStartlineAdvatagesInDistancesToRCBoat( + Position rightIntersection, Position leftIntersection) { Pair result = null; - if(rightIntersection != null && leftIntersection == null) { - double distanceFromIntersectionToRCBoatInMeters = rightIntersection.getDistance(startlineAndFirstMarkPositions.startBoatPosition).getMeters(); + if (rightIntersection != null && leftIntersection == null) { + double distanceFromIntersectionToRCBoatInMeters = rightIntersection.getDistance( + getStartlineAndFirstMarkPositions().startBoatPosition).getMeters(); result = new Pair(0.0, distanceFromIntersectionToRCBoatInMeters); - } else if(rightIntersection == null && leftIntersection != null) { - double distanceFromIntersectionToRCBoatInMeters = leftIntersection.getDistance(startlineAndFirstMarkPositions.startBoatPosition).getMeters(); - result = new Pair(distanceFromIntersectionToRCBoatInMeters, startlineLenghtInMeters); - } else if(rightIntersection != null && leftIntersection != null) { - result = new Pair(0.0, startlineLenghtInMeters); + } else if (rightIntersection == null && leftIntersection != null) { + double distanceFromIntersectionToRCBoatInMeters = leftIntersection.getDistance( + getStartlineAndFirstMarkPositions().startBoatPosition).getMeters(); + result = new Pair(distanceFromIntersectionToRCBoatInMeters, getStartlineLenghtInMeters()); + } else if (rightIntersection != null && leftIntersection != null) { + result = new Pair(0.0, getStartlineLenghtInMeters()); } return result; } - - private Position getIntersectionOfRightLaylineAndStartline () { + + private Position getIntersectionOfRightLaylineAndStartline() { Position result = null; - Bearing bearingOfRightLaylineInDeg = new DegreeBearingImpl(wind.getBearing().getDegrees() - meouvreAngle / 2); + Bearing bearingOfRightLaylineInDeg = new DegreeBearingImpl(getWind().getBearing().getDegrees() + - getManeuverAngle() / 2); result = calculateIntersectionPointsOfStartlineAndLaylineWithBearing(bearingOfRightLaylineInDeg); return result; } - - private Position getIntersectionOfLeftLaylineAndStartline () { + + private Position getIntersectionOfLeftLaylineAndStartline() { Position result = null; - Bearing bearingOfRightLaylineInDeg = new DegreeBearingImpl(wind.getBearing().getDegrees() + meouvreAngle / 2); + Bearing bearingOfRightLaylineInDeg = new DegreeBearingImpl(getWind().getBearing().getDegrees() + + getManeuverAngle() / 2); result = calculateIntersectionPointsOfStartlineAndLaylineWithBearing(bearingOfRightLaylineInDeg); return result; } - + private Position calculateIntersectionPointsOfStartlineAndLaylineWithBearing(Bearing bearing) { Position result = null; - Bearing bearingOfStartlineInRad = startlineAndFirstMarkPositions.startBoatPosition - .getBearingGreatCircle(startlineAndFirstMarkPositions.pinEndPosition); + Bearing bearingOfStartlineInRad = getStartlineAndFirstMarkPositions().startBoatPosition + .getBearingGreatCircle(getStartlineAndFirstMarkPositions().pinEndPosition); Bearing bearingOfStartlineInDeg = new DegreeBearingImpl(bearingOfStartlineInRad.getDegrees()); logger.log(Level.INFO, "bearingOfStartlineInDeg " + bearingOfStartlineInDeg); logger.log(Level.INFO, "bearingOfLaylineInDeg " + bearing); - Position intersectionPointLaylineStartline = startlineAndFirstMarkPositions.firstMarkPosition - .getIntersection(bearing, startlineAndFirstMarkPositions.pinEndPosition, - bearingOfStartlineInDeg); + Position intersectionPointLaylineStartline = getStartlineAndFirstMarkPositions().firstMarkPosition.getIntersection( + bearing, getStartlineAndFirstMarkPositions().pinEndPosition, bearingOfStartlineInDeg); logger.log(Level.INFO, "rightIntersectionPointLaylineStartline " + intersectionPointLaylineStartline); Bearing bearingIntersectionPointToFirstMark = new DegreeBearingImpl( - startlineAndFirstMarkPositions.firstMarkPosition.getBearingGreatCircle( + getStartlineAndFirstMarkPositions().firstMarkPosition.getBearingGreatCircle( intersectionPointLaylineStartline).getDegrees()); - if (bearingIntersectionPointToFirstMark.getDegrees() < bearing.getDegrees() + 1 && - bearingIntersectionPointToFirstMark.getDegrees() > bearing.getDegrees() - 1 && - isOnStartline(intersectionPointLaylineStartline)) { + if (bearingIntersectionPointToFirstMark.getDegrees() < bearing.getDegrees() + 1 + && bearingIntersectionPointToFirstMark.getDegrees() > bearing.getDegrees() - 1 + && isOnStartline(intersectionPointLaylineStartline)) { result = intersectionPointLaylineStartline; logger.log(Level.INFO, "Layline crosses startline"); } @@ -192,17 +207,19 @@ public class StartlineAdvantagesByWindCalculator extends AbstracPreCalculationD private boolean isOnStartline(Position position) { boolean result = false; - Distance distanceToStartline = position.getDistanceToLine(startlineAndFirstMarkPositions.startBoatPosition, startlineAndFirstMarkPositions.pinEndPosition); + Distance distanceToStartline = position.getDistanceToLine(getStartlineAndFirstMarkPositions().startBoatPosition, + getStartlineAndFirstMarkPositions().pinEndPosition); if (distanceToStartline.getMeters() < 1) { result = true; } return result; } - private List addClosingZeroPointToMixedAdvantages(List advantages, Pair rangePinEndStartlineAdvantage) { + private List addClosingZeroPointToMixedAdvantages(List advantages, + Pair rangePinEndStartlineAdvantage) { StartLineAdvantageDTO startLineAdvantageDTO = new StartLineAdvantageDTO(); startLineAdvantageDTO.confidence = 1.0; - if(rangePinEndStartlineAdvantage.getA() > 0) { + if (rangePinEndStartlineAdvantage.getA() > 0) { startLineAdvantageDTO.distanceToRCBoatInMeters = rangePinEndStartlineAdvantage.getB(); startLineAdvantageDTO.startLineAdvantage = 0.0; advantages.add(startLineAdvantageDTO); @@ -213,40 +230,44 @@ public class StartlineAdvantagesByWindCalculator extends AbstracPreCalculationD } return advantages; } - - private Pair getPinEndStartlineAdvantagesRangeFromPolarAdvantagesRange(Pair rangePolarBasedStartlineAdvatages) { + + private Pair getPinEndStartlineAdvantagesRangeFromPolarAdvantagesRange( + Pair rangePolarBasedStartlineAdvatages) { Pair result = null; double pinEndStartlineAdvantagesStart; double pinEndStartlineAdvantagesEnd; - if(rangePolarBasedStartlineAdvatages.getA().doubleValue() == 0.0 && rangePolarBasedStartlineAdvatages.getB().doubleValue() != startlineLenghtInMeters) { + if (rangePolarBasedStartlineAdvatages.getA().doubleValue() == 0.0 + && rangePolarBasedStartlineAdvatages.getB().doubleValue() != getStartlineLenghtInMeters()) { pinEndStartlineAdvantagesStart = rangePolarBasedStartlineAdvatages.getB().doubleValue(); - pinEndStartlineAdvantagesEnd = startlineLenghtInMeters; + pinEndStartlineAdvantagesEnd = getStartlineLenghtInMeters(); result = new Pair(pinEndStartlineAdvantagesStart, pinEndStartlineAdvantagesEnd); - } else if (rangePolarBasedStartlineAdvatages.getA().doubleValue() != 0.0 && rangePolarBasedStartlineAdvatages.getB().doubleValue() == startlineLenghtInMeters) { + } else if (rangePolarBasedStartlineAdvatages.getA().doubleValue() != 0.0 + && rangePolarBasedStartlineAdvatages.getB().doubleValue() == getStartlineLenghtInMeters()) { pinEndStartlineAdvantagesStart = 0.0; pinEndStartlineAdvantagesEnd = rangePolarBasedStartlineAdvatages.getB().doubleValue(); result = new Pair(pinEndStartlineAdvantagesStart, pinEndStartlineAdvantagesEnd); } return result; } - + private List calculateStartlineAdvantagesUnderneathLaylinesInRange( Pair rangePinEndStartlineAdvantage) { List result = new ArrayList(); if (rangePinEndStartlineAdvantage != null) { - logger.log(Level.INFO, "PinEnd startline advantages range " + rangePinEndStartlineAdvantage.getA() + " - "+ rangePinEndStartlineAdvantage.getB()); + logger.log(Level.INFO, "PinEnd startline advantages range " + rangePinEndStartlineAdvantage.getA() + " - " + + rangePinEndStartlineAdvantage.getB()); StartLineAdvantageDTO rightEdgeAdvantage = new StartLineAdvantageDTO(); rightEdgeAdvantage.confidence = 1.0; rightEdgeAdvantage.distanceToRCBoatInMeters = rangePinEndStartlineAdvantage.getA(); StartLineAdvantageDTO leftEdgeAdvantage = new StartLineAdvantageDTO(); leftEdgeAdvantage.confidence = 1.0; leftEdgeAdvantage.distanceToRCBoatInMeters = rangePinEndStartlineAdvantage.getB(); - if (startlineAdvantageAtPinEndInMeters >= 0) { - leftEdgeAdvantage.startLineAdvantage = startlineAdvantageAtPinEndInMeters; + if (getStartlineAdvantageAtPinEndInMeters() >= 0) { + leftEdgeAdvantage.startLineAdvantage = getStartlineAdvantageAtPinEndInMeters(); rightEdgeAdvantage.startLineAdvantage = 0.0; } else { leftEdgeAdvantage.startLineAdvantage = 0.0; - rightEdgeAdvantage.startLineAdvantage = Math.abs(startlineAdvantageAtPinEndInMeters); + rightEdgeAdvantage.startLineAdvantage = Math.abs(getStartlineAdvantageAtPinEndInMeters()); } result.add(rightEdgeAdvantage); result.add(leftEdgeAdvantage); @@ -255,46 +276,53 @@ public class StartlineAdvantagesByWindCalculator extends AbstracPreCalculationD } return result; } - - private Pair convertStartLineAdvantageDTOListToPointAndConfidenceArrays(List startLineAdvantageDTOList) { + + private Pair convertStartLineAdvantageDTOListToPointAndConfidenceArrays( + List startLineAdvantageDTOList) { Pair result = null; - if(startLineAdvantageDTOList != null && startLineAdvantageDTOList.size() > 0) { + if (startLineAdvantageDTOList != null && startLineAdvantageDTOList.size() > 0) { Number[][] distanceToRCBoatToStartlineAdvantage = new Number[startLineAdvantageDTOList.size()][2]; Number[][] distanceToRCBoatToConfidence = new Number[startLineAdvantageDTOList.size()][2]; - for(int i = 0; i < startLineAdvantageDTOList.size(); i++) { + for (int i = 0; i < startLineAdvantageDTOList.size(); i++) { StartLineAdvantageDTO startLineAdvantageDTO = startLineAdvantageDTOList.get(i); distanceToRCBoatToStartlineAdvantage[i][0] = startLineAdvantageDTO.distanceToRCBoatInMeters; distanceToRCBoatToStartlineAdvantage[i][1] = startLineAdvantageDTO.startLineAdvantage; distanceToRCBoatToConfidence[i][0] = startLineAdvantageDTO.distanceToRCBoatInMeters; distanceToRCBoatToConfidence[i][1] = startLineAdvantageDTO.confidence; } - result = new Pair(distanceToRCBoatToStartlineAdvantage, distanceToRCBoatToConfidence); + result = new Pair(distanceToRCBoatToStartlineAdvantage, + distanceToRCBoatToConfidence); } return result; - } - - private List calculatePolarBasedStartlineAdvantagesInRange(Pair rangePinEndStartlineAdvantage) { + } + + private List calculatePolarBasedStartlineAdvantagesInRange( + Pair rangePinEndStartlineAdvantage) { List result = new ArrayList(); if (rangePinEndStartlineAdvantage != null) { - logger.log(Level.INFO, "PolarBased startline advantages range " + rangePinEndStartlineAdvantage.getA() + " - "+ rangePinEndStartlineAdvantage.getB()); - Bearing bearingOfStartlineInRad = startlineAndFirstMarkPositions.startBoatPosition - .getBearingGreatCircle(startlineAndFirstMarkPositions.pinEndPosition); + logger.log(Level.INFO, "PolarBased startline advantages range " + rangePinEndStartlineAdvantage.getA() + + " - " + rangePinEndStartlineAdvantage.getB()); + Bearing bearingOfStartlineInRad = getStartlineAndFirstMarkPositions().startBoatPosition + .getBearingGreatCircle(getStartlineAndFirstMarkPositions().pinEndPosition); Bearing bearingOfStartlineInDeg = new DegreeBearingImpl(bearingOfStartlineInRad.getDegrees()); - for(double i = rangePinEndStartlineAdvantage.getA().doubleValue(); i < rangePinEndStartlineAdvantage.getB().doubleValue()-1 ; i++) { + for (double i = rangePinEndStartlineAdvantage.getA().doubleValue(); i < rangePinEndStartlineAdvantage + .getB().doubleValue() - 1; i++) { StartLineAdvantageDTO startlineAdvantage = new StartLineAdvantageDTO(); startlineAdvantage.confidence = 0.5; startlineAdvantage.distanceToRCBoatInMeters = i; - Position startingPosition = startlineAndFirstMarkPositions.startBoatPosition.translateRhumb(bearingOfStartlineInDeg, new MeterDistance(i)); - Distance startingPositionToFirstMarkDistance = startingPosition.getDistance(startlineAndFirstMarkPositions.firstMarkPosition); - Bearing bearingOfFirstMarkToStartPositionPositionInRad = startlineAndFirstMarkPositions.firstMarkPosition - .getBearingGreatCircle(startingPosition); + Position startingPosition = getStartlineAndFirstMarkPositions().startBoatPosition.translateRhumb(bearingOfStartlineInDeg, new MeterDistance(i)); + Distance startingPositionToFirstMarkDistance = startingPosition.getDistance(getStartlineAndFirstMarkPositions().firstMarkPosition); + Bearing bearingOfFirstMarkToStartPositionPositionInRad = getStartlineAndFirstMarkPositions().firstMarkPosition.getBearingGreatCircle(startingPosition); Bearing bearingOfFirstMarkToStartPositionPositionInDeg = new DegreeBearingImpl(bearingOfFirstMarkToStartPositionPositionInRad.getDegrees()); - double angleToWind = Math.abs(wind.getBearing().getDifferenceTo(bearingOfFirstMarkToStartPositionPositionInDeg).getDegrees()); - logger.log(Level.INFO, "angleToWind"+angleToWind); - Speed speed = defaultPolarSpeedWindAngleFunction.getBoatSpeedForWindAngleAndSpeed(angleToWind, wind.getBeaufort()); - logger.log(Level.INFO, "Speed"+speed.getKnots()); - logger.log(Level.INFO, "startingPositionToFirstMarkDistance.getMeters()"+startingPositionToFirstMarkDistance.getMeters()); - startlineAdvantage.startLineAdvantage = Math.abs((startingPositionToFirstMarkDistance.getMeters()/speed.getMetersPerSecond())*speed.getMetersPerSecond()); + DegreeBearingImpl angleToWind = new DegreeBearingImpl(Math.abs(getWind().getBearing().getDifferenceTo(bearingOfFirstMarkToStartPositionPositionInDeg).getDegrees())); + logger.log(Level.INFO, "angleToWind" + angleToWind); + SpeedWithConfidence speedWithConfidence = getBoatSpeedWithConfidenceForWindAngleAndStrength(angleToWind); + Speed speed = speedWithConfidence.getObject(); + logger.log(Level.INFO, "Speed: " + speed.getKnots()+" Confidence: "+speedWithConfidence.getConfidence()); + logger.log(Level.INFO, "startingPositionToFirstMarkDistance.getMeters()" + startingPositionToFirstMarkDistance.getMeters()); + startlineAdvantage.startLineAdvantage = Math + .abs((startingPositionToFirstMarkDistance.getMeters() / speed.getMetersPerSecond()) + * speed.getMetersPerSecond()); result.add(startlineAdvantage); } } else { @@ -302,22 +330,23 @@ public class StartlineAdvantagesByWindCalculator extends AbstracPreCalculationD } return result; } - - private List subtractAgainstMaximumOfAllStartlineAdvantages(List advantages, double maximum) { - for(StartLineAdvantageDTO startLineAdvantageDTO : advantages) { - startLineAdvantageDTO.startLineAdvantage = maximum-startLineAdvantageDTO.startLineAdvantage; + + private List subtractAgainstMaximumOfAllStartlineAdvantages( + List advantages, double maximum) { + for (StartLineAdvantageDTO startLineAdvantageDTO : advantages) { + startLineAdvantageDTO.startLineAdvantage = maximum - startLineAdvantageDTO.startLineAdvantage; } return advantages; } - + private List subtractMinimumOfAllStartlineAdvantages(List advantages) { double minimum = getMinimumAdvantageOfStartlineAdvantageDTOs(advantages); - for(StartLineAdvantageDTO startLineAdvantageDTO : advantages) { - startLineAdvantageDTO.startLineAdvantage = startLineAdvantageDTO.startLineAdvantage-minimum; + for (StartLineAdvantageDTO startLineAdvantageDTO : advantages) { + startLineAdvantageDTO.startLineAdvantage = startLineAdvantageDTO.startLineAdvantage - minimum; } return advantages; } - + private Double getMaximumAdvantageOfStartlineAdvantageDTOs(List advantages) { Double result = null; List sortedAdvantages = new ArrayList(); @@ -328,15 +357,27 @@ public class StartlineAdvantagesByWindCalculator extends AbstracPreCalculationD } return result; } - + private double getMinimumAdvantageOfStartlineAdvantageDTOs(List advantages) { double result = 0; List sortedAdvantages = new ArrayList(); sortedAdvantages.addAll(advantages); - if(sortedAdvantages != null && sortedAdvantages.size() > 0) { - Collections.sort(sortedAdvantages, StartLineAdvantageDTO.startlineAdvantageComparatorByAdvantageDesc); - result = sortedAdvantages.get(sortedAdvantages.size()-1).startLineAdvantage; + if (sortedAdvantages != null && sortedAdvantages.size() > 0) { + Collections.sort(sortedAdvantages, StartLineAdvantageDTO.startlineAdvantageComparatorByAdvantageDesc); + result = sortedAdvantages.get(sortedAdvantages.size() - 1).startLineAdvantage; } return result; } + + private SpeedWithConfidence getBoatSpeedWithConfidenceForWindAngleAndStrength(Bearing angleToWind) { + SpeedWithConfidence result = null; + try { + result = dashboardDispatchContext.getPolarDataService().getSpeed(domainFactory.getOrCreateBoatClass("Extreme 40"), new KnotSpeedImpl(getWind().getBeaufort()), angleToWind); + } catch (NotEnoughDataHasBeenAddedException e) { + result = defaultPolarSpeedWindAngleFunction.getBoatSpeedForWindAngleAndSpeed(angleToWind, new KnotSpeedImpl(getWind().getBeaufort())); + e.printStackTrace(); + } + return result; + + } } diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/server/util/actions/startlineadvantage/precalculation/AbstracPreCalculationDataRetriever.java b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/server/util/actions/startlineadvantage/precalculation/AbstracPreCalculationDataRetriever.java index 1cf1ab8d0e9..5a71f40268f 100644 --- a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/server/util/actions/startlineadvantage/precalculation/AbstracPreCalculationDataRetriever.java +++ b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/server/util/actions/startlineadvantage/precalculation/AbstracPreCalculationDataRetriever.java @@ -1,7 +1,6 @@ package com.sap.sailing.dashboards.gwt.server.util.actions.startlineadvantage.precalculation; -import com.sap.sailing.domain.base.impl.BoatClassImpl; -import com.sap.sailing.domain.common.BoatClassMasterdata; +import com.sap.sailing.domain.base.DomainFactory; import com.sap.sailing.domain.common.ManeuverType; import com.sap.sailing.domain.common.Wind; import com.sap.sailing.domain.polars.PolarDataService; @@ -15,17 +14,46 @@ public abstract class AbstracPreCalculationDataRetriever implements PreCalculati PreCalculationStartlineAdvantageRetriever, PreCalculationWindRetriever, PreCalculationPolarDataRetriever { - public StartlineAndFirstMarkPositions startlineAndFirstMarkPositions; - public double startlineAdvantageAtPinEndInMeters; - public double startlineLenghtInMeters; - public Wind wind; - public double meouvreAngle; + private StartlineAndFirstMarkPositions startlineAndFirstMarkPositions; + private double startlineAdvantageAtPinEndInMeters; + private double startlineLenghtInMeters; + private Wind wind; + private double maneuverAngle; + private final DomainFactory domainFactory; + + public AbstracPreCalculationDataRetriever(DomainFactory domainFactory) { + super(); + this.domainFactory = domainFactory; + } + protected void retrieveDataForCalculation(TrackedRace trackedRace, PolarDataService polarDataService) { startlineAndFirstMarkPositions = retrieveMarkPositions(trackedRace); startlineAdvantageAtPinEndInMeters = retrieveStartlineAdvantage(trackedRace); startlineLenghtInMeters = retrieveStartlineLenght(trackedRace); wind = retrieveWindAtPosition(startlineAndFirstMarkPositions.startBoatPosition, trackedRace); - meouvreAngle = retrieveManouvreAngleAtWindSpeedAndBoatClass(new BoatClassImpl("Extreme40", BoatClassMasterdata.EXTREME_40), ManeuverType.TACK, wind, polarDataService); + maneuverAngle = retrieveManouvreAngleAtWindSpeedAndBoatClass(domainFactory.getOrCreateBoatClass("Extreme 40"), ManeuverType.TACK, wind, polarDataService); } + + protected StartlineAndFirstMarkPositions getStartlineAndFirstMarkPositions() { + return startlineAndFirstMarkPositions; + } + + protected double getStartlineAdvantageAtPinEndInMeters() { + return startlineAdvantageAtPinEndInMeters; + } + + protected double getStartlineLenghtInMeters() { + return startlineLenghtInMeters; + } + + protected Wind getWind() { + return wind; + } + + protected double getManeuverAngle() { + return maneuverAngle; + } + + } diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/server/util/actions/startlineadvantage/precalculation/PreCalculationPolarDataRetriever.java b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/server/util/actions/startlineadvantage/precalculation/PreCalculationPolarDataRetriever.java index c7068933782..9ab19d1fe1d 100644 --- a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/server/util/actions/startlineadvantage/precalculation/PreCalculationPolarDataRetriever.java +++ b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/server/util/actions/startlineadvantage/precalculation/PreCalculationPolarDataRetriever.java @@ -15,13 +15,11 @@ import com.sap.sailing.domain.polars.PolarDataService; public interface PreCalculationPolarDataRetriever { default double retrieveManouvreAngleAtWindSpeedAndBoatClass(BoatClass boatClass, ManeuverType maneuverType, Speed windSpeed, PolarDataService polarDataService) { - double result = 0; + double result = DefaultPolarValues.getManouvreAngle(ManeuverType.TACK); try { if (boatClass != null && maneuverType != null && windSpeed != null) { BearingWithConfidence bearingWithConfidence = polarDataService.getManeuverAngle(boatClass, maneuverType, windSpeed); result = bearingWithConfidence.getObject().getDegrees(); - } else { - result = DefaultPolarValues.getManouvreAngle(ManeuverType.TACK); } } catch (NotEnoughDataHasBeenAddedException | NullPointerException e) { e.printStackTrace(); diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/shared/dispatch/RequiresLiveRaceAndCachesMovingAverageAction.java b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/shared/dispatch/RequiresLiveRaceAndCachesMovingAverageAction.java index 38db9e20d6f..90044d4fd6b 100644 --- a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/shared/dispatch/RequiresLiveRaceAndCachesMovingAverageAction.java +++ b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/shared/dispatch/RequiresLiveRaceAndCachesMovingAverageAction.java @@ -20,11 +20,12 @@ public abstract class RequiresLiveRaceAndCachesMovingAverageAction + + + + diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/resources/com/sap/sailing/dashboards/gwt/client/images/left.png b/java/com.sap.sailing.dashboards.gwt/src/main/resources/com/sap/sailing/dashboards/gwt/client/images/left.png new file mode 100644 index 00000000000..383af6aeac2 Binary files /dev/null and b/java/com.sap.sailing.dashboards.gwt/src/main/resources/com/sap/sailing/dashboards/gwt/client/images/left.png differ diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/resources/com/sap/sailing/dashboards/gwt/client/images/left_disabled.png b/java/com.sap.sailing.dashboards.gwt/src/main/resources/com/sap/sailing/dashboards/gwt/client/images/left_disabled.png new file mode 100644 index 00000000000..ae93717cffd Binary files /dev/null and b/java/com.sap.sailing.dashboards.gwt/src/main/resources/com/sap/sailing/dashboards/gwt/client/images/left_disabled.png differ diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/resources/com/sap/sailing/dashboards/gwt/client/images/leftarrow.png b/java/com.sap.sailing.dashboards.gwt/src/main/resources/com/sap/sailing/dashboards/gwt/client/images/leftarrow.png deleted file mode 100644 index de562344f94..00000000000 Binary files a/java/com.sap.sailing.dashboards.gwt/src/main/resources/com/sap/sailing/dashboards/gwt/client/images/leftarrow.png and /dev/null differ diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/resources/com/sap/sailing/dashboards/gwt/client/images/leftarrow_disabled.png b/java/com.sap.sailing.dashboards.gwt/src/main/resources/com/sap/sailing/dashboards/gwt/client/images/leftarrow_disabled.png deleted file mode 100644 index 9af5de2c43c..00000000000 Binary files a/java/com.sap.sailing.dashboards.gwt/src/main/resources/com/sap/sailing/dashboards/gwt/client/images/leftarrow_disabled.png and /dev/null differ diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/resources/com/sap/sailing/dashboards/gwt/client/images/right.png b/java/com.sap.sailing.dashboards.gwt/src/main/resources/com/sap/sailing/dashboards/gwt/client/images/right.png new file mode 100644 index 00000000000..7100d546a72 Binary files /dev/null and b/java/com.sap.sailing.dashboards.gwt/src/main/resources/com/sap/sailing/dashboards/gwt/client/images/right.png differ diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/resources/com/sap/sailing/dashboards/gwt/client/images/right_disabled.png b/java/com.sap.sailing.dashboards.gwt/src/main/resources/com/sap/sailing/dashboards/gwt/client/images/right_disabled.png new file mode 100644 index 00000000000..b7c2bfe146e Binary files /dev/null and b/java/com.sap.sailing.dashboards.gwt/src/main/resources/com/sap/sailing/dashboards/gwt/client/images/right_disabled.png differ diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/resources/com/sap/sailing/dashboards/gwt/client/images/rightarrow.png b/java/com.sap.sailing.dashboards.gwt/src/main/resources/com/sap/sailing/dashboards/gwt/client/images/rightarrow.png deleted file mode 100644 index 7a560b168b2..00000000000 Binary files a/java/com.sap.sailing.dashboards.gwt/src/main/resources/com/sap/sailing/dashboards/gwt/client/images/rightarrow.png and /dev/null differ diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/resources/com/sap/sailing/dashboards/gwt/client/images/rightarrow_disabled.png b/java/com.sap.sailing.dashboards.gwt/src/main/resources/com/sap/sailing/dashboards/gwt/client/images/rightarrow_disabled.png deleted file mode 100644 index 38f2eaef9db..00000000000 Binary files a/java/com.sap.sailing.dashboards.gwt/src/main/resources/com/sap/sailing/dashboards/gwt/client/images/rightarrow_disabled.png and /dev/null differ diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/resources/com/sap/sailing/dashboards/gwt/client/images/settings_disabled.png b/java/com.sap.sailing.dashboards.gwt/src/main/resources/com/sap/sailing/dashboards/gwt/client/images/settings_disabled.png new file mode 100644 index 00000000000..559e4f252f6 Binary files /dev/null and b/java/com.sap.sailing.dashboards.gwt/src/main/resources/com/sap/sailing/dashboards/gwt/client/images/settings_disabled.png differ diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/resources/com/sap/sailing/dashboards/gwt/client/images/windarrow.png b/java/com.sap.sailing.dashboards.gwt/src/main/resources/com/sap/sailing/dashboards/gwt/client/images/windarrow.png index 1d71881caa8..fc8859e921a 100644 Binary files a/java/com.sap.sailing.dashboards.gwt/src/main/resources/com/sap/sailing/dashboards/gwt/client/images/windarrow.png and b/java/com.sap.sailing.dashboards.gwt/src/main/resources/com/sap/sailing/dashboards/gwt/client/images/windarrow.png differ diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.java index ac81065b249..a1994551b29 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.java @@ -176,6 +176,7 @@ public interface StringMessages extends com.sap.sse.gwt.client.StringMessages, c String secondsUnit(); String secondsPerNauticalMileUnit(); String metersUnit(); + String degreesUnit(); @Override String close(); String compareCompetitors(); @@ -1261,9 +1262,9 @@ public interface StringMessages extends com.sap.sse.gwt.client.StringMessages, c String valueDescending(); String sortBy(); - String dashboardWindBotLoadingText(); - String dashboardWindBotLoadingMessage(); - String dashboardWindBotNotAvailable(); + String dashboardHeader(); + String dashboardNoWindBotAvailableHeader(); + String dashboardNoWindBotAvailableMessage(); String dashboardWindBot(); String dashboardTrueWindSpeed(); String dashboardTrueWindDirection(); @@ -1274,10 +1275,17 @@ public interface StringMessages extends com.sap.sse.gwt.client.StringMessages, c String dashboardAverageWindMinutes(int minutes); String dashboardWindChartHint(); + String dashboardSelectCompetitor(); + String dashboardStartAnalysesHeader(); String dashboardNewStartAnalysisAvailable(); - - String dashboardStartlineAdvantagesByWind(); - String dashboardStartlineAdvantageByGeometry(); + String dashboardNoStartAnalysesAvailableHeader(); + String dashboardNoStartAnalysesAvailableMessage(); + String dashboardNoStartlineAdvantagesByWindAvailableHeader(); + String dashboardNoStartlineAdvantagesByWindAvailableMessage(); + String dashboardNoStartlineAdvantagesByGeometryAvailableHeader(); + String dashboardNoStartlineAdvantagesByGeometryAvailableMessage(); + String dashboardStartlineAdvantagesByWindHeader(); + String dashboardStartlineAdvantageByGeometryHeader(); String dashboardRankAtFirstMark(); String dashboardTeam(); String dashboardDistanceToLineInM(); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.properties b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.properties index 47ad44120b7..316d07f3a69 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.properties +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.properties @@ -179,6 +179,7 @@ in=in secondsUnit=s secondsPerNauticalMileUnit=s/NM metersUnit=m +degreesUnit=° close=Close compareCompetitors=Compare competitors description=Description @@ -1225,9 +1226,9 @@ groupName=Group Name valueAscending=Value (Ascending) valueDescending=Value (Descending) sortBy=Sort by -dashboardWindBotLoadingText=Waiting for wind bot data... -dashboardWindBotLoadingMessage=Depending on your connection this operation might take some minutes to complete the first time. It can also take some time if there is no data available right now. -dashboardWindBotNotAvailable=Wind bot not available. +dashboardHeader=Dashboard +dashboardNoWindBotAvailableHeader=Wind Bot is not available. +dashboardNoWindBotAvailableMessage=To receive live wind data from wind measurement units, ensure that the wind bot is switched on and connected to the SAP Sailing Analytics. dashboardWindBot=Wind Bot dashboardTrueWindSpeed=TWS dashboardTrueWindDirection=TWD @@ -1237,9 +1238,17 @@ dashboardLiveWind=live dashboardAverageWind=average dashboardAverageWindMinutes=({0} minutes) dashboardWindChartHint=Tap on chart to change interval +dashboardSelectCompetitor=Select Competitor +dashboardStartAnalysesHeader=Start Analyses dashboardNewStartAnalysisAvailable=New start analysis available -dashboardStartlineAdvantagesByWind=Startline advantage by wind -dashboardStartlineAdvantageByGeometry=Startline advantage by geometry +dashboardNoStartAnalysesAvailableHeader=No Start Analyses available. +dashboardNoStartAnalysesAvailableMessage=There is a Start Analysis created from each race start. Please stand by till racing has been started. +dashboardNoStartlineAdvantagesByWindAvailableHeader=No Startline Advantages available. +dashboardNoStartlineAdvantagesByWindAvailableMessage=For calculating the startline advantage there needs to be a course set by the race commitee. +dashboardNoStartlineAdvantagesByGeometryAvailableHeader=No Startline Advantage available. +dashboardNoStartlineAdvantagesByGeometryAvailableMessage=For calculating the startline advantage there needs to be a course set by the race commitee. +dashboardStartlineAdvantagesByWindHeader=Startline Advantages by Wind +dashboardStartlineAdvantageByGeometryHeader=Startline Advantage by Geometry dashboardRankAtFirstMark=Rank at first mark dashboardTeam=Team dashboardDistanceToLineInM=Distance to line in m diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_de.properties b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_de.properties index 990df9608fd..e9bec87776f 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_de.properties +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_de.properties @@ -181,6 +181,7 @@ in=in secondsUnit=s secondsPerNauticalMileUnit=s/sm metersUnit=m +degreesUnit=° close=Schließen compareCompetitors=Teilnehmer vergleichen description=Beschreibung @@ -1212,9 +1213,9 @@ groupName=Gruppename valueAscending=Wert (Aufsteigend) valueDescending=Wert (Absteigend) sortBy=Sortiert nach -dashboardWindBotLoadingText=Lade Windmesser Daten ... -dashboardWindBotLoadingMessage=Je nach Qualität Ihrer Verbindung kann dieser Vorgang ein paar Minuten dauern. -dashboardWindBotNotAvailable=Keine Verbindung zu Windmesser. +dashboardHeader=Dashboard +dashboardNoWindBotAvailableHeader=Wind Bot nicht verfügbar. +dashboardNoWindBotAvailableMessage=Um live Daten von Wind Messgeräten zu empfangen, muss der Wind Bot mit der SAP Sailing Analytics verknüpft sein. dashboardWindBot=Windmesser dashboardTrueWindSpeed=Wind Geschwindigkeit dashboardTrueWindDirection=Wind Richtung @@ -1224,9 +1225,17 @@ dashboardLiveWind=live dashboardAverageWind=average dashboardAverageWindMinutes=({0} minutes) dashboardWindChartHint=Auf Chart drücken um Interval zu ändern -dashboardNewStartAnalysisAvailable=Neue Startanalyse verfügbar -dashboardStartlineAdvantagesByWind=Startlininien Vorteil nach Wind -dashboardStartlineAdvantageByGeometry=Startlininien Vorteil nach Geometrie +dashboardSelectCompetitor=Segler auswählen +dashboardStartAnalysesHeader=Start Analysen +dashboardNewStartAnalysisAvailable=Neue Start Analyse verfügbar. +dashboardNoStartAnalysesAvailableHeader=Keine Start Analysen verfügbar. +dashboardNoStartAnalysesAvailableMessage=Es wird eine Start Analyse für jeden Renn Start erstellt. Bitte warten bis die Rennen starten. +dashboardNoStartlineAdvantagesByWindAvailableHeader=Kein Startlinien Vorteil verfügbar. +dashboardNoStartlineAdvantagesByWindAvailableMessage=Um den Startlinien Vorteil zu berrechnen muss die Regattaleitung einen Kurs in im Race Manager gesetzt haben. +dashboardNoStartlineAdvantagesByGeometryAvailableHeader=Keine Startlinien Vorteile verfügbar. +dashboardNoStartlineAdvantagesByGeometryAvailableMessage=Um den Startlinien Vorteile zu berrechnen muss die Regattaleitung einen Kurs in im Race Manager gesetzt haben. +dashboardStartlineAdvantagesByWindHeader=Startlinien Vorteile nach Wind +dashboardStartlineAdvantageByGeometryHeader=Startlinien Vorteile nach Geometrie dashboardRankAtFirstMark=Position an erster Bahnmarke dashboardTeam=Team dashboardDistanceToLineInM=Distanz zur Linie in m diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_ru.properties b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_ru.properties index 3bd266c91ff..de43e303420 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_ru.properties +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_ru.properties @@ -177,6 +177,7 @@ in=в secondsUnit=с secondsPerNauticalMileUnit=с/NM metersUnit=м +degreesUnit=° close=Закрыть compareCompetitors=Сравнить участников description=Описание @@ -1155,9 +1156,9 @@ groupName=Group Name valueAscending=Value (Ascending) valueDescending=Value (Descending) sortBy=Sort by -dashboardWindBotLoadingText=Loading wind bot data ... -dashboardWindBotLoadingMessage=Depending on your connection this operation might take some minutes to complete the first time. -dashboardWindBotNotAvailable=Wind bot not available. +dashboardHeader=Dashboard +dashboardNoWindBotAvailableHeader=Wind Bot not available. +dashboardNoWindBotAvailableMessage=To receive live wind data from wind measurement units, ensure that the wind bot is switched on and connected to the SAP Sailing Analytics. dashboardWindBot=Wind Bot dashboardTrueWindSpeed=TWS dashboardTrueWindDirection=TWD @@ -1167,9 +1168,17 @@ dashboardLiveWind=live dashboardAverageWind=average dashboardAverageWindMinutes=({0} minutes) dashboardWindChartHint=Tap on chart to change interval +dashboardStartAnalysesHeader=Start Analyses +dashboardSelectCompetitor=Select Competitor dashboardNewStartAnalysisAvailable=New start analysis available -dashboardStartlineAdvantagesByWind=Startline advantage by wind -dashboardStartlineAdvantageByGeometry=Startline advantage by geometry +dashboardNoStartAnalysesAvailableHeader=No Start Analyses available. +dashboardNoStartAnalysesAvailableMessage=There is a Start Analysis created from each race start. Please stand by till racing has been started. +dashboardNoStartlineAdvantagesByWindAvailableHeader=No Startline Advantages available. +dashboardNoStartlineAdvantagesByWindAvailableMessage=For calculating the startline advantage there needs to be a course set by the race commitee. +dashboardNoStartlineAdvantagesByGeometryAvailableHeader=No Startline Advantage available. +dashboardNoStartlineAdvantagesByGeometryAvailableMessage=For calculating the startline advantage there needs to be a course set by the race commitee. +dashboardStartlineAdvantagesByWindHeader=Startline Advantages by Wind +dashboardStartlineAdvantageByGeometryHeader=Startline Advantage by Geometry dashboardRankAtFirstMark=Rank at first mark dashboardTeam=Team dashboardDistanceToLineInM=Distance to line in m diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_zh.properties b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_zh.properties index 798248333ef..72dd9f19f23 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_zh.properties +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_zh.properties @@ -128,7 +128,9 @@ raceLogReloaded=Race log successfully reloaded from database legend=Legend courseDesignerMode=Course designer configureLeaderboardUrlDescription=Configure a leaderboard and obtain the resulting URL from the link +dashboardHeader=Dashboard dashboardAverageWind=average +dashboardSelectCompetitor=Select Competitor welcomeToSailingAnalytics=Welcome to SAP Sailing Analytics courseOverGroundTrueDegreesTooltip=实际航向角度 mediaSelectVideoCaption={0} Videos @@ -160,7 +162,6 @@ explainReplicationServletPort=Servlet port number that is used to connect to reg numberOfManeuvers=操作 successfullyAllowedCompetitorReset=Successfully allowed reload of competitor(s) {0}. pleaseEnterAName=Please enter a name -dashboardStartlineAdvantageByGeometry=Startline advantage by geometry confidence=Confidence from=从 start=起航 @@ -351,7 +352,10 @@ raceIsRunning=正在进行 starboardSide=右舷 polarSheetMinimumWindConfidence=Minimum wind confidence value group=分组 +dashboardStartAnalysesHeader=Start Analyses dashboardNewStartAnalysisAvailable=New start analysis available +dashboardNoStartAnalysesAvailableHeader=No Start Analyses available. +dashboardNoStartAnalysesAvailableMessage=There is a Start Analysis created from each race start. Please stand by till racing has been started. actionAddWindData=Add wind data competitorSearchFilter=Competitor Search Filter dataCount=Data Size @@ -861,6 +865,7 @@ selectAFilterCriteria=Select a filter criteria errorWhileTryingToSetWindSourceForRace=Error while trying to set "wind starts upwind" flag pleaseEnterASailNumber=Please enter a sail number metersUnit=m +degreesUnit=° isPublic=Is public speedOverGroundWhenPassingStartTooltip=参赛队越过起航线时的实际速度 successfullyUpdatedSailingServers=Successfully updated SailingServer instances @@ -982,7 +987,6 @@ overallStandings=总排名 setClosingTimePoint=Set Timepoint that closes open time range registeredCompetitors=Registered Competitors timePointMustBeBeforeEndOfTracking=Time point must be before end of tracking. -dashboardWindBotNotAvailable=Wind bot not available. untracked=Untracked scoringSchemeWinnerGetsEightAndInterpolation=High Point System, Winner 8 Points, Interpolated export=Export @@ -1095,7 +1099,8 @@ windwardDistanceToGoInMetersTooltip=迎/顺风航段时参赛队的位置离开 papaDisplayed=Start mode flag - four minutes till start sheetNameTooltip=You can name your polar sheet using the text field.nA name will be generated using the boat classnif no name is provided. competitorsFilter=参赛队过滤 -dashboardStartlineAdvantagesByWind=Startline advantage by wind +dashboardStartlineAdvantagesByWindHeader=Startline Advantages by Wind +dashboardStartlineAdvantageByGeometryHeader=Startline Advantage by Geometry dashboardSecondsAbreviation=s pleaseEnterNonEmptyDescription=Please enter a non-empty description polarSheetChart=Polar Sheet @@ -1252,8 +1257,12 @@ eventsCount[one]={0,number} event competitorsCount={0,number} competitors courseAreaName=Course area: {0} competitorsCount[one]={0,number} competitor� -dashboardWindBotLoadingText=Loading wind bot data ... -dashboardWindBotLoadingMessage=Depending on your connection this operation might take some minutes to complete the first time. +dashboardNoWindBotAvailableHeader=Wind Bot not available. +dashboardNoWindBotAvailableMessage=To receive live wind data from wind measurement units, ensure that the wind bot is switched on and connected to the SAP Sailing Analytics. +dashboardNoStartlineAdvantagesByWindAvailableHeader=No Startline Advantages available. +dashboardNoStartlineAdvantagesByWindAvailableMessage=For calculating the startline advantage there needs to be a course set by the race commitee. +dashboardNoStartlineAdvantagesByGeometryAvailableHeader=No Startline Advantage available. +dashboardNoStartlineAdvantagesByGeometryAvailableMessage=For calculating the startline advantage there needs to be a course set by the race commitee. currentOfTotalLegs=航段 {0,number}/{1,number} clone=Clone changed=Changed diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/racemap/CombinedWindPanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/racemap/CombinedWindPanel.java index 40d5bcbc314..aa92c3f2602 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/racemap/CombinedWindPanel.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/racemap/CombinedWindPanel.java @@ -23,22 +23,23 @@ public class CombinedWindPanel extends FlowPanel { private Canvas canvas; - private CombinedWindPanelStyle combinedWindPanelStyle; + private RaceMapStyle raceMapStyle; private final CoordinateSystem coordinateSystem; - public CombinedWindPanel(RaceMapImageManager theRaceMapResources, CombinedWindPanelStyle combinedWindPanelStyle, + public CombinedWindPanel(RaceMapImageManager theRaceMapResources, RaceMapStyle raceMapStyle, StringMessages stringMessages, CoordinateSystem coordinateSystem) { + raceMapStyle.ensureInjected(); this.stringMessages = stringMessages; this.coordinateSystem = coordinateSystem; this.raceMapResources = theRaceMapResources; - this.combinedWindPanelStyle = combinedWindPanelStyle; - addStyleName(combinedWindPanelStyle.combinedWindPanel()); + this.raceMapStyle = raceMapStyle; + addStyleName(raceMapStyle.raceMapIndicatorPanel()); transformer = raceMapResources.getCombinedWindIconTransformer(); canvas = transformer.getCanvas(); - canvas.addStyleName(this.combinedWindPanelStyle.combinedWindPanelCanvas()); + canvas.addStyleName(this.raceMapStyle.raceMapIndicatorPanelCanvas()); add(canvas); textLabel = new Label(""); - textLabel.addStyleName(this.combinedWindPanelStyle.combinedWindPanelTextLabel()); + textLabel.addStyleName(this.raceMapStyle.raceMapIndicatorPanelTextLabel()); add(textLabel); } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/racemap/CombinedWindPanelStyle.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/racemap/CombinedWindPanelStyle.java deleted file mode 100644 index a1d84ffb09d..00000000000 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/racemap/CombinedWindPanelStyle.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.sap.sailing.gwt.ui.client.shared.racemap; - -import com.google.gwt.resources.client.CssResource; -import com.google.gwt.resources.client.CssResource.Shared; - -@Shared -public interface CombinedWindPanelStyle extends CssResource { - public String combinedWindPanel(); - public String combinedWindPanelTextLabel(); - public String combinedWindPanelCanvas(); -} diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/racemap/CombinedWindPanel.css b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/racemap/RaceMap.css similarity index 73% rename from java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/racemap/CombinedWindPanel.css rename to java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/racemap/RaceMap.css index 2a333cf891c..9c8056bcd53 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/racemap/CombinedWindPanel.css +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/racemap/RaceMap.css @@ -1,6 +1,6 @@ @CHARSET "UTF-8"; -.combinedWindPanel { +.raceMapIndicatorPanel { -moz-border-radius: 4px; -webkit-border-radius: 4px; -o-border-radius: 4px; @@ -10,7 +10,7 @@ border: 1px solid #C9CACA; } -.combinedWindPanelTextLabel { +.raceMapIndicatorPanelTextLabel { height: 12px; width: 55px; vertical-align: middle; @@ -18,8 +18,12 @@ text-align: center; } -.combinedWindPanelCanvas{ +.raceMapIndicatorPanelCanvas { width: 55px; margin-left: 6px; cursor: pointer; -} \ No newline at end of file +} + +.combinedWindPanel {} + +.trueNorthIndicator {} \ No newline at end of file diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/racemap/RaceMap.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/racemap/RaceMap.java index c0efaa1bd7b..d8a3d76289a 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/racemap/RaceMap.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/racemap/RaceMap.java @@ -409,7 +409,7 @@ public class RaceMap extends AbsolutePanel implements TimeListener, CompetitorSe public RaceMap(SailingServiceAsync sailingService, AsyncActionsExecutor asyncActionsExecutor, ErrorReporter errorReporter, Timer timer, CompetitorSelectionProvider competitorSelection, StringMessages stringMessages, boolean showMapControls, boolean showViewStreamlets, boolean showViewStreamletColors, boolean showViewSimulation, - RegattaAndRaceIdentifier raceIdentifier, CombinedWindPanelStyle combinedWindPanelStyle, boolean showHeaderPanel) { + RegattaAndRaceIdentifier raceIdentifier, RaceMapResources raceMapResources, boolean showHeaderPanel) { this.setSize("100%", "100%"); this.showMapControls = showMapControls; this.stringMessages = stringMessages; @@ -419,7 +419,7 @@ public class RaceMap extends AbsolutePanel implements TimeListener, CompetitorSe this.errorReporter = errorReporter; this.timer = timer; timer.addTimeListener(this); - raceMapImageManager = new RaceMapImageManager(); + raceMapImageManager = new RaceMapImageManager(raceMapResources); markDTOs = new HashMap(); courseSidelines = new HashMap<>(); courseMiddleLines = new HashMap<>(); @@ -446,9 +446,9 @@ public class RaceMap extends AbsolutePanel implements TimeListener, CompetitorSe panelForLeftHeaderLabels = new AbsolutePanel(); panelForRightHeaderLabels = new AbsolutePanel(); initializeData(showMapControls, showHeaderPanel); - combinedWindPanel = new CombinedWindPanel(raceMapImageManager, combinedWindPanelStyle, stringMessages, coordinateSystem); + combinedWindPanel = new CombinedWindPanel(raceMapImageManager, raceMapResources.raceMapStyle(), stringMessages, coordinateSystem); combinedWindPanel.setVisible(false); - trueNorthIndicatorPanel = new TrueNorthIndicatorPanel(this, raceMapImageManager, combinedWindPanelStyle, stringMessages, coordinateSystem); + trueNorthIndicatorPanel = new TrueNorthIndicatorPanel(this, raceMapImageManager, raceMapResources.raceMapStyle(), stringMessages, coordinateSystem); trueNorthIndicatorPanel.setVisible(true); orientationChangeInProgress = false; mapFirstZoomDone = false; @@ -632,8 +632,9 @@ public class RaceMap extends AbsolutePanel implements TimeListener, CompetitorSe if (showHeaderPanel) { createHeaderPanel(map); } - createSettingsButton(map); - + if (showMapControls) { + createSettingsButton(map); + } // Data has been initialized RaceMap.this.isMapInitialized = true; RaceMap.this.redraw(); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/racemap/RaceMapImageManager.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/racemap/RaceMapImageManager.java index 4dffc1946d0..2ef5252955e 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/racemap/RaceMapImageManager.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/racemap/RaceMapImageManager.java @@ -5,7 +5,6 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import com.google.gwt.core.client.GWT; import com.google.gwt.maps.client.MapWidget; import com.google.gwt.maps.client.base.Point; import com.google.gwt.maps.client.base.Size; @@ -39,9 +38,10 @@ public class RaceMapImageManager { protected Map, Marker> maneuverIconsForTypeAndDirectionIndicatingColor; - private static RaceMapResources resources = GWT.create(RaceMapResources.class); - - public RaceMapImageManager() { + private final RaceMapResources resources; + + public RaceMapImageManager(RaceMapResources resources) { + this.resources = resources; maneuverIconsForTypeAndDirectionIndicatingColor = new HashMap, Marker>(); trueNorthIndicatorIconTransformer = new ImageTransformer(resources.trueNorthIndicatorIcon()); combinedWindIconTransformer = new ImageTransformer(resources.combinedWindIcon()); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/racemap/RaceMapResources.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/racemap/RaceMapResources.java index 689799cb81c..368ba925ee1 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/racemap/RaceMapResources.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/racemap/RaceMapResources.java @@ -28,6 +28,6 @@ public interface RaceMapResources extends ClientBundle { @Source("com/sap/sailing/gwt/ui/client/images/maneuver_green.png") ImageResource maneuverMarkerGreen(); - @Source("CombinedWindPanel.css") - CombinedWindPanelStyle combinedWindPanelStyle(); + @Source("RaceMap.css") + RaceMapStyle raceMapStyle(); } \ No newline at end of file diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/racemap/RaceMapStyle.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/racemap/RaceMapStyle.java new file mode 100644 index 00000000000..4a2179a296b --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/racemap/RaceMapStyle.java @@ -0,0 +1,21 @@ +package com.sap.sailing.gwt.ui.client.shared.racemap; + +import com.google.gwt.resources.client.CssResource; +import com.google.gwt.resources.client.CssResource.Shared; + +/** + * Contains class names for styles that can get overwritten in the {@link RaceMap}. + * The {@link RaceMap} may require customized styles of elements when it is used in + * different contexts. + * + * @author Alexander Ries + * + */ +@Shared +public interface RaceMapStyle extends CssResource { + public String raceMapIndicatorPanel(); + public String raceMapIndicatorPanelTextLabel(); + public String raceMapIndicatorPanelCanvas(); + public String combinedWindPanel(); + public String trueNorthIndicator(); +} diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/racemap/TrueNorthIndicatorPanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/racemap/TrueNorthIndicatorPanel.java index 28da66d7f61..ef7cd8e80a3 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/racemap/TrueNorthIndicatorPanel.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/racemap/TrueNorthIndicatorPanel.java @@ -26,19 +26,20 @@ public class TrueNorthIndicatorPanel extends FlowPanel { private Canvas canvas; - private CombinedWindPanelStyle combinedWindPanelStyle; + private RaceMapStyle raceMapStyle; private final CoordinateSystem coordinateSystem; - public TrueNorthIndicatorPanel(final RaceMap map, RaceMapImageManager theRaceMapResources, CombinedWindPanelStyle combinedWindPanelStyle, + public TrueNorthIndicatorPanel(final RaceMap map, RaceMapImageManager theRaceMapResources, RaceMapStyle raceMapStyle, final StringMessages stringMessages, CoordinateSystem coordinateSystem) { this.stringMessages = stringMessages; this.coordinateSystem = coordinateSystem; this.raceMapResources = theRaceMapResources; - this.combinedWindPanelStyle = combinedWindPanelStyle; - addStyleName(combinedWindPanelStyle.combinedWindPanel()); + this.raceMapStyle = raceMapStyle; + addStyleName(raceMapStyle.raceMapIndicatorPanel()); + addStyleName(raceMapStyle.trueNorthIndicator()); transformer = raceMapResources.getTrueNorthIndicatorIconTransformer(); canvas = transformer.getCanvas(); - canvas.addStyleName(this.combinedWindPanelStyle.combinedWindPanelCanvas()); + canvas.addStyleName(this.raceMapStyle.raceMapIndicatorPanelCanvas()); add(canvas); canvas.addClickHandler(new ClickHandler() { @Override @@ -58,7 +59,7 @@ public class TrueNorthIndicatorPanel extends FlowPanel { } }); textLabel = new Label(""); - textLabel.addStyleName(this.combinedWindPanelStyle.combinedWindPanelTextLabel()); + textLabel.addStyleName(this.raceMapStyle.raceMapIndicatorPanelTextLabel()); add(textLabel); } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/EmbeddedMapAndWindChartEntryPoint.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/EmbeddedMapAndWindChartEntryPoint.java index 127cb23ee23..f1a0b2eb29c 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/EmbeddedMapAndWindChartEntryPoint.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/EmbeddedMapAndWindChartEntryPoint.java @@ -155,7 +155,7 @@ public class EmbeddedMapAndWindChartEntryPoint extends AbstractSailingEntryPoint final TimePanelSettings timePanelSettings = timePanel.getSettings(); timePanelSettings.setRefreshInterval(refreshInterval); timePanel.updateSettings(timePanelSettings); - raceMapResources.combinedWindPanelStyle().ensureInjected(); + raceMapResources.raceMapStyle().ensureInjected(); final CompetitorColorProvider colorProvider = new CompetitorColorProviderImpl(selectedRaceIdentifier, competitorBoats); final CompetitorSelectionProvider competitorSelection; if (showCompetitors) { @@ -165,7 +165,7 @@ public class EmbeddedMapAndWindChartEntryPoint extends AbstractSailingEntryPoint } final RaceMap raceMap = new RaceMap(sailingService, asyncActionsExecutor, /* errorReporter */ EmbeddedMapAndWindChartEntryPoint.this, timer, competitorSelection, getStringMessages(), showMapControls, showViewStreamlets, showViewStreamletColors, - showViewSimulation, selectedRaceIdentifier, raceMapResources.combinedWindPanelStyle(), /* showHeaderPanel */ false) { + showViewSimulation, selectedRaceIdentifier, raceMapResources, /* showHeaderPanel */ false) { @Override protected void showAdditionalControls(MapWidget map) { backToLivePlayButton.removeFromParent(); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/RaceBoardPanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/RaceBoardPanel.java index 05eea8e29be..567de85eb3e 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/RaceBoardPanel.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/RaceBoardPanel.java @@ -170,10 +170,10 @@ public class RaceBoardPanel extends SimplePanel implements LeaderboardUpdateList final CompetitorColorProvider colorProvider = new CompetitorColorProviderImpl(selectedRaceIdentifier, competitorsAndTheirBoats); competitorSelectionProvider = new CompetitorSelectionModel(/* hasMultiSelection */ true, colorProvider); - raceMapResources.combinedWindPanelStyle().ensureInjected(); + raceMapResources.raceMapStyle().ensureInjected(); raceMap = new RaceMap(sailingService, asyncActionsExecutor, errorReporter, timer, competitorSelectionProvider, stringMessages, showMapControls, getConfiguration().isShowViewStreamlets(), getConfiguration().isShowViewStreamletColors(), getConfiguration().isShowViewSimulation(), - selectedRaceIdentifier, raceMapResources.combinedWindPanelStyle(), /* showHeaderPanel */ true) { + selectedRaceIdentifier, raceMapResources, /* showHeaderPanel */ true) { private static final String INDENT_SMALL_CONTROL_STYLE = "indentsmall"; private static final String INDENT_BIG_CONTROL_STYLE = "indentbig"; @Override diff --git a/java/com.sap.sailing.server/SailingServer (No Proxy OSX).launch b/java/com.sap.sailing.server/SailingServer (No Proxy OSX).launch index 70d5da234a1..64d68838215 100644 --- a/java/com.sap.sailing.server/SailingServer (No Proxy OSX).launch +++ b/java/com.sap.sailing.server/SailingServer (No Proxy OSX).launch @@ -1,38 +1,38 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/java/com.sap.sailing.server/SailingServer (No Proxy).launch b/java/com.sap.sailing.server/SailingServer (No Proxy).launch index fb49b67aa62..eb1a2722b78 100644 --- a/java/com.sap.sailing.server/SailingServer (No Proxy).launch +++ b/java/com.sap.sailing.server/SailingServer (No Proxy).launch @@ -1,38 +1,38 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/java/com.sap.sailing.server/SailingServer (No Proxy, Cached MTB).launch b/java/com.sap.sailing.server/SailingServer (No Proxy, Cached MTB).launch index f423d629372..a08607085cc 100755 --- a/java/com.sap.sailing.server/SailingServer (No Proxy, Cached MTB).launch +++ b/java/com.sap.sailing.server/SailingServer (No Proxy, Cached MTB).launch @@ -1,37 +1,37 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/java/com.sap.sailing.server/SailingServer (No Proxy, Jetty on 8889).launch b/java/com.sap.sailing.server/SailingServer (No Proxy, Jetty on 8889).launch index a1b211da85d..3d3b3b72ea9 100755 --- a/java/com.sap.sailing.server/SailingServer (No Proxy, Jetty on 8889).launch +++ b/java/com.sap.sailing.server/SailingServer (No Proxy, Jetty on 8889).launch @@ -1,32 +1,32 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/java/com.sap.sailing.server/SailingServer (No Proxy, Jetty on 8889, Cached MTB).launch b/java/com.sap.sailing.server/SailingServer (No Proxy, Jetty on 8889, Cached MTB).launch index 5fb70d15c55..95f214db6ad 100755 --- a/java/com.sap.sailing.server/SailingServer (No Proxy, Jetty on 8889, Cached MTB).launch +++ b/java/com.sap.sailing.server/SailingServer (No Proxy, Jetty on 8889, Cached MTB).launch @@ -1,32 +1,32 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/java/com.sap.sailing.server/SailingServer (No Proxy, Jetty on 8889, auto-replicate dev).launch b/java/com.sap.sailing.server/SailingServer (No Proxy, Jetty on 8889, auto-replicate dev).launch index 7327c33673a..ce754832c84 100644 --- a/java/com.sap.sailing.server/SailingServer (No Proxy, Jetty on 8889, auto-replicate dev).launch +++ b/java/com.sap.sailing.server/SailingServer (No Proxy, Jetty on 8889, auto-replicate dev).launch @@ -1,32 +1,32 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/java/com.sap.sailing.server/SailingServer (No Proxy, Jetty on 8889, auto-replicate).launch b/java/com.sap.sailing.server/SailingServer (No Proxy, Jetty on 8889, auto-replicate).launch index 3e59695678f..140ffe940f7 100644 --- a/java/com.sap.sailing.server/SailingServer (No Proxy, Jetty on 8889, auto-replicate).launch +++ b/java/com.sap.sailing.server/SailingServer (No Proxy, Jetty on 8889, auto-replicate).launch @@ -1,32 +1,32 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/java/com.sap.sailing.server/SailingServer (No Proxy, Jetty on 8890).launch b/java/com.sap.sailing.server/SailingServer (No Proxy, Jetty on 8890).launch index 4c27b93091f..ad8671fb860 100755 --- a/java/com.sap.sailing.server/SailingServer (No Proxy, Jetty on 8890).launch +++ b/java/com.sap.sailing.server/SailingServer (No Proxy, Jetty on 8890).launch @@ -1,32 +1,32 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/java/com.sap.sailing.server/SailingServer (No Proxy, Remote Debug SAP VM).launch b/java/com.sap.sailing.server/SailingServer (No Proxy, Remote Debug SAP VM).launch index 09a44db1439..4187f309ac1 100755 --- a/java/com.sap.sailing.server/SailingServer (No Proxy, Remote Debug SAP VM).launch +++ b/java/com.sap.sailing.server/SailingServer (No Proxy, Remote Debug SAP VM).launch @@ -1,31 +1,31 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/java/com.sap.sailing.server/SailingServer (No Proxy, winddbTest).launch b/java/com.sap.sailing.server/SailingServer (No Proxy, winddbTest).launch index a855c7db089..0b5043c7561 100755 --- a/java/com.sap.sailing.server/SailingServer (No Proxy, winddbTest).launch +++ b/java/com.sap.sailing.server/SailingServer (No Proxy, winddbTest).launch @@ -1,37 +1,37 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/java/com.sap.sailing.server/SailingServer (Proxy).launch b/java/com.sap.sailing.server/SailingServer (Proxy).launch index c74298fb3be..21dfc841aea 100755 --- a/java/com.sap.sailing.server/SailingServer (Proxy).launch +++ b/java/com.sap.sailing.server/SailingServer (Proxy).launch @@ -1,39 +1,39 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/java/com.sap.sailing.server/SailingServer (Proxy, Jetty on 8889).launch b/java/com.sap.sailing.server/SailingServer (Proxy, Jetty on 8889).launch index b19398528bb..e30859d3dbe 100755 --- a/java/com.sap.sailing.server/SailingServer (Proxy, Jetty on 8889).launch +++ b/java/com.sap.sailing.server/SailingServer (Proxy, Jetty on 8889).launch @@ -1,32 +1,32 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/java/com.sap.sailing.server/SailingServer (Proxy, Remote Debug SAP VM).launch b/java/com.sap.sailing.server/SailingServer (Proxy, Remote Debug SAP VM).launch index 57628771165..90b6f42c0f2 100755 --- a/java/com.sap.sailing.server/SailingServer (Proxy, Remote Debug SAP VM).launch +++ b/java/com.sap.sailing.server/SailingServer (Proxy, Remote Debug SAP VM).launch @@ -1,31 +1,31 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/java/com.sap.sailing.server/SailingServer (Proxy, SwissTiming Live Simulation).launch b/java/com.sap.sailing.server/SailingServer (Proxy, SwissTiming Live Simulation).launch index d9d2b3a236c..c8d7494d4d5 100755 --- a/java/com.sap.sailing.server/SailingServer (Proxy, SwissTiming Live Simulation).launch +++ b/java/com.sap.sailing.server/SailingServer (Proxy, SwissTiming Live Simulation).launch @@ -1,30 +1,30 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/java/com.sap.sailing.server/SailingServer (Proxy, winddbTest).launch b/java/com.sap.sailing.server/SailingServer (Proxy, winddbTest).launch index 4e8e768c965..c577be0479c 100755 --- a/java/com.sap.sailing.server/SailingServer (Proxy, winddbTest).launch +++ b/java/com.sap.sailing.server/SailingServer (Proxy, winddbTest).launch @@ -1,33 +1,33 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/java/com.sap.sse.gwt/META-INF/MANIFEST.MF b/java/com.sap.sse.gwt/META-INF/MANIFEST.MF index 380af12c155..bf414899be1 100644 --- a/java/com.sap.sse.gwt/META-INF/MANIFEST.MF +++ b/java/com.sap.sse.gwt/META-INF/MANIFEST.MF @@ -9,9 +9,13 @@ Require-Bundle: com.google.gwt.osgi;bundle-version="2.7.0", com.sap.sse.common, com.sap.sse.filestorage Bundle-ActivationPolicy: lazy -Import-Package: javax.servlet;version="2.6.0", - javax.servlet.http;version="2.6.0", +Import-Package: com.google.gwt.core.ext, + com.google.gwt.core.ext.linker, + com.google.gwt.core.ext.linker.impl, + javax.servlet;version="2.6.0", javax.servlet.descriptor;version="2.6.0", + javax.servlet.http;version="2.6.0", + org.apache.commons.io, org.json.simple, org.json.simple.parser, org.osgi.framework, @@ -31,6 +35,7 @@ Export-Package: com.google.gwt.user.client.rpc.core.java.util, com.sap.sse.gwt.client.dialog, com.sap.sse.gwt.client.event, com.sap.sse.gwt.client.filestorage, + com.sap.sse.gwt.client.linker, com.sap.sse.gwt.client.media, com.sap.sse.gwt.client.mutationobserver, com.sap.sse.gwt.client.mvp, diff --git a/java/com.sap.sse.gwt/src/com/sap/sse/gwt/client/linker/ManifestLinker.java b/java/com.sap.sse.gwt/src/com/sap/sse/gwt/client/linker/ManifestLinker.java new file mode 100644 index 00000000000..2e26ee6790c --- /dev/null +++ b/java/com.sap.sse.gwt/src/com/sap/sse/gwt/client/linker/ManifestLinker.java @@ -0,0 +1,135 @@ +package com.sap.sse.gwt.client.linker; + +import java.io.IOException; +import java.util.Arrays; +import java.util.Date; + +import org.apache.commons.io.IOUtils; + +import com.google.gwt.core.ext.LinkerContext; +import com.google.gwt.core.ext.TreeLogger; +import com.google.gwt.core.ext.UnableToCompleteException; +import com.google.gwt.core.ext.linker.AbstractLinker; +import com.google.gwt.core.ext.linker.Artifact; +import com.google.gwt.core.ext.linker.ArtifactSet; +import com.google.gwt.core.ext.linker.EmittedArtifact; +import com.google.gwt.core.ext.linker.LinkerOrder; +import com.google.gwt.core.ext.linker.impl.SelectionInformation; + +/** + * This class creates an application manifest file for HTML 5 Offline Application Caching in the + * output folder of your client side gwt compilation results.

+ * Follow those steps to use HTML 5 Offline Application Caching in your bundle: + *
    + *
  1. Add {@code manifest="YOURMODULENAME/appcache.manifest"} to the {@code } tag in your base html file.
  2. + *
  3. Subclass {@link ManifestLinker} and override the method {@link #staticCachedFiles()}.
  4. + *
  5. Define a mime type mapping for the manifest extension in your web.xml file. + *
    + * {@code 
    + * manifest
    + * text/cache-manifest
    + * 
    + * }
    + *
  6. + *
  7. Define the subclassed linker in your gwt.xml file and add the linker.
  8. + *
    + * {@code 
    + * 
    + * }
    + *
  9. Make sure to import the those packages into your MANIFEST.MF file.
  10. + * com.google.gwt.core.ext
    + * com.google.gwt.core.ext.linker
    + * com.google.gwt.core.ext.linker.impl + *
+ * + * @author Alexander Ries + * + */ +@LinkerOrder(LinkerOrder.Order.POST) +public class ManifestLinker extends AbstractLinker { + + private static final String MANIFEST = "appcache.manifest"; + private static final String MANIFESTTEMPLATE = "cache.manifest.template"; + + @Override + public String getDescription() { + return ManifestLinker.class.getName(); + } + + @Override + public ArtifactSet link(TreeLogger logger, LinkerContext context, ArtifactSet artifacts, boolean onePermutation) throws UnableToCompleteException { + ArtifactSet result = new ArtifactSet(artifacts); + if (onePermutation) { + return result; + } + if (result.find(SelectionInformation.class).isEmpty()) { + logger.log(TreeLogger.INFO, "Warning: Clobbering " + MANIFEST + " to allow debugging. " + "Recompile before deploying your app!"); + artifacts = null; + } else { + result.add(emitLandingPageCacheManifest(context, logger, artifacts)); + } + return result; + } + + private Artifact emitLandingPageCacheManifest(LinkerContext context, TreeLogger logger, ArtifactSet artifacts) throws UnableToCompleteException { + StringBuilder publicSourcesSb = new StringBuilder(); + StringBuilder staticResoucesSb = new StringBuilder(); + if (artifacts != null) { + for (@SuppressWarnings("rawtypes") + Artifact artifact : artifacts) { + if (artifact instanceof EmittedArtifact) { + EmittedArtifact ea = (EmittedArtifact) artifact; + String pathName = ea.getPartialPath(); + if (pathName.endsWith("symbolMap") || + pathName.endsWith(".xml.gz") || + pathName.endsWith("rpc.log") || + pathName.endsWith("gwt.rpc") || + pathName.endsWith("manifest.txt") || + pathName.startsWith("rpcPolicyManifest")) { + } else { + publicSourcesSb.append(pathName + "\n"); + } + } + } + String[] cacheExtraFiles = getCacheExtraFiles(); + for (int i = 0; i < cacheExtraFiles.length; i++) { + staticResoucesSb.append(cacheExtraFiles[i]); + staticResoucesSb.append("\n"); + } + } + String cacheManifestString = createCache(logger, context, publicSourcesSb, staticResoucesSb); + return emitString(logger, cacheManifestString, MANIFEST); + } + + protected String createCache(TreeLogger logger, LinkerContext context, StringBuilder publicSourcesSb, StringBuilder staticResoucesSb) throws UnableToCompleteException { + try { + String manifest = IOUtils.toString(getClass().getResourceAsStream(appCacheManifestTemplate())); + manifest = manifest.replace("$UNIQUEID$", (new Date()).getTime() + "." + Math.random()).toString(); + manifest = manifest.replace("$STATICAPPFILES$", staticResoucesSb.toString()); + manifest = manifest.replace("$GENAPPFILES$", publicSourcesSb.toString()); + return manifest; + } catch (IOException e) { + //logger.log(TreeLogger.ERROR, "Could not read cache manifest template.", e); + throw new UnableToCompleteException(); + } + } + + private String[] getCacheExtraFiles() { + String[] cacheExtraFiles = staticCachedFiles(); + return cacheExtraFiles == null ? new String[0] : Arrays.copyOf(cacheExtraFiles, cacheExtraFiles.length); + } + + /** + * Override this method to provide static files for caching. + * Include at least your root HTML and CSS file. + * Also include all files referenced in your root HTML file. + * See {@link DashboardManifestLinker} as an example. + * */ + protected String[] staticCachedFiles() { + return null; + } + + protected String appCacheManifestTemplate() { + return MANIFESTTEMPLATE; + } +} diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/activities/LoginActivity.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/activities/LoginActivity.java index 65310a6b18d..be64553c1f8 100755 --- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/activities/LoginActivity.java +++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/activities/LoginActivity.java @@ -1,5 +1,11 @@ package com.sap.sailing.racecommittee.app.ui.activities; +import java.io.FileNotFoundException; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.Collection; +import java.util.UUID; + import android.animation.Animator; import android.animation.AnimatorSet; import android.animation.ObjectAnimator; @@ -58,12 +64,6 @@ import com.sap.sailing.racecommittee.app.ui.fragments.lists.selection.PositionSe import com.sap.sailing.racecommittee.app.utils.StringHelper; import com.sap.sailing.racecommittee.app.utils.autoupdate.AutoUpdater; -import java.io.FileNotFoundException; -import java.io.Serializable; -import java.util.ArrayList; -import java.util.Collection; -import java.util.UUID; - public class LoginActivity extends BaseActivity implements EventSelectedListenerHost, CourseAreaSelectedListenerHost, PositionSelectedListenerHost, DialogListenerHost.DialogResultListener { @@ -421,6 +421,7 @@ public class LoginActivity extends BaseActivity getLoaderManager().restartLoader(0, null, configurationLoader).forceLoad(); } else { dismissProgressSpinner(); + slideUpBackdropDelayed(); } } diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/raceinfo/MoreFlagsFragment.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/raceinfo/MoreFlagsFragment.java index 4d258d37dd5..1a443453f72 100644 --- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/raceinfo/MoreFlagsFragment.java +++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/raceinfo/MoreFlagsFragment.java @@ -251,7 +251,7 @@ public class MoreFlagsFragment extends BaseFragment implements MoreFlagItemClick } if (result.hasError()) { - Toast.makeText(getActivity(), result.getMessageId(), Toast.LENGTH_LONG).show(); + Toast.makeText(getActivity(), result.getMessage(getActivity()), Toast.LENGTH_LONG).show(); } } }