diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/overview/EventOverviewStage.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/overview/EventOverviewStage.java index 92fe518ef0b..e00ab4d3030 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/overview/EventOverviewStage.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/overview/EventOverviewStage.java @@ -70,7 +70,7 @@ public class EventOverviewStage extends Composite { public void setupRefresh(RefreshManager refreshManager) { this.refreshManager = refreshManager; - refreshManager.add(refreshable, new GetEventOverviewStageAction(presenter.getCtx().getEventDTO().getId())); + refreshManager.add(refreshable, new GetEventOverviewStageAction(presenter.getCtx().getEventDTO().getId(), false)); if(presenter.getCtx().getEventDTO().getState() == EventState.RUNNING) { refreshManager.add(newsRefreshable, new GetEventOverviewNewsAction(presenter.getCtx().getEventDTO().getId(), 15)); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/events/recent/EventsOverviewRecentYear.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/events/recent/EventsOverviewRecentYear.java index 5c9984bac3e..32024a813e8 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/events/recent/EventsOverviewRecentYear.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/events/recent/EventsOverviewRecentYear.java @@ -72,6 +72,11 @@ public class EventsOverviewRecentYear extends Composite { for (EventListEventDTO eventDTO : events) { PlaceNavigation eventNavigation = navigator.getEventNavigation(eventDTO.getId().toString(), eventDTO.getBaseURL(), eventDTO.isOnRemoteServer()); RecentEventTeaser recentEvent = new RecentEventTeaser(eventNavigation, eventDTO, eventDTO.getState().getListStateMarker()); + if (eventDTO.getEventSeries() != null) { + String seriesId = eventDTO.getEventSeries().getId().toString(), baseUrl = eventDTO.getBaseURL(); + PlaceNavigation seriesNavigation = navigator.getEventSeriesNavigation(seriesId, baseUrl, eventDTO.isOnRemoteServer()); + recentEvent.setSeriesInformation(seriesNavigation, eventDTO.getEventSeries()); + } recentEventsTeaserPanel.add(recentEvent); } headerDiv.addDomHandler(new ClickHandler() { diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/events/recent/RecentEventTeaser.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/events/recent/RecentEventTeaser.java index 1799af3ad45..7948dabb03d 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/events/recent/RecentEventTeaser.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/events/recent/RecentEventTeaser.java @@ -7,6 +7,7 @@ import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.Widget; import com.sap.sailing.gwt.home.client.shared.event.EventTeaser; import com.sap.sailing.gwt.home.shared.app.PlaceNavigation; +import com.sap.sailing.gwt.ui.shared.eventlist.EventListEventSeriesDTO; import com.sap.sailing.gwt.ui.shared.general.EventMetadataDTO; import com.sap.sailing.gwt.ui.shared.general.LabelType; @@ -20,9 +21,14 @@ public class RecentEventTeaser extends Composite { @UiField(provided = true) EventTeaser eventTeaser; public RecentEventTeaser(final PlaceNavigation placeNavigation, final EventMetadataDTO event, LabelType labelType) { + EventsOverviewRecentResources.INSTANCE.css().ensureInjected(); eventTeaser = new EventTeaser(placeNavigation, event, labelType); initWidget(uiBinder.createAndBindUi(this)); } + + public void setSeriesInformation(PlaceNavigation seriesNavigation, EventListEventSeriesDTO eventSeries) { + eventTeaser.setSeriesInformation(seriesNavigation, eventSeries); + } public void hideImage(boolean hide) { eventTeaser.hideImage(hide); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/event/EventTeaser.gss b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/event/EventTeaser.gss index 2a272b8db69..7222a76b944 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/event/EventTeaser.gss +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/event/EventTeaser.gss @@ -1,6 +1,7 @@ /** * A event teaser with image */ + @def SERIES_CORNER_SIZE 6em; .eventteasercontainer { font-size: 1rem; text-align: center; @@ -40,6 +41,34 @@ position: absolute; bottom: 0; right: 0; + width: SERIES_CORNER_SIZE; + height: SERIES_CORNER_SIZE; + overflow: hidden; +} +.eventteaser_series .eventteaser_series_corner { + position: absolute; + border-style: solid; + border-color: rgba(240, 171, 0, 0.75) transparent; + border-width: 0 0 SERIES_CORNER_SIZE SERIES_CORNER_SIZE; +} +.eventteaser_series .eventteaser_series_text { + display: block; + text-align: center; + color: white; + font-weight: 600; + font-size: 120%; + width: 7em; + height: 3.5em; + transform: rotate(315deg) translate(-1.25em, 1.6em); +} +.eventteaser_series .eventteaser_series_eventcount { + position: absolute; + bottom: 0.5em; + right: 0.5em; + text-align: right; + font-weight: 600; + color: white; + font-size: 120%; } .eventteaser_name { width: 100%; diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/event/EventTeaser.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/event/EventTeaser.java index 7d7d3b3df34..1a1bd8edd4c 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/event/EventTeaser.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/event/EventTeaser.java @@ -17,23 +17,18 @@ import com.sap.sailing.gwt.home.client.shared.EventDatesFormatterUtil; import com.sap.sailing.gwt.home.client.shared.LabelTypeUtil; import com.sap.sailing.gwt.home.client.shared.LongNamesUtil; import com.sap.sailing.gwt.home.shared.app.PlaceNavigation; +import com.sap.sailing.gwt.ui.shared.eventlist.EventListEventSeriesDTO; import com.sap.sailing.gwt.ui.shared.general.EventMetadataDTO; import com.sap.sailing.gwt.ui.shared.general.LabelType; public class EventTeaser extends Composite { - @UiField - SpanElement eventName; - @UiField - SpanElement venue; - @UiField - SpanElement eventDate; - @UiField - AnchorElement eventLink; - @UiField - DivElement eventImage; - @UiField - DivElement eventState; + @UiField SpanElement eventName; + @UiField SpanElement venue; + @UiField SpanElement eventDate; + @UiField AnchorElement eventLink; + @UiField DivElement eventImage; + @UiField DivElement eventState; private final EventMetadataDTO event; @@ -77,7 +72,6 @@ public class EventTeaser extends Composite { eventDate.setInnerText(EventDatesFormatterUtil.formatDateRangeWithoutYear(event.getStartDate(), event.getEndDate())); final StringBuilder thumbnailUrlBuilder = new StringBuilder("url('"); - final String thumbnailImageUrl = event.getThumbnailImageURL(); if (thumbnailImageUrl == null || thumbnailImageUrl.isEmpty()) { thumbnailUrlBuilder.append(EventTeaserResources.INSTANCE.defaultEventPhotoImage().getSafeUri().asString()); @@ -87,7 +81,11 @@ public class EventTeaser extends Composite { thumbnailUrlBuilder.append("')"); eventImage.getStyle().setBackgroundImage(thumbnailUrlBuilder.toString()); } - + + public void setSeriesInformation(PlaceNavigation seriesNavigation, EventListEventSeriesDTO eventSeries) { + eventImage.appendChild(new EventTeaserSeriesInfoCorner(seriesNavigation, eventSeries).getElement()); + } + public void hideImage(boolean hide) { if (hide) { eventImage.getStyle().setDisplay(Display.NONE); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/event/EventTeaserResources.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/event/EventTeaserResources.java index 96927122486..edc67be513c 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/event/EventTeaserResources.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/event/EventTeaserResources.java @@ -18,6 +18,9 @@ public interface EventTeaserResources extends ClientBundle { String eventteaser_title_name(); String eventteaser_image(); String eventteaser_series(); + String eventteaser_series_corner(); + String eventteaser_series_text(); + String eventteaser_series_eventcount(); String eventteaser_name(); String eventteaser_title_name_label(); String label(); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/event/EventTeaserSeriesInfoCorner.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/event/EventTeaserSeriesInfoCorner.java new file mode 100644 index 00000000000..0f2ec1f1fd1 --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/event/EventTeaserSeriesInfoCorner.java @@ -0,0 +1,32 @@ +package com.sap.sailing.gwt.home.client.shared.event; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.dom.client.AnchorElement; +import com.google.gwt.dom.client.DivElement; +import com.google.gwt.uibinder.client.UiBinder; +import com.google.gwt.uibinder.client.UiField; +import com.google.gwt.user.client.ui.UIObject; +import com.sap.sailing.gwt.home.shared.app.PlaceNavigation; +import com.sap.sailing.gwt.ui.client.StringMessages; +import com.sap.sailing.gwt.ui.shared.eventlist.EventListEventSeriesDTO; + +public class EventTeaserSeriesInfoCorner extends UIObject { + + private static EventTeaserSeriesInfoCornerUiBinder uiBinder = GWT.create(EventTeaserSeriesInfoCornerUiBinder.class); + + interface EventTeaserSeriesInfoCornerUiBinder extends UiBinder { + } + + @UiField DivElement seriesEventsCountUi; + @UiField AnchorElement seriesInfoTextUi; + + public EventTeaserSeriesInfoCorner(PlaceNavigation seriesNavigation, EventListEventSeriesDTO eventSeries) { + setElement(uiBinder.createAndBindUi(this)); + int eventCount = eventSeries.getEventsCount(); + seriesInfoTextUi.setTitle(eventSeries.getDisplayName() + " - " + + StringMessages.INSTANCE.eventsHaveTakenPlace(eventSeries.getEventsCount())); + seriesNavigation.configureAnchorElement(seriesInfoTextUi); + seriesEventsCountUi.setInnerText(String.valueOf(eventCount)); + } + +} diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/event/EventTeaserSeriesInfoCorner.ui.xml b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/event/EventTeaserSeriesInfoCorner.ui.xml new file mode 100644 index 00000000000..2f0b8c4585e --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/event/EventTeaserSeriesInfoCorner.ui.xml @@ -0,0 +1,10 @@ + + + + +
+
+ +
+
+
\ No newline at end of file diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/stage/UpcomingEventStageTeaserBand.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/stage/UpcomingEventStageTeaserBand.java index 3ab75d6ec48..c14c1009dcf 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/stage/UpcomingEventStageTeaserBand.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/stage/UpcomingEventStageTeaserBand.java @@ -27,6 +27,8 @@ public class UpcomingEventStageTeaserBand extends StageTeaserBand { @Override public void actionLinkClicked(ClickEvent e) { getPlaceNavigator().goToPlace(getEventNavigation()); - e.preventDefault(); + if (e != null) { + e.preventDefault(); + } } } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/app/AbstractPlaceNavigator.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/app/AbstractPlaceNavigator.java new file mode 100644 index 00000000000..dd59d4e6241 --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/app/AbstractPlaceNavigator.java @@ -0,0 +1,55 @@ +package com.sap.sailing.gwt.home.desktop.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.user.client.History; +import com.google.gwt.user.client.Window; +import com.sap.sailing.gwt.home.shared.app.ApplicationHistoryMapper; +import com.sap.sailing.gwt.home.shared.app.PlaceNavigation; +import com.sap.sailing.gwt.home.shared.app.PlaceNavigator; + +public abstract class AbstractPlaceNavigator implements PlaceNavigator { + protected final PlaceController placeController; + + 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; + } + + public void goToPlace(PlaceNavigation placeNavigation) { + if(placeNavigation.isRemotePlace()) { + String destinationUrl = placeNavigation.getTargetUrl(); + History.newItem(History.getToken(), false); + Window.Location.assign(destinationUrl); + } else { + placeController.goTo(placeNavigation.getPlace()); + } + } + + protected PlaceNavigation createLocalPlaceNavigation(T destinationPlace) { + return new PlaceNavigation(null, destinationPlace, false, this, mapper); + } + + + protected PlaceNavigation createGlobalPlaceNavigation(T destinationPlace) { + return new PlaceNavigation(destinationPlace, this, mapper); + } + + + protected PlaceNavigation createPlaceNavigation(String baseUrl, boolean isOnRemoteServer, + T destinationPlace) { + return new PlaceNavigation(baseUrl, destinationPlace, isOnRemoteServer, this, mapper); + } + + + public void pushPlaceToHistoryStack(T destinationPlace) { + String placeHistoryToken = mapper.getToken(destinationPlace); + History.newItem(placeHistoryToken, false); + } +} diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/app/AbstractPlaceNavigator.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/app/AbstractPlaceNavigator.java new file mode 100644 index 00000000000..c594f8267f0 --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/app/AbstractPlaceNavigator.java @@ -0,0 +1,55 @@ +package com.sap.sailing.gwt.home.mobile.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.user.client.History; +import com.google.gwt.user.client.Window; +import com.sap.sailing.gwt.home.shared.app.ApplicationHistoryMapper; +import com.sap.sailing.gwt.home.shared.app.PlaceNavigation; +import com.sap.sailing.gwt.home.shared.app.PlaceNavigator; + +public abstract class AbstractPlaceNavigator implements PlaceNavigator { + protected final PlaceController placeController; + + 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; + } + + public void goToPlace(PlaceNavigation placeNavigation) { + if(placeNavigation.isRemotePlace()) { + String destinationUrl = placeNavigation.getTargetUrl(); + History.newItem(History.getToken(), false); + Window.Location.assign(destinationUrl); + } else { + placeController.goTo(placeNavigation.getPlace()); + } + } + + protected PlaceNavigation createLocalPlaceNavigation(T destinationPlace) { + return new PlaceNavigation(null, destinationPlace, false, this, mapper); + } + + + protected PlaceNavigation createGlobalPlaceNavigation(T destinationPlace) { + return new PlaceNavigation(destinationPlace, this, mapper); + } + + + protected PlaceNavigation createPlaceNavigation(String baseUrl, boolean isOnRemoteServer, + T destinationPlace) { + return new PlaceNavigation(baseUrl, destinationPlace, isOnRemoteServer, this, mapper); + } + + + public void pushPlaceToHistoryStack(T destinationPlace) { + String placeHistoryToken = mapper.getToken(destinationPlace); + History.newItem(placeHistoryToken, false); + } +} diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/recents/EventOverviewRecentSeriesInfo.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/recents/EventOverviewRecentSeriesInfo.java new file mode 100644 index 00000000000..bd0f0174647 --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/recents/EventOverviewRecentSeriesInfo.java @@ -0,0 +1,32 @@ +package com.sap.sailing.gwt.home.mobile.partials.recents; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.dom.client.AnchorElement; +import com.google.gwt.dom.client.DivElement; +import com.google.gwt.uibinder.client.UiBinder; +import com.google.gwt.uibinder.client.UiField; +import com.google.gwt.user.client.ui.UIObject; +import com.sap.sailing.gwt.home.shared.app.PlaceNavigation; +import com.sap.sailing.gwt.ui.client.StringMessages; +import com.sap.sailing.gwt.ui.shared.eventlist.EventListEventSeriesDTO; + +public class EventOverviewRecentSeriesInfo extends UIObject { + + private static EventOverviewRecentSeriesInfoUiBinder uiBinder = GWT + .create(EventOverviewRecentSeriesInfoUiBinder.class); + + interface EventOverviewRecentSeriesInfoUiBinder extends UiBinder { + } + + @UiField DivElement seriesNameUi; + @UiField DivElement seriesInfoUi; + private final AnchorElement seriesUi; + + public EventOverviewRecentSeriesInfo(PlaceNavigation seriesNavigation, EventListEventSeriesDTO eventSeries) { + setElement(seriesUi = uiBinder.createAndBindUi(this)); + seriesNameUi.setInnerText(eventSeries.getDisplayName()); + seriesInfoUi.setInnerText(StringMessages.INSTANCE.eventsHaveTakenPlace(eventSeries.getEventsCount())); + seriesNavigation.configureAnchorElement(seriesUi); + } + +} diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/recents/EventOverviewRecentSeriesInfo.ui.xml b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/recents/EventOverviewRecentSeriesInfo.ui.xml new file mode 100644 index 00000000000..3661c9f72ad --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/recents/EventOverviewRecentSeriesInfo.ui.xml @@ -0,0 +1,15 @@ + + + + + + +
+
+
+
+
+ +
+
+
\ No newline at end of file diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/recents/EventsOverviewRecent.gss b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/recents/EventsOverviewRecent.gss index e09c41ae214..9ab603590ee 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/recents/EventsOverviewRecent.gss +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/recents/EventsOverviewRecent.gss @@ -197,3 +197,14 @@ .togglecontainerhidden { display: none; } +.seriesInfo { + display: block; + padding: 0.5rem; + padding-left: 3em; +} +.seriesInfo .eventteaser_title { + font-size: 93.3333333333%; +} +.seriesInfo .eventteaser_title_name { + color: #bcbcbc; +} diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/recents/EventsOverviewRecentResources.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/recents/EventsOverviewRecentResources.java index 805a841fcc4..68448729b12 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/recents/EventsOverviewRecentResources.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/recents/EventsOverviewRecentResources.java @@ -46,6 +46,7 @@ public interface EventsOverviewRecentResources extends ClientBundle { String eventsoverviewrecent_event_arrow(); String eventsoverviewrecent_event_arrow_image(); String togglecontainerhidden(); + String seriesInfo(); } @Source("com/sap/sailing/gwt/home/images/default_event_photo.jpg") diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/recents/EventsOverviewRecentYear.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/recents/EventsOverviewRecentYear.java index 4b2d4800058..28626eb5bd6 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/recents/EventsOverviewRecentYear.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/recents/EventsOverviewRecentYear.java @@ -49,11 +49,15 @@ public class EventsOverviewRecentYear extends Composite { this.eventsCount.setInnerText(i18n.eventsCount(events.size())); boolean first = true; for (EventListEventDTO eventDTO : events) { - PlaceNavigation eventNavigation = navigator.getEventNavigation(eventDTO.getId() .toString(), eventDTO.getBaseURL(), eventDTO.isOnRemoteServer()); EventsOverviewRecentYearEvent recentEvent = new EventsOverviewRecentYearEvent(eventNavigation, eventDTO, eventDTO.getState().getListStateMarker(), first || eventDTO.isRunning()); + if (eventDTO.getEventSeries() != null) { + String seriesId = eventDTO.getEventSeries().getId().toString(), baseUrl = eventDTO.getBaseURL(); + PlaceNavigation seriesNavigation = navigator.getEventSeriesNavigation(seriesId, baseUrl, eventDTO.isOnRemoteServer()); + recentEvent.setSeriesInformation(seriesNavigation, eventDTO.getEventSeries()); + } recentEventsTeaserPanel.add(recentEvent); if (first) { first = false; diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/recents/EventsOverviewRecentYearEvent.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/recents/EventsOverviewRecentYearEvent.java index 796e3576111..ef9427674c4 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/recents/EventsOverviewRecentYearEvent.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/recents/EventsOverviewRecentYearEvent.java @@ -13,6 +13,7 @@ import com.google.gwt.user.client.ui.Widget; import com.sap.sailing.gwt.home.client.shared.EventDatesFormatterUtil; import com.sap.sailing.gwt.home.client.shared.LabelTypeUtil; import com.sap.sailing.gwt.home.shared.app.PlaceNavigation; +import com.sap.sailing.gwt.ui.shared.eventlist.EventListEventSeriesDTO; import com.sap.sailing.gwt.ui.shared.general.EventMetadataDTO; import com.sap.sailing.gwt.ui.shared.general.LabelType; @@ -35,11 +36,13 @@ public class EventsOverviewRecentYearEvent extends Widget { SpanElement eventDateUi; @UiField SpanElement eventNameUi; + + private final Element eventContainerUi; public EventsOverviewRecentYearEvent(final PlaceNavigation placeNavigation, final EventMetadataDTO event, LabelType labelType, boolean isTeaserEvent) { EventsOverviewRecentResources.INSTANCE.css().ensureInjected(); - setElement(uiBinder.createAndBindUi(this)); + setElement(eventContainerUi = uiBinder.createAndBindUi(this)); eventNameUi.setInnerText(event.getDisplayName()); if (isTeaserEvent) { eventImageUi.getStyle().setDisplay(Display.BLOCK); @@ -61,5 +64,8 @@ public class EventsOverviewRecentYearEvent extends Widget { event.getEndDate())); } + public void setSeriesInformation(PlaceNavigation seriesNavigation, EventListEventSeriesDTO eventSeries) { + eventContainerUi.appendChild(new EventOverviewRecentSeriesInfo(seriesNavigation, eventSeries).getElement()); + } } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/recents/EventsOverviewRecentYearEvent.ui.xml b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/recents/EventsOverviewRecentYearEvent.ui.xml index d5a4c3a7dbe..fede092e9cb 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/recents/EventsOverviewRecentYearEvent.ui.xml +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/recents/EventsOverviewRecentYearEvent.ui.xml @@ -7,24 +7,25 @@ type="com.sap.sailing.gwt.home.mobile.resources.SharedResources" /> - - - -
-
-
- -
+
+ + + \ No newline at end of file diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/stage/UpcomingEventStageTeaserBand.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/stage/UpcomingEventStageTeaserBand.java index 4a1b5dca7c1..322fc6879a0 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/stage/UpcomingEventStageTeaserBand.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/stage/UpcomingEventStageTeaserBand.java @@ -27,6 +27,8 @@ public class UpcomingEventStageTeaserBand extends StageTeaserBand { @Override public void actionLinkClicked(ClickEvent e) { getPlaceNavigator().goToPlace(getEventNavigation()); - e.preventDefault(); + if (e != null) { + e.preventDefault(); + } } } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/event/overview/EventViewImpl.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/event/overview/EventViewImpl.java index 1d6a894df44..608f744dd4f 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/event/overview/EventViewImpl.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/event/overview/EventViewImpl.java @@ -59,7 +59,7 @@ public class EventViewImpl extends AbstractEventView implem private void setupOverviewStage(Panel container) { overviewStageUi = new EventOverviewStage(currentPresenter); - refreshManager.add(overviewStageUi, new GetEventOverviewStageAction(getEventId())); + refreshManager.add(overviewStageUi, new GetEventOverviewStageAction(getEventId(), true)); container.add(overviewStageUi); } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/shared/app/PlaceNavigation.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/shared/app/PlaceNavigation.java index 7c562a67513..0c95476c447 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/shared/app/PlaceNavigation.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/shared/app/PlaceNavigation.java @@ -99,6 +99,7 @@ public class PlaceNavigation { public void onBrowserEvent(Event event) { if (LinkUtil.handleLinkClick(event)) { event.preventDefault(); + event.stopPropagation(); goToPlace(); } } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/server/EventListDataCalculator.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/server/EventListDataCalculator.java new file mode 100644 index 00000000000..e43c08aa9bb --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/server/EventListDataCalculator.java @@ -0,0 +1,67 @@ +package com.sap.sailing.gwt.server; + +import java.net.URL; +import java.util.Calendar; +import java.util.GregorianCalendar; +import java.util.HashMap; +import java.util.Map; +import java.util.Map.Entry; + +import com.sap.sailing.domain.base.EventBase; +import com.sap.sailing.gwt.server.HomeServiceUtil.EventVisitor; +import com.sap.sailing.gwt.ui.shared.eventlist.EventListEventDTO; +import com.sap.sailing.gwt.ui.shared.eventlist.EventListEventSeriesDTO; +import com.sap.sailing.gwt.ui.shared.eventlist.EventListViewDTO; +import com.sap.sailing.gwt.ui.shared.general.EventState; +import com.sap.sailing.server.RacingEventService; + +public class EventListDataCalculator implements EventVisitor { + + private final Map lastestEventPerSeries = new HashMap<>(); + private final Map numberOfEventsPerSeries = new HashMap<>(); + private final EventListViewDTO result = new EventListViewDTO(); + private final RacingEventService service; + + public EventListDataCalculator(RacingEventService service) { + this.service = service; + } + + @Override + public void visit(EventBase event, boolean onRemoteServer, URL baseURL) { + EventListEventDTO eventDTO = HomeServiceUtil.convertToEventListDTO(event, baseURL, onRemoteServer, service); + if (HomeServiceUtil.calculateEventState(event) != EventState.UPCOMING && HomeServiceUtil.isFakeSeries(event)) { + String seriesName = HomeServiceUtil.getSeriesName(event); + EventListEventDTO latestEvent = lastestEventPerSeries.get(seriesName); + if (latestEvent == null || latestEvent.getStartDate().before(eventDTO.getStartDate())) { + lastestEventPerSeries.put(seriesName, eventDTO); + } + increaseNumberOfEvents(seriesName); + } else { + addEventToResults(eventDTO); + } + } + + private void increaseNumberOfEvents(String seriesName) { + Integer currentValue = numberOfEventsPerSeries.get(seriesName); + currentValue = currentValue == null ? 0 : currentValue; + numberOfEventsPerSeries.put(seriesName, ++currentValue); + } + + public EventListViewDTO getResult() { + for (Entry latestEventInSeries : lastestEventPerSeries.entrySet()) { + String seriesName = latestEventInSeries.getKey(); + EventListEventDTO latestEvent = latestEventInSeries.getValue(); + latestEvent.setEventSeries(new EventListEventSeriesDTO(latestEvent.getId(), seriesName)); + latestEvent.getEventSeries().setEventsCount(numberOfEventsPerSeries.get(seriesName)); + addEventToResults(latestEvent); + } + return result; + } + + private void addEventToResults(EventListEventDTO eventDTO) { + Calendar cal = GregorianCalendar.getInstance(); + cal.setTime(eventDTO.getStartDate()); + result.addEvent(eventDTO, cal.get(Calendar.YEAR)); + } + +} diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/server/HomeServiceImpl.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/server/HomeServiceImpl.java index 93ef4f52d62..5bb6e3f4f86 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/server/HomeServiceImpl.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/server/HomeServiceImpl.java @@ -1,13 +1,9 @@ package com.sap.sailing.gwt.server; import java.net.MalformedURLException; -import java.net.URL; import java.util.ArrayList; -import java.util.Calendar; import java.util.Collections; import java.util.Comparator; -import java.util.Date; -import java.util.GregorianCalendar; import java.util.HashSet; import java.util.List; import java.util.Random; @@ -20,11 +16,9 @@ import org.osgi.util.tracker.ServiceTracker; import com.sap.sailing.domain.base.Event; import com.sap.sailing.domain.base.EventBase; import com.sap.sailing.domain.leaderboard.LeaderboardGroup; -import com.sap.sailing.gwt.server.HomeServiceUtil.EventVisitor; import com.sap.sailing.gwt.ui.client.HomeService; import com.sap.sailing.gwt.ui.server.Activator; import com.sap.sailing.gwt.ui.server.ProxiedRemoteServiceServlet; -import com.sap.sailing.gwt.ui.shared.eventlist.EventListEventDTO; import com.sap.sailing.gwt.ui.shared.eventlist.EventListViewDTO; import com.sap.sailing.gwt.ui.shared.fakeseries.EventSeriesViewDTO; import com.sap.sailing.gwt.ui.shared.fakeseries.EventSeriesViewDTO.EventSeriesState; @@ -263,21 +257,8 @@ public class HomeServiceImpl extends ProxiedRemoteServiceServlet implements Home @Override public EventListViewDTO getEventListView() throws MalformedURLException { - // TODO fill stats of years - final EventListViewDTO result = new EventListViewDTO(); - HomeServiceUtil.forAllPublicEvents(getService(), getThreadLocalRequest(), new EventVisitor() { - @Override - public void visit(EventBase event, boolean onRemoteServer, URL baseURL) { - EventListEventDTO eventDTO = HomeServiceUtil.convertToEventListDTO(event, baseURL, onRemoteServer, getService()); - result.addEvent(eventDTO, getYear(eventDTO.getStartDate())); - } - }); - return result; - } - - private int getYear(Date date) { - Calendar cal = GregorianCalendar.getInstance(); - cal.setTime(date); - return cal.get(Calendar.YEAR); + EventListDataCalculator eventListDataCalculator = new EventListDataCalculator(getService()); + HomeServiceUtil.forAllPublicEvents(getService(), getThreadLocalRequest(), eventListDataCalculator); + return eventListDataCalculator.getResult(); } } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/server/HomeServiceUtil.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/server/HomeServiceUtil.java index b12aee08b35..41ff5524c95 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/server/HomeServiceUtil.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/server/HomeServiceUtil.java @@ -415,12 +415,9 @@ public final class HomeServiceUtil { } Event event = (Event) eventBase; for (Leaderboard leaderboard : event.getLeaderboardGroups().iterator().next().getLeaderboards()) { - if(leaderboard instanceof RegattaLeaderboard) { - if(!HomeServiceUtil.isPartOfEvent(event, leaderboard)) { - continue; - } + if(HomeServiceUtil.isPartOfEvent(event, leaderboard)) { + return leaderboard.getDisplayName() != null ? leaderboard.getDisplayName() : leaderboard.getName(); } - return leaderboard.getDisplayName() != null ? leaderboard.getDisplayName() : leaderboard.getName(); } return null; } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.java index db72afcb9e9..15e8ff97bae 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.java @@ -1382,4 +1382,5 @@ public interface StringMessages extends com.sap.sse.gwt.client.StringMessages, c String progress(); String videosCount(@PluralCount(DefaultRule_1_0n.class) int count); String photosCount(@PluralCount(DefaultRule_1_0n.class) int count); + String eventsHaveTakenPlace(@PluralCount(DefaultRule_1_0n.class) int eventCount); } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.properties b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.properties index 8a7df38eb11..32d9fe92287 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.properties +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.properties @@ -1351,3 +1351,5 @@ videosCount={0,number} videos videosCount[one]={0,number} video photosCount={0,number} photos photosCount[one]={0,number} photo +eventsHaveTakenPlace={0} events have taken place +eventsHaveTakenPlace[one]= One event has taken place diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_de.properties b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_de.properties index d1c34313b54..842ac907e2f 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_de.properties +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_de.properties @@ -1340,3 +1340,5 @@ videosCount={0,number} Videos videosCount[one]={0,number} Video photosCount={0,number} Bilder photosCount[one]={0,number} Bild +eventsHaveTakenPlace={0} Veranstaltungen haben stattgefunden +eventsHaveTakenPlace[one]= Eine Veranstaltung hat stattgefunden \ No newline at end of file diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_ru.properties b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_ru.properties index 16213e87eea..ae06b912624 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_ru.properties +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_ru.properties @@ -1290,3 +1290,5 @@ videosCount={0,number} videos videosCount[one]={0,number} video photosCount={0,number} photos photosCount[one]={0,number} photo +eventsHaveTakenPlace={0} events have taken place +eventsHaveTakenPlace[one]= One event has taken place diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_zh.properties b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_zh.properties index 5ddd33dbe8a..207112a85d6 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_zh.properties +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_zh.properties @@ -1326,3 +1326,5 @@ videosCount={0,number} videos videosCount[one]={0,number} video photosCount={0,number} photos photosCount[one]={0,number} photo +eventsHaveTakenPlace={0} events have taken place +eventsHaveTakenPlace[one]= One event has taken place diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/event/GetEventOverviewStageAction.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/event/GetEventOverviewStageAction.java index bcbd0921395..78e28f34706 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/event/GetEventOverviewStageAction.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/event/GetEventOverviewStageAction.java @@ -1,5 +1,8 @@ package com.sap.sailing.gwt.ui.shared.dispatch.event; +import static com.sap.sailing.gwt.server.HomeServiceUtil.findEventThumbnailImageUrlAsString; +import static com.sap.sailing.gwt.server.HomeServiceUtil.getStageImageURLAsString; + import java.util.Arrays; import java.util.Collection; import java.util.UUID; @@ -23,13 +26,15 @@ public class GetEventOverviewStageAction implements Action rankedTagsFinished = Arrays.asList(MediaTagConstants.STAGE, MediaTagConstants.FEATURED, MediaTagConstants.HIGHLIGHT); private UUID eventId; + private boolean useTeaserImage; @SuppressWarnings("unused") private GetEventOverviewStageAction() { } - public GetEventOverviewStageAction(UUID eventId) { + public GetEventOverviewStageAction(UUID eventId, boolean useTeaserImage) { this.eventId = eventId; + this.useTeaserImage = useTeaserImage; } @Override @@ -63,7 +68,7 @@ public class GetEventOverviewStageAction implements Action