Initial implementation of service for new event list view

This commit is contained in:
Steffen Schaefer committed 2015-03-13 08:34:43 +01:00
1 parent 54619dbeea
commit cb53f55ffd
8 files changed
+213 -16

No files matched your search

@@ -84,6 +84,7 @@ import com.sap.sailing.gwt.ui.shared.TrackFileImportDeviceIdentifierDTO;
import com.sap.sailing.gwt.ui.shared.VenueDTO;
import com.sap.sailing.gwt.ui.shared.WindDTO;
import com.sap.sailing.gwt.ui.shared.WindInfoForRaceDTO;
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;
@@ -588,4 +589,6 @@ public interface SailingService extends RemoteService, FileStorageManagementGwtS
MediaDTO getMediaForEvent(UUID eventId);
MediaDTO getMediaForEventSeries(UUID seriesId);
EventListViewDTO getEventListView() throws Exception;
}
@@ -74,6 +74,7 @@ import com.sap.sailing.gwt.ui.shared.TrackFileImportDeviceIdentifierDTO;
import com.sap.sailing.gwt.ui.shared.VenueDTO;
import com.sap.sailing.gwt.ui.shared.WindDTO;
import com.sap.sailing.gwt.ui.shared.WindInfoForRaceDTO;
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;
@@ -699,4 +700,6 @@ public interface SailingServiceAsync extends BuildVersionRetriever, FileStorageM
void getMediaForEvent(UUID eventId, AsyncCallback<MediaDTO> callback);
void getMediaForEventSeries(UUID seriesId, AsyncCallback<MediaDTO> callback);
void getEventListView(AsyncCallback<EventListViewDTO> callback);
}
@@ -264,6 +264,7 @@ import com.sap.sailing.domain.tractracadapter.TracTracAdapter;
import com.sap.sailing.domain.tractracadapter.TracTracAdapterFactory;
import com.sap.sailing.domain.tractracadapter.TracTracConfiguration;
import com.sap.sailing.domain.tractracadapter.TracTracConnectionConstants;
import com.sap.sailing.gwt.common.client.DateUtil;
import com.sap.sailing.gwt.ui.client.SailingService;
import com.sap.sailing.gwt.ui.shared.BulkScoreCorrectionDTO;
import com.sap.sailing.gwt.ui.shared.CompactRaceMapDataDTO;
@@ -332,6 +333,8 @@ import com.sap.sailing.gwt.ui.shared.WaypointDTO;
import com.sap.sailing.gwt.ui.shared.WindDTO;
import com.sap.sailing.gwt.ui.shared.WindInfoForRaceDTO;
import com.sap.sailing.gwt.ui.shared.WindTrackInfoDTO;
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.eventview.EventViewDTO;
import com.sap.sailing.gwt.ui.shared.eventview.EventViewDTO.EventState;
import com.sap.sailing.gwt.ui.shared.eventview.EventViewDTO.EventType;
@@ -5581,27 +5584,16 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
return e1.getStartDate().compareTo(e2.getEndDate());
}
});
TimePoint now = MillisecondsTimePoint.now();
boolean oneEventStarted = false;
boolean oneEventLive = false;
boolean oneEventNotFinished = false;
for(Event eventInSeries: fakeSeriesEvents) {
EventMetadataDTO eventOfSeries = new EventMetadataDTO();
eventOfSeries.setId(eventInSeries.getId());
eventOfSeries.setDisplayName(eventInSeries.getName());
eventOfSeries.setStartDate(eventInSeries.getStartDate().asDate());
eventOfSeries.setEndDate(eventInSeries.getEndDate().asDate());
eventOfSeries.setState(calculateEventState(eventInSeries.isPublic(), eventInSeries.getStartDate().asDate(), eventInSeries.getEndDate().asDate()));
eventOfSeries.setVenue(eventInSeries.getVenue().getName());
EventMetadataDTO eventOfSeries = convertToMetadataDTO(eventInSeries);
dto.addEvent(eventOfSeries);
boolean eventStarted = now.after(eventInSeries.getStartDate());
boolean eventNotEnded = now.before(eventInSeries.getEndDate());
boolean eventLive = eventStarted && eventNotEnded;
oneEventStarted |= eventStarted;
oneEventLive |= eventLive;
oneEventNotFinished |= eventNotEnded;
oneEventStarted |= eventOfSeries.isStarted();
oneEventLive |= (eventOfSeries.isStarted() && eventOfSeries.isFinished());
oneEventNotFinished |= !eventOfSeries.isFinished();
}
if(oneEventLive) {
dto.setState(EventSeriesState.RUNNING);
@@ -5644,4 +5636,55 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
// TODO implement correctly. We currently do not show media for series.
return getMediaForEvent(seriesId);
}
@Override
public EventListViewDTO getEventListView() throws MalformedURLException {
EventListViewDTO result = new EventListViewDTO();
URL requestedBaseURL = getRequestBaseURL();
for (Event event : getService().getAllEvents()) {
if(event.isPublic()) {
EventListEventDTO eventDTO = convertToEventListDTO(event, requestedBaseURL, false);
result.addEvent(eventDTO, DateUtil.getYear(eventDTO.getStartDate()));
}
}
for (Entry<RemoteSailingServerReference, com.sap.sse.common.Util.Pair<Iterable<EventBase>, Exception>> serverRefAndEventsOrException :
getService().getPublicEventsOfAllSailingServers().entrySet()) {
final com.sap.sse.common.Util.Pair<Iterable<EventBase>, Exception> eventsOrException = serverRefAndEventsOrException.getValue();
final RemoteSailingServerReference serverRef = serverRefAndEventsOrException.getKey();
final Iterable<EventBase> remoteEvents = eventsOrException.getA();
URL baseURL = getBaseURL(serverRef.getURL());
if (remoteEvents != null) {
for (EventBase remoteEvent : remoteEvents) {
EventListEventDTO eventDTO = convertToEventListDTO(remoteEvent, baseURL, true);
result.addEvent(eventDTO, DateUtil.getYear(eventDTO.getStartDate()));
}
}
}
return result;
}
private EventListEventDTO convertToEventListDTO(EventBase event, URL baseURL, boolean onRemoteServer) {
EventListEventDTO dto = new EventListEventDTO();
mapToMetadataDTO(event, dto);
dto.setBaseURL(baseURL.toString());
dto.setOnRemoteServer(onRemoteServer);
return dto;
}
private EventMetadataDTO convertToMetadataDTO(EventBase event) {
EventMetadataDTO dto = new EventMetadataDTO();
mapToMetadataDTO(event, dto);
return dto;
}
private void mapToMetadataDTO(EventBase event, EventMetadataDTO dto) {
dto.setId((UUID) event.getId());
dto.setDisplayName(event.getName());
dto.setStartDate(event.getStartDate().asDate());
dto.setEndDate(event.getEndDate().asDate());
dto.setState(calculateEventState(event.isPublic(), dto.getStartDate(), dto.getEndDate()));
dto.setVenue(event.getVenue().getName());
// TODO wrong! we need the teaser img here
dto.setLogoImageURL(event.getLogoImageURL().toString());
}
}
@@ -0,0 +1,24 @@
package com.sap.sailing.gwt.ui.shared.eventlist;
import com.sap.sailing.gwt.ui.shared.general.EventMetadataDTO;
public class EventListEventDTO extends EventMetadataDTO {
private String baseURL;
private boolean isOnRemoteServer;
public String getBaseURL() {
return baseURL;
}
public void setBaseURL(String baseURL) {
this.baseURL = baseURL;
}
public boolean isOnRemoteServer() {
return isOnRemoteServer;
}
public void setOnRemoteServer(boolean isOnRemoteServer) {
this.isOnRemoteServer = isOnRemoteServer;
}
}
@@ -0,0 +1,55 @@
package com.sap.sailing.gwt.ui.shared.eventlist;
import java.util.ArrayList;
import com.google.gwt.user.client.rpc.IsSerializable;
import com.sap.sailing.gwt.ui.shared.eventview.EventViewDTO.EventState;
public class EventListViewDTO implements IsSerializable {
private ArrayList<EventListEventDTO> upcommingEvents = new ArrayList<>();
private ArrayList<EventListYearDTO> recentEvents = new ArrayList<>();
public ArrayList<EventListEventDTO> getUpcommingEvents() {
return upcommingEvents;
}
private void addUpcommingEvent(EventListEventDTO event) {
for(int i = 0; i < upcommingEvents.size(); i++) {
if(upcommingEvents.get(i).getStartDate().compareTo(event.getStartDate()) > 0);
upcommingEvents.add(i, event);
}
upcommingEvents.add(event);
}
public ArrayList<EventListYearDTO> getRecentEvents() {
return recentEvents;
}
private EventListYearDTO getYear(int year) {
for(int i = 0; i < recentEvents.size(); i++) {
EventListYearDTO yearDTO = recentEvents.get(i);
if(year == yearDTO.getYear()) {
return yearDTO;
}
if(year > yearDTO.getYear()) {
EventListYearDTO newYear = new EventListYearDTO(year);
recentEvents.add(i, newYear);
return newYear;
}
}
EventListYearDTO newYear = new EventListYearDTO(year);
recentEvents.add(newYear);
return newYear;
}
public void addEvent(EventListEventDTO event, int year) {
if (event.getState() == EventState.RUNNING || event.getState() == EventState.FINISHED) {
// recent event or live event
getYear(year).addEvent(event);
} else {
// upcoming event
addUpcommingEvent(event);
}
}
}
@@ -0,0 +1,61 @@
package com.sap.sailing.gwt.ui.shared.eventlist;
import java.util.ArrayList;
import com.google.gwt.user.client.rpc.IsSerializable;
public class EventListYearDTO implements IsSerializable {
private int year;
private int countryCount;
private int sailorCount;
private int trackedRacesCount;
private ArrayList<EventListEventDTO> events = new ArrayList<>();
@SuppressWarnings("unused")
private EventListYearDTO() {
}
public EventListYearDTO(int year) {
this.year = year;
}
public int getYear() {
return year;
}
public ArrayList<EventListEventDTO> getEvents() {
return events;
}
protected void addEvent(EventListEventDTO event) {
for(int i = 0; i < events.size(); i++) {
if(events.get(i).getStartDate().compareTo(event.getStartDate()) < 0);
events.add(i, event);
}
events.add(event);
}
public int getCountryCount() {
return countryCount;
}
public void setCountryCount(int countryCount) {
this.countryCount = countryCount;
}
public int getSailorCount() {
return sailorCount;
}
public void setSailorCount(int sailorCount) {
this.sailorCount = sailorCount;
}
public int getTrackedRacesCount() {
return trackedRacesCount;
}
public void setTrackedRacesCount(int trackedRacesCount) {
this.trackedRacesCount = trackedRacesCount;
}
}
@@ -18,7 +18,7 @@ public class EventViewDTO extends EventDTO {
}
public enum EventState {
UPCOMING(LabelType.UPCOMMING), RUNNING(LabelType.LIVE), FINISHED(LabelType.FINISHED), PLANNED(LabelType.NONE);
PLANNED(LabelType.NONE), UPCOMING(LabelType.UPCOMMING), RUNNING(LabelType.LIVE), FINISHED(LabelType.FINISHED);
private final LabelType stateMarker;
@@ -17,6 +17,14 @@ public class EventMetadataDTO extends EventReferenceDTO {
public EventState getState() {
return state;
}
public boolean isStarted() {
return state.compareTo(EventState.RUNNING) >= 0;
}
public boolean isFinished() {
return state == EventState.FINISHED;
}
public void setState(EventState state) {
this.state = state;