Merge remote-tracking branch 'ExternalGit/master' into raceboard-simulation

This commit is contained in:
Christopher Ronnewinkel (D036654) committed 2015-05-01 10:02:27 +02:00
commit 109f948388
669 files changed
+31011 -19356

No files matched your search

@@ -77,4 +77,62 @@
height: 22.5pt;
z-index: 1;
}
.wrongOrientationNotification {
position: absolute !important;
top: 50%;
right: 50%;
background-color: white;
z-index: 2;
}
.wrongOrientationNotification_shown {
width: 200px;
height: 200px;
margin-right: -100px;
margin-top: -100px;
border-radius: 100px;
-webkit-transition: all 700ms cubic-bezier(0.480, 0, 0.000, 1);
/* older webkit */
-webkit-transition: all 700ms cubic-bezier(0.480, -0.035, 0.000, 1.250);
-moz-transition: all 700ms cubic-bezier(0.480, -0.035, 0.000, 1.250);
-o-transition: all 700ms cubic-bezier(0.480, -0.035, 0.000, 1.250);
transition: all 700ms cubic-bezier(0.480, -0.035, 0.000, 1.250);
opacity: 1.0;
}
.wrongOrientationNotification_hidden {
width: 0px;
height: 0px;
marin-right: 0px;
margin-top: 0px;
border-radius: 0px;
overflow: hidden;
-webkit-transition: all 300ms;
/* older webkit */
-webkit-transition: all 300ms;
-moz-transition: all 300ms;
-o-transition: all 300ms;
transition: all 300ms;
opacity: 0.0;
}
.wrongOrientationNotification_logo {
max-width: 40%;
max-height: 40%;
margin: 30%;
margin-top: 23%
}
.wrongOrientationNotification_text {
position: absolute;
width: 100%;
height: 14px;
top: 76%;
line-height: 10px;
text-align: center;
font-weight: bold;
font-size: 13px;
color: grey;
font-family: "Arial";
}
@@ -0,0 +1,47 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<launchConfiguration type="com.google.gdt.eclipse.suite.webapp">
<booleanAttribute key="com.google.gdt.eclipse.core.RUN_SERVER" value="false"/>
<stringAttribute key="com.google.gdt.eclipse.suiteMainTypeProcessor.PREVIOUSLY_SET_MAIN_TYPE_NAME" value="com.google.gwt.dev.GWTShell"/>
<booleanAttribute key="com.google.gdt.eclipse.suiteWarArgumentProcessor.IS_WAR_FROM_PROJECT_PROPERTIES" value="false"/>
<stringAttribute key="com.google.gwt.eclipse.core.CODE_SERVER_PORT" value="9998"/>
<booleanAttribute key="com.google.gwt.eclipse.core.CODE_SERVER_PORT_AUTO" value="true"/>
<listAttribute key="com.google.gwt.eclipse.core.ENTRY_POINT_MODULES">
<listEntry value="com.sap.sailing.dashboards.gwt.RibDashboard"/>
</listAttribute>
<stringAttribute key="com.google.gwt.eclipse.core.URL" value="/dashboards/RibDashboard.html"/>
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
<listEntry value="/com.sap.sailing.dashboards.gwt"/>
</listAttribute>
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
<listEntry value="4"/>
</listAttribute>
<listAttribute key="org.eclipse.debug.ui.favoriteGroups">
<listEntry value="org.eclipse.debug.ui.launchGroup.debug"/>
<listEntry value="org.eclipse.debug.ui.launchGroup.run"/>
</listAttribute>
<booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_START_ON_FIRST_THREAD" value="true"/>
<listAttribute key="org.eclipse.jdt.launching.CLASSPATH">
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;runtimeClasspathEntry containerPath=&quot;org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6&quot; path=&quot;1&quot; type=&quot;4&quot;/&gt;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sailing.gwt.ui/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sailing.gwt.ui/src/main/java&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sailing.dashboards.gwt/src/main/java&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sailing.dashboards.gwt/src/main/resources&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sailing.domain/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sailing.server/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sse.gwt/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sse.common/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;runtimeClasspathEntry id=&quot;org.eclipse.jdt.launching.classpathentry.defaultClasspath&quot;&gt;&#10;&lt;memento exportedEntriesOnly=&quot;false&quot; project=&quot;com.sap.sailing.dashboards.gwt&quot;/&gt;&#10;&lt;/runtimeClasspathEntry&gt;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.google.gwt.osgi/lib/gwt-servlet.jar&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.google.gwt.osgi/lib/gwt-user.jar&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sailing.domain.common/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/org.moxieapps.gwt.highcharts/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sse.gwt.adminconsole/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#10;"/>
</listAttribute>
<stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="com.google.gwt.eclipse.core.moduleClasspathProvider"/>
<booleanAttribute key="org.eclipse.jdt.launching.DEFAULT_CLASSPATH" value="false"/>
<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="com.google.gwt.dev.DevMode"/>
<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-nosuperDevMode -incremental -war &quot;${project_loc:com.sap.sailing.dashboards.gwt}&quot; -startupUrl /dashboards/RibDashboard.html -noserver -remoteUI &quot;${gwt_remote_ui_server_port}:${unique_id}&quot; -logLevel INFO -codeServerPort auto com.sap.sailing.dashboards.gwt.RibDashboard"/>
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="com.sap.sailing.dashboards.gwt"/>
<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-XstartOnFirstThread -Xmx2048m"/>
</launchConfiguration>
@@ -4,6 +4,20 @@
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<servlet>
<servlet-name>default</servlet-name>
<servlet-class>org.eclipse.jetty.servlet.DefaultServlet
</servlet-class>
<init-param>
<param-name>dirAllowed</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>useFileMappedBuffer</param-name>
<param-value>false</param-value>
</init-param>
</servlet>
<servlet>
<display-name>Rib Dashboard Service</display-name>
<servlet-name>RibDashboardService</servlet-name>
@@ -8,6 +8,8 @@ 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.dataretriever.RibDashboardDataRetriever;
import com.sap.sailing.dashboards.gwt.client.dataretriever.WindBotDataRetriever;
import com.sap.sailing.gwt.ui.client.SailingService;
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
import com.sap.sailing.gwt.ui.client.StringMessages;
@@ -61,6 +63,6 @@ public class RibDashboardEntryPoint extends AbstractEntryPoint<StringMessages> {
@Override
protected StringMessages createStringMessages() {
return GWT.create(StringMessages.class);
return StringMessages.INSTANCE;
}
}
@@ -41,4 +41,7 @@ public interface RibDashboardImageResources extends ClientBundle {
@Source("images/settings.png")
ImageResource settings();
@Source("images/rotatedevice.png")
ImageResource rotatedevice();
}
@@ -17,6 +17,12 @@ import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.LayoutPanel;
import com.google.gwt.user.client.ui.Widget;
import com.googlecode.mgwt.ui.client.widget.carousel.Carousel;
import com.sap.sailing.dashboards.gwt.client.dataretriever.NumberOfWindBotsChangeListener;
import com.sap.sailing.dashboards.gwt.client.dataretriever.RibDashboardDataRetriever;
import com.sap.sailing.dashboards.gwt.client.dataretriever.RibDashboardDataRetrieverListener;
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.notifications.WrongDeviceOrientationNotification;
import com.sap.sailing.dashboards.gwt.client.startanalysis.StartlineAnalysisComponent;
import com.sap.sailing.dashboards.gwt.client.startlineadvantage.StartLineAdvantageComponent;
import com.sap.sailing.dashboards.gwt.client.windchart.WindBotComponent;
@@ -89,9 +95,10 @@ public class RibDashboardPanel extends Composite implements RibDashboardDataRetr
initWidget(uiBinder.createAndBindUi(this));
initLogos();
windcharthint.getElement().setInnerText(stringConstants.dashboardWindChartHint());
windloadinghintleft.setInnerText(stringConstants.dashboardWindBotLoading());
windloadinghintright.setInnerText(stringConstants.dashboardWindBotLoading());
loadAndDisplayEventLogo(sailingServiceAsync);
windloadinghintleft.setInnerHTML(stringConstants.dashboardWindBotLoadingText()+"<br>"+stringConstants.dashboardWindBotLoadingMessage());
windloadinghintright.setInnerHTML(stringConstants.dashboardWindBotLoadingText()+"<br>"+stringConstants.dashboardWindBotLoadingMessage());
loadAndAddEventLogo(sailingServiceAsync);
initAndAddWrongOrientationNotification();
}
private void initLogos() {
@@ -101,7 +108,7 @@ public class RibDashboardPanel extends Composite implements RibDashboardDataRetr
Document.get().getBody().appendChild(logo.getElement());
}
private void loadAndDisplayEventLogo(SailingServiceAsync sailingServiceAsync){
private void loadAndAddEventLogo(SailingServiceAsync sailingServiceAsync){
String eventId = Window.Location.getParameter(EVENT_ID_PARAMETER);
if (eventId != null) {
EventLogo eventLogo = EventLogo.getEventLogoFromEventId(sailingServiceAsync, eventId);
@@ -110,6 +117,11 @@ public class RibDashboardPanel extends Composite implements RibDashboardDataRetr
}
}
}
private void initAndAddWrongOrientationNotification(){
WrongDeviceOrientationNotification wrongDeviceOrientationNotification = new WrongDeviceOrientationNotification();
Document.get().getBody().appendChild(wrongDeviceOrientationNotification.getElement());
}
private void initWindBotComponents(List<String> windBotIDs,
WindBotDataRetrieverProvider windBotDataRetrieverProvider) {
@@ -1,4 +1,4 @@
package com.sap.sailing.dashboards.gwt.client;
package com.sap.sailing.dashboards.gwt.client.dataretriever;
import java.util.List;
@@ -1,4 +1,4 @@
package com.sap.sailing.dashboards.gwt.client;
package com.sap.sailing.dashboards.gwt.client.dataretriever;
import java.util.ArrayList;
import java.util.Collections;
@@ -7,6 +7,7 @@ import java.util.List;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.sap.sailing.dashboards.gwt.client.RibDashboardServiceAsync;
import com.sap.sailing.dashboards.gwt.client.actions.GetRibDashboardRaceInfoAction;
import com.sap.sailing.dashboards.gwt.shared.dto.RibDashboardRaceInfoDTO;
import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
@@ -1,7 +1,7 @@
/**
*
*/
package com.sap.sailing.dashboards.gwt.client;
package com.sap.sailing.dashboards.gwt.client.dataretriever;
import com.sap.sailing.dashboards.gwt.shared.dto.RibDashboardRaceInfoDTO;
@@ -1,8 +1,10 @@
package com.sap.sailing.dashboards.gwt.client;
package com.sap.sailing.dashboards.gwt.client.dataretriever;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
@@ -24,9 +26,13 @@ public class WindBotDataRetriever implements TimeListener, RaceSelectionChangeLi
private List<WindBotDataRetrieverListener> windBotDataRetrieverListeners;
private List<String> windBotIDsInLiveRace;
private static final int WIND_CHART_RESOLUTION_IN_MILLISECONDS = 5000;
public static final String LODA_WIND_CHART_DATA_CATEGORY = "loadWindChartData";
private final Set<String> windSourceTypeNames;
private final int WIND_CHART_RESOLUTION_IN_MILLISECONDS = 5000;
private final int ONE_HOUR_IN_MILLISECONDS = 1000*60*60;
private final String LODA_WIND_CHART_DATA_CATEGORY = "loadWindChartData";
private boolean didInitialLoading;
public WindBotDataRetriever(SailingServiceAsync sailingService) {
this.sailingService = sailingService;
@@ -36,15 +42,17 @@ public class WindBotDataRetriever implements TimeListener, RaceSelectionChangeLi
numberOfWindBotsChangeListeners = new ArrayList<NumberOfWindBotsChangeListener>();
windBotDataRetrieverListeners = new ArrayList<WindBotDataRetrieverListener>();
windBotIDsInLiveRace = new ArrayList<String>();
windSourceTypeNames = new HashSet<>();
windSourceTypeNames.add(WindSourceType.EXPEDITION.name());
}
private void loadWindBotData(Date from, Date to, RegattaAndRaceIdentifier selectedRaceIdentifier) {
if(!didInitialLoading){
didInitialLoading = true;
from = new Date(from.getTime()-1000*60*15);
from = new Date(from.getTime()-ONE_HOUR_IN_MILLISECONDS);
}
GetWindInfoAction getWindInfoAction = new GetWindInfoAction(sailingService, selectedRaceIdentifier, from, to,
WIND_CHART_RESOLUTION_IN_MILLISECONDS, null, /*
WIND_CHART_RESOLUTION_IN_MILLISECONDS, windSourceTypeNames, /*
* onlyUpToNewestEvent==true because we don't want to
* overshoot the evidence so far
*/true);
@@ -1,4 +1,4 @@
package com.sap.sailing.dashboards.gwt.client;
package com.sap.sailing.dashboards.gwt.client.dataretriever;
import com.sap.sailing.gwt.ui.shared.WindInfoForRaceDTO;
@@ -1,4 +1,4 @@
package com.sap.sailing.dashboards.gwt.client;
package com.sap.sailing.dashboards.gwt.client.dataretriever;
import com.sap.sailing.gwt.ui.shared.WindInfoForRaceDTO;
@@ -3,6 +3,8 @@ package com.sap.sailing.dashboards.gwt.client.device;
import java.util.ArrayList;
import java.util.List;
import com.sap.sse.common.Util.Pair;
/**
*
* @author Alexander Ries (D062114)
@@ -62,8 +64,38 @@ public class Orientation {
}
public void notifiyListenerAboutHeadingChange(double orientationHeading) {
Pair<OrientationType, Double> orienationPair = new Pair<OrientationType, Double>(getOrientationTypeForHeadingInSafari(orientationHeading), new Double(orientationHeading));
for (OrientationListener orientationListener : orientationListeners) {
orientationListener.orientationChanged(orientationHeading);
orientationListener.orientationChanged(orienationPair);
}
}
private OrientationType getOrientationTypeForHeadingInSafari(double heading){
OrientationType orientationType = null;
if (heading > -45 && heading <= 0 || heading > 0 && heading < 45){
orientationType = OrientationType.PORTRAIT_UP;
}else if (heading > 45 && heading < 135){
orientationType = OrientationType.LANDSCAPE_RIGHT;
}else if (heading > 135 && heading <= 180 || heading >=-180 && heading < -135){
orientationType = OrientationType.PORTRAIT_DOWN;
}else if (heading > -135 && heading < -45){
orientationType = OrientationType.LANDSCAPE_LEFT;
}
return orientationType;
}
private OrientationType getOrientationTypeForHeadingInChrome(double heading){
OrientationType orientationType = null;
if (heading > -45 && heading <= 0 || heading > 0 && heading < 45){
orientationType = OrientationType.LANDSCAPE_RIGHT;
}else if (heading > 45 && heading < 135){
orientationType = OrientationType.PORTRAIT_DOWN;
}else if (heading > 135 && heading <= 180 || heading >=-180 && heading < -135){
orientationType = OrientationType.LANDSCAPE_LEFT;
}else if (heading > -135 && heading < -45){
orientationType = OrientationType.PORTRAIT_UP;
}
return orientationType;
}
}
@@ -1,6 +1,11 @@
package com.sap.sailing.dashboards.gwt.client.device;
import com.sap.sse.common.Util.Pair;
public interface OrientationListener {
public void orientationChanged(double orientationHeading);
/**
* Returns a Pair containing the {@link OrientationType} and the exact angle.
* */
public void orientationChanged(Pair <OrientationType, Double> orientation);
}
@@ -0,0 +1,6 @@
package com.sap.sailing.dashboards.gwt.client.device;
public enum OrientationType {
PORTRAIT_UP, PORTRAIT_DOWN, LANDSCAPE_RIGHT, LANDSCAPE_LEFT;
}
@@ -1,4 +1,4 @@
package com.sap.sailing.dashboards.gwt.client;
package com.sap.sailing.dashboards.gwt.client.eventlogo;
import java.util.UUID;
@@ -0,0 +1,9 @@
package com.sap.sailing.dashboards.gwt.client.i18n;
import com.google.gwt.core.client.GWT;
public interface StringMessages extends com.sap.sailing.gwt.ui.client.StringMessages {
public static final StringMessages INSTANCE = GWT.create(StringMessages.class);
String sampleText();
}
@@ -1,4 +1,4 @@
package com.sap.sailing.dashboards.gwt.client.bottomnotification;
package com.sap.sailing.dashboards.gwt.client.notifications;
import java.util.ArrayList;
import java.util.List;
@@ -1,4 +1,4 @@
package com.sap.sailing.dashboards.gwt.client.bottomnotification;
package com.sap.sailing.dashboards.gwt.client.notifications;
public interface BottomNotificationClickListener {
@@ -1,4 +1,4 @@
package com.sap.sailing.dashboards.gwt.client.bottomnotification;
package com.sap.sailing.dashboards.gwt.client.notifications;
import com.sap.sailing.gwt.ui.client.StringMessages;
@@ -0,0 +1,67 @@
package com.sap.sailing.dashboards.gwt.client.notifications;
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.RibDashboardImageResources;
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;
public WrongDeviceOrientationNotification() {
super();
this.addStyleName("wrongOrientationNotification");
this.addStyleName("wrongOrientationNotification_hidden");
Image rotateDeviceIcon = new Image();
rotateDeviceIcon.setResource(RibDashboardImageResources.INSTANCE.rotatedevice());
rotateDeviceIcon.getElement().addClassName("wrongOrientationNotification_logo");
add(rotateDeviceIcon);
rotateDeviceLabel = new Label();
rotateDeviceLabel.getElement().addClassName("wrongOrientationNotification_text");
rotateDeviceLabel.setText("Rotate Device");
add(rotateDeviceLabel);
Orientation.getInstance().addListener(this);
Orientation.getInstance().triggerDeviceOrientationRead();
}
public void show() {
this.removeStyleName("wrongOrientationNotification_hidden");
this.addStyleName("wrongOrientationNotification_shown");
BlurEffect.getInstance().addToView(RootLayoutPanel.get());
}
public void hide() {
this.removeStyleName("wrongOrientationNotification_shown");
this.addStyleName("wrongOrientationNotification_hidden");
BlurEffect.getInstance().removeFromView(RootLayoutPanel.get());
}
@Override
public void orientationChanged(Pair<OrientationType, Double> orientation) {
OrientationType orientationType = orientation.getA();
switch (orientationType) {
case PORTRAIT_UP:
show();
break;
case PORTRAIT_DOWN:
show();
break;
case LANDSCAPE_RIGHT:
hide();
break;
case LANDSCAPE_LEFT:
hide();
break;
}
}
}
@@ -75,13 +75,3 @@
transition: margin-top ease-in-out 500ms;
margin-top: -600pt;
}
.blurred {
-webkit-filter: blur(10pt) brightness(0.92);
filter: blur(10pt) brightness(0.92);
}
.not_blurred {
-webkit-filter: blur(0pt) brightness(1);
filter: blur(0pt) brightness(1);
}
@@ -17,6 +17,7 @@ import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.RootLayoutPanel;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.Widget;
import com.sap.sailing.dashboards.gwt.client.visualeffects.BlurEffect;
import com.sap.sailing.domain.common.dto.CompetitorDTO;
public class CompetitorSelectionPopup extends Composite implements HasWidgets, CompetitorTableRowSelectionListener {
@@ -27,10 +28,6 @@ public class CompetitorSelectionPopup extends Composite implements HasWidgets, C
String popuphide();
String buttonshow();
String blurred();
String not_blurred();
}
@UiField
@@ -68,16 +65,14 @@ public class CompetitorSelectionPopup extends Composite implements HasWidgets, C
this.button.setText("OK");
this.getElement().addClassName(style.popupshow());
this.getElement().removeClassName(style.popuphide());
RootLayoutPanel.get().addStyleName(style.blurred());
RootLayoutPanel.get().removeStyleName(style.not_blurred());
BlurEffect.getInstance().addToView(RootLayoutPanel.get());
isVisible = true;
}
public void hide() {
this.getElement().addClassName(style.popuphide());
this.getElement().removeClassName(style.popupshow());
RootLayoutPanel.get().addStyleName(style.not_blurred());
RootLayoutPanel.get().removeStyleName(style.blurred());
BlurEffect.getInstance().removeFromView(RootLayoutPanel.get());
RootPanel.get().remove(this);
isVisible = false;
}
@@ -10,11 +10,8 @@
}
.settings_button_image {
position: absolute;
height: 23.5pt;
width: 23.5pt;
right: 10pt;
top: 17.5pt;
}
.settings_indication_label {
@@ -5,8 +5,9 @@
type='com.sap.sailing.dashboards.gwt.client.popups.competitorselection.SettingsButtonWithSelectionIndicationLabel.SettingsButtonWithSelectionIndicationLabelStyle'
src='SettingsButtonWithSelectionIndicationLabel.css'></ui:style>
<g:HTMLPanel>
<g:FocusPanel ui:field="settingsButton" styleName="{style.settings_button}"></g:FocusPanel>
<g:Image ui:field="settingsButtonImage" styleName="{style.settings_button_image}"></g:Image>
<g:FocusPanel ui:field="settingsButton" styleName="{style.settings_button}">
<g:Image ui:field="settingsButtonImage" styleName="{style.settings_button_image}"></g:Image>
</g:FocusPanel>
<g:Label ui:field="settingsIndicationLabel" styleName="{style.settings_indication_label}"></g:Label>
</g:HTMLPanel>
</ui:UiBinder>
@@ -24,9 +24,9 @@ import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.Widget;
import com.sap.sailing.dashboards.gwt.client.RibDashboardImageResources;
import com.sap.sailing.dashboards.gwt.client.RibDashboardServiceAsync;
import com.sap.sailing.dashboards.gwt.client.bottomnotification.BottomNotification;
import com.sap.sailing.dashboards.gwt.client.bottomnotification.BottomNotificationClickListener;
import com.sap.sailing.dashboards.gwt.client.bottomnotification.BottomNotificationType;
import com.sap.sailing.dashboards.gwt.client.notifications.BottomNotification;
import com.sap.sailing.dashboards.gwt.client.notifications.BottomNotificationClickListener;
import com.sap.sailing.dashboards.gwt.client.notifications.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;
@@ -1,8 +1,8 @@
package com.sap.sailing.dashboards.gwt.client.startlineadvantage;
import com.google.gwt.i18n.client.NumberFormat;
import com.sap.sailing.dashboards.gwt.client.RibDashboardDataRetriever;
import com.sap.sailing.dashboards.gwt.client.RibDashboardDataRetrieverListener;
import com.sap.sailing.dashboards.gwt.client.dataretriever.RibDashboardDataRetriever;
import com.sap.sailing.dashboards.gwt.client.dataretriever.RibDashboardDataRetrieverListener;
import com.sap.sailing.dashboards.gwt.client.startanalysis.StartlineAdvantageType;
import com.sap.sailing.dashboards.gwt.shared.dto.RibDashboardRaceInfoDTO;
import com.sap.sailing.gwt.ui.client.StringMessages;
@@ -0,0 +1,11 @@
@CHARSET "UTF-8";
.blurred {
-webkit-filter: blur(10pt) brightness(0.92);
filter: blur(10pt) brightness(0.92);
}
.not_blurred {
-webkit-filter: blur(0pt) brightness(1);
filter: blur(0pt) brightness(1);
}
@@ -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 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());
}
}
@@ -0,0 +1,13 @@
package com.sap.sailing.dashboards.gwt.client.visualeffects;
import com.google.gwt.resources.client.CssResource;
import com.google.gwt.resources.client.CssResource.Shared;
@Shared
public interface BlurEffectStyle extends CssResource{
public String blurred();
public String not_blurred();
}
@@ -0,0 +1,9 @@
package com.sap.sailing.dashboards.gwt.client.visualeffects;
import com.google.gwt.resources.client.ClientBundle;
public interface VisualEffectsResources extends ClientBundle{
@Source("BlurEffect.css")
BlurEffectStyle blurEffectStyle();
}
@@ -26,6 +26,8 @@ import org.moxieapps.gwt.highcharts.client.plotOptions.BarPlotOptions;
import org.moxieapps.gwt.highcharts.client.plotOptions.Marker;
import com.google.gwt.core.client.GWT;
import com.google.gwt.core.client.Scheduler;
import com.google.gwt.core.client.Scheduler.ScheduledCommand;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.resources.client.CssResource;
import com.google.gwt.uibinder.client.UiBinder;
@@ -90,8 +92,8 @@ public class VerticalWindChart extends Composite implements HasWidgets {
initWidget(uiBinder.createAndBindUi(this));
}
public @UiConstructor VerticalWindChart(String positiveFillColor, String negativeFillColor) {
initVerticalWindChartWithColors(positiveFillColor, negativeFillColor);
public @UiConstructor VerticalWindChart(String positiveFillColorAsHex, String negativeFillColorAsHex) {
initVerticalWindChartWithColors(positiveFillColorAsHex, negativeFillColorAsHex);
initWidget(uiBinder.createAndBindUi(this));
}
@@ -175,18 +177,24 @@ public class VerticalWindChart extends Composite implements HasWidgets {
* {@link #setXAxisExtremesForSeriesPointRangeIsSmallerThanChartDisplayIntervall()} and
* {@link #setXAxisExtremesForSeriesPointRangeIsBiggerThanChartDisplayIntervall()}.
* */
public void addPointsToSeriesWithAverage(Point[] points, double average) {
if (verticalWindChartSeries == null) {
initVerticalWindChartSeries();
verticalWindChartSeries.setPoints(points, true);
} else {
for (Point point : points) {
verticalWindChartSeries.addPoint(point, true, false, false);
public void addPointsToSeriesWithAverage(final Point[] points, final double average) {
Scheduler.get().scheduleDeferred(new ScheduledCommand() {
@Override
public void execute() {
if (verticalWindChartSeries == null) {
initVerticalWindChartSeries();
verticalWindChartSeries.setPoints(points, true);
} else {
for (Point point : points) {
verticalWindChartSeries.addPoint(point, true, false, false);
}
}
verticalWindChartSeries.updateThreshold("" + average);
adaptVerticalWindChartExtemes();
verticalWindChart.setSizeToMatchContainer();
}
}
verticalWindChartSeries.updateThreshold("" + average);
adaptVerticalWindChartExtemes();
verticalWindChart.setSizeToMatchContainer();
});
}
/**
@@ -194,23 +202,7 @@ public class VerticalWindChart extends Composite implements HasWidgets {
* interval or not. So there are two cases where the extreme points of the x-axis get calculated differently.
* */
private void adaptVerticalWindChartExtemes() {
if (getVerticalWindChartSeriesPointsTimeRangeInMilliseconds() < chartIntervallinMinutes * 60 * 1000) {
setXAxisExtremesForSeriesPointRangeIsSmallerThanChartDisplayIntervall();
} else {
setXAxisExtremesForSeriesPointRangeIsBiggerThanChartDisplayIntervall();
}
}
/**
* When the time range of the series points is smaller than the current selected display interval represented by
* either LARGE_DISPLAY_INTERVALL_IN_MINUTES or SMALL_DISPLAY_INTERVALL_IN_MINUTES the x-axis extremes min value is
* the the first points time and the maximum value the min value plus the selected display interval. The chart gets
* other extremes, because the values fit easily into the selected display interval.
* */
private void setXAxisExtremesForSeriesPointRangeIsSmallerThanChartDisplayIntervall() {
long minimumExtremeValueInMillis = getFirstPointOfVerticalWindChartSeries().getX().longValue();
long maximumExtremeValueInMillis = minimumExtremeValueInMillis + chartIntervallinMinutes * 60 * 1000;
verticalWindChart.getXAxis().setExtremes(minimumExtremeValueInMillis, maximumExtremeValueInMillis, true, true);
}
/**
@@ -220,29 +212,11 @@ public class VerticalWindChart extends Composite implements HasWidgets {
* gets other extremes, because the values do not fit anymore into the selected display interval.
* */
private void setXAxisExtremesForSeriesPointRangeIsBiggerThanChartDisplayIntervall() {
long maximumExtremeValueInMillis = getLastPointOfVerticalWindChartSeries().getX().longValue();
long minimumExtremeValueInMillis = maximumExtremeValueInMillis - chartIntervallinMinutes * 60 * 1000;
verticalWindChart.getXAxis().setExtremes(minimumExtremeValueInMillis, maximumExtremeValueInMillis, true, true);
long maximumExtremeValueInMillis = getLastPointOfVerticalWindChartSeries().getX().longValue();
long minimumExtremeValueInMillis = maximumExtremeValueInMillis - chartIntervallinMinutes * 60 * 1000;
verticalWindChart.getXAxis().setExtremes(minimumExtremeValueInMillis, maximumExtremeValueInMillis, true, true);
}
private long getVerticalWindChartSeriesPointsTimeRangeInMilliseconds() {
Point[] seriesPoints = verticalWindChartSeries.getPoints();
long pointRangeInMilliseconds;
int seriesPointsLenght = seriesPoints.length;
if (seriesPointsLenght > 0 && seriesPoints[0].getX() != null) {
long earliesPointAsTimestamp = seriesPoints[0].getX().longValue();
long latestPointAsTimestamp;
if (seriesPointsLenght > 1) {
latestPointAsTimestamp = seriesPoints[seriesPointsLenght - 1].getX().longValue();
} else {
latestPointAsTimestamp = earliesPointAsTimestamp;
}
pointRangeInMilliseconds = latestPointAsTimestamp - earliesPointAsTimestamp;
} else {
pointRangeInMilliseconds = 0;
}
return pointRangeInMilliseconds;
}
private Point getLastPointOfVerticalWindChartSeries() {
Point lastPointOfVerticalWindChartSeries = null;
@@ -256,16 +230,6 @@ public class VerticalWindChart extends Composite implements HasWidgets {
return lastPointOfVerticalWindChartSeries;
}
private Point getFirstPointOfVerticalWindChartSeries() {
Point firstPointOfVerticalWindChartSeries = null;
Point[] seriesPoints = verticalWindChartSeries.getPoints();
int seriesPointsLenght = seriesPoints.length;
if (seriesPointsLenght > 0) {
firstPointOfVerticalWindChartSeries = seriesPoints[0];
}
return firstPointOfVerticalWindChartSeries;
}
public void addVerticalWindChartClickListener(VerticalWindChartClickListener verticalWindChartClickListener) {
verticalWindChartClickListeners.add(verticalWindChartClickListener);
}
@@ -291,8 +255,13 @@ public class VerticalWindChart extends Composite implements HasWidgets {
} else {
chartIntervallinMinutes = SMALL_DISPLAY_INTERVALL_IN_MINUTES;
}
adaptVerticalWindChartExtemes();
notifyVerticalWindChartClickListeners(chartIntervallinMinutes);
Scheduler.get().scheduleFinally(new ScheduledCommand() {
@Override
public void execute() {
adaptVerticalWindChartExtemes();
notifyVerticalWindChartClickListeners(chartIntervallinMinutes);
}});
}
@Override
@@ -15,8 +15,8 @@ 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.RibDashboardDataRetrieverListener;
import com.sap.sailing.dashboards.gwt.client.WindBotDataRetrieverListener;
import com.sap.sailing.dashboards.gwt.client.dataretriever.RibDashboardDataRetrieverListener;
import com.sap.sailing.dashboards.gwt.client.dataretriever.WindBotDataRetrieverListener;
import com.sap.sailing.dashboards.gwt.client.startlineadvantage.LiveAverageComponent;
import com.sap.sailing.dashboards.gwt.client.windchart.compass.LocationPointerCompass;
import com.sap.sailing.dashboards.gwt.shared.MovingAverage;
@@ -85,14 +85,14 @@ public class WindBotComponent extends Composite implements HasWidgets, WindBotDa
* One of two {@link VerticalWindChart}s that shows the wind fixes speed measured by the wind bot in a chart
* vertically.
* */
@UiField
@UiField(provided = true)
public VerticalWindChart trueWindSpeedVerticalWindChart;
/**
* One of two {@link VerticalWindChart}s that shows the wind fixes direction measured by the wind bot in a chart
* vertically.
* */
@UiField
@UiField(provided = true)
public VerticalWindChart trueWindDirectionVerticalWindChart;
/**
@@ -104,6 +104,7 @@ public class WindBotComponent extends Composite implements HasWidgets, WindBotDa
private String windBotId;
private StringMessages stringConstants;
private final static String UNIT_WIND_DIRECTION = "°";
public WindBotComponent(String windBotId) {
this.windBotId = windBotId;
@@ -119,7 +120,9 @@ public class WindBotComponent extends Composite implements HasWidgets, WindBotDa
movingAverageSpeed = new MovingAverage(500);
movingAverageDirection = new MovingAverage(500);
trueWindSpeedLiveAverageComponent = new LiveAverageComponent(stringConstants.dashboardTrueWindSpeed(), stringConstants.dashboardTrueWindSpeedUnit());
trueWindDirectionLiveAverageComponent = new LiveAverageComponent(stringConstants.dashboardTrueWindDirection(), stringConstants.dashboardTrueWindDirectionUnit());
trueWindDirectionLiveAverageComponent = new LiveAverageComponent(stringConstants.dashboardTrueWindDirection(), UNIT_WIND_DIRECTION);
trueWindSpeedVerticalWindChart = new VerticalWindChart("#008FFF", "#6ADBFF");
trueWindDirectionVerticalWindChart = new VerticalWindChart("#008FFF", "#6ADBFF");
initWidget(uiBinder.createAndBindUi(this));
windBotNamePanel.getElement().setInnerText(stringConstants.dashboardWindBot()+" "+ windBotId);
trueWindSpeedVerticalWindChart.addVerticalWindChartClickListener(trueWindSpeedLiveAverageComponent);
@@ -197,16 +200,16 @@ public class WindBotComponent extends Composite implements HasWidgets, WindBotDa
Point[] points = new Point[windFixes.size()];
int counter = 0;
if (windtype.equals(WindType.DIRECTION)) {
Point previouspoint = new Point(windFixes.get(0).requestTimepoint, windFixes.get(0).trueWindBearingDeg);
Point previouspoint = new Point(windFixes.get(0).requestTimepoint, windFixes.get(0).trueWindFromDeg);
for (WindDTO windDTO : windFixes) {
double nextSinusValue = 0;
if (inSimulationMode == true) {
nextSinusValue = directionSinWave.getNexNumber();
}
points[counter] = new Point(windDTO.requestTimepoint, windDTO.trueWindBearingDeg + nextSinusValue);
points[counter] = new Point(windDTO.requestTimepoint, windDTO.trueWindFromDeg + nextSinusValue);
points[counter] = adaptWindDirectionPointToStayCloseToLastPoint(previouspoint, points[counter]);
previouspoint = points[counter];
movingAverageDirection.add(windDTO.trueWindBearingDeg + nextSinusValue);
movingAverageDirection.add(windDTO.trueWindFromDeg + nextSinusValue);
counter++;
}
} else if (windtype.equals(WindType.SPEED)) {
@@ -23,14 +23,12 @@
<g:HTMLPanel
styleName="{style.wind_bot_component_windchart_container} {style.wind_bot_component_left}">
<windchart:VerticalWindChart ui:field="trueWindSpeedVerticalWindChart"
styleName="{style.wind_bot_component_windchart}" positiveFillColor="#008FFF"
negativeFillColor="#6ADBFF"></windchart:VerticalWindChart>
styleName="{style.wind_bot_component_windchart}"></windchart:VerticalWindChart>
</g:HTMLPanel>
<g:HTMLPanel
styleName="{style.wind_bot_component_windchart_container} {style.wind_bot_component_right}">
<windchart:VerticalWindChart ui:field="trueWindDirectionVerticalWindChart"
styleName="{style.wind_bot_component_windchart}" positiveFillColor="#008FFF"
negativeFillColor="#6ADBFF"></windchart:VerticalWindChart>
styleName="{style.wind_bot_component_windchart}"></windchart:VerticalWindChart>
</g:HTMLPanel>
<g:HTMLPanel styleName="{style.wind_bot_component_compass_container}">
<compass:LocationPointerCompass
@@ -9,8 +9,10 @@ import com.sap.sailing.dashboards.gwt.client.device.Location;
import com.sap.sailing.dashboards.gwt.client.device.LocationListener;
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.domain.common.Position;
import com.sap.sailing.domain.common.impl.DegreePosition;
import com.sap.sse.common.Util.Pair;
/**
* The classes task is to notify its listeners about changes in distance and angle from the actual device to a pointed
@@ -137,7 +139,7 @@ public class LocationPointerCompassAngleDistance implements LocationListener, Co
}
@Override
public void orientationChanged(double orintationHeading) {
setAngleOffsetAtListeners(orintationHeading);
public void orientationChanged(Pair<OrientationType, Double> orientation) {
setAngleOffsetAtListeners(orientation.getB().doubleValue());
}
}
@@ -6,24 +6,49 @@ import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.base.Waypoint;
import com.sap.sailing.domain.tracking.MarkPassing;
import com.sap.sailing.domain.tracking.TrackedRace;
import com.sap.sse.common.TimePoint;
public abstract class AbstractStartAnalysisCreationValidator {
private static int MINIMUM_NUMBER_COMPETITORS_FOR_STARTANALYSIS = 3;
private static int MINIMUM_MARKPASSIINGS_AT_FIRST_MARK = 3;
private static long MINIMUM_RACE_PROGRESSION_IN_MILLISECONDS = 6*60*1000;
protected boolean threeCompetitorsPassedSecondWayPoint(TrackedRace trackedRace){
Waypoint secondWaypoint = trackedRace.getRace().getCourse().getFirstLeg().getTo();
Iterator<MarkPassing> markPassingsInOrder = trackedRace.getMarkPassingsInOrder(secondWaypoint).iterator();
int counter = 0;
while (markPassingsInOrder.hasNext()) {
int markPassingsCounter = 0;
while (markPassingsInOrder.hasNext() && markPassingsCounter < MINIMUM_MARKPASSIINGS_AT_FIRST_MARK) {
markPassingsInOrder.next();
counter ++;
markPassingsCounter ++;
}
return counter >= MINIMUM_NUMBER_COMPETITORS_FOR_STARTANALYSIS ? true : false;
return markPassingsCounter >= MINIMUM_MARKPASSIINGS_AT_FIRST_MARK ? true : false;
}
protected boolean competitorPassedSecondWayPoint(Competitor competitor, TrackedRace trackedRace){
private boolean competitorPassedSecondWayPoint(Competitor competitor, TrackedRace trackedRace){
Waypoint secondWaypoint = trackedRace.getRace().getCourse().getFirstLeg().getTo();
return trackedRace.getMarkPassing(competitor, secondWaypoint) == null ? false : true;
}
private boolean gateStartGolfFlagIsDown(TrackedRace trackedRace){
if(trackedRace.getGateStartGolfDownTime() != 0){
return true;
}else{
TimePoint timeStartOfRace = trackedRace.getStartOfRace();
TimePoint timeNewestEvent = trackedRace.getTimePointOfNewestEvent();
if(timeStartOfRace != null && timeNewestEvent != null){
if(timeStartOfRace.asMillis()+MINIMUM_RACE_PROGRESSION_IN_MILLISECONDS > timeNewestEvent.asMillis()){
return true;
}
}
}
return false;
}
protected boolean raceProgressedFarEnough(Competitor competitor, TrackedRace trackedRace){
if(trackedRace.isGateStart()){
return gateStartGolfFlagIsDown(trackedRace);
}else{
return competitorPassedSecondWayPoint(competitor, trackedRace);
}
}
}
@@ -21,7 +21,7 @@ public class StartAnalysisCreationController extends AbstractStartAnalysisCreati
public StartAnalysisDTO checkStartAnalysisForCompetitorInTrackedRace(Competitor competitor, TrackedRace trackedRace) {
StartAnalysisDTO startAnalysisDTO;
if (threeCompetitorsPassedSecondWayPoint(trackedRace) &&
competitorPassedSecondWayPoint(competitor, trackedRace))
raceProgressedFarEnough(competitor, trackedRace))
{
logger.log(Level.INFO, "Trigger StartAnalysisDTO creation");
startAnalysisDTO = startAnalysisDTOFactory.createStartAnalysisForCompetitorAndTrackedRace(competitor, trackedRace);
@@ -34,6 +34,7 @@ public class StartAnalysisDTOFactory extends AbstractStartAnalysisCreationValida
private static int MINIMUM_NUMBER_COMPETITORS_FOR_STARTANALYSIS = 3;
private static int DEFAULT_GATE_START_INTERVALL_IN_MILLISECONDS = 5*60*1000;
private static int ONE_MINUTE_INTERVALL_IN_MILLISECONDS = 60*1000;
private static final Logger logger = Logger.getLogger(StartAnalysisDTOFactory.class.getName());
@@ -72,7 +73,6 @@ public class StartAnalysisDTOFactory extends AbstractStartAnalysisCreationValida
if (trackedRace.isGateStart()) {
logger.log(Level.INFO, "IS GATESTART");
startAnalysisDTO.racingProcedureType = RacingProcedureType.GateStart;
// Waypoint startLineWaypoint = trackedRace.getStartLine(trackedRace.getStartOfRace()).getWaypoint();
long timePointOfGolfDownTime = trackedRace.getGateStartGolfDownTime();
startAnalysisDTO.timeOfStartInMilliSeconds = trackedRace.getStartOfRace().asMillis();
if(timePointOfGolfDownTime < trackedRace.getStartOfRace().asMillis() || timePointOfGolfDownTime == 0){
@@ -83,6 +83,7 @@ public class StartAnalysisDTOFactory extends AbstractStartAnalysisCreationValida
} else {
startAnalysisDTO.racingProcedureType = RacingProcedureType.ESS;
startAnalysisDTO.timeOfStartInMilliSeconds = trackedRace.getStartOfRace().asMillis();
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());
@@ -2,9 +2,9 @@ package com.sap.sailing.datamining.data;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.tracking.TrackedLegOfCompetitor;
import com.sap.sse.datamining.shared.Unit;
import com.sap.sse.datamining.shared.annotations.Connector;
import com.sap.sse.datamining.shared.annotations.Statistic;
import com.sap.sse.datamining.shared.data.Unit;
public interface HasTrackedLegOfCompetitorContext {
@@ -4,8 +4,8 @@ import java.io.Serializable;
import com.sap.sse.common.Duration;
import com.sap.sse.common.TimePoint;
import com.sap.sse.datamining.shared.Unit;
import com.sap.sse.datamining.shared.annotations.Statistic;
import com.sap.sse.datamining.shared.data.Unit;
/**
* A speed, convertible in various units of measure. Can be negative.
@@ -1,5 +1,7 @@
package com.sap.sailing.domain.base;
import java.net.URI;
import com.sap.sse.common.Color;
public interface CompetitorChangeListener extends BoatChangeListener, NationalityChangeListener {
@@ -8,4 +10,6 @@ public interface CompetitorChangeListener extends BoatChangeListener, Nationalit
void nameChanged(String oldName, String newName);
void emailChanged(String oldEmail, String newEmail);
void flagImageChanged(URI oldFlagImageURI, URI newFlagImageURI);
}
@@ -145,6 +145,12 @@ public class CompetitorImpl implements DynamicCompetitor {
@Override
public void setFlagImage(URI flagImage) {
final URI oldFlagImage = this.flagImage;
this.flagImage = flagImage;
if (!Util.equalsWithNull(oldFlagImage, flagImage)) {
for (CompetitorChangeListener listener : getListeners()) {
listener.flagImageChanged(oldFlagImage, flagImage);
}
}
}
}
@@ -7,6 +7,8 @@ import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import org.junit.Before;
import org.junit.Test;
@@ -45,6 +47,12 @@ public class CompetitorListenerTest extends AbstractSerializationTest {
private Color newColor;
private DynamicCompetitor competitor;
private DomainFactoryImpl baseDomainFactory;
private boolean emailChanged;
private String oldEmail;
private String newEmail;
private boolean flagImageChanged;
private URI oldFlagImageURL;
private URI newFlagImageURL;
@Before
public void setUp() {
@@ -63,6 +71,12 @@ public class CompetitorListenerTest extends AbstractSerializationTest {
colorChanged = false;
oldColor = null;
newColor = null;
emailChanged = false;
oldEmail = null;
newEmail = null;
flagImageChanged = false;
oldFlagImageURL = null;
newFlagImageURL = null;
listener = new CompetitorChangeListener() {
private static final long serialVersionUID = 4581029778988240209L;
@@ -97,7 +111,16 @@ public class CompetitorListenerTest extends AbstractSerializationTest {
@Override
public void emailChanged(String oldEmail, String newEmail) {
//TODO
emailChanged = true;
CompetitorListenerTest.this.oldEmail = oldEmail;
CompetitorListenerTest.this.newEmail = newEmail;
}
@Override
public void flagImageChanged(URI oldFlagImageURL, URI newFlagImageURL) {
flagImageChanged = true;
CompetitorListenerTest.this.oldFlagImageURL = oldFlagImageURL;
CompetitorListenerTest.this.newFlagImageURL = newFlagImageURL;
}
};
competitor.addCompetitorChangeListener(listener);
@@ -126,6 +149,22 @@ public class CompetitorListenerTest extends AbstractSerializationTest {
assertFalse(nationalityChanged);
}
@Test
public void testFlagChange() throws URISyntaxException {
competitor.setFlagImage(new URI("http://www.something.de/pic.png"));
assertTrue(flagImageChanged);
assertNull(oldFlagImageURL);
assertEquals(new URI("http://www.something.de/pic.png"), newFlagImageURL);
}
@Test
public void testEmailChange() throws URISyntaxException {
competitor.setEmail("hasso.plattner@sap.com");
assertTrue(emailChanged);
assertNull(oldEmail);
assertEquals("hasso.plattner@sap.com", newEmail);
}
@Test
public void testSimpleCompetitorListenerPatternForSailId() {
final String myOldSailId = competitor.getBoat().getSailID();
@@ -1,5 +1,6 @@
package com.sap.sailing.domain.leaderboard;
import java.net.URI;
import java.util.Collections;
import java.util.HashSet;
import java.util.Map;
@@ -121,7 +122,11 @@ public class LeaderboardCacheManager {
public void emailChanged(String oldEmail, String newEmail) {
//ignore (email not shown in leaderboard)
}
@Override
public void flagImageChanged(URI oldFlagImageURL, URI newFlagImageURL) {
removeFromCache(leaderboard);
}
}
private class CacheInvalidationUponScoreCorrectionListener implements ScoreCorrectionListener {
@@ -2773,7 +2773,7 @@ public abstract class TrackedRaceImpl extends TrackedRaceWithWindEssentials impl
} else {
result = new Pair<Double, Double>(averageAngleInDegMinusThreshold, average.getConfidence());
}
} catch (NotEnoughDataHasBeenAddedException e) {
} catch (NotEnoughDataHasBeenAddedException | IllegalArgumentException e) {
result = new Pair<Double, Double>(defaultAngle, 0.1);
}
} else {
@@ -3481,13 +3481,12 @@ public abstract class TrackedRaceImpl extends TrackedRaceWithWindEssentials impl
@Override
public long getGateStartGolfDownTime() {
long result = 0;
if (isGateStart()) {
Boolean isGateStart = isGateStart();
if (isGateStart != null && isGateStart.booleanValue() == true) {
for (RaceLog raceLog : attachedRaceLogs.values()) {
raceLog.lockForRead();
for(RaceLogEvent raceLogEvent: raceLog.getRawFixes()) {
logger.log(Level.INFO, ""+raceLogEvent.getClass().getName());
if(raceLogEvent.getClass().equals(RaceLogGateLineOpeningTimeEventImpl.class)){
logger.log(Level.INFO, "GOT RIGHT EVENT"+raceLogEvent.getClass().getName());
RaceLogGateLineOpeningTimeEvent raceLogGateLineOpeningTimeEvent = (RaceLogGateLineOpeningTimeEvent) raceLogEvent;
result = raceLogGateLineOpeningTimeEvent.getGateLineOpeningTimes().getGolfDownTime();
}
@@ -1,3 +1,7 @@
eclipse.preferences.version=1
encoding//src/main/java/com/sap/sailing/gwt/common/client/i18n/TextMessages.properties=UTF-8
encoding//src/main/java/com/sap/sailing/gwt/common/client/i18n/TextMessages_cn.properties=UTF-8
encoding//src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.properties=UTF-8
encoding//src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_cn.properties=UTF-8
encoding//src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_de.properties=UTF-8
encoding//src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_ru.properties=UTF-8
+2 -2
View File
@@ -42,8 +42,8 @@
<script type="text/javascript" src="highcharts/js/themes/grid.js"></script>
<link rel="stylesheet" type="text/css" href="js/jquery.slick/slick-1.3.15.css"/>
<script type="text/javascript" src="js/jquery.slick/slick-1.3.15.min.js"></script>
<link rel="stylesheet" type="text/css" href="js/jquery.slick/slick-1.5.0.css"/>
<script type="text/javascript" src="js/jquery.slick/slick-1.5.0.min.js"></script>
</head>
@@ -46,7 +46,8 @@ Require-Bundle: com.sap.sailing.domain,
com.sap.sse,
com.sap.sse.security.common,
com.sap.sse.filestorage,
org.apache.shiro.core;bundle-version="1.2.2"
org.apache.shiro.core;bundle-version="1.2.2",
com.sap.sse.gwt.theme
Bundle-Activator: com.sap.sailing.gwt.ui.server.Activator
Bundle-ActivationPolicy: lazy
Import-Package: javax.jms;version="1.1.0",
+77 -76
View File
@@ -1,76 +1,77 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<launchConfiguration type="com.google.gdt.eclipse.suite.webapp">
<booleanAttribute key="com.google.gdt.eclipse.core.RUN_SERVER" value="false"/>
<stringAttribute key="com.google.gdt.eclipse.suiteMainTypeProcessor.PREVIOUSLY_SET_MAIN_TYPE_NAME" value="com.google.gwt.dev.GWTShell"/>
<booleanAttribute key="com.google.gdt.eclipse.suiteWarArgumentProcessor.IS_WAR_FROM_PROJECT_PROPERTIES" value="true"/>
<booleanAttribute key="com.google.gwt.eclipse.core.CODE_SERVER_PORT_AUTO" value="true"/>
<listAttribute key="com.google.gwt.eclipse.core.ENTRY_POINT_MODULES">
<listEntry value="com.sap.sailing.gwt.ui.Simulator"/>
<listEntry value="com.sap.sailing.gwt.ui.Leaderboard"/>
<listEntry value="com.sap.sailing.gwt.ui.PolarSheets"/>
<listEntry value="com.sap.sailing.gwt.ui.RegattaOverview"/>
<listEntry value="com.sap.sailing.gwt.ui.Spectator"/>
<listEntry value="com.sap.sailing.gwt.ui.AdminConsole"/>
<listEntry value="com.sap.sailing.gwt.ui.LeaderboardEditing"/>
<listEntry value="com.sap.sailing.gwt.ui.DataMining"/>
<listEntry value="com.sap.sailing.gwt.Home"/>
<listEntry value="com.sap.sailing.gwt.ui.RaceBoard"/>
<listEntry value="com.sap.sailing.gwt.ui.YoutubePopup"/>
<listEntry value="com.sap.sailing.gwt.AutoPlay"/>
<listEntry value="com.sap.sailing.gwt.ui.VideoPopup"/>
</listAttribute>
<booleanAttribute key="com.google.gwt.eclipse.core.SUPERDEVMODE_ENABLED" value="true"/>
<stringAttribute key="com.google.gwt.eclipse.core.URL" value="/gwt/Home.html"/>
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
<listEntry value="/com.sap.sailing.gwt.ui"/>
</listAttribute>
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
<listEntry value="4"/>
</listAttribute>
<listAttribute key="org.eclipse.debug.ui.favoriteGroups">
<listEntry value="org.eclipse.debug.ui.launchGroup.debug"/>
<listEntry value="org.eclipse.debug.ui.launchGroup.run"/>
</listAttribute>
<booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_START_ON_FIRST_THREAD" value="false"/>
<listAttribute key="org.eclipse.jdt.launching.CLASSPATH">
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry containerPath=&quot;org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6&quot; javaProject=&quot;com.sap.sailing.gwt.ui&quot; path=&quot;1&quot; type=&quot;4&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sailing.gwt.ui/src/main/resources&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sailing.gwt.ui/src/main/java&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sailing.domain/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.googlecode.java-diff-utils/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sailing.domain.common/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/org.json.simple/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sailing.server/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sailing.domain.tractracadapter/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sailing.expeditionconnector/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sailing.declination/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sailing.declination/resources&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sailing.udpconnector/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sse.mongodb/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sailing.domain.swisstimingadapter/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sailing.domain.persistence/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sailing.domain.swisstimingadapter.persistence/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sse.operationaltransformation/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sse.replication/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sailing.domain.tractracadapter.persistence/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/org.moxieapps.gwt.highcharts/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sailing.geocoding/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sailing.datamining.shared/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sse.common/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sse.datamining.shared/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sse.gwt/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.google.gwt.osgi/lib/gwt-user.jar&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry id=&quot;org.eclipse.jdt.launching.classpathentry.defaultClasspath&quot;&gt;&#13;&#10;&lt;memento exportedEntriesOnly=&quot;false&quot; project=&quot;com.sap.sailing.gwt.ui&quot;/&gt;&#13;&#10;&lt;/runtimeClasspathEntry&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sse.security/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sse.security.ui/src/main/java&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sse.gwt.adminconsole/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sse.security.common/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
</listAttribute>
<stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="com.google.gwt.eclipse.core.moduleClasspathProvider"/>
<booleanAttribute key="org.eclipse.jdt.launching.DEFAULT_CLASSPATH" value="false"/>
<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="com.google.gwt.dev.DevMode"/>
<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-superDevMode -incremental -war &quot;${project_loc:com.sap.sailing.gwt.ui}&quot; -noserver -remoteUI &quot;${gwt_remote_ui_server_port}:${unique_id}&quot; -logLevel INFO -codeServerPort auto -startupUrl /gwt/Home.html com.sap.sailing.gwt.Home -startupUrl /gwt/AdminConsole.html com.sap.sailing.gwt.ui.AdminConsole -startupUrl /gwt/LeaderboardEditing.html com.sap.sailing.gwt.ui.LeaderboardEditing -startupUrl /gwt/Leaderboard.html com.sap.sailing.gwt.ui.Leaderboard -startupUrl /gwt/Spectator.html com.sap.sailing.gwt.ui.Spectator -startupUrl /gwt/RaceBoard.html com.sap.sailing.gwt.ui.RaceBoard -startupUrl /gwt/PolarSheets.html com.sap.sailing.gwt.ui.PolarSheets -startupUrl /gwt/RegattaOverview.html com.sap.sailing.gwt.ui.RegattaOverview -startupUrl /gwt/DataMining.html com.sap.sailing.gwt.ui.DataMining -startupUrl /gwt/Simulator.html com.sap.sailing.gwt.ui.Simulator -startupUrl /gwt/VideoPopup.html com.sap.sailing.gwt.ui.VideoPopup com.sap.sailing.gwt.AutoPlay com.sap.sailing.gwt.ui.YoutubePopup com.sap.sailing.gwt.ui.Simulator com.sap.sailing.gwt.ui.Leaderboard com.sap.sailing.gwt.ui.PolarSheets com.sap.sailing.gwt.ui.RegattaOverview com.sap.sailing.gwt.ui.Spectator com.sap.sailing.gwt.ui.AdminConsole com.sap.sailing.gwt.ui.LeaderboardEditing com.sap.sailing.gwt.ui.DataMining com.sap.sailing.gwt.Home com.sap.sailing.gwt.ui.RaceBoard"/>
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="com.sap.sailing.gwt.ui"/>
<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xms1024m -Xmx3072m"/>
</launchConfiguration>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<launchConfiguration type="com.google.gdt.eclipse.suite.webapp">
<booleanAttribute key="com.google.gdt.eclipse.core.RUN_SERVER" value="false"/>
<stringAttribute key="com.google.gdt.eclipse.suiteMainTypeProcessor.PREVIOUSLY_SET_MAIN_TYPE_NAME" value="com.google.gwt.dev.GWTShell"/>
<booleanAttribute key="com.google.gdt.eclipse.suiteWarArgumentProcessor.IS_WAR_FROM_PROJECT_PROPERTIES" value="true"/>
<booleanAttribute key="com.google.gwt.eclipse.core.CODE_SERVER_PORT_AUTO" value="true"/>
<listAttribute key="com.google.gwt.eclipse.core.ENTRY_POINT_MODULES">
<listEntry value="com.sap.sailing.gwt.ui.Simulator"/>
<listEntry value="com.sap.sailing.gwt.ui.Leaderboard"/>
<listEntry value="com.sap.sailing.gwt.ui.PolarSheets"/>
<listEntry value="com.sap.sailing.gwt.ui.RegattaOverview"/>
<listEntry value="com.sap.sailing.gwt.ui.Spectator"/>
<listEntry value="com.sap.sailing.gwt.ui.AdminConsole"/>
<listEntry value="com.sap.sailing.gwt.ui.LeaderboardEditing"/>
<listEntry value="com.sap.sailing.gwt.ui.DataMining"/>
<listEntry value="com.sap.sailing.gwt.Home"/>
<listEntry value="com.sap.sailing.gwt.ui.RaceBoard"/>
<listEntry value="com.sap.sailing.gwt.ui.YoutubePopup"/>
<listEntry value="com.sap.sailing.gwt.AutoPlay"/>
<listEntry value="com.sap.sailing.gwt.ui.VideoPopup"/>
</listAttribute>
<booleanAttribute key="com.google.gwt.eclipse.core.SUPERDEVMODE_ENABLED" value="true"/>
<stringAttribute key="com.google.gwt.eclipse.core.URL" value="/gwt/Home.html"/>
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
<listEntry value="/com.sap.sailing.gwt.ui"/>
</listAttribute>
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
<listEntry value="4"/>
</listAttribute>
<listAttribute key="org.eclipse.debug.ui.favoriteGroups">
<listEntry value="org.eclipse.debug.ui.launchGroup.debug"/>
<listEntry value="org.eclipse.debug.ui.launchGroup.run"/>
</listAttribute>
<booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_START_ON_FIRST_THREAD" value="false"/>
<listAttribute key="org.eclipse.jdt.launching.CLASSPATH">
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry containerPath=&quot;org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6&quot; javaProject=&quot;com.sap.sailing.gwt.ui&quot; path=&quot;1&quot; type=&quot;4&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sailing.gwt.ui/src/main/resources&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sailing.gwt.ui/src/main/java&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sse.gwt.theme/src/main/java&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sailing.domain/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.googlecode.java-diff-utils/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sailing.domain.common/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/org.json.simple/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sailing.server/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sailing.domain.tractracadapter/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sailing.expeditionconnector/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sailing.declination/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sailing.declination/resources&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sailing.udpconnector/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sse.mongodb/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sailing.domain.swisstimingadapter/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sailing.domain.persistence/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sailing.domain.swisstimingadapter.persistence/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sse.operationaltransformation/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sse.replication/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sailing.domain.tractracadapter.persistence/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/org.moxieapps.gwt.highcharts/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sailing.geocoding/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sailing.datamining.shared/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sse.common/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sse.datamining.shared/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sse.gwt/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.google.gwt.osgi/lib/gwt-user.jar&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry id=&quot;org.eclipse.jdt.launching.classpathentry.defaultClasspath&quot;&gt;&#13;&#10;&lt;memento exportedEntriesOnly=&quot;false&quot; project=&quot;com.sap.sailing.gwt.ui&quot;/&gt;&#13;&#10;&lt;/runtimeClasspathEntry&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sse.security/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sse.security.ui/src/main/java&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sse.gwt.adminconsole/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sse.security.common/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
</listAttribute>
<stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="com.google.gwt.eclipse.core.moduleClasspathProvider"/>
<booleanAttribute key="org.eclipse.jdt.launching.DEFAULT_CLASSPATH" value="false"/>
<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="com.google.gwt.dev.DevMode"/>
<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-superDevMode -incremental -war &quot;${project_loc:com.sap.sailing.gwt.ui}&quot; -noserver -remoteUI &quot;${gwt_remote_ui_server_port}:${unique_id}&quot; -logLevel INFO -codeServerPort auto -startupUrl /gwt/Home.html com.sap.sailing.gwt.Home -startupUrl /gwt/AdminConsole.html com.sap.sailing.gwt.ui.AdminConsole -startupUrl /gwt/LeaderboardEditing.html com.sap.sailing.gwt.ui.LeaderboardEditing -startupUrl /gwt/Leaderboard.html com.sap.sailing.gwt.ui.Leaderboard -startupUrl /gwt/Spectator.html com.sap.sailing.gwt.ui.Spectator -startupUrl /gwt/RaceBoard.html com.sap.sailing.gwt.ui.RaceBoard -startupUrl /gwt/PolarSheets.html com.sap.sailing.gwt.ui.PolarSheets -startupUrl /gwt/RegattaOverview.html com.sap.sailing.gwt.ui.RegattaOverview -startupUrl /gwt/DataMining.html com.sap.sailing.gwt.ui.DataMining -startupUrl /gwt/Simulator.html com.sap.sailing.gwt.ui.Simulator -startupUrl /gwt/VideoPopup.html com.sap.sailing.gwt.ui.VideoPopup com.sap.sailing.gwt.AutoPlay com.sap.sailing.gwt.ui.YoutubePopup com.sap.sailing.gwt.ui.Simulator com.sap.sailing.gwt.ui.Leaderboard com.sap.sailing.gwt.ui.PolarSheets com.sap.sailing.gwt.ui.RegattaOverview com.sap.sailing.gwt.ui.Spectator com.sap.sailing.gwt.ui.AdminConsole com.sap.sailing.gwt.ui.LeaderboardEditing com.sap.sailing.gwt.ui.DataMining com.sap.sailing.gwt.Home com.sap.sailing.gwt.ui.RaceBoard"/>
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="com.sap.sailing.gwt.ui"/>
<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xms1024m -Xmx3072m"/>
</launchConfiguration>
+75 -74
View File
@@ -1,74 +1,75 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<launchConfiguration type="com.google.gdt.eclipse.suite.webapp">
<booleanAttribute key="com.google.gdt.eclipse.core.RUN_SERVER" value="false"/>
<stringAttribute key="com.google.gdt.eclipse.suiteMainTypeProcessor.PREVIOUSLY_SET_MAIN_TYPE_NAME" value="com.google.gwt.dev.GWTShell"/>
<booleanAttribute key="com.google.gdt.eclipse.suiteWarArgumentProcessor.IS_WAR_FROM_PROJECT_PROPERTIES" value="true"/>
<booleanAttribute key="com.google.gwt.eclipse.core.CODE_SERVER_PORT_AUTO" value="true"/>
<listAttribute key="com.google.gwt.eclipse.core.ENTRY_POINT_MODULES">
<listEntry value="com.sap.sailing.gwt.ui.RaceBoard"/>
<listEntry value="com.sap.sailing.gwt.Home"/>
<listEntry value="com.sap.sailing.gwt.ui.DataMining"/>
<listEntry value="com.sap.sailing.gwt.ui.YoutubePopup"/>
<listEntry value="com.sap.sailing.gwt.ui.LeaderboardEditing"/>
<listEntry value="com.sap.sailing.gwt.ui.AdminConsole"/>
<listEntry value="com.sap.sailing.gwt.ui.Spectator"/>
<listEntry value="com.sap.sailing.gwt.ui.RegattaOverview"/>
<listEntry value="com.sap.sailing.gwt.AutoPlay"/>
<listEntry value="com.sap.sailing.gwt.ui.VideoPopup"/>
<listEntry value="com.sap.sailing.gwt.ui.PolarSheets"/>
<listEntry value="com.sap.sailing.gwt.ui.Leaderboard"/>
<listEntry value="com.sap.sailing.gwt.ui.Simulator"/>
</listAttribute>
<stringAttribute key="com.google.gwt.eclipse.core.URL" value="/gwt/Home.html"/>
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
<listEntry value="/com.sap.sailing.gwt.ui"/>
</listAttribute>
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
<listEntry value="4"/>
</listAttribute>
<listAttribute key="org.eclipse.debug.ui.favoriteGroups">
<listEntry value="org.eclipse.debug.ui.launchGroup.debug"/>
<listEntry value="org.eclipse.debug.ui.launchGroup.run"/>
</listAttribute>
<listAttribute key="org.eclipse.jdt.launching.CLASSPATH">
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry containerPath=&quot;org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6&quot; javaProject=&quot;com.sap.sailing.gwt.ui&quot; path=&quot;1&quot; type=&quot;4&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sailing.gwt.ui/src/main/resources&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sailing.gwt.ui/src/main/java&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sailing.domain/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.googlecode.java-diff-utils/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sailing.domain.common/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/org.json.simple/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sailing.server/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sailing.domain.tractracadapter/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sailing.expeditionconnector/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sailing.declination/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sailing.declination/resources&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sailing.udpconnector/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sse.mongodb/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sailing.domain.swisstimingadapter/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sailing.domain.persistence/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sailing.domain.swisstimingadapter.persistence/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sse.operationaltransformation/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sse.replication/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sailing.domain.tractracadapter.persistence/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/org.moxieapps.gwt.highcharts/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sailing.geocoding/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sailing.datamining.shared/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sse.common/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sse.datamining.shared/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sse.gwt/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.google.gwt.osgi/lib/gwt-user.jar&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry id=&quot;org.eclipse.jdt.launching.classpathentry.defaultClasspath&quot;&gt;&#13;&#10;&lt;memento exportedEntriesOnly=&quot;false&quot; project=&quot;com.sap.sailing.gwt.ui&quot;/&gt;&#13;&#10;&lt;/runtimeClasspathEntry&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sse.security/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sse.security.ui/src/main/java&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sse.gwt.adminconsole/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sse.security.common/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
</listAttribute>
<stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="com.google.gwt.eclipse.core.moduleClasspathProvider"/>
<booleanAttribute key="org.eclipse.jdt.launching.DEFAULT_CLASSPATH" value="false"/>
<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="com.google.gwt.dev.DevMode"/>
<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-nosuperDevMode -war &quot;${project_loc:com.sap.sailing.gwt.ui}&quot; -noserver -remoteUI &quot;${gwt_remote_ui_server_port}:${unique_id}&quot; -logLevel INFO -codeServerPort auto -startupUrl /gwt/Home.html com.sap.sailing.gwt.Home -startupUrl /gwt/AdminConsole.html com.sap.sailing.gwt.ui.AdminConsole -startupUrl /gwt/LeaderboardEditing.html com.sap.sailing.gwt.ui.LeaderboardEditing -startupUrl /gwt/Leaderboard.html com.sap.sailing.gwt.ui.Leaderboard -startupUrl /gwt/Spectator.html com.sap.sailing.gwt.ui.Spectator -startupUrl /gwt/RaceBoard.html com.sap.sailing.gwt.ui.RaceBoard -startupUrl /gwt/PolarSheets.html com.sap.sailing.gwt.ui.PolarSheets -startupUrl /gwt/RegattaOverview.html com.sap.sailing.gwt.ui.RegattaOverview -startupUrl /gwt/DataMining.html com.sap.sailing.gwt.ui.DataMining -startupUrl /gwt/Simulator.html com.sap.sailing.gwt.ui.Simulator -startupUrl /gwt/VideoPopup.html com.sap.sailing.gwt.ui.VideoPopup -startupUrl /security/ui/Login.html com.sap.sse.security.ui.Login -startupUrl /security/ui/EditProfile.html com.sap.sse.security.ui.EditProfile -startupUrl /security/ui/EmailValidation.html com.sap.sse.security.ui.EmailValidation com.sap.sailing.gwt.ui.Simulator com.sap.sailing.gwt.ui.Leaderboard com.sap.sailing.gwt.ui.PolarSheets com.sap.sailing.gwt.ui.VideoPopup com.sap.sailing.gwt.AutoPlay com.sap.sailing.gwt.ui.RegattaOverview com.sap.sailing.gwt.ui.Spectator com.sap.sailing.gwt.ui.AdminConsole com.sap.sailing.gwt.ui.LeaderboardEditing com.sap.sailing.gwt.ui.YoutubePopup com.sap.sailing.gwt.ui.DataMining com.sap.sailing.gwt.Home com.sap.sailing.gwt.ui.RaceBoard"/>
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="com.sap.sailing.gwt.ui"/>
<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xmx2048m -Dgwt-usearchives=false -Dgwt.persistentunitcache=false"/>
</launchConfiguration>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<launchConfiguration type="com.google.gdt.eclipse.suite.webapp">
<booleanAttribute key="com.google.gdt.eclipse.core.RUN_SERVER" value="false"/>
<stringAttribute key="com.google.gdt.eclipse.suiteMainTypeProcessor.PREVIOUSLY_SET_MAIN_TYPE_NAME" value="com.google.gwt.dev.GWTShell"/>
<booleanAttribute key="com.google.gdt.eclipse.suiteWarArgumentProcessor.IS_WAR_FROM_PROJECT_PROPERTIES" value="true"/>
<booleanAttribute key="com.google.gwt.eclipse.core.CODE_SERVER_PORT_AUTO" value="true"/>
<listAttribute key="com.google.gwt.eclipse.core.ENTRY_POINT_MODULES">
<listEntry value="com.sap.sailing.gwt.ui.RaceBoard"/>
<listEntry value="com.sap.sailing.gwt.Home"/>
<listEntry value="com.sap.sailing.gwt.ui.DataMining"/>
<listEntry value="com.sap.sailing.gwt.ui.YoutubePopup"/>
<listEntry value="com.sap.sailing.gwt.ui.LeaderboardEditing"/>
<listEntry value="com.sap.sailing.gwt.ui.AdminConsole"/>
<listEntry value="com.sap.sailing.gwt.ui.Spectator"/>
<listEntry value="com.sap.sailing.gwt.ui.RegattaOverview"/>
<listEntry value="com.sap.sailing.gwt.AutoPlay"/>
<listEntry value="com.sap.sailing.gwt.ui.VideoPopup"/>
<listEntry value="com.sap.sailing.gwt.ui.PolarSheets"/>
<listEntry value="com.sap.sailing.gwt.ui.Leaderboard"/>
<listEntry value="com.sap.sailing.gwt.ui.Simulator"/>
</listAttribute>
<stringAttribute key="com.google.gwt.eclipse.core.URL" value="/gwt/Home.html"/>
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
<listEntry value="/com.sap.sailing.gwt.ui"/>
</listAttribute>
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
<listEntry value="4"/>
</listAttribute>
<listAttribute key="org.eclipse.debug.ui.favoriteGroups">
<listEntry value="org.eclipse.debug.ui.launchGroup.debug"/>
<listEntry value="org.eclipse.debug.ui.launchGroup.run"/>
</listAttribute>
<listAttribute key="org.eclipse.jdt.launching.CLASSPATH">
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry containerPath=&quot;org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6&quot; javaProject=&quot;com.sap.sailing.gwt.ui&quot; path=&quot;1&quot; type=&quot;4&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sailing.gwt.ui/src/main/resources&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sailing.gwt.ui/src/main/java&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sse.gwt.theme/src/main/java&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sailing.domain/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.googlecode.java-diff-utils/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sailing.domain.common/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/org.json.simple/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sailing.server/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sailing.domain.tractracadapter/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sailing.expeditionconnector/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sailing.declination/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sailing.declination/resources&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sailing.udpconnector/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sse.mongodb/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sailing.domain.swisstimingadapter/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sailing.domain.persistence/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sailing.domain.swisstimingadapter.persistence/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sse.operationaltransformation/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sse.replication/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sailing.domain.tractracadapter.persistence/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/org.moxieapps.gwt.highcharts/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sailing.geocoding/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sailing.datamining.shared/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sse.common/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sse.datamining.shared/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sse.gwt/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.google.gwt.osgi/lib/gwt-user.jar&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry id=&quot;org.eclipse.jdt.launching.classpathentry.defaultClasspath&quot;&gt;&#13;&#10;&lt;memento exportedEntriesOnly=&quot;false&quot; project=&quot;com.sap.sailing.gwt.ui&quot;/&gt;&#13;&#10;&lt;/runtimeClasspathEntry&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sse.security/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sse.security.ui/src/main/java&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sse.gwt.adminconsole/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sse.security.common/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
</listAttribute>
<stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="com.google.gwt.eclipse.core.moduleClasspathProvider"/>
<booleanAttribute key="org.eclipse.jdt.launching.DEFAULT_CLASSPATH" value="false"/>
<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="com.google.gwt.dev.DevMode"/>
<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-nosuperDevMode -war &quot;${project_loc:com.sap.sailing.gwt.ui}&quot; -noserver -remoteUI &quot;${gwt_remote_ui_server_port}:${unique_id}&quot; -logLevel INFO -codeServerPort auto -startupUrl /gwt/Home.html com.sap.sailing.gwt.Home -startupUrl /gwt/AdminConsole.html com.sap.sailing.gwt.ui.AdminConsole -startupUrl /gwt/LeaderboardEditing.html com.sap.sailing.gwt.ui.LeaderboardEditing -startupUrl /gwt/Leaderboard.html com.sap.sailing.gwt.ui.Leaderboard -startupUrl /gwt/Spectator.html com.sap.sailing.gwt.ui.Spectator -startupUrl /gwt/RaceBoard.html com.sap.sailing.gwt.ui.RaceBoard -startupUrl /gwt/PolarSheets.html com.sap.sailing.gwt.ui.PolarSheets -startupUrl /gwt/RegattaOverview.html com.sap.sailing.gwt.ui.RegattaOverview -startupUrl /gwt/DataMining.html com.sap.sailing.gwt.ui.DataMining -startupUrl /gwt/Simulator.html com.sap.sailing.gwt.ui.Simulator -startupUrl /gwt/VideoPopup.html com.sap.sailing.gwt.ui.VideoPopup -startupUrl /security/ui/Login.html com.sap.sse.security.ui.Login -startupUrl /security/ui/EditProfile.html com.sap.sse.security.ui.EditProfile -startupUrl /security/ui/EmailValidation.html com.sap.sse.security.ui.EmailValidation com.sap.sailing.gwt.ui.Simulator com.sap.sailing.gwt.ui.Leaderboard com.sap.sailing.gwt.ui.PolarSheets com.sap.sailing.gwt.ui.VideoPopup com.sap.sailing.gwt.AutoPlay com.sap.sailing.gwt.ui.RegattaOverview com.sap.sailing.gwt.ui.Spectator com.sap.sailing.gwt.ui.AdminConsole com.sap.sailing.gwt.ui.LeaderboardEditing com.sap.sailing.gwt.ui.YoutubePopup com.sap.sailing.gwt.ui.DataMining com.sap.sailing.gwt.Home com.sap.sailing.gwt.ui.RaceBoard"/>
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="com.sap.sailing.gwt.ui"/>
<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xmx2048m -Dgwt-usearchives=false -Dgwt.persistentunitcache=false"/>
</launchConfiguration>
@@ -63,6 +63,16 @@
<url-pattern>/service/sailing</url-pattern>
</servlet-mapping>
<servlet>
<display-name>Home Service</display-name>
<servlet-name>HomeService</servlet-name>
<servlet-class>com.sap.sailing.gwt.home.server.HomeServiceImpl</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HomeService</servlet-name>
<url-pattern>/service/home</url-pattern>
</servlet-mapping>
<servlet>
<display-name>Media Service</display-name>
<servlet-name>MediaService</servlet-name>
Binary file not shown.

After

Width:  |  Height:  |  Size: 865 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 623 B

@@ -1,57 +0,0 @@
@charset "UTF-8";
/* Slider */
.slick-slider { position: relative; display: block; box-sizing: border-box; -moz-box-sizing: border-box; -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; -ms-touch-action: pan-y; touch-action: pan-y; -webkit-tap-highlight-color: transparent; }
.slick-list { position: relative; overflow: hidden; display: block; margin: 0; padding: 0; }
.slick-list:focus { outline: none; }
.slick-loading .slick-list { background: #fff url("./ajax-loader.gif") center center no-repeat; }
.slick-list.dragging { cursor: pointer; cursor: hand; }
.slick-slider .slick-track { -webkit-transform: translate3d(0, 0, 0); -moz-transform: translate3d(0, 0, 0); -ms-transform: translate3d(0, 0, 0); -o-transform: translate3d(0, 0, 0); transform: translate3d(0, 0, 0); }
.slick-track { position: relative; left: 0; top: 0; display: block; }
.slick-track:before, .slick-track:after { content: ""; display: table; }
.slick-track:after { clear: both; }
.slick-loading .slick-track { visibility: hidden; }
.slick-slide { float: left; height: 100%; min-height: 1px; display: none; }
[dir="rtl"] .slick-slide { float: right; }
.slick-slide img { display: block; }
.slick-slide.slick-loading img { display: none; }
.slick-slide.dragging img { pointer-events: none; }
.slick-initialized .slick-slide { display: block; }
.slick-loading .slick-slide { visibility: hidden; }
.slick-vertical .slick-slide { display: block; height: auto; border: 1px solid transparent; }
/* Icons */
@font-face { font-family: "slick"; src: url("./fonts/slick.eot"); src: url("./fonts/slick.eot?#iefix") format("embedded-opentype"), url("./fonts/slick.woff") format("woff"), url("./fonts/slick.ttf") format("truetype"), url("./fonts/slick.svg#slick") format("svg"); font-weight: normal; font-style: normal; }
/* Arrows */
.slick-prev, .slick-next { position: absolute; display: block; height: 20px; width: 20px; line-height: 0; font-size: 0; cursor: pointer; background: transparent; color: transparent; top: 50%; margin-top: -10px; padding: 0; border: none; outline: none; }
.slick-prev:hover, .slick-prev:focus, .slick-next:hover, .slick-next:focus { outline: none; background: transparent; color: transparent; }
.slick-prev:hover:before, .slick-prev:focus:before, .slick-next:hover:before, .slick-next:focus:before { opacity: 1; }
.slick-prev.slick-disabled:before, .slick-next.slick-disabled:before { opacity: 0.25; }
.slick-prev:before, .slick-next:before { font-family: "slick"; font-size: 20px; line-height: 1; color: white; opacity: 0.75; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; }
.slick-prev { left: -25px; }
[dir="rtl"] .slick-prev { left: auto; right: -25px; }
.slick-prev:before { content: "←"; }
[dir="rtl"] .slick-prev:before { content: "→"; }
.slick-next { right: -25px; }
[dir="rtl"] .slick-next { left: -25px; right: auto; }
.slick-next:before { content: "→"; }
[dir="rtl"] .slick-next:before { content: "←"; }
/* Dots */
.slick-slider { margin-bottom: 30px; }
.slick-dots { position: absolute; bottom: -45px; list-style: none; display: block; text-align: center; padding: 0; width: 100%; }
.slick-dots li { position: relative; display: inline-block; height: 20px; width: 20px; margin: 0 5px; padding: 0; cursor: pointer; }
.slick-dots li button { border: 0; background: transparent; display: block; height: 20px; width: 20px; outline: none; line-height: 0; font-size: 0; color: transparent; padding: 5px; cursor: pointer; }
.slick-dots li button:hover, .slick-dots li button:focus { outline: none; }
.slick-dots li button:hover:before, .slick-dots li button:focus:before { opacity: 1; }
.slick-dots li button:before { position: absolute; top: 0; left: 0; content: "•"; width: 20px; height: 20px; font-family: "slick"; font-size: 6px; line-height: 20px; text-align: center; color: black; opacity: 0.25; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; }
.slick-dots li.slick-active button:before { color: black; opacity: 0.75; }
/*# sourceMappingURL=slick.css.map */
@@ -1,7 +0,0 @@
{
"version": 3,
"mappings": ";;AAuCA,aAAc,GACV,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,KAAK,EACd,UAAU,EAAE,UAAU,EACtB,eAAe,EAAE,UAAU,EAC3B,qBAAqB,EAAE,IAAI,EAC3B,mBAAmB,EAAE,IAAI,EACzB,kBAAkB,EAAE,IAAI,EACxB,gBAAgB,EAAE,IAAI,EACtB,eAAe,EAAE,IAAI,EACrB,WAAW,EAAE,IAAI,EACjB,gBAAgB,EAAE,KAAK,EACvB,YAAY,EAAE,KAAK,EACnB,2BAA2B,EAAE,WAAW;;AAE5C,WAAY,GACR,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,KAAK,EACd,MAAM,EAAE,CAAC,EACT,OAAO,EAAE,CAAC;AAEV,iBAAQ,GACJ,OAAO,EAAE,IAAI;AAGjB,0BAAiB,GACb,UAAU,EAAE,qDAA+D;AAG/E,oBAAW,GACP,MAAM,EAAE,OAAO,EACf,MAAM,EAAE,IAAI;;AAGpB,0BAA2B,GACvB,iBAAiB,EAAE,oBAAoB,EACvC,cAAc,EAAE,oBAAoB,EACpC,aAAa,EAAE,oBAAoB,EACnC,YAAY,EAAE,oBAAoB,EAClC,SAAS,EAAE,oBAAoB;;AAGnC,YAAa,GACT,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,CAAC,EACP,GAAG,EAAE,CAAC,EACN,OAAO,EAAE,KAAK;AAEd,uCACQ,GACJ,OAAO,EAAE,EAAE,EACX,OAAO,EAAE,KAAK;AAGlB,kBAAQ,GACJ,KAAK,EAAE,IAAI;AAGf,2BAAiB,GACb,UAAU,EAAE,MAAM;;AAG1B,YAAa,GACT,KAAK,EAAE,IAAI,EACX,MAAM,EAAE,IAAI,EACZ,UAAU,EAAE,GAAG,EAWf,OAAO,EAAE,IAAI;AAVb,wBAAc,GACV,KAAK,EAAE,KAAK;AAEhB,gBAAI,GACA,OAAO,EAAE,KAAK;AAElB,8BAAoB,GAChB,OAAO,EAAE,IAAI;AAKjB,yBAAe,GACX,cAAc,EAAE,IAAI;AAGxB,+BAAqB,GACjB,OAAO,EAAE,KAAK;AAGlB,2BAAiB,GACb,UAAU,EAAE,MAAM;AAGtB,4BAAkB,GACd,OAAO,EAAE,KAAK,EACd,MAAM,EAAE,IAAI,EACZ,MAAM,EAAE,qBAAqB;;;AAMnC,UASC,GARG,WAAW,EAAC,OAAO,EACnB,GAAG,EAAK,wBAA2B,EACnC,GAAG,EAAK,gMAA8D,EAItE,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM;;AAMxB,wBACY,GACR,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,KAAK,EACd,MAAM,EAAE,IAAI,EACZ,KAAK,EAAE,IAAI,EACX,WAAW,EAAE,CAAC,EACd,SAAS,EAAE,CAAC,EACZ,MAAM,EAAE,OAAO,EACf,UAAU,EAAE,WAAW,EACvB,KAAK,EAAE,WAAW,EAClB,GAAG,EAAE,GAAG,EACR,UAAU,EAAE,KAAK,EACjB,OAAO,EAAE,CAAC,EACV,MAAM,EAAE,IAAI,EACZ,OAAO,EAAE,IAAI;AACb,0EAAiB,GACf,OAAO,EAAE,IAAI,EACb,UAAU,EAAE,WAAW,EACvB,KAAK,EAAE,WAAW;AAClB,sGAAS,GACP,OAAO,EA/JI,CAAC;AAkKhB,oEAAwB,GACpB,OAAO,EAlKM,IAAG;;AAqKxB,sCAAuC,GACnC,WAAW,EAjLK,OAAO,EAkLvB,SAAS,EAAE,IAAI,EACf,WAAW,EAAE,CAAC,EACd,KAAK,EAlLW,KAAK,EAmLrB,OAAO,EA5KO,IAAG,EA6KjB,sBAAsB,EAAE,WAAW,EACnC,uBAAuB,EAAE,SAAS;;AAEtC,WAAY,GACR,IAAI,EAAE,KAAK;AACX,uBAAc,GACV,IAAI,EAAG,IAAI,EACX,KAAK,EAAE,KAAK;AAEhB,kBAAS,GACL,OAAO,EA3LQ,GAAO;AA4LtB,8BAAc,GACV,OAAO,EA5LI,GAAO;;AAgM9B,WAAY,GACR,KAAK,EAAE,KAAK;AACZ,uBAAc,GACV,IAAI,EAAG,KAAK,EACZ,KAAK,EAAE,IAAI;AAEf,kBAAS,GACL,OAAO,EAvMQ,GAAO;AAwMtB,8BAAc,GACV,OAAO,EA1MI,GAAO;;;AAiN9B,aAAc,GACV,aAAa,EAAE,IAAI;;AAEvB,WAAY,GACR,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,KAAK,EACb,UAAU,EAAE,IAAI,EAChB,OAAO,EAAE,KAAK,EACd,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,CAAC,EACV,KAAK,EAAE,IAAI;AAEX,cAAG,GACC,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,YAAY,EACrB,MAAM,EAAE,IAAI,EACZ,KAAK,EAAE,IAAI,EACX,MAAM,EAAE,KAAK,EACb,OAAO,EAAE,CAAC,EACV,MAAM,EAAE,OAAO;AAEf,qBAAO,GACH,MAAM,EAAE,CAAC,EACT,UAAU,EAAE,WAAW,EACvB,OAAO,EAAE,KAAK,EACd,MAAM,EAAE,IAAI,EACZ,KAAK,EAAE,IAAI,EACX,OAAO,EAAE,IAAI,EACb,WAAW,EAAE,CAAC,EACd,SAAS,EAAE,CAAC,EACZ,KAAK,EAAE,WAAW,EAClB,OAAO,EAAE,GAAG,EACZ,MAAM,EAAE,OAAO;AACf,wDAAiB,GACb,OAAO,EAAE,IAAI;AACb,sEAAS,GACP,OAAO,EAhPN,CAAC;AAoPR,4BAAS,GACL,QAAQ,EAAE,QAAQ,EAClB,GAAG,EAAE,CAAC,EACN,IAAI,EAAE,CAAC,EACP,OAAO,EA3PD,GAAO,EA4Pb,KAAK,EAAE,IAAI,EACX,MAAM,EAAE,IAAI,EACZ,WAAW,EArQP,OAAO,EAsQX,SAAS,EA9PR,GAAG,EA+PJ,WAAW,EAAE,IAAI,EACjB,UAAU,EAAE,MAAM,EAClB,KAAK,EArQI,KAAgB,EAsQzB,OAAO,EA/PF,IAAG,EAgQR,sBAAsB,EAAE,WAAW,EACnC,uBAAuB,EAAE,SAAS;AAK1C,yCAA6B,GACzB,KAAK,EA9QQ,KAAgB,EA+Q7B,OAAO,EA1QD,IAAG",
"sources": ["slick.scss"],
"names": [],
"file": "slick.css"
}
@@ -1,18 +0,0 @@
/*
_ _ _ _
___| (_) ___| | __ (_)___
/ __| | |/ __| |/ / | / __|
\__ \ | | (__| < _ | \__ \
|___/_|_|\___|_|\_(_)/ |___/
|__/
Version: 1.3.15
Author: Ken Wheeler
Website: http://kenwheeler.github.io
Docs: http://kenwheeler.github.io/slick
Repo: http://github.com/kenwheeler/slick
Issues: http://github.com/kenwheeler/slick/issues
*/
!function(a){"use strict";"function"==typeof define&&define.amd?define(["jquery"],a):"undefined"!=typeof exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){"use strict";var b=window.Slick||{};b=function(){function c(c,d){var f,g,e=this;if(e.defaults={accessibility:!0,adaptiveHeight:!1,appendArrows:a(c),appendDots:a(c),arrows:!0,asNavFor:null,prevArrow:'<button type="button" data-role="none" class="slick-prev">Previous</button>',nextArrow:'<button type="button" data-role="none" class="slick-next">Next</button>',autoplay:!1,autoplaySpeed:3e3,centerMode:!1,centerPadding:"50px",cssEase:"ease",customPaging:function(a,b){return'<button type="button" data-role="none">'+(b+1)+"</button>"},dots:!1,dotsClass:"slick-dots",draggable:!0,easing:"linear",fade:!1,focusOnSelect:!1,infinite:!0,initialSlide:0,lazyLoad:"ondemand",onBeforeChange:null,onAfterChange:null,onInit:null,onReInit:null,onSetPosition:null,pauseOnHover:!0,pauseOnDotsHover:!1,respondTo:"window",responsive:null,rtl:!1,slide:"div",slidesToShow:1,slidesToScroll:1,speed:500,swipe:!0,swipeToSlide:!1,touchMove:!0,touchThreshold:5,useCSS:!0,variableWidth:!1,vertical:!1,waitForAnimate:!0},e.initials={animating:!1,dragging:!1,autoPlayTimer:null,currentDirection:0,currentLeft:null,currentSlide:0,direction:1,$dots:null,listWidth:null,listHeight:null,loadIndex:0,$nextArrow:null,$prevArrow:null,slideCount:null,slideWidth:null,$slideTrack:null,$slides:null,sliding:!1,slideOffset:0,swipeLeft:null,$list:null,touchObject:{},transformsEnabled:!1},a.extend(e,e.initials),e.activeBreakpoint=null,e.animType=null,e.animProp=null,e.breakpoints=[],e.breakpointSettings=[],e.cssTransitions=!1,e.paused=!1,e.positionProp=null,e.respondTo=null,e.shouldClick=!0,e.$slider=a(c),e.$slidesCache=null,e.transformType=null,e.transitionType=null,e.windowWidth=0,e.windowTimer=null,e.options=a.extend({},e.defaults,d),e.currentSlide=e.options.initialSlide,e.originalSettings=e.options,f=e.options.responsive||null,f&&f.length>-1){e.respondTo=e.options.respondTo||"window";for(g in f)f.hasOwnProperty(g)&&(e.breakpoints.push(f[g].breakpoint),e.breakpointSettings[f[g].breakpoint]=f[g].settings);e.breakpoints.sort(function(a,b){return b-a})}e.autoPlay=a.proxy(e.autoPlay,e),e.autoPlayClear=a.proxy(e.autoPlayClear,e),e.changeSlide=a.proxy(e.changeSlide,e),e.clickHandler=a.proxy(e.clickHandler,e),e.selectHandler=a.proxy(e.selectHandler,e),e.setPosition=a.proxy(e.setPosition,e),e.swipeHandler=a.proxy(e.swipeHandler,e),e.dragHandler=a.proxy(e.dragHandler,e),e.keyHandler=a.proxy(e.keyHandler,e),e.autoPlayIterator=a.proxy(e.autoPlayIterator,e),e.instanceUid=b++,e.htmlExpr=/^(?:\s*(<[\w\W]+>)[^>]*)$/,e.init(),e.checkResponsive()}var b=0;return c}(),b.prototype.addSlide=function(b,c,d){var e=this;if("boolean"==typeof c)d=c,c=null;else if(0>c||c>=e.slideCount)return!1;e.unload(),"number"==typeof c?0===c&&0===e.$slides.length?a(b).appendTo(e.$slideTrack):d?a(b).insertBefore(e.$slides.eq(c)):a(b).insertAfter(e.$slides.eq(c)):d===!0?a(b).prependTo(e.$slideTrack):a(b).appendTo(e.$slideTrack),e.$slides=e.$slideTrack.children(this.options.slide),e.$slideTrack.children(this.options.slide).detach(),e.$slideTrack.append(e.$slides),e.$slides.each(function(b,c){a(c).attr("index",b)}),e.$slidesCache=e.$slides,e.reinit()},b.prototype.animateSlide=function(b,c){var d={},e=this;if(1===e.options.slidesToShow&&e.options.adaptiveHeight===!0&&e.options.vertical===!1){var f=e.$slides.eq(e.currentSlide).outerHeight(!0);e.$list.animate({height:f},e.options.speed)}e.options.rtl===!0&&e.options.vertical===!1&&(b=-b),e.transformsEnabled===!1?e.options.vertical===!1?e.$slideTrack.animate({left:b},e.options.speed,e.options.easing,c):e.$slideTrack.animate({top:b},e.options.speed,e.options.easing,c):e.cssTransitions===!1?a({animStart:e.currentLeft}).animate({animStart:b},{duration:e.options.speed,easing:e.options.easing,step:function(a){e.options.vertical===!1?(d[e.animType]="translate("+a+"px, 0px)",e.$slideTrack.css(d)):(d[e.animType]="translate(0px,"+a+"px)",e.$slideTrack.css(d))},complete:function(){c&&c.call()}}):(e.applyTransition(),d[e.animType]=e.options.vertical===!1?"translate3d("+b+"px, 0px, 0px)":"translate3d(0px,"+b+"px, 0px)",e.$slideTrack.css(d),c&&setTimeout(function(){e.disableTransition(),c.call()},e.options.speed))},b.prototype.asNavFor=function(b){var c=this,d=null!=c.options.asNavFor?a(c.options.asNavFor).getSlick():null;null!=d&&d.slideHandler(b,!0)},b.prototype.applyTransition=function(a){var b=this,c={};c[b.transitionType]=b.options.fade===!1?b.transformType+" "+b.options.speed+"ms "+b.options.cssEase:"opacity "+b.options.speed+"ms "+b.options.cssEase,b.options.fade===!1?b.$slideTrack.css(c):b.$slides.eq(a).css(c)},b.prototype.autoPlay=function(){var a=this;a.autoPlayTimer&&clearInterval(a.autoPlayTimer),a.slideCount>a.options.slidesToShow&&a.paused!==!0&&(a.autoPlayTimer=setInterval(a.autoPlayIterator,a.options.autoplaySpeed))},b.prototype.autoPlayClear=function(){var a=this;a.autoPlayTimer&&clearIntLine truncated
@@ -0,0 +1,116 @@
/* Slider */
.slick-slider
{
position: relative;
display: block;
-moz-box-sizing: border-box;
box-sizing: border-box;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
-webkit-touch-callout: none;
-khtml-user-select: none;
-ms-touch-action: pan-y;
touch-action: pan-y;
-webkit-tap-highlight-color: transparent;
}
.slick-list
{
position: relative;
display: block;
overflow: hidden;
margin: 0;
padding: 0;
}
.slick-list:focus
{
outline: none;
}
.slick-list.dragging
{
cursor: pointer;
cursor: hand;
}
.slick-slider .slick-track,
.slick-slider .slick-list
{
-webkit-transform: translate3d(0, 0, 0);
-moz-transform: translate3d(0, 0, 0);
-ms-transform: translate3d(0, 0, 0);
-o-transform: translate3d(0, 0, 0);
transform: translate3d(0, 0, 0);
}
.slick-track
{
position: relative;
top: 0;
left: 0;
display: block;
}
.slick-track:before,
.slick-track:after
{
display: table;
content: '';
}
.slick-track:after
{
clear: both;
}
.slick-loading .slick-track
{
visibility: hidden;
}
.slick-slide
{
display: none;
float: left;
height: 100%;
min-height: 1px;
}
[dir='rtl'] .slick-slide
{
float: right;
}
.slick-slide img
{
display: block;
}
.slick-slide.slick-loading img
{
display: none;
}
.slick-slide.dragging img
{
pointer-events: none;
}
.slick-initialized .slick-slide
{
display: block;
}
.slick-loading .slick-slide
{
visibility: hidden;
}
.slick-vertical .slick-slide
{
display: block;
height: auto;
border: 1px solid transparent;
}
@@ -0,0 +1,20 @@
/*
_ _ _ _
___| (_) ___| | __ (_)___
/ __| | |/ __| |/ / | / __|
\__ \ | | (__| < _ | \__ \
|___/_|_|\___|_|\_(_)/ |___/
|__/
Version: 1.5.0
Author: Ken Wheeler
Website: http://kenwheeler.github.io
Docs: http://kenwheeler.github.io/slick
Repo: http://github.com/kenwheeler/slick
Issues: http://github.com/kenwheeler/slick/issues
*/
/* global window, document, define, jQuery, setInterval, clearInterval */
!function(a){"use strict";"function"==typeof define&&define.amd?define(["jquery"],a):"undefined"!=typeof exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){"use strict";var b=window.Slick||{};b=function(){function c(c,d){var f,g,h,e=this;if(e.defaults={accessibility:!0,adaptiveHeight:!1,appendArrows:a(c),appendDots:a(c),arrows:!0,asNavFor:null,prevArrow:'<button type="button" data-role="none" class="slick-prev" aria-label="previous">Previous</button>',nextArrow:'<button type="button" data-role="none" class="slick-next" aria-label="next">Next</button>',autoplay:!1,autoplaySpeed:3e3,centerMode:!1,centerPadding:"50px",cssEase:"ease",customPaging:function(a,b){return'<button type="button" data-role="none">'+(b+1)+"</button>"},dots:!1,dotsClass:"slick-dots",draggable:!0,easing:"linear",edgeFriction:.35,fade:!1,focusOnSelect:!1,infinite:!0,initialSlide:0,lazyLoad:"ondemand",mobileFirst:!1,pauseOnHover:!0,pauseOnDotsHover:!1,respondTo:"window",responsive:null,rows:1,rtl:!1,slide:"",slidesPerRow:1,slidesToShow:1,slidesToScroll:1,speed:500,swipe:!0,swipeToSlide:!1,touchMove:!0,touchThreshold:5,useCSS:!0,variableWidth:!1,vertical:!1,verticalSwiping:!1,waitForAnimate:!0},e.initials={animating:!1,dragging:!1,autoPlayTimer:null,currentDirection:0,currentLeft:null,currentSlide:0,direction:1,$dots:null,listWidth:null,listHeight:null,loadIndex:0,$nextArrow:null,$prevArrow:null,slideCount:null,slideWidth:null,$slideTrack:null,$slides:null,sliding:!1,slideOffset:0,swipeLeft:null,$list:null,touchObject:{},transformsEnabled:!1},a.extend(e,e.initials),e.activeBreakpoint=null,e.animType=null,e.animProp=null,e.breakpoints=[],e.breakpointSettings=[],e.cssTransitions=!1,e.hidden="hidden",e.paused=!1,e.positionProp=null,e.respondTo=null,e.rowCount=1,e.shouldClick=!0,e.$slider=a(c),e.$slidesCache=null,e.transformType=null,e.transitionType=null,e.visibilityChange="visibilitychange",e.windowWidth=0,e.windowTimer=null,f=a(c).data("slick")||{},e.options=a.extend({},e.defaults,f,d),e.currentSlide=e.options.initialSlide,e.originalSettings=e.options,g=e.options.responsive||null,g&&g.length>-1){e.respondTo=e.options.respondTo||"window";for(h in g)g.hasOwnProperty(h)&&(e.breakpoints.push(g[h].breakpoint),e.breakpointSettings[g[h].breakpoint]=g[h].settings);e.breakpoints.sort(function(a,b){return e.options.mobileFirst===!0?a-b:b-a})}"undefined"!=typeof document.mozHidden?(e.hidden="mozHidden",e.visibilityChange="mozvisibilitychange"):"undefined"!=typeof document.msHidden?(e.hidden="msHidden",e.visibilityChange="msvisibilitychange"):"undefined"!=typeof document.webkitHidden&&(e.hidden="webkitHidden",e.visibilityChange="webkitvisibilitychange"),e.autoPlay=a.proxy(e.autoPlay,e),e.autoPlayClear=a.proxy(e.autoPlayClear,e),e.changeSlide=a.proxy(e.changeSlide,e),e.clickHandler=a.proxy(e.clickHandler,e),e.selectHandler=a.proxy(e.selectHandler,e),e.setPosition=a.proxy(e.setPosition,e),e.swipeHandler=a.proxy(e.swipeHandler,e),e.dragHandler=a.proxy(e.dragHandler,e),e.keyHandler=a.proxy(e.keyHandler,e),e.autoPlayIterator=a.proxy(e.autoPlayIterator,e),e.instanceUid=b++,e.htmlExpr=/^(?:\s*(<[\w\W]+>)[^>]*)$/,e.init(),e.checkResponsive(!0)}var b=0;return c}(),b.prototype.addSlide=b.prototype.slickAdd=function(b,c,d){var e=this;if("boolean"==typeof c)d=c,c=null;else if(0>c||c>=e.slideCount)return!1;e.unload(),"number"==typeof c?0===c&&0===e.$slides.length?a(b).appendTo(e.$slideTrack):d?a(b).insertBefore(e.$slides.eq(c)):a(b).insertAfter(e.$slides.eq(c)):d===!0?a(b).prependTo(e.$slideTrack):a(b).appendTo(e.$slideTrack),e.$slides=e.$slideTrack.children(this.options.slide),e.$slideTrack.children(this.options.slide).detach(),e.$slideTrack.append(e.$slides),e.$slides.each(function(b,c){a(c).attr("data-slick-index",b)}),e.$slidesCache=e.$slides,e.reinit()},b.prototype.animateHeight=function(){var a=this;if(1===a.options.slidesToShow&&a.options.adaptiveHeight===!0&&a.options.vertical===!1){var b=a.$slides.eq(a.currentSlide).outerHeight(!0);a.$list.animate({height:b},a.options.speed)}},b.prototype.animateSlide=function(b,c){var d={},e=this;e.animateHeight(),e.options.rtl===!0&&e.options.vertical===!1&&(b=-b),e.transformsEnabled===!1?e.options.vertical===!1?e.$slideTrack.animate({left:b},e.options.speed,e.options.easing,c):e.$slideTrack.animate({top:b},e.options.speed,e.options.easing,c):e.cssTransitions===!1?(e.options.rtl===!0&&(e.currentLeft=-e.currentLeft),a({animStart:e.currentLeft}).animate({animStart:b},{duration:e.options.speed,easing:e.options.easing,step:function(a){a=Math.ceil(a),e.options.vertical===!1?(d[e.animType]="translate("+a+"px, 0px)",e.$slideTrack.css(d)):(d[e.animType]="translate(0px,"+a+"px)",e.$slideTrack.css(d))},complete:function(){c&&c.call()}})):(e.applyTransition(),b=Math.ceil(b),d[e.animType]=e.options.vertical===!1?"translate3d("+b+"px, 0px, 0px)":"translate3d(0px,"+b+"px, 0px)",e.$slideTrack.css(d),c&&setTimeout(function(){e.disableTransition(),c.call()},e.options.speed))},b.prototype.asNavFor=function(b){var c=this,d=nLine truncated
if(!(b.options.swipe===!1||"ontouchend"in document&&b.options.swipe===!1||b.options.draggable===!1&&-1!==a.type.indexOf("mouse")))switch(b.touchObject.fingerCount=a.originalEvent&&void 0!==a.originalEvent.touches?a.originalEvent.touches.length:1,b.touchObject.minSwipe=b.listWidth/b.options.touchThreshold,b.options.verticalSwiping===!0&&(b.touchObject.minSwipe=b.listHeight/b.options.touchThreshold),a.data.action){case"start":b.swipeStart(a);break;case"move":b.swipeMove(a);break;case"end":b.swipeEnd(a)}},b.prototype.swipeMove=function(a){var d,e,f,g,h,b=this;return h=void 0!==a.originalEvent?a.originalEvent.touches:null,!b.dragging||h&&1!==h.length?!1:(d=b.getLeft(b.currentSlide),b.touchObject.curX=void 0!==h?h[0].pageX:a.clientX,b.touchObject.curY=void 0!==h?h[0].pageY:a.clientY,b.touchObject.swipeLength=Math.round(Math.sqrt(Math.pow(b.touchObject.curX-b.touchObject.startX,2))),b.options.verticalSwiping===!0&&(b.touchObject.swipeLength=Math.round(Math.sqrt(Math.pow(b.touchObject.curY-b.touchObject.startY,2)))),e=b.swipeDirection(),"vertical"!==e?(void 0!==a.originalEvent&&b.touchObject.swipeLength>4&&a.preventDefault(),g=(b.options.rtl===!1?1:-1)*(b.touchObject.curX>b.touchObject.startX?1:-1),b.options.verticalSwiping===!0&&(g=b.touchObject.curY>b.touchObject.startY?1:-1),f=b.touchObject.swipeLength,b.touchObject.edgeHit=!1,b.options.infinite===!1&&(0===b.currentSlide&&"right"===e||b.currentSlide>=b.getDotCount()&&"left"===e)&&(f=b.touchObject.swipeLength*b.options.edgeFriction,b.touchObject.edgeHit=!0),b.swipeLeft=b.options.vertical===!1?d+f*g:d+f*(b.$list.height()/b.listWidth)*g,b.options.verticalSwiping===!0&&(b.swipeLeft=d+f*g),b.options.fade===!0||b.options.touchMove===!1?!1:b.animating===!0?(b.swipeLeft=null,!1):(b.setCSS(b.swipeLeft),void 0)):void 0)},b.prototype.swipeStart=function(a){var c,b=this;return 1!==b.touchObject.fingerCount||b.slideCount<=b.options.slidesToShow?(b.touchObject={},!1):(void 0!==a.originalEvent&&void 0!==a.originalEvent.touches&&(c=a.originalEvent.touches[0]),b.touchObject.startX=b.touchObject.curX=void 0!==c?c.pageX:a.clientX,b.touchObject.startY=b.touchObject.curY=void 0!==c?c.pageY:a.clientY,b.dragging=!0,void 0)},b.prototype.unfilterSlides=b.prototype.slickUnfilter=function(){var a=this;null!==a.$slidesCache&&(a.unload(),a.$slideTrack.children(this.options.slide).detach(),a.$slidesCache.appendTo(a.$slideTrack),a.reinit())},b.prototype.unload=function(){var b=this;a(".slick-cloned",b.$slider).remove(),b.$dots&&b.$dots.remove(),b.$prevArrow&&"object"!=typeof b.options.prevArrow&&b.$prevArrow.remove(),b.$nextArrow&&"object"!=typeof b.options.nextArrow&&b.$nextArrow.remove(),b.$slides.removeClass("slick-slide slick-active slick-visible").attr("aria-hidden","true").css("width","")},b.prototype.unslick=function(){var a=this;a.destroy()},b.prototype.updateArrows=function(){var b,a=this;b=Math.floor(a.options.slidesToShow/2),a.options.arrows===!0&&a.options.infinite!==!0&&a.slideCount>a.options.slidesToShow&&(a.$prevArrow.removeClass("slick-disabled"),a.$nextArrow.removeClass("slick-disabled"),0===a.currentSlide?(a.$prevArrow.addClass("slick-disabled"),a.$nextArrow.removeClass("slick-disabled")):a.currentSlide>=a.slideCount-a.options.slidesToShow&&a.options.centerMode===!1?(a.$nextArrow.addClass("slick-disabled"),a.$prevArrow.removeClass("slick-disabled")):a.currentSlide>=a.slideCount-1&&a.options.centerMode===!0&&(a.$nextArrow.addClass("slick-disabled"),a.$prevArrow.removeClass("slick-disabled")))},b.prototype.updateDots=function(){var a=this;null!==a.$dots&&(a.$dots.find("li").removeClass("slick-active").attr("aria-hidden","true"),a.$dots.find("li").eq(Math.floor(a.currentSlide/a.options.slidesToScroll)).addClass("slick-active").attr("aria-hidden","false"))},b.prototype.visibility=function(){var a=this;document[a.hidden]?(a.paused=!0,a.autoPlayClear()):(a.paused=!1,a.autoPlay())},a.fn.slick=function(){var g,a=this,c=arguments[0],d=Array.prototype.slice.call(arguments,1),e=a.length,f=0;for(f;e>f;f++)if("object"==typeof c||"undefined"==typeof c?a[f].slick=new b(a[f],c):g=a[f].slick[c].apply(a[f].slick,d),"undefined"!=typeof g)return g;return a}});
@@ -0,0 +1,90 @@
@charset 'UTF-8';
/* Dots */
.slick-slider
{
margin-bottom: 30px;
}
.slick-dots
{
position: absolute;
bottom: -45px;
display: block;
width: 100%;
padding: 0;
list-style: none;
text-align: center;
}
.slick-dots li
{
position: relative;
display: inline-block;
width: 20px;
height: 20px;
margin: 0 5px;
padding: 0;
cursor: pointer;
}
.slick-dots li button
{
font-size: 0;
line-height: 0;
display: block;
width: 20px;
height: 20px;
padding: 5px;
cursor: pointer;
color: transparent;
border: 0;
outline: none;
background: transparent;
}
.slick-dots li button:hover,
.slick-dots li button:focus
{
outline: none;
}
.slick-dots li button:hover:before,
.slick-dots li button:focus:before
{
opacity: 1;
}
.slick-dots li button:before
{
font-family: 'slick';
font-size: 6px;
line-height: 20px;
position: absolute;
top: 0;
left: 0;
width: 20px;
height: 20px;
content: '•';
text-align: center;
opacity: .25;
color: black;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.slick-dots li.slick-active button:before
{
opacity: .75;
color: black;
}
+6
View File
@@ -68,6 +68,12 @@
<version>1.0.0-SNAPSHOT</version>
<classifier>sources</classifier>
</dependency>
<dependency>
<groupId>com.sap.sailing</groupId>
<artifactId>com.sap.sse.gwt.theme</artifactId>
<version>1.0.0-SNAPSHOT</version>
<classifier>sources</classifier>
</dependency>
<dependency>
<groupId>com.sap.sailing</groupId>
<artifactId>com.sap.sse.gwt.adminconsole</artifactId>
@@ -5,6 +5,8 @@ import com.google.gwt.place.shared.Place;
import com.google.gwt.place.shared.PlaceController;
import com.google.web.bindery.event.shared.EventBus;
import com.sap.sailing.gwt.autoplay.client.place.start.StartPlace;
import com.sap.sailing.gwt.home.client.HomeService;
import com.sap.sailing.gwt.home.client.HomeServiceAsync;
import com.sap.sailing.gwt.ui.client.MediaService;
import com.sap.sailing.gwt.ui.client.MediaServiceAsync;
import com.sap.sailing.gwt.ui.client.SailingService;
@@ -13,6 +15,7 @@ import com.sap.sse.security.ui.client.SecureClientFactoryImpl;
public abstract class AbstractApplicationClientFactory extends SecureClientFactoryImpl implements AutoPlayAppClientFactory {
private final SailingServiceAsync sailingService;
private final HomeServiceAsync homeService;
private final MediaServiceAsync mediaService;
private final PlaceNavigator navigator;
@@ -20,6 +23,7 @@ public abstract class AbstractApplicationClientFactory extends SecureClientFacto
super(root, eventBus, placeController);
navigator = new PlaceNavigatorImpl(placeController);
sailingService = GWT.create(SailingService.class);
homeService = GWT.create(HomeService.class);
mediaService = GWT.create(MediaService.class);
}
@@ -33,6 +37,11 @@ public abstract class AbstractApplicationClientFactory extends SecureClientFacto
return sailingService;
}
@Override
public HomeServiceAsync getHomeService() {
return homeService;
}
@Override
public MediaServiceAsync getMediaService() {
return mediaService;
@@ -7,7 +7,7 @@
<g:HTMLPanel>
<s:header.SAPHeader ui:field="sapHeader" />
<div style="height:1em;" />
<div class="{res.mainCss.grid}" style="padding-bottom:1em;">
<div class="{res.mediaCss.grid}" style="padding-bottom:1em;">
<div class="{res.mediaCss.small2} {res.mediaCss.columns}">
<span>Display language:</span>
</div>
@@ -15,7 +15,7 @@
<g:ListBox ui:field="localeSelectionBox" />
</div>
</div>
<div class="{res.mainCss.grid}" style="padding-bottom:1em;">
<div class="{res.mediaCss.grid}" style="padding-bottom:1em;">
<div class="{res.mediaCss.small2} {res.mediaCss.columns}">
<span>Start browser in full screen mode:</span>
</div>
@@ -23,7 +23,7 @@
<g:CheckBox ui:field="startInFullscreenModeBox" />
</div>
</div>
<div class="{res.mainCss.grid}" style="padding-bottom:1em;">
<div class="{res.mediaCss.grid}" style="padding-bottom:1em;">
<div class="{res.mediaCss.small2} {res.mediaCss.columns}">
<span>Event:</span>
</div>
@@ -31,7 +31,7 @@
<g:ListBox ui:field="eventSelectionBox" />
</div>
</div>
<div ui:field="leaderboardSelectionDiv" class="{res.mainCss.grid}" style="padding-bottom:1em;">
<div ui:field="leaderboardSelectionDiv" class="{res.mediaCss.grid}" style="padding-bottom:1em;">
<div class="{res.mediaCss.small2} {res.mediaCss.columns}">
<span>Leaderboard:</span>
</div>
@@ -39,7 +39,7 @@
<g:ListBox ui:field="leaderboardSelectionBox" />
</div>
</div>
<div ui:field="leaderboardAutoZoomDiv" class="{res.mainCss.grid}" style="padding-bottom:1em;">
<div ui:field="leaderboardAutoZoomDiv" class="{res.mediaCss.grid}" style="padding-bottom:1em;">
<div class="{res.mediaCss.small2} {res.mediaCss.columns}">
<span>Leaderboard Auto-Zoom:</span>
</div>
@@ -47,7 +47,7 @@
<g:CheckBox ui:field="leaderboardAutoZoomBox" />
</div>
</div>
<div ui:field="leaderboardZoomDiv" class="{res.mainCss.grid}" style="padding-bottom:1em;">
<div ui:field="leaderboardZoomDiv" class="{res.mediaCss.grid}" style="padding-bottom:1em;">
<div class="{res.mediaCss.small2} {res.mediaCss.columns}">
<span>Leaderboard Zoom-Factor:</span>
</div>
@@ -55,7 +55,7 @@
<g:TextBox ui:field="leaderboardZoomBox" />
</div>
</div>
<div class="{res.mainCss.grid}" style="padding-bottom:1em;">
<div class="{res.mediaCss.grid}" style="padding-bottom:1em;">
<div class="{res.mediaCss.small2} {res.mediaCss.columns}">
<span>Auto-Play video:</span>
</div>
@@ -63,7 +63,7 @@
<g:CheckBox ui:field="autoSelectMediaBox" />
</div>
</div>
<div class="{res.mainCss.grid}">
<div class="{res.mediaCss.grid}">
<div class="{res.mediaCss.small2} {res.mediaCss.columns}">
&nbsp;
</div>
@@ -0,0 +1,67 @@
package com.sap.sailing.gwt.common.client;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.logging.Logger;
import com.google.gwt.place.shared.Place;
import com.google.gwt.place.shared.PlaceTokenizer;
public abstract class AbstractMapTokenizer<P extends Place> implements PlaceTokenizer<P> {
private static final Logger logger = Logger.getLogger(AbstractMapTokenizer.class.getName());
@Override
public P getPlace(String token) {
return getPlaceFromParameters(toParameterMap(token));
}
protected abstract P getPlaceFromParameters(Map<String, String> parameters);
protected abstract Map<String, String> getParameters(P place);
@Override
public String getToken(P place) {
return toToken(getParameters(place));
}
private String toToken(Map<String, String> parameters) {
StringBuilder stringBuilder = new StringBuilder();
for (Map.Entry<String, String> entry : parameters.entrySet()) {
if(entry.getValue() == null || entry.getValue().isEmpty()) {
continue;
}
if(stringBuilder.length() > 0) {
stringBuilder.append("&");
}
stringBuilder.append(entry.getKey() + "=" + entry.getValue());
}
return stringBuilder.toString();
}
private Map<String, String> toParameterMap(String placeParametersAsToken) {
List<String> list = Arrays.asList(placeParametersAsToken.split("&"));
if (list == null || list.size() < 1) {
logger.warning("Token empty, no-op");
Collections.emptyMap();
}
Map<String, String> result = new HashMap<>();
for (String listItem : list) {
String[] nvPair = listItem.split("=");
if (nvPair == null || nvPair.length != 2) {
logger.warning("Invalid parameters");
continue;
}
result.put(nvPair[0], nvPair[1]);
}
return result;
}
}
@@ -57,4 +57,10 @@ public class DateUtil {
Date now = new Date();
return date.before(now) && !isToday(date);
}
public static int daysFromNow(Date date) {
long day = date.getTime() / DAY_IN_MILLIS;
long today= new Date().getTime() / DAY_IN_MILLIS;
return (int) (day - today);
}
}
@@ -0,0 +1,19 @@
package com.sap.sailing.gwt.common.client;
import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.Event;
import com.google.gwt.user.client.ui.impl.HyperlinkImpl;
public final class LinkUtil {
private static final HyperlinkImpl HYPERLINK_IMPL = GWT.create(HyperlinkImpl.class);
private LinkUtil() {
}
public static boolean handleLinkClick(Event event) {
if(event.getTypeInt() != Event.ONCLICK) {
return false;
}
return HYPERLINK_IMPL.handleAsClick(event);
}
}
@@ -3,7 +3,6 @@ package com.sap.sailing.gwt.common.client;
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.CssResource.Shared;
public interface SharedResources extends ClientBundle {
public static final SharedResources INSTANCE = GWT.create(SharedResources.class);
@@ -14,20 +13,24 @@ public interface SharedResources extends ClientBundle {
@Source("com/sap/sailing/gwt/home/media.gss")
MediaCss mediaCss();
@Shared
public interface MainCss extends CssResource {
String grid();
String stackenblochen();
public interface MainCss extends CssResource{
String wrapper();
String navbar();
String navbar_button();
String navbar_buttonhidden();
String navbar_buttonactive();
String button();
String buttonsmall();
String buttonstrong();
String buttoninactive();
String buttonprimary();
String buttonred();
String buttonrefresh();
String buttonsearch();
String buttonarrowdown();
String buttonsearch();
String buttonarrowrightwhite();
String label();
String labellarge();
String morelink();
String dummy();
String mainsection();
@@ -36,22 +39,19 @@ public interface SharedResources extends ClientBundle {
String mainsection_navigation();
String lightbox();
String lightbox_overlay();
String lightbox_overlayhidden();
String lightbox_content();
String lightbox_contenthidden();
String lightbox_content_enlargeditem();
String lightbox_content_enlargeditem_caption();
String lightbox_content_enlargeditem_close();
String media_slideshow_controls();
String lightbox_data();
String lightbox_item();
String lightbox_close();
String stickyheader();
String slideto();
String slidetonav();
String slidetoactive();
}
@Shared
public interface MediaCss extends CssResource {
public interface MediaCss extends CssResource{
String grid();
String stackenblochen();
String column();
String columns();
String small1();
String small2();
String small3();
@@ -76,11 +76,14 @@ public interface SharedResources extends ClientBundle {
String smalloffset9();
String smalloffset10();
String smalloffset11();
String smallcentered();
String smalluncentered();
String showonsmall();
String hideonsmall();
String showonmedium();
String hideonmedium();
String showonlarge();
String hideonlarge();
String smallcentered();
String smalluncentered();
String medium1();
String medium2();
String medium3();
@@ -107,9 +110,6 @@ public interface SharedResources extends ClientBundle {
String mediumoffset11();
String mediumcentered();
String mediumuncentered();
String showonmedium();
String hideonmedium();
String large1();
String large2();
String large3();
@@ -136,9 +136,5 @@ public interface SharedResources extends ClientBundle {
String largeoffset11();
String largecentered();
String largeuncentered();
String showonlarge();
String hideonlarge();
}
}
@@ -0,0 +1,35 @@
@CHARSET "UTF-8";
.event_header__breadcrumb {
font-size: 15px;
font-size: 1rem;
font-size: 0.866666666666667em;
font-weight: 600;
padding: 0.666666666666667em 0;
}
.event_header__breadcrumb__item {
position: relative;
display: inline-block;
padding-left: 1.923076923076923em;
color: #666;
}
.event_header__breadcrumb__item:before {
content: ' ';
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAUCAYAAAC58NwRAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYxIDY0LjE0MDk0OSwgMjAxMC8xMi8wNy0xMDo1NzowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNS4xIE1hY2ludG9zaCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo2OUUzNjU2OTYyN0ExMUU0OTkzRUFBMUUyRUFGQjM4NyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo2OUUzNjU2QTYyN0ExMUU0OTkzRUFBMUUyRUFGQjM4NyI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjY5RTM2NTY3NjI3QTExRTQ5OTNFQUExRTJFQUZCMzg3IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjY5RTM2NTY4NjI3QTExRTQ5OTNFQUExRTJFQUZCMzg3Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+yfJlBgAAAK5JREFUeNpinDlz5goGBgZXIM4F4mUMBAATEDsBsRAQLwLiKGI0RADxdyBmJkYTSMM+IPYkVhMTlD5IrCYmJDZRmpjQ+CBNbvg0MWGx9Qg+TUw4/IZTExOeEIRp+oKkSZeJgTTAhk+DDRBvB2IeIP4LxIlAfJaJBMWLQRIsOBTvAmJOdMXYPI1XMboGe0KKkTXYQ92MVzFyfiBKMUzDCmIVI+eHd0AcR0gxCAAEGACmPjby/HEDIgAAAABJRU5ErkJggg==");
height: 100%;
width: 6px;
position: absolute;
background-size: contain;
background-position: center center;
background-repeat: no-repeat;
left: 0.666666666666667em;
}
.event_header__breadcrumb__item:first-of-type {
padding-left: 0;
}
.event_header__breadcrumb__item:first-of-type:before {
display: none;
}
@@ -0,0 +1,80 @@
package com.sap.sailing.gwt.common.client.controls.tabbar;
import com.google.gwt.core.shared.GWT;
import com.google.gwt.dom.client.AnchorElement;
import com.google.gwt.dom.client.DivElement;
import com.google.gwt.dom.client.Document;
import com.google.gwt.resources.client.ClientBundle;
import com.google.gwt.resources.client.CssResource;
import com.google.gwt.safehtml.shared.SafeUri;
import com.google.gwt.safehtml.shared.UriUtils;
import com.google.gwt.user.client.Event;
import com.google.gwt.user.client.EventListener;
import com.google.gwt.user.client.ui.Widget;
import com.sap.sailing.gwt.common.client.LinkUtil;
/**
* @author zhorvath
*
*/
public class BreadcrumbPane extends Widget {
interface Resources extends ClientBundle {
@Source("Breadcrumb.css")
Style style();
}
interface Style extends CssResource {
String event_header__breadcrumb();
String event_header__breadcrumb__item();
}
private static Resources resources;
private static Resources getResources() {
if (resources == null) {
resources = GWT.create(Resources.class);
resources.style().ensureInjected();
}
return resources;
}
private final Style style = getResources().style();
private final DivElement breadcrumDiv;
public BreadcrumbPane() {
breadcrumDiv = Document.get().createDivElement();
breadcrumDiv.addClassName(style.event_header__breadcrumb());
setElement(breadcrumDiv);
}
public void addBreadcrumbItem(String title, String link, final Runnable runnable) {
addBreadcrumbItem(title, UriUtils.fromString(link), runnable);
}
public void addBreadcrumbItem(String title, SafeUri link, final Runnable runnable) {
AnchorElement breadcrumItem = Document.get().createAnchorElement();
breadcrumItem.setHref(link);
breadcrumItem.setInnerText(title);
breadcrumItem.addClassName(style.event_header__breadcrumb__item());
breadcrumDiv.appendChild(breadcrumItem);
Event.sinkEvents(breadcrumItem, Event.ONCLICK);
Event.setEventListener(breadcrumItem, new EventListener() {
@Override
public void onBrowserEvent(Event event) {
if (LinkUtil.handleLinkClick(event)) {
event.stopPropagation();
event.preventDefault();
runnable.run();
}
}
});
}
}
@@ -0,0 +1,118 @@
package com.sap.sailing.gwt.common.client.controls.tabbar;
import java.util.ArrayList;
import java.util.List;
import com.google.gwt.core.shared.GWT;
import com.google.gwt.dom.client.AnchorElement;
import com.google.gwt.dom.client.DivElement;
import com.google.gwt.dom.client.Document;
import com.google.gwt.dom.client.Element;
import com.google.gwt.dom.client.EventTarget;
import com.google.gwt.event.logical.shared.HasSelectionHandlers;
import com.google.gwt.event.logical.shared.SelectionEvent;
import com.google.gwt.event.logical.shared.SelectionHandler;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.place.shared.Place;
import com.google.gwt.user.client.Event;
import com.google.gwt.user.client.ui.Widget;
import com.sap.sailing.gwt.common.client.LinkUtil;
import com.sap.sailing.gwt.common.client.SharedResources;
import com.sap.sailing.gwt.common.client.SharedResources.MainCss;
/**
* Capsulates functionality for a tab bar.
*
* @author zhorvath
*
*/
public class TabBar extends Widget implements HasSelectionHandlers<Class<Place>> {
private final MainCss style = SharedResources.INSTANCE.mainCss();
private final List<Class<Place>> knownPlaceClasses = new ArrayList<>();
private final DivElement tabBarDiv;
public TabBar() {
tabBarDiv = Document.get().createDivElement();
tabBarDiv.addClassName(style.navbar());
setElement(tabBarDiv);
sinkEvents(Event.ONCLICK);
}
@Override
public void onBrowserEvent(Event event) {
EventTarget eventTarget = event.getEventTarget();
if (Element.is(eventTarget)) {
// An event target can be any JavaScript object, but we are interested in events related to DOM events only
Element element = eventTarget.cast();
if (LinkUtil.handleLinkClick(event)) {
// The user clicked somewhere into the tab bar -> we have to find the tab that was clicked
for (int i = 0; i < tabBarDiv.getChildCount(); i++) {
if (tabBarDiv.getChild(i).isOrHasChild(element)) {
event.stopPropagation();
event.preventDefault();
// the specific tab was clicked -> fire SelectionEvent with the associated place
GWT.log("Found " + knownPlaceClasses.get(i));
SelectionEvent.fire(this, knownPlaceClasses.get(i));
break;
}
}
}
}
super.onBrowserEvent(event);
}
/**
* Selects the tab associated with the given place.
*
* @param place
* the place that should get selected.
*/
public void select(Place place) {
GWT.log("Should activate: " + place.getClass().getName());
// remove all previous selections
for (int i = 0; i < tabBarDiv.getChildCount(); i++) {
Element.as(tabBarDiv.getChild(i)).removeClassName(style.navbar_buttonactive());
}
// find the tab that has to be selected for the given place
for (int i = 0; i < knownPlaceClasses.size(); i++) {
if (place.getClass().equals(knownPlaceClasses.get(i))) {
GWT.log("Activate: " + place.getClass().getName());
// found the associated tab -> set the selected style.
Element.as(tabBarDiv.getChild(i)).addClassName(style.navbar_buttonactive());
}
}
}
/**
* Adds a tab with an associated place to be fired when the tab is selected
*
* TODO: create custom widget for tab
*
* @param title
* the label of the tab header.
* @param place
* the place that should be associated with the tab.
*/
public void addTab(String title, Class<Place> place, String link) {
AnchorElement tabElement = Document.get().createAnchorElement();
tabElement.setHref(link);
tabElement.setInnerText(title);
tabElement.addClassName(style.navbar_button());
tabBarDiv.appendChild(tabElement);
knownPlaceClasses.add(place);
}
/** {@inheritDoc} */
@Override
public HandlerRegistration addSelectionHandler(SelectionHandler<Class<Place>> handler) {
return addHandler(handler, SelectionEvent.getType());
}
}
@@ -0,0 +1,181 @@
package com.sap.sailing.gwt.common.client.controls.tabbar;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.logical.shared.SelectionEvent;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.place.shared.Place;
import com.google.gwt.place.shared.PlaceHistoryMapper;
import com.google.gwt.safehtml.shared.SafeUri;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiChild;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.uibinder.client.UiHandler;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.IsWidget;
import com.google.gwt.user.client.ui.SimplePanel;
import com.google.gwt.user.client.ui.Widget;
import com.sap.sailing.gwt.common.client.controls.tabbar.TabView.State;
/**
* Defines whole layout for site, including the header with the breadcrumbs and tab bar, and the content.
* <p/>
* Created by pgtaboada on 25.11.14.
*/
public class TabPanel<PRESENTER> extends Composite {
private static TabPanelUiBinder ourUiBinder = GWT.create(TabPanelUiBinder.class);
private final Map<Class<Place>, TabView<Place, PRESENTER>> knownTabs = new LinkedHashMap<>();
private final Map<Class<Place>, String> knownTabTitles = new HashMap<>();
@UiField
SimplePanel additionalHeader;
@UiField
SimplePanel tabContentPanelUi;
@UiField
TabBar tabBar;
@UiField BreadcrumbPane breadcrumbs;
@UiField FlowPanel tabExtension;
private TabView<Place, PRESENTER> currentTab;
private final PlaceHistoryMapper historyMapper;
private final PRESENTER presenter;
public TabPanel(PRESENTER presenter, PlaceHistoryMapper historyMapper) {
this.presenter = presenter;
this.historyMapper = historyMapper;
initWidget(ourUiBinder.createAndBindUi(this));
}
public TabView<?, PRESENTER> getCurrentTab() {
return currentTab;
}
@UiChild
public void addHeader(Widget widget) {
additionalHeader.setWidget(widget);
}
/**
* Adds all tabs to the tab bar.
*
* @param tab
* The tab to add
* @param title
* The label for the tab.
*/
@UiChild
public void addTabContent(final TabView<Place, PRESENTER> tab, String title) {
GWT.log("Adding TAB: " + title);
// TODO: check if place class already known, reject...
tab.setPresenter(presenter);
final Class<Place> classForActivation = tab.getPlaceClassForActivation();
knownTabs.put(classForActivation, tab);
knownTabTitles.put(classForActivation, title);
if(tab.getState() == State.VISIBLE) {
String link = "#" + historyMapper.getToken(tab.placeToFire());
tabBar.addTab(title, classForActivation, link);
}
}
/**
* Handles given SelectionEvent, when tab is clicked. Fires a TabPanelPlaceSelectionEvent. The listener to this
* event should properly fire place change events.
*
* @param event
*/
@UiHandler("tabBar")
void onTabSelection(SelectionEvent<Class<Place>> event) {
TabView<?, PRESENTER> selectedTabActivity = knownTabs.get(event.getSelectedItem());
if (selectedTabActivity != null) {
GWT.log("Tab selection: " + selectedTabActivity.getPlaceClassForActivation().getName());
if (currentTab != null) {
currentTab.stop();
}
fireEvent(new TabPanelPlaceSelectionEvent(selectedTabActivity));
}
}
/**
* Starts the tab Activity and selects the tab based on the given Place.
*
* @param placeToGo
* the given place.
*/
public void activatePlace(Place placeToGo) {
if (knownTabs.containsKey(placeToGo.getClass())) {
final TabView<Place, PRESENTER> newTab = knownTabs.get(placeToGo.getClass());
if (newTab.getState() == State.NOT_AVAILABLE_REDIRECT
|| newTab.getState() == State.NOT_AVAILABLE_SHOW_NEXT_AVAILABLE) {
for(TabView<Place, PRESENTER> tab : knownTabs.values()) {
if(tab.getState() == State.VISIBLE) {
// TODO is this redirect wanted? Just silently select another tab?
if (currentTab != null) {
currentTab.stop();
}
if (newTab.getState() == State.NOT_AVAILABLE_REDIRECT) {
fireEvent(new TabPanelPlaceSelectionEvent(tab));
} else {
activatePlace(tab.placeToFire());
}
return;
}
}
}
newTab.start(placeToGo, tabContentPanelUi);
tabBar.select(placeToGo);
currentTab = newTab;
}
}
/**
* Directly sets the content of the current widget until it is reloaded/ reset
*
* @param widget
*/
public void overrideCurrentContentInTab(IsWidget widget) {
tabContentPanelUi.setWidget(widget);
}
public void addBreadcrumbItem(String title, String link, final Runnable runnable) {
breadcrumbs.addBreadcrumbItem(title, link, runnable);
}
public void addBreadcrumbItem(String title, SafeUri link, final Runnable runnable) {
breadcrumbs.addBreadcrumbItem(title, link, runnable);
}
public HandlerRegistration addTabPanelPlaceSelectionEventHandler(TabPanelPlaceSelectionEvent.Handler handler) {
return addHandler(handler, TabPanelPlaceSelectionEvent.TYPE);
}
interface TabPanelUiBinder extends UiBinder<FlowPanel, TabPanel<?>> {
}
public String getCurrentTabTitle() {
if (currentTab == null)
return null;
return knownTabTitles.get(currentTab.getPlaceClassForActivation());
}
@UiChild
public void addTabExtension(IsWidget widget) {
tabExtension.add(widget);
}
}
@@ -0,0 +1,63 @@
<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'
xmlns:g='urn:import:com.google.gwt.user.client.ui' xmlns:c="urn:import:com.sap.sailing.gwt.common.client.controls.tabbar">
<ui:with field="res"
type="com.sap.sailing.gwt.common.client.SharedResources" />
<ui:style>
.header {
position: relative;
font-size: 1rem;
color: #666;
background: #f2f2f2;
border-bottom: 1px solid #dedede;
}
.breadcrumb {
font-size: 1rem;
/* @alternate */ font-size: 0.866666666666667em;
font-weight: 600;
padding: 0.666666666666667em 0;
}
.back:hover {
background-color: #cfcfcf;
}
.content {
width: 100%;
height: 100%;
}
.navigation {
/* font-size: 0; */
margin-bottom: -1px;
}
.navigation a{
border-top-left-radius:4px;
border-top-right-radius:4px;
}
.tabExtension {
float: right;
margin-left: 0.5em;
}
</ui:style>
<g:FlowPanel>
<g:HTMLPanel addStyleNames="{style.header}">
<div class="{res.mediaCss.grid}">
<div class="{res.mediaCss.small12} {res.mediaCss.columns}">
<c:BreadcrumbPane ui:field="breadcrumbs"
addStyleNames="{style.breadcrumb}" />
</div>
</div>
<g:SimplePanel ui:field="additionalHeader" />
<div class="{res.mediaCss.grid}">
<div class="{res.mediaCss.small12} {res.mediaCss.columns}">
<g:FlowPanel ui:field="tabExtension" addStyleNames="{style.tabExtension}" />
<c:TabBar ui:field="tabBar"
addStyleNames="{style.navigation}" />
</div>
</div>
</g:HTMLPanel>
<g:SimplePanel ui:field="tabContentPanelUi"
addStyleNames="{style.content}" />
</g:FlowPanel>
</ui:UiBinder>
@@ -0,0 +1,40 @@
package com.sap.sailing.gwt.common.client.controls.tabbar;
import com.google.gwt.event.shared.EventHandler;
import com.google.gwt.event.shared.GwtEvent;
/**
* Created by pgtaboada on 01.12.14.
*/
public class TabPanelPlaceSelectionEvent extends GwtEvent<TabPanelPlaceSelectionEvent.Handler> {
public final static Type<Handler> TYPE = new Type<Handler>();
private TabView<?, ?> selectedActivity;
public TabPanelPlaceSelectionEvent(TabView<?, ?> selectedActivity) {
this.selectedActivity = selectedActivity;
}
@Override
public Type<Handler> getAssociatedType() {
return TYPE;
}
public TabView<?, ?> getSelectedActivity() {
return selectedActivity;
}
@Override
protected void dispatch(Handler handler) {
handler.onTabSelected(this);
}
public interface Handler extends EventHandler {
void onTabSelected(TabPanelPlaceSelectionEvent event);
}
}
@@ -0,0 +1,44 @@
package com.sap.sailing.gwt.common.client.controls.tabbar;
import com.google.gwt.place.shared.Place;
import com.google.gwt.user.client.ui.AcceptsOneWidget;
/**
* Defines lifecycle handling for the tab view.
* <p/>
* <p/>
* Created by pgtaboada on 25.11.14.
*/
public interface TabView<PLACE extends Place, PRESENTER> {
public enum State {
VISIBLE, INVISIBLE, NOT_AVAILABLE_REDIRECT, NOT_AVAILABLE_SHOW_NEXT_AVAILABLE
}
/**
* The place type that activates this tab.
*
* @return
*/
Class<PLACE> getPlaceClassForActivation();
/**
* Lifecycle method that triggers tab view start
*
* @param placeToGo
* @param contentArea
*/
void start(PLACE requestedPlace, AcceptsOneWidget contentArea);
void setPresenter(PRESENTER presenter);
/**
* Tells the tab that it is going to be deactiviated (not visible anymore), because of tab switch
*/
void stop();
PLACE placeToFire();
// TODO implement as defender method when Java 8 is ready as this is "VISIBLE" in most cases
State getState();
}
@@ -1,8 +1,11 @@
package com.sap.sailing.gwt.common.client.i18n;
import com.google.gwt.core.client.GWT;
import com.google.gwt.i18n.client.LocalizableResource.DefaultLocale;
import com.google.gwt.i18n.client.Messages;
@DefaultLocale("en")
public interface TextMessages extends Messages {
public static final TextMessages INSTANCE = GWT.create(TextMessages.class);
@@ -66,7 +66,7 @@ eventHeaderOverview=Overview
eventHeaderRaces=Schedule
eventHeaderRegattas=Regattas
seriesHeaderOverview=About the Series
seriesHeaderUpcoming=Upcoming Events
seriesHeaderUpcoming=Upcoming
seriesHeaderRecent=Recent Events
seriesHeaderLeaderboard=Leaderboard
seriesOverviewHeaderRecent=Latest Series Events
@@ -113,15 +113,15 @@ eventRegattaRacesLegendAudio=Audio Stream
eventSponsorsTitle=Event Sponsorships
footerJobs=Jobs
footerCopyright=\u00A9 2015 SAP Sailing Analytics
footerLanguage=SAP Sailing offered in
footerLanguage=SAP Sailing in
footerLegal=Legal Disclosure
footerPrivacy=Privacy
footerFeedback=Feedback
headerEvents=Events
headerHome=Home
headerLogo=SAP Sailing Analytics
headerLogo=Sailing Analytics
headerSearch=Search
headerSearchPlaceholder=Search SAPSailing.com
headerSearchPlaceholder=Search
headerSolutions=Solutions
headerSponsoring=Sponsoring
latestRaceResultsHeadline=Latest Official Race Results
@@ -0,0 +1,183 @@
socialFooterShare=Share this on
home=主页
aboutUs=关于我们
contact=联络
sponsoring=赞助商
solutions=解决方案
events=比赛
german=德语
english=英语
officalEventWebsite=官方活动网站
leg=站
races=赛事
moreInfo=更多信息
viewAnalysis=观看分析
overallLeaderboard=总排行榜
pleaseEnterASearchTerm=请输入搜索词
pleaseTryAgain=请再试一次
reloadPage=重新载入页面
errorMessageLoadingData=加载该页的数据时出错
errorMessageNoSuchLeaderboard=无法利用这词寻找排行榜
raceNotScheduled=没有确认时间
regattaDetails=帆船赛细节
regatta=帆船赛
competitorsAnalytics=队伍分析
chooseChart=选择图标类型
series=系列
regattaLeaderboards=帆船赛排行榜
features=功能
releaseNotes=软件更新发布
whatsNew=最新信息
overview=概览
sapSailing=SAP帆船
search=搜索
startSimulator=启动模拟器
live=实时
finished=结束
watchNow=马上观看
lastUpdate=最后更新
leaderboard=排行榜
eventHeaderMedia=媒体
eventHeaderOverview=概览
eventHeaderRaces=赛程
eventHeaderRegattas=帆船赛
seriesHeaderOverview=关于比赛系列
seriesHeaderUpcoming=未来赛事
seriesHeaderRecent=最近赛事
seriesHeaderLeaderboard=排行榜
eventsOverviewRecentEvents=赛事
eventsOverviewRecentCountries=国家
eventsOverviewRecentSailors=运动员
eventsOverviewRecentTrackedRaces=赛事(含比赛分析)
eventResultsHeadline=比赛结果
eventResultsBoatClassesDropDown=所有帆船级别
eventOverviewMoreEvents=更多赛事
eventOverviewRecentEvents=最近赛事
eventOverviewUpcomingDate=日期
eventOverviewUpcomingEvent=赛事
eventOverviewUpcomingLocation=地点
eventOverviewUpcomingSchedule=未来赛程
eventOverviewUpcomingSeries=系列
eventOverviewUpcomingTeaser=更多赛事即将公布
eventQuickfinderTitle=赛事快速查找
eventRegattaHeaderLeaderboard=排行榜
eventRegattaHeaderRaceRaces=赛事
eventRegattaListAllBoatClasses=所有帆船级别
eventRegattaLeaderboardCompetitor=比赛队伍
eventRegattaLeaderboardExtendLeaderboard=详细排行榜
eventRegattaLeaderboardFinishedMessage=没有更多比赛
eventRegattaLeaderboardLastScoreUpdate=最后积分更新
eventRegattaLeaderboardName=队伍名称
eventRegattaLeaderboardRegattaRank=帆船赛排名
eventRegattaLeaderboardTotalPoints=总积分
eventRegattaRaceWatch=实时观看
eventRegattaRaceAnalyse=赛事分析
eventRegattaRaceNotTracked=不含比赛分析
mainEventShowAll=显示所有赛事
mainEventTitle=最新帆船赛事
mainMediaSubtitle=
mainMediaTitle=照片
mainMediaVideosSubtitle=
mainMediaVideosTitle=最新视频
mainSponsorsReadMore=阅读更多
mediaTeaserPhotosTitle=照片
mediaTeaserVideosTitle=视频
regattaCompetitors=比赛队伍\竞争对手
regattaRaces=赛事
regattaTracked=Tracked 
regattaRegattaStarts=帆船比赛即将开始
regattaPts=积分
regattaCourse=帆船赛程
regattaArea=地点
regattaFinishedAt=结束时间为
regattaScheduledAt=开始时间为
regattaStartedAt=开始时间为
regattasResultsTitle=比赛结果
searchResultHeaderButton=搜寻
searchResultHeaderLabel=您的搜寻
searchResultsFound=搜寻结果
searchResultHeaderPlaceholder=输入您的搜寻关键词
searchResultMore=更多
searchResultSearch=搜寻
searchResultSearchAgain=重新搜寻
searchResultSortLabel=排序方式
searchResultSortNewest=最近
searchResultSortOldest=最旧
searchResultSortRelevance=相关性
solutionsSAPNav=SAP帆船比赛分析
solutionsSAPHeadline=SAP帆船比赛分析
countdownDays=Days
countdownHours=Hrs
countdownMinutes=Min
countdownSeconds=Sec
countdownDay=Day
countdownHour=Hour
countdownMinute=Min
countdownSecond=Sec
boxNewsUpdateMoreLink=Report news
boxNewsUpdateTitle=News Update
boxUpcomingRacesCountdownStarted1=Started
boxUpcomingRacesCountdownStarted2=hrs and
boxUpcomingRacesCountdownStarted3=minutes ago
boxUpcomingRacesCountdownStarting1=Starting in
boxUpcomingRacesCountdownStarting2=hrs and
boxUpcomingRacesCountdownStarting3=minutes
boxUpcomingRacesMoreLink=Event Schedule
boxUpcomingRacesTitle=Upcoming Races Today
boxWeather=Weather
boxWeatherUnit=KTS
defaultTitle=SAP帆船
seriesOverviewHeaderRecent=Latest Series Events
seriesOverviewReadMore=More
eventRegattaRaceFinished=Finished at:
eventRegattaRaceStarted=Started at:
eventRegattaRaceScheduled=Scheduled for:
eventRegattaRaceRace=Race
eventRegattaRaceWind=Wind Strength:
eventRegattaRaceWinner=Winner
eventRegattaRaceLeader=Leader
eventRegattaRacesLegendGps=Tracking
eventRegattaRacesLegendWind=Wind Data
eventRegattaRacesLegendVideo=Video Stream
eventRegattaRacesLegendAudio=Audio Stream
eventSponsorsTitle=Event Sponsorships
footerJobs=Jobs
footerCopyright=\u00A9 2015 SAP帆船
footerLanguage=SAP Sailing offered in
footerLegal=Legal Disclosure
footerPrivacy=Privacy
footerFeedback=Feedback
headerEvents=比赛
headerHome=主页
headerLogo=SAP帆船
headerSearch=搜索
headerSearchPlaceholder=搜索
headerSolutions=Solutions
headerSponsoring=Sponsoring
latestRaceResultsHeadline=Latest Official Race Results
latestRaceResultsIsNew=New
latestRaceResultsIsUpdated=Updated
latestRaceResultsRaceCountLabel=Result after
latestRaceResultsRaceCountUnit=races
latestRaceResultsRefresh=refresh
leaderboardQuickAccessLabel=Leaderboard Quick Access
searchResultCount=About 2,450 results where found for 'Schnitzel'
sharingEmail=Send an email
sharingFacebook=Share on Facebook
sharingTwitter=Tweet about it
socialFooterTitle=Recommend SAP Sailing Analytics
solutionsSAPText1=By delivering real time analytics around race rankings, speeds, maneuvers, bearings etc., SAP is helping to simplify and demystify the complex sport of sailing.
solutionsSAPText2=SAP Sailing Analytics provide insights and transparency to the world of sailing by utilizing Cloud and In-Memory Technology, processing GPS and wind measurement data in real time and visualizing contents in various frontends accessible from anywhere.
solutionsRaceNav=Race Committee App
solutionsRaceHeadline=Race Committee App
solutionsRaceText=The SAP Race Committee App delivers greater efficiency and control to race organizers by automating and simplifying their manual tasks and communication during running sailing regattas. The Race Committee App helps simplify the operation of running and managing race events to help race committees operate smarter.
solutionsPostNav=Post-Race Analytics
solutionsPostHeadline=Post-Race Analytics
solutionsPostText=Access to data collected at sailing events gives sailors the opportunity to assess and analyse their performances to help develop strategies and sail better.<br> SAP Business Analytics solutions provide sailors, coaches, fans and media with tools to browse and analyse historical data across many regattas and races. SAP HANA allows them to learn about performance patterns, tendencies and sailor profiles in a simple, fast and efficient way in order to optimize their own performance and develop successful strategies for future regattas.
solutionsTrainingNav=Training Diary
solutionsTrainingHeadline=SAP Sail Better \u2013 STG Training Diary
solutionsTrainingText=The STG Training Diary supports the daily documentation and analysis of an athlete\u2019s physical condition and training efforts in the areas of water training, physical training, boat work, mental, theory as well as other activities like education or travel.
solutionsSimulatorNav=Strategy Simulator
solutionsSimulatorHeadline=Strategy Simulator
solutionsSimulatorText=Choosing the right strategy can provide great competitive advantage during a race. The Strategy Simulator simplifies determining the best sailing strategy for various wind conditions and water currents. Since wind and current can be changed in the simulation right away, the robustness of a strategy can be easily evaluated even for uncertain weather conditions.
@@ -1,4 +1,4 @@
chartSelectionHint=Hinweis: Sie können auch Ergebnisstabelle (im Menü ERGEBNISSE) nutzen, um die im Diagramm angezeigten Teilnehmer auszuwählen.
chartSelectionHint=Hinweis: Sie können auch Ergebnisstabelle (im Menü ERGEBNISSE) nutzen, um die im Diagramm angezeigten Teilnehmer auszuwählen.
chooseALanguage=Wähle eine Sprache
events=Veranstaltungen
home=Startseite
@@ -13,7 +13,7 @@ officalEventWebsite=Offizielle Internetseite
leg=Schenkel
races=Rennen
moreInfo=Weitere Informationen
viewAnalysis=Analyzen ansehen
viewAnalysis=Analysen ansehen
overallLeaderboard=Gesamtergebnis
pleaseEnterASearchTerm=Bitte gebe einen Suchbegriff ein.
pleaseTryAgain=Bitte versuchen sie es erneut...
@@ -30,7 +30,7 @@ regattaLeaderboards=Regattaergebnisse
features=Funktionen
releaseNotes=Anmerkungen zur Version
whatsNew=Neuigkeiten
overview=Übersicht
overview=Übersicht
sapSailing=SAP Sailing
search=Suche
startSimulator=Simulator starten
@@ -66,7 +66,7 @@ eventHeaderOverview=Übersicht
eventHeaderRaces=Zeitplan
eventHeaderRegattas=Regatten
seriesHeaderOverview=Über die Serie
seriesHeaderUpcoming=Noch kommende Veranstaltungen
seriesHeaderUpcoming=Demnächst
seriesHeaderRecent=Letzte Veranstaltungen
seriesHeaderLeaderboard=Ergebnisliste
seriesOverviewHeaderRecent=Letzte Serienveranstaltungen
@@ -98,7 +98,7 @@ eventRegattaLeaderboardRegattaRank=Platz in der Regatta
eventRegattaLeaderboardTotalPoints=Gesamtpunkte
eventRegattaRaceWatch=Live ansehen
eventRegattaRaceAnalyse=Rennen analysieren
eventRegattaRaceNotTracked=Nicht getracked
eventRegattaRaceNotTracked=Nicht getrackt
eventRegattaRaceFinished=Beendet um:
eventRegattaRaceStarted=Gestartet um:
eventRegattaRaceScheduled=Geplant um:
@@ -119,7 +119,7 @@ footerPrivacy=Datenschutz
footerFeedback=Feedback
headerEvents=Veranstaltungen
headerHome=Startseite
headerLogo=SAP Sailing Analytics
headerLogo=Sailing Analytics
headerSearch=Suche in SAPSailing.com
headerSearchPlaceholder=Suche
headerSolutions=Lösungen
@@ -134,7 +134,7 @@ leaderboardQuickAccessLabel=Ergebnisliste Schnellzugang
mainEventShowAll=Zeige alle Veranstaltungen
mainEventTitle=Die letzten Veranstaltungen aus der Segelwelt
mainMediaSubtitle=Hier gibt es die aktuellsten und schönsten Impressionen aus deiner beliebtesten Segelveranstaltung.
mainMediaTitle=Segeln liebt Fotographie
mainMediaTitle=Segeln liebt Fotografie
mainMediaVideosSubtitle=Tauche ein in die Welt des Segelns und besuche auch die anderen Veranstaltungen für mehr Videos.
mainMediaVideosTitle= Die Letzten Videoeinträge
mainSponsorsReadMore=Lese mehr
@@ -142,7 +142,7 @@ mediaTeaserPhotosTitle=Fotos
mediaTeaserVideosTitle=Videos
regattaCompetitors=Teilnehmer
regattaRaces=Rennen
regattaTracked=Getracked
regattaTracked=Getrackt
regattaRegattaStarts=Regatta wird starten
regattaPts=Pkt.
regattaCourse=Kurs
@@ -16,6 +16,7 @@ public class HomeEntryPoint extends AbstractMvpEntryPoint<StringMessages> {
public void doOnModuleLoad() {
ApplicationClientFactory clientFactory = GWT.create(ApplicationClientFactory.class);
EntryPointHelper.registerASyncService((ServiceDefTarget) clientFactory.getSailingService(), RemoteServiceMappingConstants.sailingServiceRemotePath);
EntryPointHelper.registerASyncService((ServiceDefTarget) clientFactory.getHomeService(), RemoteServiceMappingConstants.homeServiceRemotePath);
ApplicationHistoryMapper applicationHistoryMapper = GWT.create(ApplicationHistoryMapper.class);
initMvp(clientFactory, applicationHistoryMapper, new ApplicationActivityMapper(clientFactory));
@@ -0,0 +1,24 @@
package com.sap.sailing.gwt.home.client;
import java.util.UUID;
import com.google.gwt.user.client.rpc.RemoteService;
import com.sap.sailing.gwt.ui.shared.eventlist.EventListViewDTO;
import com.sap.sailing.gwt.ui.shared.eventview.EventViewDTO;
import com.sap.sailing.gwt.ui.shared.fakeseries.EventSeriesViewDTO;
import com.sap.sailing.gwt.ui.shared.media.MediaDTO;
import com.sap.sailing.gwt.ui.shared.start.StartViewDTO;
public interface HomeService extends RemoteService {
EventViewDTO getEventViewById(UUID id);
EventSeriesViewDTO getEventSeriesViewById(UUID id);
MediaDTO getMediaForEvent(UUID eventId);
MediaDTO getMediaForEventSeries(UUID seriesId);
EventListViewDTO getEventListView() throws Exception;
StartViewDTO getStartView() throws Exception;
}
@@ -0,0 +1,28 @@
package com.sap.sailing.gwt.home.client;
import java.util.UUID;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.sap.sailing.gwt.ui.shared.eventlist.EventListViewDTO;
import com.sap.sailing.gwt.ui.shared.eventview.EventViewDTO;
import com.sap.sailing.gwt.ui.shared.fakeseries.EventSeriesViewDTO;
import com.sap.sailing.gwt.ui.shared.media.MediaDTO;
import com.sap.sailing.gwt.ui.shared.start.StartViewDTO;
/**
* The async counterpart of {@link HomeService}
*/
public interface HomeServiceAsync {
void getEventViewById(UUID id, AsyncCallback<EventViewDTO> callback);
void getEventSeriesViewById(UUID id, AsyncCallback<EventSeriesViewDTO> asyncCallback);
void getMediaForEvent(UUID eventId, AsyncCallback<MediaDTO> callback);
void getMediaForEventSeries(UUID seriesId, AsyncCallback<MediaDTO> callback);
void getEventListView(AsyncCallback<EventListViewDTO> callback);
void getStartView(AsyncCallback<StartViewDTO> callback);
}
@@ -4,6 +4,8 @@ import com.google.gwt.core.client.GWT;
import com.google.gwt.place.shared.Place;
import com.google.gwt.place.shared.PlaceController;
import com.google.web.bindery.event.shared.EventBus;
import com.sap.sailing.gwt.home.client.HomeService;
import com.sap.sailing.gwt.home.client.HomeServiceAsync;
import com.sap.sailing.gwt.home.client.place.start.StartPlace;
import com.sap.sailing.gwt.ui.client.MediaService;
import com.sap.sailing.gwt.ui.client.MediaServiceAsync;
@@ -14,6 +16,7 @@ import com.sap.sse.security.ui.client.SecureClientFactoryImpl;
public abstract class AbstractApplicationClientFactory extends SecureClientFactoryImpl implements ApplicationClientFactory {
private final SailingServiceAsync sailingService;
private final HomeServiceAsync homeService;
private final MediaServiceAsync mediaService;
private final HomePlacesNavigator navigator;
@@ -21,6 +24,7 @@ public abstract class AbstractApplicationClientFactory extends SecureClientFacto
super(root, eventBus, placeController);
navigator = new HomePlacesNavigator(placeController);
sailingService = GWT.create(SailingService.class);
homeService = GWT.create(HomeService.class);
mediaService = GWT.create(MediaService.class);
}
@@ -34,6 +38,11 @@ public abstract class AbstractApplicationClientFactory extends SecureClientFacto
return sailingService;
}
@Override
public HomeServiceAsync getHomeService() {
return homeService;
}
@Override
public MediaServiceAsync getMediaService() {
return mediaService;
@@ -1,15 +1,19 @@
package com.sap.sailing.gwt.home.client.app;
import com.google.gwt.core.client.GWT;
import com.google.gwt.place.shared.Place;
import com.google.gwt.place.shared.PlaceController;
import com.google.gwt.place.shared.PlaceTokenizer;
import com.google.gwt.user.client.History;
import com.google.gwt.user.client.Window;
public abstract class AbstractPlaceNavigator implements PlaceNavigator {
protected final PlaceController placeController;
public final static String DEFAULT_SAPSAILING_SERVER = "www.sapsailing.com";
public final static String DEFAULT_SAPSAILING_SERVER_URL = "http://" + DEFAULT_SAPSAILING_SERVER;
private final ApplicationHistoryMapper mapper = GWT.create(ApplicationHistoryMapper.class);
public final static String DEFAULT_SAPSAILING_SERVER = "www.sapsailing.com";
public final static String DEFAULT_SAPSAILING_DEV_SERVER = "dev.sapsailing.com";
public final static String DEFAULT_SAPSAILING_SERVER_URL = "http://" + DEFAULT_SAPSAILING_SERVER;
protected AbstractPlaceNavigator(PlaceController placeController) {
this.placeController = placeController;
@@ -25,20 +29,24 @@ public abstract class AbstractPlaceNavigator implements PlaceNavigator {
}
}
protected <T extends Place> PlaceNavigation<T> createLocalPlaceNavigation(T destinationPlace, PlaceTokenizer<T> tokenizer) {
return new PlaceNavigation<T>(null, destinationPlace, tokenizer, false);
protected <T extends Place> PlaceNavigation<T> createLocalPlaceNavigation(T destinationPlace) {
return new PlaceNavigation<T>(null, destinationPlace, false, this);
}
protected <T extends Place> PlaceNavigation<T> createGlobalPlaceNavigation(T destinationPlace, PlaceTokenizer<T> tokenizer) {
return new PlaceNavigation<T>(destinationPlace, tokenizer);
protected <T extends Place> PlaceNavigation<T> createGlobalPlaceNavigation(T destinationPlace) {
return new PlaceNavigation<T>(destinationPlace, this);
}
protected <T extends Place> PlaceNavigation<T> createPlaceNavigation(String baseUrl, boolean isOnRemoteServer, T destinationPlace, PlaceTokenizer<T> tokenizer) {
return new PlaceNavigation<T>(baseUrl, destinationPlace, tokenizer, isOnRemoteServer);
protected <T extends Place> PlaceNavigation<T> createPlaceNavigation(String baseUrl, boolean isOnRemoteServer,
T destinationPlace) {
return new PlaceNavigation<T>(baseUrl, destinationPlace, isOnRemoteServer, this);
}
public <T extends Place> void pushPlaceToHistoryStack(T destinationPlace, PlaceTokenizer<T> tokenizer) {
String placeHistoryToken = destinationPlace.getClass().getSimpleName() + ":" + tokenizer.getToken(destinationPlace);
public <T extends Place> void pushPlaceToHistoryStack(T destinationPlace) {
String placeHistoryToken = mapper.getToken(destinationPlace);
History.newItem(placeHistoryToken, false);
}
}
@@ -7,16 +7,33 @@ import com.sap.sailing.gwt.home.client.place.aboutus.AboutUsActivityProxy;
import com.sap.sailing.gwt.home.client.place.aboutus.AboutUsPlace;
import com.sap.sailing.gwt.home.client.place.contact.ContactActivityProxy;
import com.sap.sailing.gwt.home.client.place.contact.ContactPlace;
import com.sap.sailing.gwt.home.client.place.error.ErrorActivityProxy;
import com.sap.sailing.gwt.home.client.place.error.ErrorPlace;
import com.sap.sailing.gwt.home.client.place.event.AbstractEventPlace;
import com.sap.sailing.gwt.home.client.place.event.EventActivityProxy;
import com.sap.sailing.gwt.home.client.place.event.EventPlace;
import com.sap.sailing.gwt.home.client.place.event.EventContext;
import com.sap.sailing.gwt.home.client.place.event.EventDefaultPlace;
import com.sap.sailing.gwt.home.client.place.event.legacy.EventPlace;
import com.sap.sailing.gwt.home.client.place.event.legacy.RegattaPlace;
import com.sap.sailing.gwt.home.client.place.event.legacy.SeriesPlace;
import com.sap.sailing.gwt.home.client.place.event.multiregatta.tabs.MultiregattaMediaPlace;
import com.sap.sailing.gwt.home.client.place.event.multiregatta.tabs.MultiregattaOverviewPlace;
import com.sap.sailing.gwt.home.client.place.event.multiregatta.tabs.MultiregattaRegattasPlace;
import com.sap.sailing.gwt.home.client.place.event.regatta.tabs.RegattaCompetitorAnalyticsPlace;
import com.sap.sailing.gwt.home.client.place.event.regatta.tabs.RegattaLeaderboardPlace;
import com.sap.sailing.gwt.home.client.place.event.regatta.tabs.RegattaMediaPlace;
import com.sap.sailing.gwt.home.client.place.event.regatta.tabs.RegattaOverviewPlace;
import com.sap.sailing.gwt.home.client.place.event.regatta.tabs.RegattaRacesPlace;
import com.sap.sailing.gwt.home.client.place.events.EventsActivityProxy;
import com.sap.sailing.gwt.home.client.place.events.EventsPlace;
import com.sap.sailing.gwt.home.client.place.regatta.RegattaActivityProxy;
import com.sap.sailing.gwt.home.client.place.regatta.RegattaPlace;
import com.sap.sailing.gwt.home.client.place.fakeseries.AbstractSeriesPlace;
import com.sap.sailing.gwt.home.client.place.fakeseries.SeriesContext;
import com.sap.sailing.gwt.home.client.place.fakeseries.SeriesDefaultPlace;
import com.sap.sailing.gwt.home.client.place.fakeseries.tabs.EventSeriesCompetitorAnalyticsPlace;
import com.sap.sailing.gwt.home.client.place.fakeseries.tabs.EventSeriesLeaderboardsPlace;
import com.sap.sailing.gwt.home.client.place.fakeseries.tabs.EventSeriesOverallLeaderboardPlace;
import com.sap.sailing.gwt.home.client.place.searchresult.SearchResultActivityProxy;
import com.sap.sailing.gwt.home.client.place.searchresult.SearchResultPlace;
import com.sap.sailing.gwt.home.client.place.series.SeriesActivityProxy;
import com.sap.sailing.gwt.home.client.place.series.SeriesPlace;
import com.sap.sailing.gwt.home.client.place.solutions.SolutionsActivityProxy;
import com.sap.sailing.gwt.home.client.place.solutions.SolutionsPlace;
import com.sap.sailing.gwt.home.client.place.sponsoring.SponsoringActivityProxy;
@@ -38,10 +55,19 @@ public class ApplicationActivityMapper implements ActivityMapper {
public Activity getActivity(Place place) {
if (place instanceof AboutUsPlace) {
return new AboutUsActivityProxy((AboutUsPlace) place, clientFactory);
} else if (place instanceof ErrorPlace) {
return new ErrorActivityProxy((ErrorPlace) place, clientFactory);
} else if (place instanceof ContactPlace) {
return new ContactActivityProxy((ContactPlace) place, clientFactory);
} else if (place instanceof EventPlace) {
return new EventActivityProxy((EventPlace) place, clientFactory);
// return new EventActivityProxy((EventPlace) place, clientFactory);
// rerouting old place to new place to make bookmarked URLs to work with the new interface.
return getActivity(getRealEventPlace((EventPlace) place));
} else if (place instanceof AbstractEventPlace) {
AbstractEventPlace eventPlace = (AbstractEventPlace) place;
return new EventActivityProxy(eventPlace, clientFactory, clientFactory.getHomePlacesNavigator());
} else if (place instanceof AbstractSeriesPlace) {
return new com.sap.sailing.gwt.home.client.place.fakeseries.SeriesActivityProxy((AbstractSeriesPlace) place, clientFactory, clientFactory.getHomePlacesNavigator());
} else if (place instanceof EventsPlace) {
return new EventsActivityProxy((EventsPlace) place, clientFactory);
} else if (place instanceof StartPlace) {
@@ -53,13 +79,93 @@ public class ApplicationActivityMapper implements ActivityMapper {
} else if (place instanceof WhatsNewPlace) {
return new WhatsNewActivityProxy((WhatsNewPlace) place, clientFactory);
} else if (place instanceof RegattaPlace) {
return new RegattaActivityProxy((RegattaPlace) place, clientFactory);
// return new RegattaActivityProxy((RegattaPlace) place, clientFactory);
// rerouting old place to new place to make bookmarked URLs to work with the new interface.
return getActivity(getRealRegattaPlace((RegattaPlace) place));
} else if (place instanceof SeriesPlace) {
return new SeriesActivityProxy((SeriesPlace) place, clientFactory);
// return new SeriesActivityProxy((SeriesPlace) place, clientFactory);
// rerouting old place to new place to make bookmarked URLs to work with the new interface.
return getActivity(getRealSeriesPlace((SeriesPlace) place));
} else if (place instanceof SearchResultPlace) {
return new SearchResultActivityProxy((SearchResultPlace) place, clientFactory);
} else {
return null;
}
}
private Place getRealRegattaPlace(RegattaPlace place) {
String eventId = place.getEventUuidAsString();
if(eventId == null || eventId.isEmpty()) {
return new EventsPlace();
}
EventContext eventContext = new EventContext().withId(eventId);
String regattaId = place.getLeaderboardIdAsNameString();
boolean hasRegattaId = (regattaId != null && !regattaId.isEmpty());
// TODO evaluate additional parameters
if(hasRegattaId) {
switch (place.getNavigationTab()) {
case CompetitorAnalytics:
return new RegattaCompetitorAnalyticsPlace(eventContext);
case Leaderboard:
return new RegattaLeaderboardPlace(eventContext);
}
}
return new EventDefaultPlace(eventContext);
}
@SuppressWarnings("incomplete-switch")
private Place getRealEventPlace(EventPlace place) {
String eventId = place.getEventUuidAsString();
if(eventId == null || eventId.isEmpty()) {
return new EventsPlace();
}
EventContext eventContext = new EventContext().withId(eventId);
String regattaId = place.getLeaderboardIdAsNameString();
boolean hasRegattaId = (regattaId != null && !regattaId.isEmpty());
if(hasRegattaId) {
eventContext.withRegattaId(regattaId);
switch (place.getNavigationTab()) {
case Media:
return new RegattaMediaPlace(eventContext);
case Overview:
return new RegattaOverviewPlace(eventContext);
case Regatta:
return new RegattaRacesPlace(eventContext);
}
} else {
switch (place.getNavigationTab()) {
// TODO some places aren't implemented yet
case Media:
return new MultiregattaMediaPlace(eventContext);
case Overview:
return new MultiregattaOverviewPlace(eventContext);
case Schedule:
// Schedule not implemented yet -> using race list
case Regattas:
return new MultiregattaRegattasPlace(eventContext);
}
}
return new EventDefaultPlace(eventContext);
}
private Place getRealSeriesPlace(SeriesPlace place) {
String seriesId = place.getEventUuidAsString();
SeriesContext context = new SeriesContext().withId(seriesId);
// TODO evaluate additional parameters
switch (place.getNavigationTab()) {
case OverallLeaderboard:
return new EventSeriesOverallLeaderboardPlace(context);
case RegattaLeaderboards:
return new EventSeriesLeaderboardsPlace(context);
case CompetitorAnalytics:
return new EventSeriesCompetitorAnalyticsPlace(context);
}
return new SeriesDefaultPlace(context);
}
}
@@ -2,11 +2,11 @@ package com.sap.sailing.gwt.home.client.app;
import com.sap.sailing.gwt.home.client.place.aboutus.AboutUsClientFactory;
import com.sap.sailing.gwt.home.client.place.contact.ContactClientFactory;
import com.sap.sailing.gwt.home.client.place.error.ErrorClientFactory;
import com.sap.sailing.gwt.home.client.place.event.EventClientFactory;
import com.sap.sailing.gwt.home.client.place.event.legacy.SeriesClientFactory;
import com.sap.sailing.gwt.home.client.place.events.EventsClientFactory;
import com.sap.sailing.gwt.home.client.place.regatta.RegattaClientFactory;
import com.sap.sailing.gwt.home.client.place.searchresult.SearchResultClientFactory;
import com.sap.sailing.gwt.home.client.place.series.SeriesClientFactory;
import com.sap.sailing.gwt.home.client.place.solutions.SolutionsClientFactory;
import com.sap.sailing.gwt.home.client.place.sponsoring.SponsoringClientFactory;
import com.sap.sailing.gwt.home.client.place.start.StartClientFactory;
@@ -14,6 +14,6 @@ import com.sap.sailing.gwt.home.client.place.whatsnew.WhatsNewClientFactory;
public interface ApplicationClientFactory extends AboutUsClientFactory, ContactClientFactory, EventClientFactory,
EventsClientFactory, StartClientFactory, SponsoringClientFactory, SolutionsClientFactory, SearchResultClientFactory,
WhatsNewClientFactory, RegattaClientFactory, SeriesClientFactory {
WhatsNewClientFactory, SeriesClientFactory, ErrorClientFactory {
HomePlacesNavigator getHomePlacesNavigator();
}
@@ -4,18 +4,56 @@ import com.google.gwt.place.shared.PlaceHistoryMapper;
import com.google.gwt.place.shared.WithTokenizers;
import com.sap.sailing.gwt.home.client.place.aboutus.AboutUsPlace;
import com.sap.sailing.gwt.home.client.place.contact.ContactPlace;
import com.sap.sailing.gwt.home.client.place.event.EventPlace;
import com.sap.sailing.gwt.home.client.place.event.EventDefaultPlace;
import com.sap.sailing.gwt.home.client.place.event.legacy.EventPlace;
import com.sap.sailing.gwt.home.client.place.event.legacy.RegattaPlace;
import com.sap.sailing.gwt.home.client.place.event.legacy.SeriesPlace;
import com.sap.sailing.gwt.home.client.place.event.multiregatta.tabs.MultiregattaMediaPlace;
import com.sap.sailing.gwt.home.client.place.event.multiregatta.tabs.MultiregattaOverviewPlace;
import com.sap.sailing.gwt.home.client.place.event.multiregatta.tabs.MultiregattaRegattasPlace;
import com.sap.sailing.gwt.home.client.place.event.regatta.tabs.RegattaCompetitorAnalyticsPlace;
import com.sap.sailing.gwt.home.client.place.event.regatta.tabs.RegattaLeaderboardPlace;
import com.sap.sailing.gwt.home.client.place.event.regatta.tabs.RegattaMediaPlace;
import com.sap.sailing.gwt.home.client.place.event.regatta.tabs.RegattaOverviewPlace;
import com.sap.sailing.gwt.home.client.place.event.regatta.tabs.RegattaRacesPlace;
import com.sap.sailing.gwt.home.client.place.events.EventsPlace;
import com.sap.sailing.gwt.home.client.place.regatta.RegattaPlace;
import com.sap.sailing.gwt.home.client.place.fakeseries.SeriesDefaultPlace;
import com.sap.sailing.gwt.home.client.place.fakeseries.tabs.EventSeriesCompetitorAnalyticsPlace;
import com.sap.sailing.gwt.home.client.place.fakeseries.tabs.EventSeriesLeaderboardsPlace;
import com.sap.sailing.gwt.home.client.place.fakeseries.tabs.EventSeriesOverallLeaderboardPlace;
import com.sap.sailing.gwt.home.client.place.fakeseries.tabs.SeriesEventsPlace;
import com.sap.sailing.gwt.home.client.place.fakeseries.tabs.SeriesMediaPlace;
import com.sap.sailing.gwt.home.client.place.searchresult.SearchResultPlace;
import com.sap.sailing.gwt.home.client.place.series.SeriesPlace;
import com.sap.sailing.gwt.home.client.place.solutions.SolutionsPlace;
import com.sap.sailing.gwt.home.client.place.sponsoring.SponsoringPlace;
import com.sap.sailing.gwt.home.client.place.start.StartPlace;
import com.sap.sailing.gwt.home.client.place.whatsnew.WhatsNewPlace;
@WithTokenizers({ AboutUsPlace.Tokenizer.class, ContactPlace.Tokenizer.class, EventPlace.Tokenizer.class, EventsPlace.Tokenizer.class,
SolutionsPlace.Tokenizer.class, WhatsNewPlace.Tokenizer.class, SponsoringPlace.Tokenizer.class, SearchResultPlace.Tokenizer.class, StartPlace.Tokenizer.class,
RegattaPlace.Tokenizer.class, SeriesPlace.Tokenizer.class })
@WithTokenizers({ AboutUsPlace.Tokenizer.class, ContactPlace.Tokenizer.class, EventPlace.Tokenizer.class,
EventsPlace.Tokenizer.class, SolutionsPlace.Tokenizer.class, WhatsNewPlace.Tokenizer.class,
SponsoringPlace.Tokenizer.class, SearchResultPlace.Tokenizer.class, StartPlace.Tokenizer.class,
RegattaPlace.Tokenizer.class, SeriesPlace.Tokenizer.class,
// Event tab places...
EventDefaultPlace.Tokenizer.class,
// Multiregatta places:
MultiregattaOverviewPlace.Tokenizer.class,
MultiregattaRegattasPlace.Tokenizer.class,
MultiregattaMediaPlace.Tokenizer.class,
// Regatta places:
RegattaOverviewPlace.Tokenizer.class,
RegattaRacesPlace.Tokenizer.class,
RegattaLeaderboardPlace.Tokenizer.class,
RegattaCompetitorAnalyticsPlace.Tokenizer.class,
RegattaMediaPlace.Tokenizer.class,
// Fake series places:
SeriesDefaultPlace.Tokenizer.class,
RegattaOverviewPlace.Tokenizer.class,
SeriesEventsPlace.Tokenizer.class,
EventSeriesCompetitorAnalyticsPlace.Tokenizer.class,
EventSeriesOverallLeaderboardPlace.Tokenizer.class,
EventSeriesLeaderboardsPlace.Tokenizer.class,
SeriesMediaPlace.Tokenizer.class
})
public interface ApplicationHistoryMapper extends PlaceHistoryMapper {
}
@@ -6,14 +6,16 @@ import java.util.Map;
import com.google.gwt.place.shared.PlaceController;
import com.sap.sailing.gwt.home.client.place.aboutus.AboutUsPlace;
import com.sap.sailing.gwt.home.client.place.contact.ContactPlace;
import com.sap.sailing.gwt.home.client.place.event.EventPlace;
import com.sap.sailing.gwt.home.client.place.event.EventPlace.EventNavigationTabs;
import com.sap.sailing.gwt.home.client.place.event.AbstractEventPlace;
import com.sap.sailing.gwt.home.client.place.event.EventDefaultPlace;
import com.sap.sailing.gwt.home.client.place.event.multiregatta.tabs.MultiregattaRegattasPlace;
import com.sap.sailing.gwt.home.client.place.event.regatta.AbstractEventRegattaPlace;
import com.sap.sailing.gwt.home.client.place.event.regatta.tabs.RegattaCompetitorAnalyticsPlace;
import com.sap.sailing.gwt.home.client.place.event.regatta.tabs.RegattaLeaderboardPlace;
import com.sap.sailing.gwt.home.client.place.event.regatta.tabs.RegattaOverviewPlace;
import com.sap.sailing.gwt.home.client.place.events.EventsPlace;
import com.sap.sailing.gwt.home.client.place.regatta.RegattaPlace;
import com.sap.sailing.gwt.home.client.place.regatta.RegattaPlace.RegattaNavigationTabs;
import com.sap.sailing.gwt.home.client.place.fakeseries.SeriesDefaultPlace;
import com.sap.sailing.gwt.home.client.place.searchresult.SearchResultPlace;
import com.sap.sailing.gwt.home.client.place.series.SeriesPlace;
import com.sap.sailing.gwt.home.client.place.series.SeriesPlace.SeriesNavigationTabs;
import com.sap.sailing.gwt.home.client.place.solutions.SolutionsPlace;
import com.sap.sailing.gwt.home.client.place.solutions.SolutionsPlace.SolutionsNavigationTabs;
import com.sap.sailing.gwt.home.client.place.sponsoring.SponsoringPlace;
@@ -29,19 +31,19 @@ public class HomePlacesNavigator extends AbstractPlaceNavigator {
}
public PlaceNavigation<StartPlace> getHomeNavigation() {
return createGlobalPlaceNavigation(new StartPlace(), new StartPlace.Tokenizer());
return createGlobalPlaceNavigation(new StartPlace());
}
public PlaceNavigation<EventsPlace> getEventsNavigation() {
return createGlobalPlaceNavigation(new EventsPlace(), new EventsPlace.Tokenizer());
return createGlobalPlaceNavigation(new EventsPlace());
}
public PlaceNavigation<SolutionsPlace> getSolutionsNavigation(SolutionsNavigationTabs navigationTab) {
return createLocalPlaceNavigation(new SolutionsPlace(navigationTab), new SolutionsPlace.Tokenizer());
return createLocalPlaceNavigation(new SolutionsPlace(navigationTab));
}
public PlaceNavigation<WhatsNewPlace> getWhatsNewNavigation(WhatsNewNavigationTabs navigationTab) {
return createLocalPlaceNavigation(new WhatsNewPlace(navigationTab), new WhatsNewPlace.Tokenizer());
return createLocalPlaceNavigation(new WhatsNewPlace(navigationTab));
}
public String getSimulatorURL() {
@@ -50,40 +52,54 @@ public class HomePlacesNavigator extends AbstractPlaceNavigator {
}
public PlaceNavigation<SponsoringPlace> getSponsoringNavigation() {
return createGlobalPlaceNavigation(new SponsoringPlace(), new SponsoringPlace.Tokenizer());
return createGlobalPlaceNavigation(new SponsoringPlace());
}
public PlaceNavigation<AboutUsPlace> getAboutUsNavigation() {
return createGlobalPlaceNavigation(new AboutUsPlace(), new AboutUsPlace.Tokenizer());
return createGlobalPlaceNavigation(new AboutUsPlace());
}
public PlaceNavigation<ContactPlace> getContactNavigation() {
return createGlobalPlaceNavigation(new ContactPlace(), new ContactPlace.Tokenizer());
return createGlobalPlaceNavigation(new ContactPlace());
}
public PlaceNavigation<MultiregattaRegattasPlace> getEventRegattasNavigation(String eventUuidAsString, String baseUrl, boolean isOnRemoteServer) {
MultiregattaRegattasPlace eventPlace = new MultiregattaRegattasPlace(eventUuidAsString);
return createPlaceNavigation(baseUrl, isOnRemoteServer, eventPlace);
}
public PlaceNavigation<SeriesDefaultPlace> getEventSeriesNavigation(String seriesId, String baseUrl, boolean isOnRemoteServer) {
SeriesDefaultPlace place = new SeriesDefaultPlace(seriesId);
return createPlaceNavigation(baseUrl, isOnRemoteServer, place);
}
public PlaceNavigation<EventPlace> getEventNavigation(String eventUuidAsString, String baseUrl, boolean isOnRemoteServer) {
EventPlace eventPlace = new EventPlace(eventUuidAsString, EventNavigationTabs.Regattas, null);
return createPlaceNavigation(baseUrl, isOnRemoteServer, eventPlace, new EventPlace.Tokenizer());
public PlaceNavigation<EventDefaultPlace> getEventNavigation(String eventUuidAsString, String baseUrl, boolean isOnRemoteServer) {
EventDefaultPlace eventPlace = new EventDefaultPlace(eventUuidAsString);
return createPlaceNavigation(baseUrl, isOnRemoteServer, eventPlace);
}
public <P extends AbstractEventPlace> PlaceNavigation<P> getEventNavigation(P place, String baseUrl,
boolean isOnRemoteServer) {
return createPlaceNavigation(baseUrl, isOnRemoteServer, place);
}
public PlaceNavigation<EventPlace> getRegattaNavigation(String eventUuidAsString, String leaderboardIdAsNameString, String baseUrl, boolean isOnRemoteServer) {
EventPlace eventPlace = new EventPlace(eventUuidAsString, EventNavigationTabs.Regatta, leaderboardIdAsNameString);
return createPlaceNavigation(baseUrl, isOnRemoteServer, eventPlace, new EventPlace.Tokenizer());
@SuppressWarnings({ "unchecked", "rawtypes" })
public PlaceNavigation<AbstractEventRegattaPlace> getRegattaNavigation(String eventUuidAsString, String leaderboardIdAsNameString, String baseUrl, boolean isOnRemoteServer) {
RegattaOverviewPlace eventPlace = new RegattaOverviewPlace(eventUuidAsString, leaderboardIdAsNameString);
return (PlaceNavigation) createPlaceNavigation(baseUrl, isOnRemoteServer, eventPlace);
}
/** this place will be merged into the common regatta view as tab later on */
public PlaceNavigation<RegattaPlace> getRegattaAnalyticsNavigation(String eventUuidAsString, RegattaNavigationTabs navigationTab, String leaderboardIdAsNameString, String baseUrl, boolean isOnRemoteServer) {
RegattaPlace regattaPlace = new RegattaPlace(eventUuidAsString, navigationTab, leaderboardIdAsNameString, true, true);
return createPlaceNavigation(baseUrl, isOnRemoteServer, regattaPlace, new RegattaPlace.Tokenizer());
public PlaceNavigation<RegattaCompetitorAnalyticsPlace> getCompetitorAnalyticsNavigation(String eventUuidAsString, String regattaId, String baseUrl, boolean isOnRemoteServer) {
RegattaCompetitorAnalyticsPlace regattaPlace = new RegattaCompetitorAnalyticsPlace(eventUuidAsString, regattaId);
return createPlaceNavigation(baseUrl, isOnRemoteServer, regattaPlace);
}
/** this place will be merged into the common series event view as tab later on */
public PlaceNavigation<SeriesPlace> getSeriesAnalyticsNavigation(String eventUuidAsString, SeriesNavigationTabs navigationTab, String leaderboardIdAsNameString, String baseUrl, boolean isOnRemoteServer) {
SeriesPlace seriesPlace = new SeriesPlace(eventUuidAsString, navigationTab, leaderboardIdAsNameString, true, true);
return createPlaceNavigation(baseUrl, isOnRemoteServer, seriesPlace, new SeriesPlace.Tokenizer());
public PlaceNavigation<RegattaLeaderboardPlace> getLeaderboardNavigation(String eventUuidAsString, String regattaId, String baseUrl, boolean isOnRemoteServer) {
RegattaLeaderboardPlace regattaPlace = new RegattaLeaderboardPlace(eventUuidAsString, regattaId);
return createPlaceNavigation(baseUrl, isOnRemoteServer, regattaPlace);
}
public PlaceNavigation<SearchResultPlace> getSearchResultNavigation(String searchQuery) {
return createGlobalPlaceNavigation(new SearchResultPlace(searchQuery), new SearchResultPlace.Tokenizer());
return createGlobalPlaceNavigation(new SearchResultPlace(searchQuery));
}
}
@@ -2,28 +2,31 @@ package com.sap.sailing.gwt.home.client.app;
import com.google.gwt.core.client.GWT;
import com.google.gwt.place.shared.Place;
import com.google.gwt.place.shared.PlaceTokenizer;
import com.google.gwt.user.client.Window;
public class PlaceNavigation<T extends Place> {
private final PlaceNavigator placeNavigator;
private final ApplicationHistoryMapper mapper = GWT.create(ApplicationHistoryMapper.class);
private final T destinationPlace;
private final PlaceTokenizer<T> tokenizer;
private final String baseUrl;
private final boolean isDestinationOnRemoteServer;
public PlaceNavigation(T destinationPlace, PlaceTokenizer<T> tokenizer) {
public PlaceNavigation(T destinationPlace, PlaceNavigator placeNavigator) {
this.placeNavigator = placeNavigator;
this.destinationPlace = destinationPlace;
this.tokenizer = tokenizer;
String locationURL = getLocationURL();
this.isDestinationOnRemoteServer = !(isLocationOnLocalhost(locationURL) || isLocationOnDefaultSapSailingServer(locationURL));
this.baseUrl = isDestinationOnRemoteServer ? AbstractPlaceNavigator.DEFAULT_SAPSAILING_SERVER_URL : locationURL;
this.isDestinationOnRemoteServer = !(isLocationOnLocalhostOrDevServer(locationURL) || isLocationOnDefaultSapSailingServer(locationURL));
this.baseUrl = isDestinationOnRemoteServer ? AbstractPlaceNavigator.DEFAULT_SAPSAILING_SERVER_URL : locationURL;
}
public PlaceNavigation(String baseUrl, T destinationPlace, PlaceTokenizer<T> tokenizer, boolean isDestinationOnRemoteServer) {
public PlaceNavigation(String baseUrl, T destinationPlace, boolean isDestinationOnRemoteServer,
PlaceNavigator placeNavigator) {
this.destinationPlace = destinationPlace;
this.tokenizer = tokenizer;
this.isDestinationOnRemoteServer = isDestinationOnRemoteServer;
this.baseUrl = isDestinationOnRemoteServer ? baseUrl : getLocationURL();
this.placeNavigator = placeNavigator;
this.baseUrl = isDestinationOnRemoteServer ? baseUrl : getLocationURL();
}
public String getTargetUrl() {
@@ -32,7 +35,7 @@ public class PlaceNavigation<T extends Place> {
public String getHistoryUrl() {
String placeUrl = buildPlaceUrl();
if(placeUrl.startsWith("#")) {
if (placeUrl.startsWith("#")) {
placeUrl = placeUrl.substring(1, placeUrl.length());
}
return placeUrl;
@@ -44,10 +47,10 @@ public class PlaceNavigation<T extends Place> {
private String buildPlaceUrl() {
String url = "";
if(isRemotePlace()) {
if (isRemotePlace()) {
url = baseUrl + "/gwt/Home.html";
if(!GWT.isProdMode()) {
url += "?gwt.codesvr=127.0.0.1:9997";
if (!GWT.isProdMode()) {
url += "?gwt.codesvr=127.0.0.1:9997";
}
url += getPlaceToken();
} else {
@@ -55,24 +58,30 @@ public class PlaceNavigation<T extends Place> {
}
return url;
}
public boolean isRemotePlace() {
return isDestinationOnRemoteServer;
}
private String getPlaceToken() {
return "#" + destinationPlace.getClass().getSimpleName() + ":" + tokenizer.getToken(destinationPlace);
return "#" + mapper.getToken(destinationPlace);
}
private boolean isLocationOnDefaultSapSailingServer(String urlToCheck) {
return urlToCheck.contains(HomePlacesNavigator.DEFAULT_SAPSAILING_SERVER);
}
private boolean isLocationOnLocalhost(String urlToCheck) {
return urlToCheck.contains("localhost") || urlToCheck.contains("127.0.0.1");
private boolean isLocationOnLocalhostOrDevServer(String urlToCheck) {
return urlToCheck.contains("localhost") || urlToCheck.contains("127.0.0.1")
|| urlToCheck.contains(HomePlacesNavigator.DEFAULT_SAPSAILING_DEV_SERVER);
}
private String getLocationURL() {
return Window.Location.getProtocol() + "//" + Window.Location.getHostName() + ":" + Window.Location.getPort();
}
public void goToPlace() {
placeNavigator.goToPlace(this);
}
}
@@ -1,26 +1,13 @@
package com.sap.sailing.gwt.home.client.app;
import java.util.List;
import com.google.gwt.event.shared.SimpleEventBus;
import com.google.gwt.place.shared.PlaceController;
import com.google.web.bindery.event.shared.EventBus;
import com.sap.sailing.gwt.home.client.place.error.TabletAndDesktopErrorView;
import com.sap.sailing.gwt.home.client.place.event.EventPlace.EventNavigationTabs;
import com.sap.sailing.gwt.home.client.place.event.EventView;
import com.sap.sailing.gwt.home.client.place.event.EventWithoutRegattasView;
import com.sap.sailing.gwt.home.client.place.event.TabletAndDesktopEventView;
import com.sap.sailing.gwt.home.client.place.event.TabletAndDesktopEventWithoutRegattasView;
import com.sap.sailing.gwt.home.client.place.events.EventsView;
import com.sap.sailing.gwt.home.client.place.events.TabletAndDesktopEventsView;
import com.sap.sailing.gwt.home.client.place.regatta.RegattaAnalyticsView;
import com.sap.sailing.gwt.home.client.place.regatta.RegattaPlace.RegattaNavigationTabs;
import com.sap.sailing.gwt.home.client.place.regatta.TabletAndDesktopRegattaView;
import com.sap.sailing.gwt.home.client.place.searchresult.SearchResultView;
import com.sap.sailing.gwt.home.client.place.searchresult.TabletAndDesktopSearchResultView;
import com.sap.sailing.gwt.home.client.place.series.SeriesAnalyticsView;
import com.sap.sailing.gwt.home.client.place.series.SeriesPlace.SeriesNavigationTabs;
import com.sap.sailing.gwt.home.client.place.series.TabletAndDesktopSeriesView;
import com.sap.sailing.gwt.home.client.place.solutions.SolutionsPlace.SolutionsNavigationTabs;
import com.sap.sailing.gwt.home.client.place.solutions.SolutionsView;
import com.sap.sailing.gwt.home.client.place.solutions.TabletAndDesktopSolutionsView;
@@ -28,12 +15,9 @@ import com.sap.sailing.gwt.home.client.place.sponsoring.SponsoringView;
import com.sap.sailing.gwt.home.client.place.sponsoring.TabletAndDesktopSponsoringView;
import com.sap.sailing.gwt.home.client.place.start.StartView;
import com.sap.sailing.gwt.home.client.place.start.TabletAndDesktopStartView;
import com.sap.sailing.gwt.home.client.place.whatsnew.TabletAndDesktopWhatsNewView;
import com.sap.sailing.gwt.home.client.place.whatsnew.WhatsNewPlace.WhatsNewNavigationTabs;
import com.sap.sailing.gwt.home.client.place.whatsnew.WhatsNewView;
import com.sap.sailing.gwt.home.client.place.whatsnew.TabletAndDesktopWhatsNewView;
import com.sap.sailing.gwt.ui.shared.EventDTO;
import com.sap.sailing.gwt.ui.shared.RaceGroupDTO;
import com.sap.sse.gwt.client.player.Timer;
public class SmartphoneApplicationClientFactory extends AbstractApplicationClientFactory implements ApplicationClientFactory {
@@ -46,18 +30,9 @@ public class SmartphoneApplicationClientFactory extends AbstractApplicationClien
}
private SmartphoneApplicationClientFactory(EventBus eventBus, PlaceController placeController) {
super(new TabletAndDesktopApplicationView(new HomePlacesNavigator(placeController)), eventBus, placeController);
super(new TabletAndDesktopApplicationView(new HomePlacesNavigator(placeController), eventBus), eventBus, placeController);
}
@Override
public EventView createEventView(EventDTO event, EventNavigationTabs navigationTab, List<RaceGroupDTO> raceGroups, String leaderboardName, Timer timerForClientServerOffset) {
return new TabletAndDesktopEventView(getSailingService(), event, navigationTab, raceGroups, leaderboardName, timerForClientServerOffset, getHomePlacesNavigator());
}
@Override
public EventWithoutRegattasView createEventWithoutRegattasView(EventDTO event) {
return new TabletAndDesktopEventWithoutRegattasView(getSailingService(), event, getHomePlacesNavigator());
}
@Override
public EventsView createEventsView() {
@@ -66,7 +41,7 @@ public class SmartphoneApplicationClientFactory extends AbstractApplicationClien
@Override
public TabletAndDesktopErrorView createErrorView(String errorMessage, Throwable errorReason) {
return new TabletAndDesktopErrorView(errorMessage, errorReason);
return new TabletAndDesktopErrorView(errorMessage, errorReason, null);
}
@Override
@@ -83,16 +58,6 @@ public class SmartphoneApplicationClientFactory extends AbstractApplicationClien
return new TabletAndDesktopSolutionsView(navigationTab, getHomePlacesNavigator());
}
@Override
public RegattaAnalyticsView createRegattaAnalyticsView(EventDTO event, String leaderboardName, RegattaNavigationTabs navigationTab, Timer timerForClientServerOffset) {
return new TabletAndDesktopRegattaView(event, leaderboardName, navigationTab, timerForClientServerOffset, getHomePlacesNavigator());
}
@Override
public SeriesAnalyticsView createSeriesAnalyticsView(EventDTO event, String leaderboardName, SeriesNavigationTabs navigationTab, Timer timerForClientServerOffset) {
return new TabletAndDesktopSeriesView(event, leaderboardName, navigationTab, timerForClientServerOffset, getHomePlacesNavigator());
}
@Override
public SearchResultView createSearchResultView() {
return new TabletAndDesktopSearchResultView(getHomePlacesNavigator());
@@ -1,26 +1,13 @@
package com.sap.sailing.gwt.home.client.app;
import java.util.List;
import com.google.gwt.event.shared.SimpleEventBus;
import com.google.gwt.place.shared.PlaceController;
import com.google.web.bindery.event.shared.EventBus;
import com.sap.sailing.gwt.home.client.place.error.TabletAndDesktopErrorView;
import com.sap.sailing.gwt.home.client.place.event.EventPlace.EventNavigationTabs;
import com.sap.sailing.gwt.home.client.place.event.EventView;
import com.sap.sailing.gwt.home.client.place.event.EventWithoutRegattasView;
import com.sap.sailing.gwt.home.client.place.event.TabletAndDesktopEventView;
import com.sap.sailing.gwt.home.client.place.event.TabletAndDesktopEventWithoutRegattasView;
import com.sap.sailing.gwt.home.client.place.events.EventsView;
import com.sap.sailing.gwt.home.client.place.events.TabletAndDesktopEventsView;
import com.sap.sailing.gwt.home.client.place.regatta.RegattaAnalyticsView;
import com.sap.sailing.gwt.home.client.place.regatta.RegattaPlace.RegattaNavigationTabs;
import com.sap.sailing.gwt.home.client.place.regatta.TabletAndDesktopRegattaView;
import com.sap.sailing.gwt.home.client.place.searchresult.SearchResultView;
import com.sap.sailing.gwt.home.client.place.searchresult.TabletAndDesktopSearchResultView;
import com.sap.sailing.gwt.home.client.place.series.SeriesAnalyticsView;
import com.sap.sailing.gwt.home.client.place.series.SeriesPlace.SeriesNavigationTabs;
import com.sap.sailing.gwt.home.client.place.series.TabletAndDesktopSeriesView;
import com.sap.sailing.gwt.home.client.place.solutions.SolutionsPlace.SolutionsNavigationTabs;
import com.sap.sailing.gwt.home.client.place.solutions.SolutionsView;
import com.sap.sailing.gwt.home.client.place.solutions.TabletAndDesktopSolutionsView;
@@ -28,12 +15,9 @@ import com.sap.sailing.gwt.home.client.place.sponsoring.SponsoringView;
import com.sap.sailing.gwt.home.client.place.sponsoring.TabletAndDesktopSponsoringView;
import com.sap.sailing.gwt.home.client.place.start.StartView;
import com.sap.sailing.gwt.home.client.place.start.TabletAndDesktopStartView;
import com.sap.sailing.gwt.home.client.place.whatsnew.WhatsNewView;
import com.sap.sailing.gwt.home.client.place.whatsnew.TabletAndDesktopWhatsNewView;
import com.sap.sailing.gwt.home.client.place.whatsnew.WhatsNewPlace.WhatsNewNavigationTabs;
import com.sap.sailing.gwt.ui.shared.EventDTO;
import com.sap.sailing.gwt.ui.shared.RaceGroupDTO;
import com.sap.sse.gwt.client.player.Timer;
import com.sap.sailing.gwt.home.client.place.whatsnew.WhatsNewView;
public class TabletAndDesktopApplicationClientFactory extends AbstractApplicationClientFactory implements ApplicationClientFactory {
@@ -46,22 +30,12 @@ public class TabletAndDesktopApplicationClientFactory extends AbstractApplicatio
}
private TabletAndDesktopApplicationClientFactory(EventBus eventBus, PlaceController placeController) {
super(new TabletAndDesktopApplicationView(new HomePlacesNavigator(placeController)), eventBus, placeController);
}
@Override
public EventView createEventView(EventDTO event, EventNavigationTabs navigationTab, List<RaceGroupDTO> raceGroups, String leaderboardName, Timer timerForClientServerOffset) {
return new TabletAndDesktopEventView(getSailingService(), event, navigationTab, raceGroups, leaderboardName, timerForClientServerOffset, getHomePlacesNavigator());
super(new TabletAndDesktopApplicationView(new HomePlacesNavigator(placeController), eventBus), eventBus, placeController);
}
@Override
public TabletAndDesktopErrorView createErrorView(String errorMessage, Throwable errorReason) {
return new TabletAndDesktopErrorView(errorMessage, errorReason);
}
@Override
public EventWithoutRegattasView createEventWithoutRegattasView(EventDTO event) {
return new TabletAndDesktopEventWithoutRegattasView(getSailingService(), event, getHomePlacesNavigator());
return new TabletAndDesktopErrorView(errorMessage, errorReason, null);
}
@Override
@@ -83,16 +57,6 @@ public class TabletAndDesktopApplicationClientFactory extends AbstractApplicatio
public SolutionsView createSolutionsView(SolutionsNavigationTabs navigationTab) {
return new TabletAndDesktopSolutionsView(navigationTab, getHomePlacesNavigator());
}
@Override
public RegattaAnalyticsView createRegattaAnalyticsView(EventDTO event, String leaderboardName, RegattaNavigationTabs navigationTab, Timer timerForClientServerOffset) {
return new TabletAndDesktopRegattaView(event, leaderboardName, navigationTab, timerForClientServerOffset, getHomePlacesNavigator());
}
@Override
public SeriesAnalyticsView createSeriesAnalyticsView(EventDTO event, String leaderboardName, SeriesNavigationTabs navigationTab, Timer timerForClientServerOffset) {
return new TabletAndDesktopSeriesView(event, leaderboardName, navigationTab, timerForClientServerOffset, getHomePlacesNavigator());
}
@Override
public SearchResultView createSearchResultView() {
@@ -7,6 +7,7 @@ import com.google.gwt.user.client.ui.AcceptsOneWidget;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.SimplePanel;
import com.google.gwt.user.client.ui.Widget;
import com.google.web.bindery.event.shared.EventBus;
import com.sap.sailing.gwt.home.client.shared.footer.Footer;
import com.sap.sailing.gwt.home.client.shared.header.Header;
import com.sap.sailing.gwt.ui.client.StringMessages;
@@ -34,8 +35,8 @@ public class TabletAndDesktopApplicationView extends Composite implements Applic
@UiField
SimplePanel mainContentPanel;
public TabletAndDesktopApplicationView(HomePlacesNavigator navigator) {
headerPanel = new Header(navigator);
public TabletAndDesktopApplicationView(HomePlacesNavigator navigator, EventBus eventBus) {
headerPanel = new Header(navigator, eventBus);
footerPanel = new Footer(navigator);
initWidget(uiBinder.createAndBindUi(this));
}
@@ -1,10 +1,16 @@
<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
xmlns:g="urn:import:com.google.gwt.user.client.ui"
xmlns:s="urn:import:com.sap.sailing.gwt.home.client.shared">
xmlns:g="urn:import:com.google.gwt.user.client.ui" xmlns:s="urn:import:com.sap.sailing.gwt.home.client.shared">
<ui:style>
.mainContent {
min-height: 400px;
}
</ui:style>
<g:HTMLPanel>
<s:header.Header ui:field="headerPanel" />
<g:SimplePanel ui:field="mainContentPanel" />
<s:footer.Footer ui:field="footerPanel" />
</g:HTMLPanel>
<g:SimplePanel ui:field="mainContentPanel" styleName="{style.mainContent}" />
<s:footer.Footer ui:field="footerPanel" />
</g:HTMLPanel>
</ui:UiBinder>
@@ -2,17 +2,46 @@ package com.sap.sailing.gwt.home.client.place.error;
import com.google.gwt.activity.shared.AbstractActivity;
import com.google.gwt.event.shared.EventBus;
import com.google.gwt.user.client.Command;
import com.google.gwt.user.client.ui.AcceptsOneWidget;
public class ErrorActivity extends AbstractActivity {
private ErrorPlace currentPlace;
private ErrorClientFactory clientFactory;
public ErrorActivity(ErrorPlace place, ErrorClientFactory clientFactory) {
this.currentPlace = place;
this.clientFactory = clientFactory;
}
@Override
public void start(AcceptsOneWidget panel, EventBus eventBus) {
// TODO: the error place should get the error message from the place
panel.setWidget(new TabletAndDesktopErrorView(null, null));
final TabletAndDesktopErrorView view;
Command reloadCommand = null;
if (currentPlace.getComingFrom() != null) {
reloadCommand = new Command() {
@Override
public void execute() {
clientFactory.getPlaceController().goTo(currentPlace.getComingFrom());
}
};
}
if (currentPlace.hasCustomErrorMessages()) {
view = new TabletAndDesktopErrorView(
currentPlace.getErrorMessage(),
currentPlace.getErrorMessageDetail(),
currentPlace.getException(), reloadCommand);
} else {
view = new TabletAndDesktopErrorView(currentPlace.getErrorMessageDetail(), currentPlace.getException(),
reloadCommand);
}
panel.setWidget(view);
}
}
Loaded 100 of 669 files, more files were not shown because too many files have changed in this diff. Show more