Initial implementation to generate sample news entries

This commit is contained in:
Steffen Schaefer committed 2015-06-11 16:32:07 +02:00
1 parent 8f8fa42263
commit 783a46eb4e
12 files changed
+108 -83

No files matched your search

@@ -32,8 +32,6 @@ import com.sap.sailing.domain.leaderboard.RegattaLeaderboard;
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.dispatch.news.InfoNewsEntryDTO;
import com.sap.sailing.gwt.ui.shared.dispatch.news.NewsEntryDTO;
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;
@@ -51,8 +49,6 @@ import com.sap.sailing.gwt.ui.shared.media.SailingVideoDTO;
import com.sap.sailing.gwt.ui.shared.start.EventStageDTO;
import com.sap.sailing.gwt.ui.shared.start.StageEventType;
import com.sap.sailing.gwt.ui.shared.start.StartViewDTO;
import com.sap.sailing.news.EventNewsItem;
import com.sap.sailing.news.EventNewsService;
import com.sap.sailing.server.RacingEventService;
import com.sap.sse.common.Duration;
import com.sap.sse.common.TimePoint;
@@ -78,23 +74,17 @@ public class HomeServiceImpl extends ProxiedRemoteServiceServlet implements Home
private static final int MAX_VIDEO_COUNT = 3;
private final ServiceTracker<RacingEventService, RacingEventService> racingEventServiceTracker;
private final ServiceTracker<EventNewsService, EventNewsService> eventNewsServiceTracker;
public HomeServiceImpl() {
BundleContext context = Activator.getDefault();
racingEventServiceTracker = ServiceTrackerFactory.createAndOpen(context, RacingEventService.class);
eventNewsServiceTracker = ServiceTrackerFactory.createAndOpen(context, EventNewsService.class);
}
protected RacingEventService getService() {
return racingEventServiceTracker.getService();
}
protected EventNewsService getEventNewsService() {
return eventNewsServiceTracker.getService();
}
private interface EventVisitor {
void visit(EventBase event, boolean onRemoteServer, URL baseURL);
}
@@ -435,20 +425,6 @@ public class HomeServiceImpl extends ProxiedRemoteServiceServlet implements Home
return dto;
}
@Override
public List<NewsEntryDTO> getNewsForEvent(UUID eventId, Date lastNewsDate) {
List<NewsEntryDTO> result = new ArrayList<NewsEntryDTO>();
Event event = getService().getEvent(eventId);
List<EventNewsItem> newsItems = getEventNewsService().getNews(event, lastNewsDate);
for(EventNewsItem newsItem: newsItems) {
NewsEntryDTO newsDTO = new InfoNewsEntryDTO(newsItem.getTitle(), newsItem.getMessage(), newsItem.getCreatedAtDate());
result.add(newsDTO);
}
return result;
}
@Override
public MediaDTO getMediaForEvent(UUID eventId) {
Event event = getService().getEvent(eventId);
@@ -1,11 +1,8 @@
package com.sap.sailing.gwt.ui.client;
import java.util.Date;
import java.util.List;
import java.util.UUID;
import com.google.gwt.user.client.rpc.RemoteService;
import com.sap.sailing.gwt.ui.shared.dispatch.news.NewsEntryDTO;
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;
@@ -21,8 +18,6 @@ public interface HomeService extends RemoteService {
MediaDTO getMediaForEventSeries(UUID seriesId);
List<NewsEntryDTO> getNewsForEvent(UUID eventId, Date lastNewsDate);
EventListViewDTO getEventListView() throws Exception;
StartViewDTO getStartView() throws Exception;
@@ -1,11 +1,8 @@
package com.sap.sailing.gwt.ui.client;
import java.util.Date;
import java.util.List;
import java.util.UUID;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.sap.sailing.gwt.ui.shared.dispatch.news.NewsEntryDTO;
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;
@@ -20,8 +17,6 @@ public interface HomeServiceAsync {
void getEventViewById(UUID id, AsyncCallback<EventViewDTO> callback);
void getEventSeriesViewById(UUID id, AsyncCallback<EventSeriesViewDTO> asyncCallback);
void getNewsForEvent(UUID eventId, Date lastNewsDate, AsyncCallback<List<NewsEntryDTO>> callback);
void getMediaForEvent(UUID eventId, AsyncCallback<MediaDTO> callback);
@@ -12,6 +12,7 @@ import com.sap.sailing.gwt.ui.shared.dispatch.RequestWrapper;
import com.sap.sailing.gwt.ui.shared.dispatch.Result;
import com.sap.sailing.gwt.ui.shared.dispatch.ResultWrapper;
import com.sap.sailing.gwt.ui.shared.dispatch.rpc.DispatchRPC;
import com.sap.sailing.news.EventNewsService;
import com.sap.sailing.server.RacingEventService;
import com.sap.sse.util.ServiceTrackerFactory;
@@ -19,16 +20,18 @@ public class DispatchRPCImpl extends ProxiedRemoteServiceServlet implements Disp
private static final long serialVersionUID = -245230476512348999L;
private final ServiceTracker<RacingEventService, RacingEventService> racingEventServiceTracker;
private final ServiceTracker<EventNewsService, EventNewsService> eventNewsServiceTracker;
public DispatchRPCImpl() {
final BundleContext context = Activator.getDefault();
racingEventServiceTracker = ServiceTrackerFactory.createAndOpen(context, RacingEventService.class);
eventNewsServiceTracker = ServiceTrackerFactory.createAndOpen(context, EventNewsService.class);
}
@Override
public <R extends Result, A extends Action<R>> ResultWrapper<R> execute(RequestWrapper<R, A> request) throws DispatchException {
R executionResult = request.getAction().execute(new DispatchContextImpl(request.getCurrentClientTime(), racingEventServiceTracker.getService(), request.getClientLocaleName()));
R executionResult = request.getAction().execute(new DispatchContextImpl(request.getCurrentClientTime(), racingEventServiceTracker.getService(), eventNewsServiceTracker.getService(), request.getClientLocaleName()));
return new ResultWrapper<R>(executionResult);
}
@@ -3,12 +3,15 @@ package com.sap.sailing.gwt.ui.shared.dispatch;
import java.util.Date;
import java.util.Locale;
import com.sap.sailing.news.EventNewsService;
import com.sap.sailing.server.RacingEventService;
public interface DispatchContext {
RacingEventService getRacingEventService();
EventNewsService getEventNewsService();
String getClientLocaleName();
@@ -3,18 +3,21 @@ package com.sap.sailing.gwt.ui.shared.dispatch;
import java.util.Date;
import java.util.Locale;
import com.sap.sailing.news.EventNewsService;
import com.sap.sailing.server.RacingEventService;
public class DispatchContextImpl implements DispatchContext {
private final RacingEventService racingEventService;
private final EventNewsService eventNewsService;
private final Date currentClientTime;
// private final Date currentServerTime = new Date();
private String clientLocaleName;
public DispatchContextImpl(Date currentClientTime, RacingEventService racingEventService, String clientLocaleName) {
public DispatchContextImpl(Date currentClientTime, RacingEventService racingEventService, EventNewsService eventNewsService, String clientLocaleName) {
this.currentClientTime = currentClientTime;
this.racingEventService = racingEventService;
this.eventNewsService = eventNewsService;
this.clientLocaleName = clientLocaleName;
}
@@ -23,6 +26,10 @@ public class DispatchContextImpl implements DispatchContext {
return racingEventService;
}
public EventNewsService getEventNewsService() {
return eventNewsService;
}
@Override
public Date getCurrentClientTime() {
return currentClientTime;
@@ -1,23 +1,20 @@
package com.sap.sailing.gwt.ui.shared.dispatch.event;
import java.net.URL;
import java.util.Date;
import java.util.List;
import java.util.UUID;
import com.google.gwt.core.shared.GwtIncompatible;
import com.sap.sailing.domain.base.Event;
import com.sap.sailing.domain.common.BoatClassMasterdata;
import com.sap.sailing.domain.common.LeaderboardNameConstants;
import com.sap.sailing.domain.common.dto.CompetitorDTOImpl;
import com.sap.sailing.gwt.server.HomeServiceUtil;
import com.sap.sailing.gwt.ui.shared.dispatch.Action;
import com.sap.sailing.gwt.ui.shared.dispatch.DispatchContext;
import com.sap.sailing.gwt.ui.shared.dispatch.ResultWithTTL;
import com.sap.sailing.gwt.ui.shared.dispatch.news.InfoNewsEntryDTO;
import com.sap.sailing.gwt.ui.shared.dispatch.news.LeaderboardNewsEntryDTO;
import com.sap.sailing.gwt.ui.shared.dispatch.news.RaceCompetitorNewsEntryDTO;
import com.sap.sailing.gwt.ui.shared.general.EventState;
import com.sap.sailing.gwt.ui.shared.media.MediaUtils;
import com.sap.sailing.news.EventNewsItem;
import com.sap.sailing.news.impl.InfoEventNewsItem;
import com.sap.sse.common.Util;
import com.sap.sse.common.impl.MillisecondsTimePoint;
import com.sap.sse.common.media.MimeType;
@@ -48,7 +45,7 @@ public class GetEventOverviewStageAction implements Action<ResultWithTTL<EventOv
// TODO get correct message
EventOverviewStageDTO stage = new EventOverviewStageDTO(null, getStageContent(context, event, state, now));
addNews(context, stage);
addNews(context, event, stage);
return new ResultWithTTL<>(ttl, stage);
}
@@ -129,37 +126,46 @@ public class GetEventOverviewStageAction implements Action<ResultWithTTL<EventOv
//
// return new EventOverviewTickerStageDTO(null, null, stageImageUrl);
}
@GwtIncompatible
private void addNews(DispatchContext dispatchContext, EventOverviewStageDTO stage) {
Event event = dispatchContext.getRacingEventService().getEvent(eventId);
boolean singleRegatta = HomeServiceUtil.isSingleRegatta(event);
stage.addNews(new InfoNewsEntryDTO("Sturm", "Heute keine Rennen mehr", new Date(new Date().getTime() - 125000)));
stage.addNews(new InfoNewsEntryDTO("Abendbespaßung", "Es gibt Freibier und Wurst!!!", new Date()));
stage.addNews(new LeaderboardNewsEntryDTO("Test LB", "505 m", BoatClassMasterdata._5O5.getDisplayName(), new Date(new Date().getTime() - 120000), LeaderboardNewsEntryDTO.Type.NEW_RESULTS));
LeaderboardNewsEntryDTO lbEntryWithExternalLink = new LeaderboardNewsEntryDTO("Test LB", "Some Regatta", BoatClassMasterdata.LASER_RADIAL.getDisplayName(), new Date(new Date().getTime() - 270000), LeaderboardNewsEntryDTO.Type.NEW_RESULTS);
lbEntryWithExternalLink.setExternalURL("http://www.sap.com/");
stage.addNews(lbEntryWithExternalLink);
CompetitorDTOImpl testCompetitor = new CompetitorDTOImpl("Peter Mayer", null, null, null, null, null, null, null, null, null, null, null, null);
String regattaName = "470 Men";
String race6 = constructRaceName(regattaName, "R6", "Gold", singleRegatta);
stage.addNews(new RaceCompetitorNewsEntryDTO(regattaName, "470 R6", race6, BoatClassMasterdata.PIRATE.getDisplayName(), new Date(new Date().getTime() - 1888000), testCompetitor, RaceCompetitorNewsEntryDTO.Type.CRASH));
String race7 = constructRaceName(regattaName, "R7", "Gold", singleRegatta);
stage.addNews(new RaceCompetitorNewsEntryDTO(regattaName, "470 R7", race7, BoatClassMasterdata.PIRATE.getDisplayName(), new Date(new Date().getTime() - 1337000), testCompetitor, RaceCompetitorNewsEntryDTO.Type.WINNER));
}
private String constructRaceName(String regattaDisplayName, String raceName, String fleetName, boolean singleRegatta) {
StringBuilder sb = new StringBuilder();
if(!singleRegatta) {
sb.append(regattaDisplayName).append(" - ");
@GwtIncompatible
private void addNews(DispatchContext dispatchContext, Event event, EventOverviewStageDTO stage) {
// TODO correct date
List<EventNewsItem> newsItems = dispatchContext.getEventNewsService().getNews(event, event.getStartDate().asDate());
for(EventNewsItem newsItem: newsItems) {
if(newsItem instanceof InfoEventNewsItem) {
stage.addNews(new InfoNewsEntryDTO((InfoEventNewsItem) newsItem));
}
}
sb.append(raceName);
if(fleetName != null && !fleetName.isEmpty() && !LeaderboardNameConstants.DEFAULT_FLEET_NAME.equals(fleetName)) {
sb.append(" - ").append(fleetName);
}
return sb.toString();
// TODO test contents
//
// boolean singleRegatta = HomeServiceUtil.isSingleRegatta(event);
//
// stage.addNews(new InfoNewsEntryDTO("Sturm", "Heute keine Rennen mehr", new Date(new Date().getTime() - 125000)));
// stage.addNews(new InfoNewsEntryDTO("Abendbespaßung", "Es gibt Freibier und Wurst!!!", new Date()));
// stage.addNews(new LeaderboardNewsEntryDTO("Test LB", "505 m", BoatClassMasterdata._5O5.getDisplayName(), new Date(new Date().getTime() - 120000), LeaderboardNewsEntryDTO.Type.NEW_RESULTS));
//
// LeaderboardNewsEntryDTO lbEntryWithExternalLink = new LeaderboardNewsEntryDTO("Test LB", "Some Regatta", BoatClassMasterdata.LASER_RADIAL.getDisplayName(), new Date(new Date().getTime() - 270000), LeaderboardNewsEntryDTO.Type.NEW_RESULTS);
// lbEntryWithExternalLink.setExternalURL("http://www.sap.com/");
// stage.addNews(lbEntryWithExternalLink);
//
// CompetitorDTOImpl testCompetitor = new CompetitorDTOImpl("Peter Mayer", null, null, null, null, null, null, null, null, null, null, null, null);
// String regattaName = "470 Men";
// String race6 = constructRaceName(regattaName, "R6", "Gold", singleRegatta);
// stage.addNews(new RaceCompetitorNewsEntryDTO(regattaName, "470 R6", race6, BoatClassMasterdata.PIRATE.getDisplayName(), new Date(new Date().getTime() - 1888000), testCompetitor, RaceCompetitorNewsEntryDTO.Type.CRASH));
// String race7 = constructRaceName(regattaName, "R7", "Gold", singleRegatta);
// stage.addNews(new RaceCompetitorNewsEntryDTO(regattaName, "470 R7", race7, BoatClassMasterdata.PIRATE.getDisplayName(), new Date(new Date().getTime() - 1337000), testCompetitor, RaceCompetitorNewsEntryDTO.Type.WINNER));
}
//
// private String constructRaceName(String regattaDisplayName, String raceName, String fleetName, boolean singleRegatta) {
// StringBuilder sb = new StringBuilder();
// if(!singleRegatta) {
// sb.append(regattaDisplayName).append(" - ");
// }
// sb.append(raceName);
// if(fleetName != null && !fleetName.isEmpty() && !LeaderboardNameConstants.DEFAULT_FLEET_NAME.equals(fleetName)) {
// sb.append(" - ").append(fleetName);
// }
// return sb.toString();
// }
}
@@ -1,6 +1,7 @@
package com.sap.sailing.gwt.ui.shared.dispatch.news;
import java.util.Date;
import com.google.gwt.core.shared.GwtIncompatible;
import com.sap.sailing.news.impl.InfoEventNewsItem;
public class InfoNewsEntryDTO extends NewsEntryDTO {
@@ -11,10 +12,11 @@ public class InfoNewsEntryDTO extends NewsEntryDTO {
private InfoNewsEntryDTO() {
}
public InfoNewsEntryDTO(String title, String subtitle, Date timestamp) {
super(timestamp);
this.title = title;
this.subtitle = subtitle;
@GwtIncompatible
public InfoNewsEntryDTO(InfoEventNewsItem item) {
super(item.getCreatedAtDate());
this.title = item.getTitle();
this.subtitle = item.getMessage();
}
@Override
@@ -5,7 +5,7 @@ import java.util.Date;
public class LeaderboardNewsEntryDTO extends NewsEntryDTO {
public enum Type {
NEW_RESULTS
RESULTS_UPDATE
}
private String leaderboardName;
@@ -39,8 +39,8 @@ public class LeaderboardNewsEntryDTO extends NewsEntryDTO {
@Override
public String getMessage() {
switch (type) {
case NEW_RESULTS:
return "New results are available";
case RESULTS_UPDATE:
return "Result update";
}
return "";
}
@@ -6,7 +6,7 @@ import java.util.UUID;
import com.sap.sailing.news.EventNewsItem;
public class AbstractEventNewsItem extends AbstractNewsItem implements EventNewsItem {
public abstract class AbstractEventNewsItem extends AbstractNewsItem implements EventNewsItem {
private UUID eventId;
public AbstractEventNewsItem(UUID eventId, String title, String message, Date createdAtDate, String category, URL relatedItemLink) {
@@ -0,0 +1,17 @@
package com.sap.sailing.news.impl;
import java.net.URL;
import java.util.Date;
import java.util.UUID;
public class InfoEventNewsItem extends AbstractEventNewsItem {
public InfoEventNewsItem(UUID eventId, String title, String message, Date createdAtDate, String category,
URL relatedItemLink) {
super(eventId, title, message, createdAtDate, category, relatedItemLink);
}
public InfoEventNewsItem(UUID eventId, String title, String message, Date createdAtDate, String category) {
super(eventId, title, message, createdAtDate, category);
}
}
@@ -3,6 +3,9 @@ package com.sap.sailing.news.impl;
import java.util.Collection;
import java.util.Date;
import java.util.LinkedList;
import java.util.Timer;
import java.util.TimerTask;
import java.util.UUID;
import com.sap.sailing.domain.base.Event;
import com.sap.sailing.news.EventNewsItem;
@@ -10,12 +13,30 @@ import com.sap.sailing.news.EventNewsProvider;
import com.sap.sailing.news.LimitedQueue;
public class SimpleDemoEventNewsProvider implements EventNewsProvider {
private final LinkedList<? extends EventNewsItem> newsQueue;
private final LinkedList<EventNewsItem> newsQueue;
private final Timer timer = new Timer();
public SimpleDemoEventNewsProvider() {
newsQueue = new LimitedQueue<>(10);
final UUID eventId = UUID.fromString("406cffc2-b491-4f7e-b78e-a21abd97006a");
// final UUID eventId = UUID.fromString("406cffc2-b491-4f7e-b78e-a21abd97006a");
timer.scheduleAtFixedRate(new TimerTask() {
int counter=1;
@Override
public void run() {
newsQueue.add(new InfoEventNewsItem(eventId, "Test Entry " + counter, "Content for Test Entry "+counter, new Date(), null));
counter++;
}
}, 5_000, 30_000);
}
protected void finalize() throws Throwable {
timer.cancel();
};
@Override
public Collection<? extends EventNewsItem> getNews(Event event) {
// Iterable<LeaderboardGroup> leaderboardGroups = event.getLeaderboardGroups();